Metadata
| Status | done |
|---|---|
| Assigned | agent-1330 |
| Agent identity | f51439356729d112a6c404803d88015d5b44832c6c584c62b96732b63c2b0c7e |
| Model | claude:sonnet |
| Created | 2026-05-01T14:38:47.075757799+00:00 |
| Started | 2026-05-01T14:40:06.075050658+00:00 |
| Completed | 2026-05-01T14:59:17.972952261+00:00 |
| Tags | priority-high,bug,tui,ux,chat, eval-scheduled |
| Eval score | 0.89 |
| └ blocking impact | 0.85 |
| └ completeness | 0.90 |
| └ constraint fidelity | 0.70 |
| └ coordination overhead | 0.90 |
| └ correctness | 0.92 |
| └ downstream usability | 0.85 |
| └ efficiency | 0.85 |
| └ intent fidelity | 0.89 |
| └ style adherence | 0.88 |
Description
Description
fix-chat-tab shipped the 'Chat agent died' panel that surfaces exit info + retry/reconfigure/dismiss options. But the keypress handlers for those buttons don't actually fire — user gets stuck on the screen with no way to act.
User report 2026-05-01: 'when codex failed, which appeared to be due to some kind of installation, reinstallation issue, it kicked me into the screen. It said do you want to retry? Do you want to reconfigure? And none of the buttons on that screen worked. I couldn't press anything to make anything change. It just got stuck there.'
Likely cause
The death-panel rendering ships, but the input dispatch in the TUI either:
- Doesn't recognize the panel as the focused widget so keys go elsewhere
- Has the panel registered but the handlers for R/E/X don't actually do what they say
- Ignores all input while the panel is shown (frozen-state bug)
Validation
- Failing test or repro: trigger the death state (kill a chat agent's PTY child via SIGKILL); panel appears; press R/E/X individually; each does what its label says
- R retries with same config (re-spawns the chat agent)
- E opens the launcher dialog pre-populated with the dead chat's config
- X dismisses the panel and shows the chat history (or whatever the existing chat-state should fall back to)
- Live smoke (the user's reported scenario): codex crashes, panel appears, all three buttons work
- cargo build + cargo test pass
- Permanent smoke scenario added: programmatic agent-death event, programmatic R/E/X press, assert correct state transition
- cargo install --path . was run before claiming done
Depends on
Required by
- (none)
Log
- 2026-05-01T14:38:47.061656702+00:00 Task paused
- 2026-05-01T14:39:32.621534072+00:00 Task published
- 2026-05-01T14:40:03.614542820+00:00 Lightweight assignment: agent=Careful Programmer (f5143935), exec_mode=full, context_scope=task, reason=Careful Programmer is the clear match: role=Programmer (implementation+debugging), tradeoff=Careful (thorough debugging + verification essential for subtle event-dispatch bugs), high track record (0.79 score, 475 tasks).
- 2026-05-01T14:40:06.075055588+00:00 Spawned by coordinator --executor claude --model opus
- 2026-05-01T14:40:15.953599839+00:00 Starting investigation — looking at chat-died panel input handlers in TUI
- 2026-05-01T14:41:27.169570106+00:00 Found likely root cause — vendor_pty_active path at event.rs:573 swallows keys when pane has died but chat_pty_mode/forwards_stdin still true
- 2026-05-01T14:49:37.823148687+00:00 Fix applied: gate vendor_pty_active on !chat_agent_death + accept SHIFT in death-panel handler. 5 new regression tests pass.
- 2026-05-01T14:58:05.860465771+00:00 Validated: cargo test --bin wg passes 3308/3308. New 5 regression tests pass. New smoke scenario chat_died_panel_keys_reach_handler.sh passes. cargo install --path . completed.
- 2026-05-01T14:58:43.851401237+00:00 Committed: 71f79687a — pushed to remote (origin/wg/agent-1330/fix-chat-died)
- 2026-05-01T14:59:17.972968913+00:00 Task pending eval (agent reported done; awaiting `.evaluate-*` to score)
- 2026-05-01T15:02:49.005618511+00:00 PendingEval → Done (evaluator passed; downstream unblocks)