コンテンツにスキップ

ADR-0058: 規模の基準値の超過を、遮断でなく規模の確認と区分 R2 で扱い、能力依存の定数に再評価の登録簿を置く

採用(2026-10-11)。ADR-0047の決定1(上限を超える変更は差し戻しを既定とし、超過を通す唯一の経路を例外承認とする)と、決定2 のうち超過レビューを例外承認を経たものに限る部分を置き換えます。ADR-0047 のそれ以外の決定(決定3・4・5)は維持します。

準拠テンプレートの利用者から、PR の変更規模の上限エラーがほぼ必ず出るという指摘がありました(#295)。指摘をそのまま条項にせず、調査・会議体・突合の順で扱いました。記録は research/phase4-standard/295/ にあります。

模擬の PR で、準拠テンプレートの check-pr.mjs を実走しました(根拠水準 E1)。

場面 結果
機能 300 行(実装 150・テスト 150) 通る
機能 600 行(実装 300・テスト 300、6 ファイル) 失敗
機能 1,500 行(14〜20 ファイル) 失敗
200 行の横断リファクタ(40 ファイル) 失敗(ファイル数)
実装 250 行 + テスト用 fixture 900 行 失敗(算定 1,172 行)
初回の process-init + 新規製品の足場(950 行) 失敗
基底の台帳に例外承認の行がある 1,000 行の PR 通る(PR 2 本・承認 2 回を要する)

実装の約 2 倍の行数が算定される理由は、追加と削除の合算で数え、テストと fixture も算入するためです。1 名体制では、例外承認の承認者が作成者と別でなければならず、経路が閉じます。

実行層が標準の規定に反していた

Section titled “実行層が標準の規定に反していた”

標準は、ADR-0047で「上限を遮断として運用してはならない」と定めています。上限で差し戻し続けると、超過した変更が較正の母集団へ届かず、上限が毎期縮むためです。ところが実行層は、超過を例外承認の台帳の行が無い限り失敗にしていました。例外承認の経路は、利用者が回避すれば母集団が空になる経路でもあります。

ADR-0047 の EV-0033 は、「上限超過で差し戻した件数が 1 件以上あり、例外承認を経た超過レビューが 0 件の状態が 2 四半期続けば、例外承認の経路は回避されている」と定めていました。この失効条件は、形式上は未達です。2 四半期の観測がまだ無いためです。実質は、検定が成立していませんでした。機械が規模を検査し始めたのは 2026-10-02(#286)であり、それより前は、差し戻しの件数も例外承認の件数も機械の記録に無いからです。EV-0033 は本 ADR で置き換えず、ADR-0047 の決定1 を置き換える形で、失効条件の趣旨(経路が回避されているなら別の経路を設ける)を先に実現します。

基準値 400 行は 2006 年の調査の導出であり、行数上限を直接検証した測定ではありません。ファイル数 15 には数値自体の実証がありません。外部の動向では、PR サイズの中央値が拡大している報告と、OSS では変わらない報告が割れています。能力の向上が原因だと言える証拠は無く、本 ADR の根拠は、標準の規範と実装の食い違いと、実走の再現に置きます。

1. 超過は失敗にせず、規模の確認と区分の下限 R2 で扱う

Section titled “1. 超過は失敗にせず、規模の確認と区分の下限 R2 で扱う”

規模が基準値(既定 400 行・15 ファイル)を超えた PR は、pr-rules で失敗にしません。代わりに次を課します。

# 内容
1 結果に size:over を出す
2 区分の下限を R2 へ引き上げる(既存の区分の下限の仕組み。R1 を下げない)。作成を指示した者以外の人が確定し、独立した人の確認(G-6)が掛かる
3 PR の本文の「規模の確認」(実施者・読み切れたか・分割しなかった理由・保証の所在)を要する
4 欄が無い、実施者が AI の名義、「読み切れたか」が「いいえ」のいずれかなら失敗とする(差し戻し。実装計画へ戻す)

新しい承認の仕組みは足しません。人の確認は、既存の区分の確定者と G-6 に任せます。ファイル数の超過も size:over とし、規模の確認を要します。ただしファイル数は数値自体の実証が無いため、確認の記入以外の合否に使いません。

規模の確認は、HTML コメントの中の節を読まず、「読み切れたか」を「はい」「いいえ」の完全一致だけで読みます(「はい、ただし…」は答えとして数えません)。名簿に作成を指示した者以外の人がいる体制では、名簿の外の実施者を差し戻します。1名体制では警告にとどめます。AI の名義の語彙には、Devin・Cursor・Windsurf・Cline・Aider・Replit・Tabnine などを足しました(語の一致であり、限界は既存の開示のままです)。

実施者は作成を指示した者でもかまいません(1 名体制)。その場合の「独立した人の確認が無い」は、既存の G-6 未達の表示に出続けます。新しい検査は足しません。

2. 算定は、ファイルごとの max(追加, 削除)の合計とし、テスト・fixture・snapshot を別に数える

Section titled “2. 算定は、ファイルごとの max(追加, 削除)の合計とし、テスト・fixture・snapshot を別に数える”

置換を 2 倍に数えません。純削除は削除行数です。テスト・fixture・snapshot は基準値の判定に入れず、結果に別集計として出します。置き場の既定は慣習的なパターンで、構成 task.nonProductPaths で足せます。この構成は閾値として扱い、製品のコードと同じ PR では変えられません。

ロックファイル・印のある生成物・空白だけの変更・内容の変わらない名前の変更・文書・記録・強制層・構成は、従来どおり除きます。基底の構成が未設定の初回(chore/process-init)は、規模を判定しません。

テスト・fixture・snapshot の別集計には、基準行数の5倍(暫定)の上限を置きます。別集計に上限が無いと、製品のコードをテストのパスへ移して基準値を避けられるためです。文書・記録の置き場(docs・specs・context・templates・evidence・profiles)に置いたコードの拡張子のファイルは、製品のコードとして数えます。

基準値には null(基準なし)を足します。null が効く変更は、次をすべて満たすものに限ります。担保水準 L2 の宣言と実在する根拠があること。確約範囲・コア指定のパス(delegation.protectedPaths か riskFloor.rules のパス)が構成に宣言されていること。R3 で、そのパスに触れないこと。パスが宣言されていない構成では、コア外の変更かを確かめられないため、null を受け付けません。満たさない変更は、既定値で判定します。委任(自動マージ)の規模条件は、null でも既定値で縛ります。

3. 例外承認は、規模の経路から外し、R2 以上の規範の逸脱のために残す

Section titled “3. 例外承認は、規模の経路から外し、R2 以上の規範の逸脱のために残す”

規模の超過に第7章 7.3 の例外承認を要さなくします。基底ブランチの台帳に既にある、規模の超過を対象とした例外承認の行は有効のままとし、過去の記録を壊しません。

4. 超過の観測を、出荷の集約が保存し、保証の開示の観測に出す

Section titled “4. 超過の観測を、出荷の集約が保存し、保証の開示の観測に出す”

出荷の集約が、出荷の範囲の PR について、規模の分布(行数・ファイル数の区間ごとの件数)、size:over の件数、「読み切れたか」の内訳、超過した PR の判定完了時間(取れるとき)を出します。マージコミットの差分を読めない PR は、読めない旨を出して黙りません。基準値は、変更の起点(マージ時点)の構成で判定し、後から基準値を変えても過去の判定は変わりません。読めない PR は判定不能と出します。観測は evidence.json にも出します。R3 の記載、規模の確認の欠落、「いいえ」のままマージされた超過 PR は、記載の欠落に数えます。値は基準値へ自動で反映しません。更新は人の判断を経ます。

較正の周期は、観測を四半期、更新を半期以上とします。第6章 metrics の規定3(更新の周期を観測の周期より長く取る)を、四半期ごとの更新と読めない形に直します。

5. 担保水準の宣言(task.assurance)を構成に置く

Section titled “5. 担保水準の宣言(task.assurance)を構成に置く”

task.assurance(水準 L0・L1・L2、根拠の所在、宣言者、宣言日、見直し日)を構成に足します。未宣言は L0 です。/process-change(種別 settings)で変え、L0 から L1・L2 へ上げるのは緩める向き(記名と理由を要する)です。

宣言は記録であり、緩和を自動で与えません。機械が確かめるのは、根拠のパスの実在と、見直し日を過ぎていないことだけです。過ぎていれば L0 として扱い、通知します。L1 以上で根拠が実在すれば、規模の確認は保証の所在の記入だけで足ります。L2 の「リスクを機械的に採点し、閾値で審査深度を変える運用が稼働している」ことの機械の検証は、検査できる条件が定まっていないため、テンプレートへ降ろさず、state=undelivered で開示します。

6. 能力依存の定数に、再評価の登録簿を置く

Section titled “6. 能力依存の定数に、再評価の登録簿を置く”

第6章 metrics に、能力依存の定数の登録簿を置きます(各行: 値、依拠する前提、担っている保証と移った先、能力に依るか)。最初の登録は、規模の基準値、レビューの所要 30 分、見積 8 時間、レビュア帯域、自己修復の 3 回、カバレッジの下限、コンテキストの目安、層数 3 です。観測窓 3 か月・力量確認の周期・監査の周期は、「能力に依らない」と明記し、能力が上がったことを理由に短縮しません。

再評価の契機は、/process-change(種別 performer)の記録にあるモデル・指示資産の版の変更と、半期の暦に限ります。「世の中のモデルが賢くなった」は契機にしません(案件から観測できない)。契機で値を自動で変えません。/process-change の出力と /pit が「再評価待ちの定数 N 件」を注記し、人が「残す・外す・移す」を記名で記録します。

根拠水準のマークの無かった値(レビューの所要 30 分、見積 8 時間、レビュア帯域、指示資産の 200 行)には、暫定のマーク(E0 または E1)を付けます。見積 8 時間の「分割必須」は、要求に見える文言を外し、目安へ改めます。

テンプレートの CLAUDE.md・実装計画の様式・task-breakdown・task-size から、「30 分で読み切れる」「目安 100 行を超えたら人へ確認」を外し、「関心事が 1 つで、受入基準の束につき 1 Task。確認が要る大きさ・範囲なら『規模の確認』の欄に書く」へ改めます。AI が自主的に細切れにすると、標準の「分割しすぎない」と衝突するためです。

会議体は 4 つの立場(統制を守る側、AI 先進の現場、標準の運営者、懐疑役)で開き、意見書を突き合わせました。採らないと決めたことを次に明記します。「書かれていない」ことと、「課さないと決めた」ことを区別するためです。

案 採らない理由
基準値を引き上げるだけにする 能力が上がるたびに上げ続ける定数のままで、構造が変わらない
上限を廃止する、観測のみを既定にする 超過に人の確認も記録も課さなくなる。ADR-0047 が却下した目安のみ化と同じ。EV-0033 の再開条件は別の経路である
超過を無記録で通す 較正の母集団が空になる。通した事実が残らない
能力の世代交代を契機に値を自動で変える、モデル名と定数の対応表を標準に置く 足場は消えず移動する(一次資料)。観測できない契機を条項にしない
未保証行(UCL)・モジュール数の導出を既定にする(今回) 機械で検査できる条件が定まらず、自己申告・偽装の余地が大きい
日常の経路に例外承認(PR 2 本・承認 2 回)を残す 1 名体制で閉じ、回避の動機を生む
外部ベンチマークの値を既定にする 外部の目標値を規格限界として取り込まない(第6章)
「人の帯域は AI の進化に比例して増える」という前提 人の帯域は固定で、機械生成コードの認知負荷は人手より高い可能性がある。したがって基準値は廃止せず、超過時の扱いを遮断から人の確認と記録へ移す
L1・L2 の宣言を自己申告のまま降ろす 形骸化する。そのため宣言は記録とし、緩和は根拠の実在と区分の条件の範囲に限った
CL2 以上かつ 1 名体制の解除不可を重ねて足す 独立した人の確認の欠落が、出荷の集約で既に欠落になる

採らないと決めたのではなく、今回は直さないものです。後継 Issue(#296)で扱います。

  • 全体カバレッジ 80%(標準は新規コードの 80%。基底を下回らない形か差分カバレッジへ)
  • 全 PR・全 push の承認失効(dismiss_stale_reviews_on_push。G-6 の規範とルールセットの粒度)
  • 自己修復の「同一失敗の連続」での停止
  • 手戻り率の合否化の見直し、監査の抽出率(変更件数に比例)、10 名境界の根拠水準マーク
  • 利用者の PR 分布の実測(利用者の手元のデータが要る)

能力と切り離して固定します。独立した人の確認(G-6)、作成者は承認しない、AI 名義の拒否、リスク区分の人の確定、閾値・除外設定と製品のコードの同時変更の禁止、Spec トレーラによる追跡性、停止の申し立て、秘匿情報とテスト GREEN。手本として維持するものは、承認者数の警告、既存テストの変更の一覧、context-drift、ai-review、層1 の値を組織が書く形です。

  • 基準値を超える PR は、規模の確認と R2 の確定で人の確認を受ける。超過だけでは止まらない
  • 規模の確認が無い、AI の名義、読み切れなかった PR は、従来どおり差し戻される
  • 較正の母集団に、超過した PR が届く。集約が観測を出す
  • 超過の判断は、能力の向上でなく人の確認に委ねる。値を動かす手続は、人の判断のままである
  • 規則の実装は、テンプレート check-pr.mjs・aggregate-evidence.mjs・generate-profile.mjs・PR の様式にある。降りていない規定(L2 の機械の検証)は、実装の台帳に出続ける
  • 検査の限界を開示する。規模はパスで分類するため、別集計(5倍まで)へ移した製品のコードは数えない。拡張子の無いスクリプトと、強制層・構成のパスのコードも数えない。規模の確認は、欄の有無・名義・読み切れたかの答えだけを確かめ、理由が1語や定型文でも通る。333 行の変更を3つの PR に分けても検出しない(改訂前も同じ)。担保水準の宣言は、根拠の存在と見直し日だけを確かめる
  • 1名体制では、超過した PR ごとに「独立した人の確認が無い」記載の欠落が出続ける。解消できる体制ではない

超過の扱いと担保水準の宣言の根拠水準は、第4章の EV-0084 に開示しています。能力依存の定数の登録簿は、第6章の EV-0089 です。どちらも E0(なし)です。

事実関係(超過の全面的な失敗、算定が実装の約 2 倍、1 名体制の例外経路の閉塞)は実走で再現しており、E1 です。超過への対処が効くかは、実証がありません。差し替え条件は、利用者の PR 分布の実測、超過した変更の「読み切れなかった」の比率、超過した変更の手戻り・取り消しの観測です。