From 06a6e4ec576a08cec0879ff04a56315c2f0906af Mon Sep 17 00:00:00 2001 From: Hare Date: Sat, 13 Jun 2026 20:22:36 +0900 Subject: [PATCH] ticket: approve rewind live refresh --- .../review-approve-rewind-live-refresh.md | 24 ++++++++++++++ .yoi/tickets/00001KV04NJ8D/item.md | 2 +- .yoi/tickets/00001KV04NJ8D/thread.md | 32 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .yoi/tickets/00001KV04NJ8D/artifacts/review-approve-rewind-live-refresh.md diff --git a/.yoi/tickets/00001KV04NJ8D/artifacts/review-approve-rewind-live-refresh.md b/.yoi/tickets/00001KV04NJ8D/artifacts/review-approve-rewind-live-refresh.md new file mode 100644 index 00000000..a58f4a2a --- /dev/null +++ b/.yoi/tickets/00001KV04NJ8D/artifacts/review-approve-rewind-live-refresh.md @@ -0,0 +1,24 @@ +## Review: approve + +Reviewed implementation commits `949ceb5a` and `3a7edbde` against Ticket `00001KV04NJ8D` intent and acceptance criteria. + +Evidence: +- `Event::RewindApplied` no longer gates transcript restoration on `App::greeting`; it clears/replays the Pod-provided post-rewind entries through a shared restore path and emits an explicit warning if greeting metadata is unavailable, avoiding silent stale-view success. +- Rewind picker submit now enters an `applying` state, suppresses repeated `Enter`/navigation, shows an applying header, blocks `Esc` from hiding an in-flight destructive request, and closes on successful `RewindApplied`. +- Rewind failure (`Event::Error` while applying) clears the pending state, leaves the existing transcript intact, and surfaces an actionbar-visible failure plus normal error block. +- A short rewind refresh fence drops display-mutating stale live events after successful restore until authoritative `Status`/`Snapshot`; no Pod protocol or persistence semantics changed. +- Temporary investigation logging was not present in the final diff. +- Focused tests cover successful restore/old-tail removal, missing-greeting restore, duplicate-submit suppression with failure preservation, and stale live update suppression; existing rewind picker tests still pass. + +Validation performed: +- `git diff --check 20daae0c..HEAD`: PASS. +- `cargo test -p tui rewind_refresh_tests`: PASS (4 tests). +- `cargo test -p tui single_pod::tests::rewind_picker`: PASS (2 tests). +- `cargo fmt --check`: PASS. +- `cargo check -p protocol -p pod -p tui`: PASS. +- `cargo test -p tui`: FAILED only in the already-reported unrelated tests: `multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace` and `spawn::tests::{profile_choices_include_builtin_and_project_default_marker, profile_choices_use_project_registry_default}`; rewind-focused tests passed in that run. + +Residual note: +- The stale-update fence intentionally relies on the Pod's follow-up `Status`/`Snapshot` to clear; this matches the current `RewindApplied`/`Status` flow and is acceptable for this Ticket. + +Decision: approve. diff --git a/.yoi/tickets/00001KV04NJ8D/item.md b/.yoi/tickets/00001KV04NJ8D/item.md index ec73b7e3..b5dee5b6 100644 --- a/.yoi/tickets/00001KV04NJ8D/item.md +++ b/.yoi/tickets/00001KV04NJ8D/item.md @@ -2,7 +2,7 @@ title: 'TUI rewind picker の Enter 後に live 表示が巻き戻らない問題を調査・修正する' state: 'inprogress' created_at: '2026-06-13T09:23:07Z' -updated_at: '2026-06-13T11:14:26Z' +updated_at: '2026-06-13T11:21:32Z' assignee: null readiness: 'implementation_ready' risk_flags: ['tui', 'pod-protocol', 'persistence', 'history-rewind'] diff --git a/.yoi/tickets/00001KV04NJ8D/thread.md b/.yoi/tickets/00001KV04NJ8D/thread.md index 5336c084..8e17a31e 100644 --- a/.yoi/tickets/00001KV04NJ8D/thread.md +++ b/.yoi/tickets/00001KV04NJ8D/thread.md @@ -211,4 +211,36 @@ Residual risks: - No protocol or Pod persistence changes were made. +--- + + + +## Review: approve + +## Review: approve + +Reviewed implementation commits `949ceb5a` and `3a7edbde` against Ticket `00001KV04NJ8D` intent and acceptance criteria. + +Evidence: +- `Event::RewindApplied` no longer gates transcript restoration on `App::greeting`; it clears/replays the Pod-provided post-rewind entries through a shared restore path and emits an explicit warning if greeting metadata is unavailable, avoiding silent stale-view success. +- Rewind picker submit now enters an `applying` state, suppresses repeated `Enter`/navigation, shows an applying header, blocks `Esc` from hiding an in-flight destructive request, and closes on successful `RewindApplied`. +- Rewind failure (`Event::Error` while applying) clears the pending state, leaves the existing transcript intact, and surfaces an actionbar-visible failure plus normal error block. +- A short rewind refresh fence drops display-mutating stale live events after successful restore until authoritative `Status`/`Snapshot`; no Pod protocol or persistence semantics changed. +- Temporary investigation logging was not present in the final diff. +- Focused tests cover successful restore/old-tail removal, missing-greeting restore, duplicate-submit suppression with failure preservation, and stale live update suppression; existing rewind picker tests still pass. + +Validation performed: +- `git diff --check 20daae0c..HEAD`: PASS. +- `cargo test -p tui rewind_refresh_tests`: PASS (4 tests). +- `cargo test -p tui single_pod::tests::rewind_picker`: PASS (2 tests). +- `cargo fmt --check`: PASS. +- `cargo check -p protocol -p pod -p tui`: PASS. +- `cargo test -p tui`: FAILED only in the already-reported unrelated tests: `multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace` and `spawn::tests::{profile_choices_include_builtin_and_project_default_marker, profile_choices_use_project_registry_default}`; rewind-focused tests passed in that run. + +Residual note: +- The stale-update fence intentionally relies on the Pod's follow-up `Status`/`Snapshot` to clear; this matches the current `RewindApplied`/`Status` flow and is acceptable for this Ticket. + +Decision: approve. + + ---