Skip to content

cold start state partitioned by agent key

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

cold-start diff-only 状態は LI_PLUS_AGENT_KEY でパーティション分割する

Question

同一ワークスペースを複数セッション(例: Pullcept の部屋に同席する Lin / Lay)が共有するとき、cold-start diff-only(docs/2.-Evolution.md Cold-start Synthesis 節「フックの出力契約」。#2118 までは rules/evolution/cold-start-synthesis.md Hook Emission Contract にあった)が持つ「前回どのセクションを見せたか」の状態を単一の状態ファイルで管理すると何が壊れるか、どう直すか(issue #1811)。

Current resolution

状態ファイル({workspace_root}/.claude/state/last-cold-start-emit.json、Codex 側は .codex/state/)を LI_PLUS_AGENT_KEY(env var、デフォルト "default")でパーティション分割し、{"agents": {"<key>": {"sections": {...}, "last_emit_at": ...}}} の形で各鍵が独立した diff-only ベースラインを持つ。未設定時は単一パーティション("default" 鍵ひとつ)となり、旧来の単一セッション運用と挙動・ファイル形状ともに一致する。三つの hook ポート(Claude 側 bash、Codex 側 bash、Codex 側 PowerShell)に同型で適用。

Background

単一の共有ポインタ方式では、二つのセッションが接近して起動したとき、先に diff を読んだ方がその回のポインタ(last_emit_at とセクション別フィンガープリント)を進めてしまう。後から読んだ方は、自分がまだ実際には見ていないセクションの一部を「先行セッションが既に消費した」という理由だけで受け取れなくなる。

これは飢餓(starvation、全く出ない)ではなく分配(distribution)として観測された——二セッションはそれぞれ重ならない部分集合を受け取り、しかもどちらの側にも「相手が自分の持っていない何かを受け取った」ことを知る手段が無い。issue #1811 の実例(13:10Z の Lay 起動と 13:23Z の Lin 起動で、互いに異なる非重複のセクション集合が emit された)で確認済み。

Constraints

  • 却下: セッション ID をパーティション鍵にする案。Claude Code の startup/clear マッチャ(diff-only 比較が走る唯一のマッチャ)は毎回新しい session_id を発行する(resume/compact のみ既存 ID を保持するが、この二つでは diff-only 自体が走らない)。鍵にすると毎回「この鍵は初見」になり、diff-only が事実上常に full-emit へ潰れる。
  • 却下: 2 世代分の遅延バッファ(fresh window heuristic)案。ソロユーザーの急な再起動(クラッシュ後の分単位の再起動等)と、本当に同時並行な二つの識別子は、hook から見えるタイミング的特徴だけでは構造的に区別できない。日次シミュレーションで確認: 採用するとソロ運用の定常状態で毎回既出材料が二重表示される恒久的コストを負う。
  • memory の cwd キーとは別軸。この鍵は cold-start 状態ファイルにのみ作用し、memory 側の identity には触れない。

Conclusion

採用 = 明示的な env var パーティション(LI_PLUS_AGENT_KEY)。人間側が各人の起動プロファイルへ一度設定する運用コストと引き換えに、分配バグの起きる余地を構造的に無くす。

旧スキーマ(ルート直下 {"sections": {...}, "last_emit_at": ...})からの移行は、データを引き継がない一回限りの fail-safe full emit として扱う。移行コードでデータを引き継ごうとはしない——「壊れた diff より冗長な full emit の方が軽い」という既存の fail-safe 哲学(docs/2.-Evolution.md Cold-start Synthesis 節、#2118 までは rules/evolution/cold-start-synthesis.md)をそのまま延長した形。

Edges

  • relates to source-body-behavior-only-reasoning-relocates — 本 entry 自体、brake 1 Axis B が rules/evolution/cold-start-synthesis.md と adapter/claude/hooks/on-session-start.sh の本文中に見つけた「分配の仕組みを説明する理由」を、同判断が定める「移設 + Judgment record: ポインタ」の手順に従ってここへ移した適用例

Related

  • issue #1811, PR #1985

要求仕様書 (1-6)

参考文書 (A-L)

判断構造

Clone this wiki locally