diff --git a/TODO.md b/TODO.md index 7f2555c9..c7c1b4b2 100644 --- a/TODO.md +++ b/TODO.md @@ -17,7 +17,6 @@ - Run 中の入力キューイング → [tickets/tui-input-queue.md](tickets/tui-input-queue.md) - ユーザーマニフェストのモデル設定 wizard → [tickets/tui-user-model-setup.md](tickets/tui-user-model-setup.md) - spawn 失敗時に Pod の stderr が TUI に表示されない → [tickets/tui-spawn-error-surface.md](tickets/tui-spawn-error-surface.md) - - 巻き戻されたターンの入力テキストを編集領域に復元 → [tickets/tui-empty-turn-restore.md](tickets/tui-empty-turn-restore.md) - メモリ機構 - extract / consolidation 監査ログ → [tickets/memory-audit-log.md](tickets/memory-audit-log.md) - セッション内 Task ツールの注意機構(無アクティビティで `` ナッジ) → [tickets/session-todo-reminder.md](tickets/session-todo-reminder.md) diff --git a/tickets/tui-empty-turn-restore.md b/tickets/tui-empty-turn-restore.md deleted file mode 100644 index 241c4d03..00000000 --- a/tickets/tui-empty-turn-restore.md +++ /dev/null @@ -1,35 +0,0 @@ -# TUI: 巻き戻された入力の編集領域への復元 - -## 背景 - -`tickets/pod-empty-turn-rollback.md` で Pod 側に「Submit 後 AI 応答ゼロで Pause/Cancel した場合に Submit 前の状態へ自動巻き戻す」仕組みを入れる。Pod は巻き戻しの有無を `Event::RunEnd`(または専用イベント)で TUI に通知する。 - -TUI 側は現状 `submit_input` 時点で `input.clear()` を呼んでおり、Submit 後はテキストが失われる。Pod が巻き戻したのに TUI 側だけ「空入力欄 + ターンヘッダーが画面に残った状態」では UX が破綻する。Pod の巻き戻しに合わせて、TUI も Submit 前と同等の見た目に戻す。 - -## 要件 - -- Pod から巻き戻し通知を受け取った場合: - - 直近 Submit でレンダリングしたブロック(`Block::TurnHeader`, `Block::UserMessage`, それに付随する `[File: ...]` 等の attachment ブロック、`Block::TurnStats` 等の Run 由来ブロック全般)を画面から取り除く - - 入力欄に当該 Submit のテキスト(typed segments)を復元し、カーソル位置はテキスト末尾 - - `running` / `paused` / `assistant_streaming` / `current_tool` / `run_*_tokens` 等のターン状態は Idle 相当にリセット -- 復元は 1 ターン分のみ(複数巻き戻しは Pod 側でも対象外) -- 入力欄に未送信の文字(Run 中にユーザーが書き始めたもの、tui-input-queue が入ったらキュー内容)が既にある場合の振る舞いを決める: - - 既入力を上書きしない方針が素直(巻き戻し復元分は別バッファに置いて「↑キーで呼び出し」等にする手もある) - - tui-input-queue とのバッティングはチケット着手時に再確認 -- 巻き戻された旨をユーザーに 1 行のヒント(status line / トースト等)で出す。サイレントに戻すと「画面が消えて何が起きたか分からない」事故になりやすい - -## 完了条件 - -- TUI で Submit → AI 応答が始まる前に Pause/Cancel すると、画面が Submit 前と一致し、入力欄に元のテキストが戻っている -- AI が 1 トークンでも応答した後の Pause/Cancel では従来通り(巻き戻さず Paused / Idle) -- 巻き戻しが起きたことがユーザーから視認できる - -## 範囲外 - -- 複数ターン巻き戻し(→ `tickets/pod-session-fork.md` で Fork として実装する計画) -- 巻き戻し履歴のスタック化(直前 1 件のみ復元) -- pod_cli / 他クライアントの同等 UX(本チケットは TUI 限定) - -## 依存 - -- `tickets/pod-empty-turn-rollback.md` の Pod 側実装 + 巻き戻し通知イベントの確定