yoi/tickets/pod-state-backend.md
Hare 1a9bb30824 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

45 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`