54 lines
3.2 KiB
Markdown
54 lines
3.2 KiB
Markdown
# 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 のみ扱う。
|