Progressive Disclosure 再試験の資料編
本編の記事で行った再試験の資料集です。 7月の実験の条件定義と依頼プロンプトは前回の資料編にあり、今回もそのまま使っています。 ここには、7月から変えた点と、今回の結果をまとめます。
実験環境
- 対象リポジトリ:karasu の 2026-09-26 時点の main(
44930f6)に全試行を固定。ADR は 391 本 - エージェント:Claude Code 2.1.283 の headless 実行(
claude -p、ターン上限 40) - モデルと権限モード:Opus 5.5 と auto mode を主な構成とし、要因の分解用に Opus 5.5 と Opus 4.8 を bypassPermissions でも実行
- スキル集 hane:
--plugin-dirで版を固定し、インストール済みの版は無効化。7月版(54c4a14)と、設計前の確認手順を必須にした現行版(e3a0e36)を条件として切り替え - 分離:条件ごとに独立 clone を作り、ablation を適用した状態を履歴 1 つだけの orphan commit にする。元のコミットと origin は消し、試行ごとに hard reset、reflog の消去と gc をかけ、エージェントが作った worktree を撤去する
- メモリ:
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 - 試行の順序:試行番号で全セルを巡回(時間による変動をセル間で均す)
- 規模:105 試行(Opus 5.5 が 93、Opus 4.8 が 12)。費用は計 105 ドル
7月から変えた計測
- ADR の同定:karasu の ADR は、ID が日付(
20260323-01)から Issue 番号(ADR-7)に改番された。そこで的の ADR は、ファイル名のスラッグ(yaml-style-syntax-cancelledなど)で同定する。スラッグは改番の前後で変わらない - Bash での閲覧:
catやsedで ADR 本文を開いた操作も「開いた」に数える。7月の集計は Read ツールだけを数えていた。そのため、7月の Opus 4.8 が Bash で読んだ分を取りこぼしていた - 7月分の再集計:比較に使う 7月の数字は、すべて同じスクリプトで数え直した値。7月の記事の数字とは一部ずれる
- 履歴からの漏れの遮断:7月は ablation を「基準コミット」として積んでいたため、その差分から削った内容を復元できた。今回は orphan commit にして経路を断った
条件
| 条件 | 内容 |
|---|---|
| full | 素のリポジトリ |
| noadr | docs/adr を全削除し、ADR 執筆ルールも削除 |
| idxstrip | ADR 本文は残し、索引(README、グラフ、有効決定の一覧)と ADR 間のつながりを除去 |
| whystrip284 | セッション名の却下 ADR を、結論とステータスだけに縮める |
| noadr284 | セッション名の却下 ADR を削除し、索引から消す |
| rule | 設計前の確認を求める常設ルール(7月と同じ文面、パス指定なし)を追加 |
依頼は 7月と同じ 5 種類です。 YAML 構文(語彙一致と不一致)、Bun への移行、セッション名の付け替え(語彙一致と不一致)、それに衝突のない対照として FAQ ページの追加です。
全セルの結果
「的を開いた」は、却下の ADR を Read または Bash で開いた試行の数です。 A、B、C は、条件を伏せた別モデル(Claude Sonnet 5)による分類で、7月の試行と今回の試行を混ぜて同じ基準で付け直しました。 A は「過去の決定や却下記録に言及し、衝突を明示して確認を取った」で、的以外の記録への言及も含みます。 FAQ(faq-page)は衝突のない依頼なので、的と分類はありません。
| セル | 条件 | 依頼 | 構成 | スキル | 試行 | 的を開いた | A | B | C | 平均費用 |
|---|---|---|---|---|---|---|---|---|---|---|
| r5-yaml-full | full | yaml-syntax | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 2 | 1 | 0 | $1.67 |
| r5-yaml-full | full | yaml-syntax | 5.5 auto | 7月版 | 3 | 2/3 | 2 | 0 | 1 | $0.63 |
| r5-yaml-noadr | noadr | yaml-syntax | 4.8 bypass(7月) | 7月版 | 3 | 0/3 | 2 | 1 | 0 | $2.27 |
| r5-yaml-noadr | noadr | yaml-syntax | 5.5 auto | 7月版 | 3 | 0/3 | 0 | 0 | 3 | $1.21 |
| r5-yaml-idxstrip | idxstrip | yaml-syntax | 4.8 bypass(7月) | 7月版 | 3 | 2/3 | 2 | 0 | 1 | $2.14 |
| r5-yaml-idxstrip | idxstrip | yaml-syntax | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.55 |
| r5-bun-full | full | bun-toolchain | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $1.12 |
| r5-bun-full | full | bun-toolchain | 5.5 auto | 7月版 | 3 | 1/3 | 2 | 0 | 1 | $0.85 |
| r5-bun-noadr | noadr | bun-toolchain | 4.8 bypass(7月) | 7月版 | 3 | 0/3 | 0 | 0 | 3 | $2.21 |
| r5-bun-noadr | noadr | bun-toolchain | 5.5 auto | 7月版 | 3 | 0/3 | 0 | 0 | 3 | $0.87 |
| r5-bun-idxstrip | idxstrip | bun-toolchain | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.78 |
| r5-bun-idxstrip | idxstrip | bun-toolchain | 5.5 auto | 7月版 | 3 | 2/3 | 2 | 0 | 1 | $0.87 |
| s-full-norule | full | session-rename | 4.8 bypass(7月) | 7月版 | 9 | 1/9 | 2 | 7 | 0 | $1.97 |
| s-full-norule | full | session-rename | 5.5 auto | 7月版 | 6 | 1/6 | 6 | 0 | 0 | $1.25 |
| r6-whystrip | whystrip284 | session-rename | 4.8 bypass(7月) | 7月版 | 3 | 0/3 | 0 | 3 | 0 | $1.85 |
| r6-whystrip | whystrip284 | session-rename | 5.5 auto | 7月版 | 3 | 2/3 | 2 | 1 | 0 | $0.73 |
| r6-noadr | noadr284 | session-rename | 4.8 bypass(7月) | 7月版 | 3 | 0/3 | 1 | 2 | 0 | $1.59 |
| r6-noadr | noadr284 | session-rename | 5.5 auto | 7月版 | 3 | 0/3 | 1 | 1 | 1 | $1.29 |
| r7-forced | full | session-rename-forced | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 2 | 0 | 1 | $2.60 |
| r7-forced | full | session-rename-forced | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $1.14 |
| r8-rule-conflict | rule | session-rename | 4.8 bypass(7月) | 7月版 | 9 | 9/9 | 9 | 0 | 0 | $1.44 |
| r8-rule-conflict | rule | session-rename | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.28 |
| r8-rule-neutral | rule | faq-page | 4.8 bypass(7月) | 7月版 | 3 | — | — | — | — | $1.59 |
| r8-rule-neutral | rule | faq-page | 5.5 auto | 7月版 | 3 | — | — | — | — | $1.01 |
| r8-norule-neutral | full | faq-page | 4.8 bypass(7月) | 7月版 | 3 | — | — | — | — | $1.48 |
| r8-norule-neutral | full | faq-page | 5.5 auto | 7月版 | 3 | — | — | — | — | $0.96 |
| r9-whystrip | rule+whystrip284 | session-rename | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $1.05 |
| r9-whystrip | rule+whystrip284 | session-rename | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.31 |
| r9-noadr | rule+noadr284 | session-rename | 4.8 bypass(7月) | 7月版 | 3 | 0/3 | 1 | 1 | 1 | $1.84 |
| r9-noadr | rule+noadr284 | session-rename | 5.5 auto | 7月版 | 3 | 0/3 | 3 | 0 | 0 | $0.88 |
| r10-yaml-match | rule | yaml-syntax | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.50 |
| r10-yaml-match | rule | yaml-syntax | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.32 |
| r10-yaml-mismatch | rule | yaml-syntax-mismatch | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.65 |
| r10-yaml-mismatch | rule | yaml-syntax-mismatch | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.29 |
| r10-session-mismatch | rule | session-rename-mismatch | 4.8 bypass(7月) | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $1.61 |
| r10-session-mismatch | rule | session-rename-mismatch | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.47 |
| x-yaml-mismatch-norule | full | yaml-syntax-mismatch | 5.5 auto | 7月版 | 3 | 3/3 | 3 | 0 | 0 | $0.39 |
| b48-s-full-norule | full | session-rename | 4.8 bypass | 7月版 | 6 | 3/6 | 3 | 3 | 0 | $2.45 |
| b48-yaml-full | full | yaml-syntax | 4.8 bypass | 7月版 | 3 | 1/3 | 3 | 0 | 0 | $2.20 |
| b48-yaml-noadr | noadr | yaml-syntax | 4.8 bypass | 7月版 | 3 | 0/3 | 2 | 0 | 1 | $1.77 |
| b55-s-full-norule | full | session-rename | 5.5 bypass | 7月版 | 6 | 5/6 | 6 | 0 | 0 | $1.26 |
| b55-yaml-full | full | yaml-syntax | 5.5 bypass | 7月版 | 3 | 2/3 | 2 | 0 | 1 | $0.65 |
| b55-yaml-noadr | noadr | yaml-syntax | 5.5 bypass | 7月版 | 3 | 0/3 | 1 | 1 | 1 | $1.08 |
| sk-s-full | full | session-rename | 5.5 auto | 現行版 | 6 | 6/6 | 5 | 1 | 0 | $1.28 |
| sk-rule-s | rule | session-rename | 5.5 auto | 現行版 | 3 | 3/3 | 3 | 0 | 0 | $0.30 |
| sk-yaml-full | full | yaml-syntax | 5.5 auto | 現行版 | 3 | 3/3 | 3 | 0 | 0 | $0.41 |
| sk-yaml-noadr | noadr | yaml-syntax | 5.5 auto | 現行版 | 3 | 0/3 | 1 | 0 | 2 | $1.12 |
| sk-faq | full | faq-page | 5.5 auto | 現行版 | 3 | — | — | — | — | $1.04 |
| sk-rule-faq | rule | faq-page | 5.5 auto | 現行版 | 3 | — | — | — | — | $0.99 |
要因の分解
素のリポジトリでセッション名を依頼したセル(確認手順なし)を、構成ごとに並べます。
| 構成 | 試行 | 的を開いた | B(黙って進めた) |
|---|---|---|---|
| Opus 4.8、bypass、7月のリポジトリ | 9 | 1 | 7 |
| Opus 4.8、bypass、現在のリポジトリ | 6 | 3 | 3 |
| Opus 5.5、bypass | 6 | 5 | 0 |
| Opus 5.5、auto mode | 6 | 1 | 0 |
- 7月から「Opus 4.8、現在のリポジトリ」への変化は、リポジトリとハーネスの変化による
- 「Opus 4.8、現在」から「Opus 5.5、bypass」への変化は、モデルの差による
- 「Opus 5.5、bypass」から「Opus 5.5、auto mode」への変化は、権限モードの差による。的を開いた数にだけ差が出たが、6 試行ずつでは偶然の範囲(Fisher の正確検定で p≈0.08)
パス指定ルールの対照実験
paths: を指定したルールが、どの読み方で読み込まれるかを確かめました。
- 検証用リポジトリ:
notes/plan.mdを 1 つと、paths: notes/**/*.mdのルールを 1 つ置く。ルールの中身は「このルールが読み込まれていたら、最終回答の末尾にCANARY-7Qと書く」 - 依頼:「
notes/plan.mdを Read で読んで要約して(Bash は使わない)」と、「Bash のcatで読んで要約して(Read は使わない)」 - 条件:auto mode と bypassPermissions、各 3 試行。モデルは Opus 5.5
| Read | Bash の cat |
|
|---|---|---|
| auto mode | 3/3 | 0/3 |
| bypassPermissions | 3/3 | 0/3 |
再試験の全試行で、ファイルを読んだ操作のうち Bash 経由だった割合は次のとおりです。
| 構成 | Read | Bash | Bash の割合 |
|---|---|---|---|
| Opus 4.8、bypass(7月) | 505 | 250 | 33% |
| Opus 4.8、bypass(今回) | 72 | 16 | 18% |
| Opus 5.5、bypass | 4 | 73 | 95% |
| Opus 5.5、auto mode | 20 | 337 | 94% |
なお、パス指定のルールが読み込まれたかどうかは、--output-format stream-json の出力には現れませんでした。
再試験の試行からは直接観測できないため、この対照実験で代わりに確かめています。
追試するときの落とし穴
- スキルの版が実験条件になる:プラグインのスキルは自動更新される。今回は実験の処方を入れた版が自動で読み込まれていて、「確認手順なし」の条件が成立していなかった。
--plugin-dirで版を固定し、--settingsでインストール済みの版を無効にする - プラグインの中身も読まれる:
--plugin-dirに渡したディレクトリ(プラグインのリポジトリ)を、エージェントは直接読める。今回、Opus 5.5 はプラグインの変更履歴から却下の経緯を見つけていた - 利用上限で落ちた試行:上限に達した試行も、エラーの result を残して終了する。「result があれば完了」と判定すると、再開時に飛ばされる。最後の result がエラーでないことを完了の条件にする
- result が複数出る試行:バックグラウンドのサブエージェントを使うと result が複数出る。費用は各 result に累計値が入り、ターン数と所要時間は区間ごとの値が入る
- 却下理由は古くなる:セッション名の却下理由(名前を変える公開 API がない)は、2 か月で成り立たなくなっていた。的にする決定は、理由が今も成り立つかを実験のたびに確かめる
- 分類基準の粒度:7月と同じ A/B/C の基準は、的以外の記録への言及も A に数える。的を思い出したかどうかは、ツールの実行記録から別に判定する
ランナーの骨子は前回の資料編と同じです。 今回の変更点は、上の「実験環境」と「7月から変えた計測」に書いたとおりです。