Files
codewhale/crates
Hunter Bown c52f2c46f1 feat(tui): concise todo / checklist update rendering (#403)
When the model fires \`todo_update\` / \`checklist_update\` repeatedly
during a long run, the live transcript previously dumped the full
checklist card (header + every item + progress) on every call. In
sessions with 20+ items and a dozen status flips the same item list
appears over and over, drowning the actual work.

Now: when a checklist update output starts with the
"Updated todo #N to STATUS" prefix the tool already emits, the live
renderer shows a compact one-line state-change card —
\`Todo #N: <title> → STATUS\` — plus a \`M/N · pct%\` summary in the
header and a \`N items (Alt+V for full list)\` affordance underneath.
The full item list is still reachable via the existing detail pager.

Falls back to the full-card render path for:
- \`todo_write\` / \`checklist_write\` (no "Updated" prefix — first
  emission of the list)
- transcript-mode replays (the user wants the full snapshot when
  scrolling history)
- malformed prefixes (parse failure → fall through, never crash)

### What's wired

- New \`parse_update_prefix(output)\` parser handles both
  \`Updated todo #N to STATUS\` and \`Updated checklist #N to STATUS\`
  forms.
- New \`render_checklist_change_card\` builds the compact card. Looks
  up the title from the snapshot's items array (id is 1-indexed),
  falls back to \`(missing title)\` if the id is out of range.
- \`try_render_as_checklist\` calls the change-card path only in
  \`RenderMode::Live\` and only when the parser matches. Pre-existing
  cases (writes, transcript replay) keep the full-card behavior.

### Tests

- 4 parser tests: todo form, checklist form, write outputs falling
  through, malformed prefixes falling through.
- 2 renderer tests: compact card shows only the changed item (with
  assertions that other titles do NOT appear), missing-title path.

### Verification

cargo fmt --all -- --check                                          ✓
cargo clippy --workspace --all-targets --all-features --locked --   -D warnings   ✓
cargo test --workspace --all-features --locked                      ✓ 1834 + supporting

Closes #403

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 03:36:21 -05:00
..