yoi/tickets/tui-pod-shutdown.md

54 lines
3.2 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.

# TUI: Pod を明示的に終了させる操作
## レビュー状態
初回レビュー実施済み。[tui-pod-shutdown.review.md](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 のみ扱う。