From 73fbdcc0255dce16830d55c11c452f24d9e1d00d Mon Sep 17 00:00:00 2001 From: Hare Date: Fri, 22 May 2026 23:30:16 +0900 Subject: [PATCH] chore: complete spawned-registry-persist ticket --- TODO.md | 2 -- tickets/spawned-registry-persist.md | 37 ----------------------------- 2 files changed, 39 deletions(-) delete mode 100644 tickets/spawned-registry-persist.md diff --git a/TODO.md b/TODO.md index cbd1e5c4..53cdd640 100644 --- a/TODO.md +++ b/TODO.md @@ -7,8 +7,6 @@ - Pod: 空応答ターン (Submit 後 AI 応答ゼロで Pause/Cancel) を自動巻き戻し → [tickets/pod-empty-turn-rollback.md](tickets/pod-empty-turn-rollback.md) - Pod: 任意ターンからの Fork(複数ターン巻き戻しを汎用化) → [tickets/pod-session-fork.md](tickets/pod-session-fork.md) - Pod: Inbound PodEvent ハンドリングの重複を統合 → [tickets/pod-inbound-pod-event-dedup.md](tickets/pod-inbound-pod-event-dedup.md) -- Pod 単位永続化 - - SpawnedPodRegistry の永続化と復元 → [tickets/spawned-registry-persist.md](tickets/spawned-registry-persist.md) - llm-worker のエラー耐性 - ストリーム途中失敗時の継続 → [tickets/llm-worker-stream-continuation.md](tickets/llm-worker-stream-continuation.md) - llm-worker: history append を callback 経由の単一経路に閉じる → [tickets/worker-history-append-contract.md](tickets/worker-history-append-contract.md) diff --git a/tickets/spawned-registry-persist.md b/tickets/spawned-registry-persist.md deleted file mode 100644 index 355cd515..00000000 --- a/tickets/spawned-registry-persist.md +++ /dev/null @@ -1,37 +0,0 @@ -# Pod state: SpawnedPodRegistry の永続化と復元 - -## 背景 - -`SpawnedPodRegistry` (`crates/pod/src/spawn/registry.rs`) は spawner の子 Pod 一覧を保持しているが、現状 `/{pod_name}/spawned_pods.json` への write-through のみで、再起動した spawner が子 Pod 一覧を rebuild する経路が無い(コメントに future work と明記)。 - -`pod-state-backend` で Pod metadata の永続 backend が用意されたあと、本チケットで spawned children registry も同じ永続層に乗せる。 - -## 要件 - -- spawned children registry の永続化: - - 各 child について最低限: pod name, socket path, delegated scope, callback address。child の session id を含めるかは実装時判断(Pod 名から `pod-name-resume` で引けるなら冗長になる)。 - - 書き込みタイミング: `SpawnPod` / callback 受領 / `StopPod` の各点。runtime dir への write-through と同期して永続層にも書く。 - - 読み込みタイミング: spawner Pod の起動時に Pod state から initial load。 -- 復元後の spawner で `ListPods` / `SendToPod` / `StopPod` が機能すること。 - - `ReadPodOutput` の read cursor は **永続化対象外**(session-lifetime / in-memory のままで良い)。 - - 到達不能になっている child(socket が消えている等)は registry から除外しつつ、最低限のログを残す。 -- `pod-state-backend` で追加した backend trait を再利用し、専用層を増やさない(同じ Pod state の一部として持つか、隣接 entry として持つかは実装時判断)。 - -## 完了条件 - -- spawner Pod を再起動した後、永続化された child 一覧から `ListPods` が復元される。 -- 復元された child に対して `SendToPod` / `StopPod` が到達可能なものに限って成功する。 -- `cargo check --workspace` および `cargo test -p pod` が通る。 -- runtime dir の `spawned_pods.json` は引き続き存在しても良いが、永続正本ではない(消えても永続層から復元できる)ことを test で確認。 - -## 範囲外 - -- `ReadPodOutput` cursor の永続化。 -- 高度な child Pod 監視 / 自動再起動。 -- TUI 上の Pod ツリー UI。 - -## 関連 - -- `tickets/pod-state-backend.md` (前提) -- `crates/pod/src/spawn/registry.rs` -- `crates/pod/src/runtime/dir.rs`