Metadata
| Status | done |
|---|---|
| Assigned | agent-1307 |
| Agent identity | 3184716484e6f0ea08bb13539daf07686ee79d440505f1fdf2de0357707034c3 |
| Created | 2026-05-01T00:17:00.315168488+00:00 |
| Started | 2026-05-01T00:18:04.528162049+00:00 |
| Completed | 2026-05-01T00:47:48.581809084+00:00 |
| Tags | bug,tui,ux, eval-scheduled |
| Eval score | 0.91 |
| └ blocking impact | 0.85 |
| └ completeness | 0.95 |
| └ constraint fidelity | 0.85 |
| └ coordination overhead | 0.90 |
| └ correctness | 0.95 |
| └ downstream usability | 0.85 |
| └ efficiency | 0.85 |
| └ intent fidelity | 0.70 |
| └ style adherence | 0.90 |
Description
Description
The TUI shows a letter / envelope symbol on tasks that have unread messages (from wg msg send). User reports this symbol disappears unexpectedly — task that should have an unread message indicator stops showing it.
User report 2026-04-30: 'the message symbol seems to disappear, like the little letter symbol seems to disappear from the TUI and I don't know why that's happened.'
Likely cause hypotheses
- Indicator is cleared too eagerly — maybe any read of task state (not just
wg msg read) marks messages as read and removes the symbol - Indicator-render logic doesn't refresh — message gets sent, indicator should appear, but the row's render cache doesn't invalidate until something else triggers a redraw
- Per-task vs per-batch state confusion — the indicator may be tracking a stale field that gets overwritten by other state-update paths
Investigation + fix
- Find where the indicator is rendered (likely in src/tui/ near the task-list row rendering)
- Find where unread message state is computed — is it 'has unread' or 'has any messages'?
- Identify the disappearance trigger — what state change clears it inappropriately?
- Fix: indicator should appear when
wg msg sendadds a message and stay untilwg msg readis called against that task
Validation
-
Failing test or repro:
wg msg send <task-id> 'test'→ indicator appears in TUI for that task. Pre-fix: disappears unexpectedly during some state update. Post-fix: stays untilwg msg read <task-id>. - Live smoke: send a message via wg msg send, watch the indicator across normal TUI activity (state transitions, scrolling, switching tabs). Confirm indicator persists.
- No regression: indicator correctly clears when read
- cargo build + cargo test pass
- cargo install --path . was run before claiming done
Depends on
Required by
- (none)
Log
- 2026-05-01T00:16:38.853107194+00:00 Task paused
- 2026-05-01T00:17:18.370225484+00:00 Task published
- 2026-05-01T00:18:04.528167700+00:00 Spawned by coordinator --executor claude --model opus
- 2026-05-01T00:18:31.521403562+00:00 Starting investigation: find where TUI renders the message indicator and where unread state is computed
- 2026-05-01T00:28:01.302928573+00:00 Root cause: maybe_refresh only triggers viz reload on graph.jsonl mtime change. wg msg send writes only to messages/<task>.jsonl, so per-row and Msg-tab indicators stay stale. Fix: track separate messages_change_pending flag in fs_watcher; trigger viz/stats reload when set.
- 2026-05-01T00:46:31.236143983+00:00 Validated: 4 unit tests pass (message_indicator_refresh_tests). Live smoke: ✉ indicator now appears in wg viz after wg msg send. Full bin test suite: 3288 passed, 0 failed. cargo install --path . was run.
- 2026-05-01T00:47:23.645481395+00:00 Committed: 9c26e854d — pushed to remote
- 2026-05-01T00:47:48.581816398+00:00 Task pending eval (agent reported done; awaiting `.evaluate-*` to score)
- 2026-05-01T00:50:02.524048773+00:00 PendingEval → Done (evaluator passed; downstream unblocks)