yoi/tickets/session-grouping-introduce.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

49 lines
2.8 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.

# session-store: SessionSegment 群の grouping導入
## 背景
`segment-rename` で物理 append-only 単位を `Segment` に揃えた。続けて、ユーザー視点の「同じ会話の家系」を表す **`Session`** を導入する。
`Session` は fork tree 全体を 1 つにまとめる grouping で、compaction / fork は同 Session 内に新 Segment を生やす操作になる。これにより:
- Session 数が fork で爆発せず、`WHERE session_id = ?` だけで fork tree 全体が取れる。
- resume の指定は `(SessionId, SegmentId)` の組で行える。
- pod-persistent-state 側で Pod ↔ Session の対応関係を扱いやすくなる。
## 要件
-`SessionId` 型を `session-store` に追加。Segment は `parent_session_id` を持つ。
- Segment 生成パスでの session_id 決定:
- new session: 新 `SessionId` を発行
- compaction: 元 Segment と同 `SessionId` を継承
- fork (live auto / 過去 fork いずれも): 元 Segment と同 `SessionId` を継承
- `SessionOrigin` を以下のいずれかに整理:
- `compacted_from { segment_id, at_turn_index }`
- `forked_from { segment_id, at_turn_index }`
- どちらも同 Session 内 segment への参照であることを型レベルで保証。
- restore API を `(SessionId, SegmentId)` を取る形に。`SegmentId` のみを取る既存経路は内部で `SessionId` を解決する shim を一段噛ませる。
- FsStore layout に Session 単位の index を追加Session → Segment 列挙が `WHERE session_id = ?` 相当で引けること)。形式は `<data_dir>/sessions/<session_id>/<segment_id>.jsonl` または別ファイル index、実装時に決定。
- Session 内の leaf Segment 列挙 API を提供pod-name resume 等から使う)。
## 完了条件
- `SessionId` 型と Session 単位 metadata の永続表現が決まり、FsStore で読み書きできる。
- compaction / fork が同 Session 内 Segment 増分として記録される。
- `(SessionId, SegmentId)` での restore が動作し、leaf 以外を指定した read-only restore も実装上は可能。
- 既存 session を Session 単位に grouping する migration 戦略が決まっている(プロジェクト方針として後方互換は作らないため、既存 sessions ディレクトリは破棄して良いかどうかをここで明示)。
- `cargo check --workspace` および全テストが通る。
## 範囲外
- live auto-fork の marker 形式(別チケット `live-fork-marker`)。
- Pod 単位 metadataPhase 2 一連のチケット)。
- TUI からの Session/Segment 選択 UI。
- DB backend 実装。
## 関連
- `tickets/segment-rename.md` (前提)
- `tickets/live-fork-marker.md`
- `tickets/pod-state-backend.md`
- `crates/session-store/`