Skip to content

operations adapter bodies carry behavior only

Claude Lin & Lay edited this page Sep 28, 2026 · 1 revision

rules/operations と adapter の本文は振る舞いのみを載せ、剥いだ理由はここが保持する

Question

rules/operations/*.md(常時ロード)と adapter/claude/CLAUDE.md / adapter/claude/hooks-settings.md / adapter/codex/AGENTS.md / adapter/codex/hooks-config.md の本文から、rules/model/liplus-coding-rule.md Body States Behavior の判別線(読んだ者の行いが変わるか)で理由・経緯・重複を剥いだとき、剥いだ理由はどこが保持するか。

Current resolution

本文は振る舞い(何を・いつ・どの条件で・誰が・何を禁じるか)だけを持つ。剥いだ理由は、既存 entry や docs が既に保持しているものはそちらが持ち(下の「合流先」)、それ以外は本 entry が持つ(下の「本 entry が保持する理由」)。

PR #2111(issue #2110)で 8 ファイル合計 +95 / −183 行。見出し・semantic tag は不変。## Optional Webhook Notification Flow 節は byte-frozen のまま。本文にポインタは置かない(judgment-record-pointer-requirement-dropped)。

判断の根拠として既存 entry に逐語引用されている行は、剥ぐ対象から外した。main-agent-procedures.md の these serve as arrival confirmation = proof that the operation reached GitHub.(webhook-arrival-clearing-requires-confirmation の唯一の根拠)と、operations.md の title 行の理由(distributed-source-carries-no-resolved-config-value が「固定側にはその理由を明記する」と決めている)は本文に残した。PR #2111 brake 1 round 1 の指摘による。

合流先(既存の記録が既に保持している理由)

剥いだ位置 合流先
operations.md Autonomous Run Stop Condition の「停止条件はこの一般則の適用例の一つであって範囲ではない」 brake2-removal-l1-gate-unified-on-brake1(一般則を L4 で無条件に成り立つ形へ広げた判断)
hooks-settings.md / hooks-config.md の LI_PLUS_AGENT_KEY の理由(なぜ session 単位の識別子では足りないか) cold-start-state-partitioned-by-agent-key
CLAUDE.md Resume mechanism の ListAgents 実測(2026-09-26/27)の詳細、子に id を尋ねても宛先が得られないこと docs/6.-Adapter.md(同段落が実測を全文で保持)

本 entry が保持する理由

execution-mode.md

  • semi_auto の設計意図: 自己進化ループを回すことが設計目標で、patch の自動マージは低リスク変更から人間のボトルネックを外す。minor / major は人間の確認を残す。
  • semi_auto の防御は意図して二層(Defense-in-depth): 1 層目 = AI self-review + Li+ spec discipline(日常の誤りを吸収)、2 層目 = release の人間ゲート(実機検証後の Latest flip。利用者への致命的な露出を防ぐ)。どちらの層も振る舞いとしては本文に残っている(Mode matrix の AI self-review 行と human judgment gate)。本文から外したのは「二層として設計した」という説明だけである。brake1-detection-width-window-closed はこの二層を「縮んでいない残りの層」の一つとして数えており、その参照先は本節である。
  • Per-PR exception の L1 追記: L1 の観測閾値(issue 形成時)と post-merge ランタイム観測は、この mode matrix が持たない軸にある。どちらもマージゲートではない(この一文は本文に残した)。
  • 「Li+config.md を手で編集しなくてよい」「release はモードに依らず人間が確認する」の二行は、同じファイルの直前の行と Mode matrix の重複として外した。

operations.md

  • title 行と body 行は別の軸: ASCII English の title は GitHub 側の一行タイトルの慣習で、LI_PLUS_PROJECT_LANGUAGE が解決する値ではない(理由の一文は本文に残した)。title 行をパラメータ化しつつ body 行を契約参照として読む、という誤読に向けた行だった。
  • body 行の carve-out: Workspace_Language_Contract は「LI_PLUS_REPO の統治を変えない」と到達の終わりを述べるだけで、その先で何が統治するかは決めていない。だから LI_PLUS_REPO 自身を操作するとき、body 言語を決めるのは LI_PLUS_PROJECT_LANGUAGE ではなく、そのリポジトリ自身の統治(.github/workflows/liplus-ci.yml が言語を固定し、欠けた run を落とす)。title 側の行は固定値をパラメータ化することに、この行は配布元リポジトリを操作しながら host workspace の値で body を解決することに、それぞれ向けた対になっている。
  • docs/ と docs-tier は同じ語で別の軸: 後者は skills/evolution-persistence-tiering の永続度の段階で、wiki も含む。
  • mark_processed を省くと backlog が溜まる。
  • Autonomous Run Stop Condition: 静的検査が緑でも静的軸が通ったことしか言わず、ランタイム軸(subrequest 上限、IPC、rate limit、schema migration の副作用)については何も言わない。夜間実行の価値は朝より早く検出することであり、デプロイ後の観測を省けばそれを失う。
  • Post-L1-Merge Runtime Observation: 観測対象は規則適用の瞬間の AI の判断挙動で、本番デプロイ観測(外部プロセスの出力)とは別の軸、名目の予算は同じ 5 分。起動アンカーを operations-* skill に置けないのは、その手続きの実行主体が全モードでメインで、メインは operations skill を読まないため(置いたアンカーが読み手を素通りする)。5 分窓の中の手順は想起依存のままで、rules/model/subtractive-structural-beauty.md の手順→構造の二択では置き換え側にある。hook による置き換えが残っている修理の形。
  • Operations Label の promotion marker: 閾値・期間の数字(3 日で 3 回、5 回で即時)は rules/evolution/promotion-judgment.md の写しだったため外した。

main-agent-procedures.md

  • 本文中の「ここでは再掲しない」系のメタ行は、ポインタだけを残して外した。規範の正本はポインタ先にあり、写しを置かないという方針は always-on-duplication-removal-direction と同じ。
  • 「マージは閉じ括弧ではなく、先送り項目の受け渡しが閉じ括弧」: 先送り項目の規定(ワークスペース側はマージ後の瞬間に、リポジトリ側はマージ前に起票)そのものは本文に残した。
  • Foreground webhook intake の Purpose「前面スレッドを軽く保つ」: 禁止(配送済みのイベント源があるのに GitHub を広く探さない)は本文に残した。
  • state dir の名前の一覧は scripts/check_webhook_notifications.py が 1 か所で持ち、本文の行は契約であって二つ目の出所ではない。
  • 所有判定 step 2 の残存制限: タイトルは issue を名指し、書き手を名指さない。同じ issue に書く二つのセッションは同じタイトルの run を二つ上げ、どちらも両方を自分のものと読む。どのセッションも飢えない。各自が自分の到着確認を一つ持ち、mark_processed は冪等なので、重複した消費は最初と同じ状態を書く。step 2 を作成に絞り戻して直さない(この禁止は本文に残した)。
  • Handoff continuity の Actor: メインが境界を越えて持つ状態は、実装サブエージェントの再開先(spawn したセッションの文脈にしか無い)と chat memory。

adapter/claude/CLAUDE.md / adapter/codex/AGENTS.md

  • Concept framing の Stages(harness → agility → sheepdog)と Substrate caveat(--channels が Claude Desktop に届かないと判断、substrate 層 Sheepdog は保留)、self-eval が modifier 軸の計器であること: 状態と経緯の記述で、読み手の行いを変えない。正本は docs/G.-Sheepdog-Engineering.md(Lay 側 #2109 は rules/evolution/evolution.md から同じ --channels 括弧句を外した。adapter 側は Substrate caveat の行ごと外したので両 adapter は並行のまま)。
  • Resume mechanism: id を失うと、再開が保とうとしている実装文脈そのものを失う。id 喪失は「spawn したセッションの文脈」の項が述べる状態と同じ。
  • What worktree does not isolate: 上の 3 行が名指すのは staging area であり、共有されるもの全体ではない。退避手順は委譲プロンプトに毎回注入される。
  • AGENTS.md の skill 選択: Codex は name / description / path を先に見て、選ばれたら SKILL.md 全体を読む(Claude ホストと同じ progressive disclosure)。
  • AGENTS.md の resume: fork_turns は spawn 呼び出しの引数で、再開はエージェント自身の保存済み文脈を構造的に継承する。フェーズ 2 が依存するのはその性質。

adapter/claude/hooks-settings.md

  • compare-and-overwrite は以前の「存在すれば触らない」規則を置き換えた。以前の規則では hook 構造の更新を自動で配れなかった。新しい規則は settings.json を release ごとにテンプレートへ揃えつつ、内容が違うときだけ上書きするので、毎回の機密ファイル許可プロンプトを避ける。
  • Migration note: 以前の Li+ から上げたワークスペースで settings.json に置かれていた利用者のキーは、この規則のもとでは上書きで落ちる。
  • SessionStart の 5 matcher: Claude Code v2.1.214 より前は fork 系のセッションが resume を名乗っていたため、以前は 4 matcher で足りていた。未登録の matcher は別の entry へ落ちない。
  • mcp_tool entry の版条件: v0.11.3 より前の get_pending_status は汎用 JSON({pending_count, types, latest_received_at})を返し、Claude Code は parse はするが UserPromptSubmit の decision schema に合わないので捨てる。v0.11.3 は local bridge 側で hookSpecificOutput.hookEventName="UserPromptSubmit" と additionalContext の要約へ包む。
  • webhook の処理半分を hook が毎モード出す理由: webhook ブロックは「誰がツールを呼ぶか」と「届いたものをどうするか」の分離できる二つで、delivery mode が選ぶのは前者だけ。常駐の正本(main-agent-procedures.md Foreground webhook notification intake)の発火の瞬間は each user turn start で、常駐は読み込みの保証であって発火の保証ではない。両半分を一緒に落としたのが #1798(イベントは文脈に届いたが、何をするかを言う面が無かった)。
  • post-tool-use の firing trace は #1710、stray-script scan は #2047。

adapter/codex/hooks-config.md

  • 配置(.agents/skills、.codex/、AGENTS.md)・Windows ネイティブの PowerShell 実行・SessionStart の additionalContext が届くこと・GUI trust の必要は #1502 の実機検証による。trust の案内は docs/D.-Installation.md が持つ。
  • matcher は公式の hooks schema で regex と確認済み。Claude 型の 4 entry に分ける必要はない。
  • compact 後に additionalContext が残るかは #1502 で未検証(Codex App に手動 /compact が無い)。compact でも再注入するのは安全側の既定。再注入を全 matcher で行うのは、session 境界ごとの再注入が Codex で唯一の常時オンの基盤だから。
  • webhook の処理半分を毎モード出す理由は hooks-settings.md 側と同じ(#1798)。

Background

issue #2110(Master「無駄なもの全部蒸留して」のうち Lin 担当分)。rules/evolution と rules/task は別 issue(#2109、evolution-task-rule-bodies-carry-behavior-only)。

Constraints

  • 振る舞いは変えない。削るのは理由・経緯・重複・自明な補足だけ(issue #2110 constraints)。
  • ## Optional Webhook Notification Flow 節は byte-frozen(tests/test_adapter_update_contract.py が逐語で固定)。
  • CLAUDE.md と AGENTS.md の共有文面は両方同じ内容で変える。Codex の spawn 引数の行は tests/test_codex_subagent_context_contract.py が固定しているので触らない。
  • 既存 entry が判断の根拠として逐語で引く行は剥がない(上の Current resolution)。

Conclusion

採用: 剥いだ理由を本 entry と既存の記録へ移し、本文は振る舞いだけにする。根拠として引かれている行は残す。 却下: 理由の置き場を PR #2111 の本文だけに任せる案(issue #2110 の constraints が置き場を Decision Structure wiki と名指し、rules/model/liplus-coding-rule.md Body States Behavior が記録を剥いだ作業単位に求めている。PR #2111 brake 1 round 1 で指摘)。

Edges

Related

要求仕様書 (1-6)

参考文書 (A-L)

判断構造

Clone this wiki locally