3.2 KiB
3.2 KiB
TUI: Pod を明示的に終了させる操作
レビュー状態
初回レビュー実施済み。tui-pod-shutdown.review.md を参照。 要件達成、アーキテクチャは「通常後処理を経由してからの終了」を保証。指摘1件(shutdown 中の進行表示が無い — 実害なしで不問)。受け入れ可。
背景
現状、TUI から Pod を終了させる手段は Ctrl-C / プロセス終了に頼っている。これだと:
- 実行中のターンが中断された状態で終わり、session-store の永続化が中途半端になる可能性
- 複数 Pod を並列で扱えるようになったとき(
tickets/tui-pod-spawn-ui.md)、「今表示している Pod だけを畳む」操作と「TUI 全体を終わる」操作を区別する必要がある - ユーザーが「Pod の作業を完了としてクローズする」という意図を表現できない
TUI から明示的に Pod の shutdown を指示できる操作を追加する。
要件
操作
- TUI 内のキーバインドで Pod の終了を開始できる。
- 破壊的な副作用(セッションは残るが実行中ターンは落ちる)を避けるため、実行中のターンがあれば確認を挟む。
- 確認なしで終了する強制モードを用意するかは設計時に判断。
Pod 側の shutdown 手順
- 実行中のターンがあれば、既存のキャンセル機構(
WorkerError::Cancelled)で中断する。 - キャンセル完了を待ってから session-store にフラッシュし、Pod 状態を
Stopped相当に遷移させる。 - 中断時点までの turn は整合を保って永続化される(途中の partial turn は巻き戻される)。
TUI 側の挙動
- shutdown 完了後、TUI はその Pod の表示を閉じる。
- 他に Pod が無ければ TUI 自体も正常終了する(並列管理が無い現状ではこちらの挙動で良い)。
- shutdown 中は進行状況が画面上で分かる(「shutting down...」等の表示)。
設計で決めること
- キーバインド:
q/Ctrl-D/:quitのどれを当てるか、強制モードのキーを別立てにするか - 実行中ターンがあるときの確認 UI: モーダル / フッター問い合わせ / キー再押下
- Pod 層 API: 既存の cancel + persist を組合せた shutdown メソッドを Pod に生やすか、Controller 側で段取るか
完了条件
- TUI からキー操作で Pod を shutdown できる。
- 実行中のターンがあった場合は確認を経由し、キャンセル → 永続化 → 画面クローズの順で進む。
- shutdown 後に
test_pod.local.tomlの session を再開すると、中断されたターンの副作用が残っていない整合状態で開ける。
範囲外
- 複数 Pod 並列管理下での「この Pod だけ閉じる」と「全部閉じる」の使い分け。並列管理自体が無いため、本チケットでは単一 Pod 前提とする。仕様は
tickets/tui-pod-spawn-ui.mdで改めて整理する。 - Pod の一時停止(resume 可能な pause)。本チケットは完全な shutdown のみ扱う。