目的
同一の規則が複数面に写されていて片方だけが更新された結果ドリフトした箇所と、実在しない対象を指す参照を潰す。適用の瞬間にどちらを読んだかで挙動が変わる状態を解消する。
scheduled evolution-full-run (2026-08-02) の read-only 監査から確定した所見のうち、**「同じことを述べる 2 面以上が食い違っている」「参照先が実在しない」**というクラスに絞る。hook の挙動欠陥は #1632、skill description↔body のルーティング被覆は別 issue へ分離済み。
確認済みの事実
すべて親が両側の literal を実読して確認済み。
1. per-PR exception の写しから L1 brake 2 の上書き条項が欠落(最重)
rules/operations/execution-mode.md:69-74 は per-PR exception に「L1 に触れる PR では brake 2 PASS が必要(exception を上書きする)」を明示している。しかし merge ゲートの瞬間に実際に開かれる面である skills/operations-on-pr-review/SKILL.md:55-64 と docs/4.-Operations.md:378 は exception 本体だけを写しており、上書き条項を持たない。
semi_auto で rules/model/ の typo 修正 PR に着いたとき、写しだけを読むと「patch 相当 → 人間チェック waive → 直 merge」で終わる。brake 2 は L1 の唯一の deviation ゲートであり、これは素通り経路。
系譜: exception 本体は #1259 で作られ 3 面にコピーされたが、上書き条項は後の #1370 が execution-mode.md にだけ追加した。同じ内容の 4 面のうち skills/task-pr-review-judgment/SKILL.md:29 と docs/3.-Task.md:350 は正しく「詳細は execution-mode.md」と指すだけで再掲しておらず健全。2 面が正しく、2 面が古い写し。
緩和要因: 正典 execution-mode.md は rules/ 配下で always-on ロードされるため、正しい規則自体は常に context にある。それでも適用の瞬間に開かれる面が古い写しである状態は残る。
2. done ラベルが「廃止」と「必須」で真っ向から矛盾
docs/4.-Operations.md:783-787 は done を廃止済みラベルの表に載せる(廃止理由「issue の closed 状態と冗長」)。rules/task/task.md:90 は同ラベルをサブエージェント退出直前の必須遷移として定義する。
権威側は rules/task/task.md。commit 2a3a4fe (#1277) のメッセージ自身が "The old done retirement rationale (redundant with closed state) is superseded by the new executor-agnostic semantic" と述べ、rules/operations/operations.md の Retired Labels 節を削除している。同 commit の stat は 4 ファイルのみで docs/4 を触っていない(実測)。しかも docs/4:789 は「ラベルの追加・変更・廃止を行った場合は rules/task/task.md も合わせて更新する」と同期義務を自分で書いている。
副次: docs/3.-Task.md:78-82 のライフサイクル表が in-progress / backlog / deferred の 3 つしか載せず done / waiting / blocked を欠く。同ファイル 303 行目では state-machine subset 4 つを正しく列挙しており、表だけが古い。
3. Codex アダプターだけが「親が自分で直す」と書いている
adapter/claude/CLAUDE.md:75-77 は For CHANGES_REQUESTED: ... then delegate fix to subagent.、adapter/codex/AGENTS.md:81-83 は ... then fix.。後者は skills/task-subagent-delegation/SKILL.md:15 の always-delegate に反する。
CHANGES_REQUESTED の修正は issue の変更であって brake findings の adjudication ではないため、同 skill の boundary 条項の内側に入らない = 委譲対象。ホスト固有差ではない(Codex 側も AGENTS.md:45 で .codex/agents/*.toml のサブエージェントを持ち Subagent_Delegation ブロックを共有)。skills/task-pr-review-judgment/SKILL.md:34 / docs/3:354 / docs/6:244 の 3 面すべてが「委譲」で一致し、Codex だけが外れている。
4. docs/2 冒頭が Sheepdog 到達前の記述のまま
docs/2.-Evolution.md:14 = 「現在は部分自動化の段階にあり、残っている手動ステップは時間とともに縮めていく」。正本 rules/evolution/evolution.md:38-40 = 「judgment-layer Sheepdog reached. Initiator authority sits on AI」。
前 2 文は逐語ミラーで 3 文目だけが分岐している。同じ docs/2:45 自身が「変更ごとの spec 判断に人間 go-sign は不要(brake が代替)」と書いておりファイル内でも矛盾。commit 7185852 (#1481) が「部分自動化」literal を 45 / 253 / 262 / 358 行目で系統的に置換した際、14 行目だけ取りこぼした。
5. docs/6 の memory 書き込み自律性から persistence hard gate が欠落
adapter/claude/CLAUDE.md:160-164 は書き込み前の永続化ティアリング判定を hard gate として要求する(永続・曖昧なら memory ではなく rules/ / docs/ / wiki へ回す)。仕様ミラーである docs/6.-Adapter.md:280-284 は「即時実行」→「既存メンテナンスルール」→「明示的な書くな指示の scope 限定」の 3 段落のみで、gate に相当する記述が無い。
docs/6 だけを読むと、rules/evolution/memory-entry-format.md Trigger point が断とうとしている「memory に永続情報が滞留する」構造的欠陥がそのまま素通りする。#1370 が CLAUDE.md にだけ追加した取りこぼしで、上記 1 と同一 commit・同一パターン。
6. docs/B.-Configuration.md:162 の gh フルパス記述が無条件
「セッションを跨いでgh CLIのPATHは保持されないため、常にフルパス(~/.local/bin/gh)で実行されます」と無条件に述べるが、docs/6.-Adapter.md:79 は Linux ホストのみ ~/.local/bin/gh へ自動インストールし、macOS は brew install gh、Windows(Git-Bash/MSYS2/Cygwin) は winget install --id GitHub.cli を案内すると host 条件分岐を明記している。本ワークスペースは Windows であり、B. の記述は読み手自身のホストについて偽。
PR #1550(#1538) 実装時に「スコープ外として未修正」と明示的に残した箇所。memory/self-evolution-observation.md の #1538 エントリ focus(b) が drift を予告しており、予告どおり実在で確定した。
7. 停止条件が「再掲するな」の指示ごと二重に正本宣言されている
skills/operations-on-pr-review/SKILL.md:25,35 と docs/4.-Operations.md:348,354 の両方が停止条件の全文を持ち、両方が自分を正本と名乗り、「他所は再掲するな(二つ目のコピーが drift する)」という指示まで複製している。
現時点で条件の中身は逐語一致しており、乖離しているのは所有権のほう。ただし docs/4:7 は自分で「英語の rules/skills が literal なソース・オブ・トゥルース」と宣言しており、348 行の「正本」ラベルと衝突する。rules/evolution/initiator-autonomy.md:40 / skills/task-subagent-delegation/SKILL.md:22,31 / skills/task-subagent-prompt/SKILL.md:15 の 3 面すべてが skill 側を参照先に名指ししている。
8. semantic tag が heading と一致しない 2 箇所
docs/K.-Source-File-Format.md:48 は tag name を heading text の slugify と規定する。
tag は compact/resume 後の再アンカー信号であり、不一致だと markdown の暗黙的な「次の heading まで」推定に落ちる。K. がこの形式を採った目的そのものが失われる。
9. 実在しない MCP tool 名 2 件(#1605 とは別ファイル)
skills/model-trigger-check-gate-actions/SKILL.md:47,50 が mcp__GitHub_RAG_MCP__search_issues / mcp__GitHub_RAG_MCP__get_doc_content を名指しする。実際に接続されている tool は mcp__github-rag-mcp__search の 1 本(skills/model-agentic-search/SKILL.md:121 と skills/evolution-decision-structure-write/SKILL.md:36 はこちらで正しい)。
この表は always-on の rules/model/trigger-check-gate.md が Literal check / Source check の具体行動面として routing する先。名指しされた tool を呼ぶと tool-not-found で落ち、もっともらしい復旧は「retrieval を諦める」= ゲートが発火すべき瞬間に黙って無効化される。
#1605 は skills/evolution-judgment-learning/SKILL.md:13 のワイルドカード接頭辞が対象で、本件は別ファイル・別 literal。
10. docs/K の slugify 規定が語中の + を定義していない
K.:63 の例は # Li+ Coding Rule → <li-coding-rule>(+ は削除)だが、この例は + の後に空白がある。語中 +(例: Li+AI)に literal 適用すると liai になり、実際に skills/model-ambiguity-handling/SKILL.md:32 は <phase-framing-li-ai-compile-pipeline>(= li-ai)を使っている。上記 8 の判定基準を確定させるために規定が要る。
制約
- L1 Model Layer には触れない。
skills/evolution-l1-update-gating の long-horizon observation 閾値は AI 単独起動では hard requirement であり、本監査の所見はいずれも単一 session のもの
- 1 / 5 / 7 は写しを消して正本を指す方向で直す。写し側に条項を足して 2 枚目を厚くしない(
rules/model/subtractive-structural-beauty.md および各正本の「再掲するな」条項)
- 7 は現時点で内容が一致しているため、直すのは所有権宣言のみ。停止条件の literal は変更しない
- 6 は
docs/6:79 を正としてホスト条件分岐を反映する。docs/6 側は変更しない
完了条件
- 1 / 5 について、写し側が正本を指すだけの形になり、上書き条項・hard gate が適用の瞬間に到達可能
- 2 / 3 / 4 について、矛盾する側が正本と一致
- 6 の記述がホスト条件分岐を反映し、Windows / macOS ホストの読み手にとって偽でない
- 7 の正本宣言が 1 箇所
- 8 の tag 2 件が slugify 規定と一致し、10 の規定が語中
+ を定義している
- 9 の tool 名が実在するものになっている
対象ファイル
skills/operations-on-pr-review/SKILL.md
skills/task-subagent-prompt/SKILL.md
skills/evolution-impression-literal-detection/SKILL.md
skills/model-trigger-check-gate-actions/SKILL.md
adapter/codex/AGENTS.md
docs/2.-Evolution.md
docs/3.-Task.md
docs/4.-Operations.md
docs/6.-Adapter.md
docs/B.-Configuration.md
docs/K.-Source-File-Format.md
目的
同一の規則が複数面に写されていて片方だけが更新された結果ドリフトした箇所と、実在しない対象を指す参照を潰す。適用の瞬間にどちらを読んだかで挙動が変わる状態を解消する。
scheduled evolution-full-run (2026-08-02) の read-only 監査から確定した所見のうち、**「同じことを述べる 2 面以上が食い違っている」「参照先が実在しない」**というクラスに絞る。hook の挙動欠陥は #1632、skill description↔body のルーティング被覆は別 issue へ分離済み。
確認済みの事実
すべて親が両側の literal を実読して確認済み。
1. per-PR exception の写しから L1 brake 2 の上書き条項が欠落(最重)
rules/operations/execution-mode.md:69-74は per-PR exception に「L1 に触れる PR では brake 2 PASS が必要(exception を上書きする)」を明示している。しかし merge ゲートの瞬間に実際に開かれる面であるskills/operations-on-pr-review/SKILL.md:55-64とdocs/4.-Operations.md:378は exception 本体だけを写しており、上書き条項を持たない。semi_auto で
rules/model/の typo 修正 PR に着いたとき、写しだけを読むと「patch 相当 → 人間チェック waive → 直 merge」で終わる。brake 2 は L1 の唯一の deviation ゲートであり、これは素通り経路。系譜: exception 本体は #1259 で作られ 3 面にコピーされたが、上書き条項は後の #1370 が
execution-mode.mdにだけ追加した。同じ内容の 4 面のうちskills/task-pr-review-judgment/SKILL.md:29とdocs/3.-Task.md:350は正しく「詳細は execution-mode.md」と指すだけで再掲しておらず健全。2 面が正しく、2 面が古い写し。緩和要因: 正典
execution-mode.mdはrules/配下で always-on ロードされるため、正しい規則自体は常に context にある。それでも適用の瞬間に開かれる面が古い写しである状態は残る。2.
doneラベルが「廃止」と「必須」で真っ向から矛盾docs/4.-Operations.md:783-787はdoneを廃止済みラベルの表に載せる(廃止理由「issue の closed 状態と冗長」)。rules/task/task.md:90は同ラベルをサブエージェント退出直前の必須遷移として定義する。権威側は
rules/task/task.md。commit2a3a4fe(#1277) のメッセージ自身が "The olddoneretirement rationale (redundant with closed state) is superseded by the new executor-agnostic semantic" と述べ、rules/operations/operations.mdの Retired Labels 節を削除している。同 commit の stat は 4 ファイルのみでdocs/4を触っていない(実測)。しかもdocs/4:789は「ラベルの追加・変更・廃止を行った場合はrules/task/task.mdも合わせて更新する」と同期義務を自分で書いている。副次:
docs/3.-Task.md:78-82のライフサイクル表がin-progress/backlog/deferredの 3 つしか載せずdone/waiting/blockedを欠く。同ファイル 303 行目では state-machine subset 4 つを正しく列挙しており、表だけが古い。3. Codex アダプターだけが「親が自分で直す」と書いている
adapter/claude/CLAUDE.md:75-77はFor CHANGES_REQUESTED: ... then delegate fix to subagent.、adapter/codex/AGENTS.md:81-83は... then fix.。後者はskills/task-subagent-delegation/SKILL.md:15の always-delegate に反する。CHANGES_REQUESTED の修正は issue の変更であって brake findings の adjudication ではないため、同 skill の boundary 条項の内側に入らない = 委譲対象。ホスト固有差ではない(Codex 側も
AGENTS.md:45で.codex/agents/*.tomlのサブエージェントを持ち Subagent_Delegation ブロックを共有)。skills/task-pr-review-judgment/SKILL.md:34/docs/3:354/docs/6:244の 3 面すべてが「委譲」で一致し、Codex だけが外れている。4.
docs/2冒頭が Sheepdog 到達前の記述のままdocs/2.-Evolution.md:14= 「現在は部分自動化の段階にあり、残っている手動ステップは時間とともに縮めていく」。正本rules/evolution/evolution.md:38-40= 「judgment-layer Sheepdog reached. Initiator authority sits on AI」。前 2 文は逐語ミラーで 3 文目だけが分岐している。同じ
docs/2:45自身が「変更ごとの spec 判断に人間 go-sign は不要(brake が代替)」と書いておりファイル内でも矛盾。commit7185852(#1481) が「部分自動化」literal を 45 / 253 / 262 / 358 行目で系統的に置換した際、14 行目だけ取りこぼした。5.
docs/6の memory 書き込み自律性から persistence hard gate が欠落adapter/claude/CLAUDE.md:160-164は書き込み前の永続化ティアリング判定を hard gate として要求する(永続・曖昧なら memory ではなくrules//docs// wiki へ回す)。仕様ミラーであるdocs/6.-Adapter.md:280-284は「即時実行」→「既存メンテナンスルール」→「明示的な書くな指示の scope 限定」の 3 段落のみで、gate に相当する記述が無い。docs/6だけを読むと、rules/evolution/memory-entry-format.mdTrigger point が断とうとしている「memory に永続情報が滞留する」構造的欠陥がそのまま素通りする。#1370 がCLAUDE.mdにだけ追加した取りこぼしで、上記 1 と同一 commit・同一パターン。6.
docs/B.-Configuration.md:162の gh フルパス記述が無条件「セッションを跨いでgh CLIのPATHは保持されないため、常にフルパス(
~/.local/bin/gh)で実行されます」と無条件に述べるが、docs/6.-Adapter.md:79は Linux ホストのみ~/.local/bin/ghへ自動インストールし、macOS はbrew install gh、Windows(Git-Bash/MSYS2/Cygwin) はwinget install --id GitHub.cliを案内すると host 条件分岐を明記している。本ワークスペースは Windows であり、B. の記述は読み手自身のホストについて偽。PR #1550(#1538) 実装時に「スコープ外として未修正」と明示的に残した箇所。
memory/self-evolution-observation.mdの #1538 エントリ focus(b) が drift を予告しており、予告どおり実在で確定した。7. 停止条件が「再掲するな」の指示ごと二重に正本宣言されている
skills/operations-on-pr-review/SKILL.md:25,35とdocs/4.-Operations.md:348,354の両方が停止条件の全文を持ち、両方が自分を正本と名乗り、「他所は再掲するな(二つ目のコピーが drift する)」という指示まで複製している。現時点で条件の中身は逐語一致しており、乖離しているのは所有権のほう。ただし
docs/4:7は自分で「英語の rules/skills が literal なソース・オブ・トゥルース」と宣言しており、348 行の「正本」ラベルと衝突する。rules/evolution/initiator-autonomy.md:40/skills/task-subagent-delegation/SKILL.md:22,31/skills/task-subagent-prompt/SKILL.md:15の 3 面すべてが skill 側を参照先に名指ししている。8. semantic tag が heading と一致しない 2 箇所
docs/K.-Source-File-Format.md:48は tag name を heading text の slugify と規定する。skills/task-subagent-prompt/SKILL.md:21,45= tag<delegation-prompt-hygiene-field-scoped-language>に対し heading は# Delegation prompt hygiene (field-scoped artifact language)(artifactが欠落)。fix(task): align delegation body language contract #1622 の rename で入った regression — 旧ペアは一致していた。skills/evolution-impression-literal-detection/SKILL.md:7,38= tag<impression-literal-detection-axis>に対し heading は# Fixed axis: impression-literal detection(語順が異なる)。bd67e8a(Split fat skills by firing condition, fix description form [skills, rules, docs] #1600) の新規作成時から不一致。tag は compact/resume 後の再アンカー信号であり、不一致だと markdown の暗黙的な「次の heading まで」推定に落ちる。K. がこの形式を採った目的そのものが失われる。
9. 実在しない MCP tool 名 2 件(#1605 とは別ファイル)
skills/model-trigger-check-gate-actions/SKILL.md:47,50がmcp__GitHub_RAG_MCP__search_issues/mcp__GitHub_RAG_MCP__get_doc_contentを名指しする。実際に接続されている tool はmcp__github-rag-mcp__searchの 1 本(skills/model-agentic-search/SKILL.md:121とskills/evolution-decision-structure-write/SKILL.md:36はこちらで正しい)。この表は always-on の
rules/model/trigger-check-gate.mdが Literal check / Source check の具体行動面として routing する先。名指しされた tool を呼ぶと tool-not-found で落ち、もっともらしい復旧は「retrieval を諦める」= ゲートが発火すべき瞬間に黙って無効化される。#1605 は
skills/evolution-judgment-learning/SKILL.md:13のワイルドカード接頭辞が対象で、本件は別ファイル・別 literal。10.
docs/Kの slugify 規定が語中の+を定義していないK.:63 の例は
# Li+ Coding Rule→<li-coding-rule>(+は削除)だが、この例は+の後に空白がある。語中+(例:Li+AI)に literal 適用するとliaiになり、実際にskills/model-ambiguity-handling/SKILL.md:32は<phase-framing-li-ai-compile-pipeline>(=li-ai)を使っている。上記 8 の判定基準を確定させるために規定が要る。制約
skills/evolution-l1-update-gatingの long-horizon observation 閾値は AI 単独起動では hard requirement であり、本監査の所見はいずれも単一 session のものrules/model/subtractive-structural-beauty.mdおよび各正本の「再掲するな」条項)docs/6:79を正としてホスト条件分岐を反映する。docs/6側は変更しない完了条件
+を定義している対象ファイル
skills/operations-on-pr-review/SKILL.mdskills/task-subagent-prompt/SKILL.mdskills/evolution-impression-literal-detection/SKILL.mdskills/model-trigger-check-gate-actions/SKILL.mdadapter/codex/AGENTS.mddocs/2.-Evolution.mddocs/3.-Task.mddocs/4.-Operations.mddocs/6.-Adapter.mddocs/B.-Configuration.mddocs/K.-Source-File-Format.md