Context
Split from #55. The option-block parsing fixes can land independently, but the proposed time-based spinner suppression can re-arm from historical append-only buffer content and hide real processing indefinitely.
Reproduction to preserve
- Arm the parser.
- Feed a navigable prompt such as
❯ 1. Yes / 2. No and allow AWAITING to emit.
- Treat the prompt as answered and advance beyond the suppression window.
- Feed a real spinner/status update such as
✻ Running the selected action.
- Expected: processing /
spinner_start; the old prompt must not keep the session AWAITING or idle.
Also preserve:
- spinner and navigable prompt in the same initial chunk still reaches AWAITING;
- spinner redraw flood while a genuinely visible prompt is active does not cancel AWAITING;
- stale numbered prose does not count as an active prompt.
Required direction
Use an explicit prompt lifecycle/freshness signal that is cleared on selection, processing, reset, or another authoritative transition. Do not use historical buffer presence as proof that a prompt remains on screen.
This issue tracks only the spinner/prompt lifecycle. Safe option parsing is being separated from #55.
Context
Split from #55. The option-block parsing fixes can land independently, but the proposed time-based spinner suppression can re-arm from historical append-only buffer content and hide real processing indefinitely.
Reproduction to preserve
❯ 1. Yes / 2. Noand allow AWAITING to emit.✻ Running the selected action.spinner_start; the old prompt must not keep the session AWAITING or idle.Also preserve:
Required direction
Use an explicit prompt lifecycle/freshness signal that is cleared on selection, processing, reset, or another authoritative transition. Do not use historical buffer presence as proof that a prompt remains on screen.
This issue tracks only the spinner/prompt lifecycle. Safe option parsing is being separated from #55.