ADR-0058: 規模の基準値の超過を、遮断でなく規模の確認と区分 R2 で扱い、能力依存の定数に再評価の登録簿を置く
採用(2026-10-11)。ADR-0047の決定1(上限を超える変更は差し戻しを既定とし、超過を通す唯一の経路を例外承認とする)と、決定2 のうち超過レビューを例外承認を経たものに限る部分を置き換えます。ADR-0047 のそれ以外の決定(決定3・4・5)は維持します。
コンテキスト
Section titled “コンテキスト”準拠テンプレートの利用者から、PR の変更規模の上限エラーがほぼ必ず出るという指摘がありました(#295)。指摘をそのまま条項にせず、調査・会議体・突合の順で扱いました。記録は research/phase4-standard/295/ にあります。
実走で再現した事実
Section titled “実走で再現した事実”模擬の 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 を置き換える形で、失効条件の趣旨(経路が回避されているなら別の経路を設ける)を先に実現します。
数値の根拠は弱いままである
Section titled “数値の根拠は弱いままである”基準値 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 時間の「分割必須」は、要求に見える文言を外し、目安へ改めます。
7. AI への指示から数値を外す
Section titled “7. AI への指示から数値を外す”テンプレートの CLAUDE.md・実装計画の様式・task-breakdown・task-size から、「30 分で読み切れる」「目安 100 行を超えたら人へ確認」を外し、「関心事が 1 つで、受入基準の束につき 1 Task。確認が要る大きさ・範囲なら『規模の確認』の欄に書く」へ改めます。AI が自主的に細切れにすると、標準の「分割しすぎない」と衝突するためです。
採った案と、採らなかった案
Section titled “採った案と、採らなかった案”会議体は 4 つの立場(統制を守る側、AI 先進の現場、標準の運営者、懐疑役)で開き、意見書を突き合わせました。採らないと決めたことを次に明記します。「書かれていない」ことと、「課さないと決めた」ことを区別するためです。
| 案 | 採らない理由 |
|---|---|
| 基準値を引き上げるだけにする | 能力が上がるたびに上げ続ける定数のままで、構造が変わらない |
| 上限を廃止する、観測のみを既定にする | 超過に人の確認も記録も課さなくなる。ADR-0047 が却下した目安のみ化と同じ。EV-0033 の再開条件は別の経路である |
| 超過を無記録で通す | 較正の母集団が空になる。通した事実が残らない |
| 能力の世代交代を契機に値を自動で変える、モデル名と定数の対応表を標準に置く | 足場は消えず移動する(一次資料)。観測できない契機を条項にしない |
| 未保証行(UCL)・モジュール数の導出を既定にする(今回) | 機械で検査できる条件が定まらず、自己申告・偽装の余地が大きい |
| 日常の経路に例外承認(PR 2 本・承認 2 回)を残す | 1 名体制で閉じ、回避の動機を生む |
| 外部ベンチマークの値を既定にする | 外部の目標値を規格限界として取り込まない(第6章) |
| 「人の帯域は AI の進化に比例して増える」という前提 | 人の帯域は固定で、機械生成コードの認知負荷は人手より高い可能性がある。したがって基準値は廃止せず、超過時の扱いを遮断から人の確認と記録へ移す |
| L1・L2 の宣言を自己申告のまま降ろす | 形骸化する。そのため宣言は記録とし、緩和は根拠の実在と区分の条件の範囲に限った |
| CL2 以上かつ 1 名体制の解除不可を重ねて足す | 独立した人の確認の欠落が、出荷の集約で既に欠落になる |
別の Issue へ引き継ぐもの
Section titled “別の Issue へ引き継ぐもの”採らないと決めたのではなく、今回は直さないものです。後継 Issue(#296)で扱います。
- 全体カバレッジ 80%(標準は新規コードの 80%。基底を下回らない形か差分カバレッジへ)
- 全 PR・全 push の承認失効(
dismiss_stale_reviews_on_push。G-6 の規範とルールセットの粒度) - 自己修復の「同一失敗の連続」での停止
- 手戻り率の合否化の見直し、監査の抽出率(変更件数に比例)、10 名境界の根拠水準マーク
- 利用者の PR 分布の実測(利用者の手元のデータが要る)
維持するもの
Section titled “維持するもの”能力と切り離して固定します。独立した人の確認(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 ごとに「独立した人の確認が無い」記載の欠落が出続ける。解消できる体制ではない
根拠水準の開示
Section titled “根拠水準の開示”超過の扱いと担保水準の宣言の根拠水準は、第4章の EV-0084 に開示しています。能力依存の定数の登録簿は、第6章の EV-0089 です。どちらも E0(なし)です。
事実関係(超過の全面的な失敗、算定が実装の約 2 倍、1 名体制の例外経路の閉塞)は実走で再現しており、E1 です。超過への対処が効くかは、実証がありません。差し替え条件は、利用者の PR 分布の実測、超過した変更の「読み切れなかった」の比率、超過した変更の手戻り・取り消しの観測です。