Summary
PR #686 shipped composer arrow-key history, but pressing ↑ or ↓ while the agent is busy (thinking/inference running) does nothing — no navigation to prior user messages.
Expected
Pressing ↑ when the composer is empty and the agent is busy should load the newest user message, same as when idle.
Actual
↑/↓ are ignored while busy is true. The guard in ui.zig reads:
if (!busy and state.queue_editing_index == null) {
// ... history intercept ...
}
This deliberately blocks history during inference. The original intent (per the plan #667 and adversarial-review feedback) was that Busy should NOT block history — the !busy guard was a reviewer recommendation that the implementer accepted, but it produces the wrong operator experience.
Repro
- Start a long-running agent turn (send a message)
- While the agent is busy (spinner visible), press ↑
- Nothing happens — composer stays empty
Notes
queue_editing_index guard is correct and should stay
- Only the
!busy guard needs removal
- No other behavior changes needed — the fingerprint/draft/hydrate logic is unchanged
Related
Summary
PR #686 shipped composer arrow-key history, but pressing ↑ or ↓ while the agent is busy (thinking/inference running) does nothing — no navigation to prior user messages.
Expected
Pressing ↑ when the composer is empty and the agent is busy should load the newest user message, same as when idle.
Actual
↑/↓ are ignored while
busyis true. The guard inui.zigreads:This deliberately blocks history during inference. The original intent (per the plan #667 and adversarial-review feedback) was that Busy should NOT block history — the
!busyguard was a reviewer recommendation that the implementer accepted, but it produces the wrong operator experience.Repro
Notes
queue_editing_indexguard is correct and should stay!busyguard needs removalRelated
ebe93544bc831b