Skip to content

cold start rule carries behavior only

Claude Lin & Lay edited this page Sep 29, 2026 · 4 revisions

rules/evolution/cold-start-synthesis.md の本文はエージェントの振る舞いだけを載せ、フックの実装仕様は docs が保持する

Question

常時ロードされる rules/evolution/cold-start-synthesis.md の本文から、rules/model/liplus-coding-rule.md Body States Behavior の判別線(読んだ者の行いが変わるか)でフックの実装仕様を外したとき、何が本文に残り、外した仕様はどこが保持するか。

Current resolution

本文は、エージェントが「どの場面で何をするか・何を禁じるか」を決める文だけを持つ。フックの出力仕様は docs/2.-Evolution.md Cold-start Synthesis 節の「フックの出力契約」(と、既存の docs/6.-Adapter.md on-session-start.sh 節)が持つ。

PR #2119(issue #2118)で本文 10,822 B → 5,671 B(−5,151 B、−47.6%)。フックが anchor として出す preamble(Scope = Li+ state, ... の行まで)で変えたのは 1 か所だけで、Operational criterion の no-new-material marker に出力の実際の文言(No new orientation material since last session)を添えた。marker の定義は移した Hook Emission Contract 節にあったため、常駐面で語と出力の 1 行を結び付けるために残した(brake 1 round 3 の R3-3)。見出し・semantic tag・frontmatter も不変。本文にポインタは置かない(judgment-record-pointer-requirement-dropped)。

判別線を節ごとに当てた結果は次のとおり。

  • Hook Emission Contract 節(3,290 B)は全体が「フックの出力仕様」であり、冒頭に Read on demand; not applied at the step 3 moment. と自分で書いていた。読んだ者の行いを変える文がないので、節ごと docs へ移した。
  • 4 つの Surface 節は、フック実装側の記述だけを外し、surface が表示されたときの振る舞いを残した。

外した記述と移し先

外した記述 移し先
Hook Emission Contract の anchor 切り出し、startup の 3 状態、非 startup matcher(fork を含む)、last_emit_at 読み戻し行、no-new-material marker の抑止 docs/2.-Evolution.md Cold-start Synthesis 節(既存の 3 状態表と resume / clear / compact の段落)
Hook Emission Contract の fail-safe の集合(PowerShell port では sha256 不在と node 不在が発火しない差を含む)、パーティション docs/2.-Evolution.md「フックの出力契約」、docs/6.-Adapter.md(fail-safe 動作、パーティション分割 #1811)、cold-start-state-partitioned-by-agent-key
各 Surface 節の Material gathering and concrete surfacing logic belong to the adapter cold-start path docs/2.-Evolution.md「フックの出力契約」冒頭(素材の収集と表示はアダプタの選択で、規則は固定しない)
各 Surface 節の Silent skip when ...、section key / diff-only の扱い docs/2.-Evolution.md「フックの出力契約」の surface ごとの表
Tally 節の「tally は memory と独立に解決する(memory dir が解決しない session でも tally に届く)」 同表の promotion tally expiry の行、docs/6.-Adapter.md
Clone 節の LI_PLUS_UPDATE_STATUS に載せないこと 同表の clone branch fetch の行、evolution-task-rule-bodies-carry-behavior-only(載せない理由)
Dependency 節の GraphQL で読むこと、走査は open issue 1 ページ分で超過時は emission に書くこと、section key(open_blocked_by_open_issues)と diff-only 集合 同表の dependency ordering の行、docs/6.-Adapter.md

本文に残した文(振る舞いを決めるため)

  • Observation: observation due / observation overdue, human judgment needed の条件、両方成立なら overdue のみ、Surfacing is observation, not auto-action、verdict 遷移は format spec の lifecycle を通ること。
  • Tally: tally expiry reached / overdue の条件、overdue のみ、emission が解決したパスと occurrence 数を載せること(rules/evolution/promotion-judgment.md Tally がこのパス提示を引いている)、verdict 欄を持たないので残っている cluster が未判定の印であり毎 session 再 surface されること、閾値判定は Threshold Rules に従い actor と firing moment が surfacing であること。
  • Clone: clone cannot fetch branches の条件、refspec 述語の読み方(src 側だけを読む、--single-branch は該当しない、dst 側だけの refs/heads/ と ^<pattern> は満たさない。Li+update.md 手順 2a で agent 自身が clone の refspec を判定するときにも使う読み方なので、brake 1 round 1 の指摘 X-1 を受けて本文に戻した)、state 駆動、条件が消えた瞬間に emission が止まり verdict_state / expires / 除去手順を持たないこと(不在は設計であり足さない)、actor と firing moment、人に条件を名指すだけで修理は go-sign を待つこと、hook-surfaced items = silent がこの面を黙らせないこと。
  • Dependency: open な blocker を名指すこと(別リポジトリなら <owner>/<repo>#<n>)、closed の blocker は数えないこと、書かれた関係だけを読み親子構造から辺を導出せず欠けた辺を補修しないこと、どの issue に着手するかはセッションを持つ agent の判断であること。

Clone 節の見出しと state-driven / verdict_state / expires は、tests/test_clone_refspec_branch_check.py が固定しているため残した(lifecycle 不在の宣言であり、振る舞いでもある)。

付け替えた参照と、付け替えなかった参照

  • 付け替えた(移した内容を指していたもの): フック 3 本のコメント(Hook Emission Contract、anchor cut)、adapter/claude/hooks-settings.md、adapter/codex/hooks-config.md、Li+update.md(LI_PLUS_UPDATE_STATUS に載せない理由)、docs/2.-Evolution.md / docs/6.-Adapter.md / docs/C.-Update.md / docs/L.-Hop-Count-Instrument.md、tests の docstring。cold-start-state-partitioned-by-agent-key の同節への参照も本 entry と同時に付け替えた。
  • 付け替えなかった: rules/evolution/memory-entry-format.md / promotion-judgment.md / rules/operations/main-agent-procedures.md / docs/3.-Task.md から Surface 節を名指す参照。それらの節は本文に残り、参照が指す振る舞い(actor、firing moment、パス提示、書かれた関係だけを読むこと)も本文に残っている。

Edges

Background

issue #2118。常時ロードされる rules/ と adapter/claude/CLAUDE.md の合計は 146,129 B(build-2026-09-29.3)。ほぼ同文の重複を整理しても全体の約 5%(スキル本体との間では約 2.5%)で効果が小さいため、先にこちらを取った。フックは rules/evolution/cold-start-synthesis.md の冒頭(H1 から最初の H2 まで)だけを取り出して起動時に出し、H2 以降は本文に置かれてもエージェントが適用瞬間に使わないフック自身の仕様であった(adapter/claude/hooks/on-session-start.sh の anchor 切り出しのコメント)。

Constraints

  • 振る舞いは変えない。移すのはフックの実装仕様だけで、エージェントが surface を受け取ったときに何をするか・何を禁じるかは本文に残す。
  • 移し先は docs/ 内に置く。旧節への名指し参照は移した内容を指していたものをすべて付け替え、grep で残りを確認する。
  • tests/ の期待(assert)は変えない。テストが固定している節見出しと文字列は本文側に保つ。
  • 本文の変更は rules/evolution/cold-start-synthesis.md に限る。preamble(フックが anchor として出す部分)は、移した節にあった定義を常駐面に残すための追記(no-new-material marker に出力の文言を添えた 1 か所)を除いて変えない。

Conclusion

採用: Hook Emission Contract 節を全体移設し、4 つの Surface 節はフック実装側の記述だけを外して振る舞いを残す。移し先は docs/2.-Evolution.md Cold-start Synthesis 節の「フックの出力契約」に一本化し、docs/6.-Adapter.md が既に持つ詳細は重ねて書かない。

却下: 4 つの Surface 節も丸ごと docs へ移す案。actor / firing moment / 人に条件を名指すだけで修理しないこと / lifecycle を足さないことは、surface が表示された場面でエージェントが従う振る舞いであり、tests/test_clone_refspec_branch_check.py も Clone 節の文字列を固定している。

Related

要求仕様書 (1-6)

参考文書 (A-L)

判断構造

Clone this wiki locally