yoi/tickets/pod-state-backend.md
Hare 3d091acacd ticket: 永続化整理を 8 個に分割
persistence-semantics と pod-persistent-state を実装可能な粒度に分割。
Storage 層 (Phase 1) を entry-hash-abolish / segment-rename /
session-grouping-introduce / live-fork-marker に、Pod 単位永続化
(Phase 2) を pod-state-backend / pod-state-write-points /
pod-name-resume / spawned-registry-persist に切り出した。
2026-05-20 04:07:44 +09:00

2.6 KiB
Raw Blame History

Pod state: session-store backend と FsStore 実装

背景

Pod 単位のランタイム状態は現状 <runtime_dir>/{pod_name}/ 配下 (status.json / history.json / spawned_pods.json) に write-through されているのみで、Pod プロセスの寿命を超える復元ソースとして扱えない。

session-grouping-introduce で SessionSegment 群の groupingが導入されたあとは、Pod は 「どの Session の、どの leaf Segment が現在 active か」を指す軽量メタデータを持てば良い。会話本文は session log を唯一の正本とし、Pod state は references のみを保持する。

このチケットは Pod metadata の backend trait と FsStore 実装の追加だけに範囲を絞る。lifecycle hook の配線や CLI 導線は後続チケットで扱う。

要件

  • Pod metadata trait を session-store crate に追加(Store 拡張 or 隣接 trait / module。実装時に決定
  • 保持する内容:
    • active (SessionId, SegmentId) 参照
    • Pod 名key
    • manifest / scope の snapshot 参照(既存 session log の pod.scope snapshot と責務を重複させない範囲で。最低限 latest segment への pointer のみで足りる可能性が高い)
  • FsStore のデフォルト layout は <data_dir>/pods/<pod_name>/ 配下に置く。<runtime_dir> は引き続き socket / pid / status など一時状態専用。
  • write は session-store の他 write と同じ sync API で揃える。
  • read は冪等で、Pod state が無ければ None を返すだけinitial Pod 起動時に作成される)。
  • --pod resume の入口に必要な read_by_name(pod_name) API を提供する。

完了条件

  • Pod metadata trait と FsStore 実装が session-store にあり、minimal CRUD が unit test で確認できる。
  • <data_dir>/pods/<pod_name>/ の layout が決まっている。
  • ordered session history のような時系列 audit は本チケットには含めないwrite point 配線時に必要なら追加)。
  • cargo check --workspace および cargo test -p session-store が通る。

範囲外

  • Pod lifecycle の write point 配線(別チケット pod-state-write-points)。
  • Pod 名単位 resume / attach の CLI 導線(別チケット pod-name-resume)。
  • SpawnedPodRegistry の永続化(別チケット spawned-registry-persist)。
  • DB backend 実装。

関連

  • tickets/session-grouping-introduce.md (前提)
  • tickets/pod-state-write-points.md (後続)
  • tickets/pod-name-resume.md (後続)
  • tickets/spawned-registry-persist.md (並行可)
  • crates/session-store/
  • crates/pod/src/runtime/dir.rs