1.9 KiB
1.9 KiB
04 — Unify operation coordination and status feedback
What to build: Give every interactive operation one coherent model for progress, serialization, confirmations, current status, partial failure, and safe exit while keeping the dashboard browsable.
Blocked by: 03 — Stream progressive startup and refresh.
Status: done
- Detection, Target mutation, and Active Profile transition use one presentation-independent progressive operation contract where their semantics overlap.
- System mutations remain serialized and a conflicting action exposes an actionable disabled reason instead of silently ignoring input.
- During a mutation, users can still select Targets, scroll details, and open existing read-only Help.
- The affected Target row displays progress while the status area describes the current step.
- Successful status is replaceable by later activity.
- Current errors remain visible until acknowledged, superseded by explicit resolution, or replaced by a directly related result.
- Current error details can be expanded without introducing an activity-history page.
- Partial Active Profile transitions retain successful Target updates, preserve the no-cross-Target-rollback rule, and focus the first failed Target.
- Confirmation state, progress, and final result are structured; the TUI does not parse user-facing strings to infer operation state.
qon the dashboard and Ctrl+C on any page request exit; during a mutation the UI visibly reports deferred exit and exits only after safe completion.- No new work can begin after deferred exit is requested.
- The concrete Application remains usable by existing synchronous callers while obsolete interactive fallback paths are removed after migration.
- Application and complete-Model tests cover browsing while busy, blocked mutations, persistent errors, partial failure, confirmation, and deferred exit.