yoi/tickets/tui-pod-shutdown.md
2026-04-15 05:21:43 +09:00

2.9 KiB
Raw Blame History

TUI: Pod を明示的に終了させる操作

背景

現状、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 のみ扱う。