Skip to content

feat(tui): UX hardening for approvals, thinking, tool steps, and errors - #27

Merged
jkyberneees merged 1 commit into
mainfrom
feat/tui-ux-hardening
Aug 9, 2026
Merged

feat(tui): UX hardening for approvals, thinking, tool steps, and errors#27
jkyberneees merged 1 commit into
mainfrom
feat/tui-ux-hardening

Conversation

@jkyberneees

@jkyberneees jkyberneees commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Implements the top 5 findings from a holistic UI/UX review of the TUI. One cohesive commit; every change has regression tests.

  • Approval flow: bare letters no longer decide — the panel is now an ↑↓-select + -confirm option list, so typing mid-prompt can't fire a decision. tab expands the full untruncated command (previously ellipsized to one line), esc is an explicit labelled deny, and transcript scrolling works while the panel is open.
  • Thinking: ^T posts a note and shows a persistent ✳ think header badge; full reasoning is stored and ^E unfolds it on finalized turns (was permanently capped at 240 runes); the collapsed excerpt shows the head of the thought instead of the tail.
  • Tool steps: expanded output preserves whitespace (diffs/JSON/code keep alignment); mouse toggling only fires on the step header row instead of any line below it; ^E shows a persistent ▼ details indicator; running steps get a chevron affordance.
  • Feedback: send failures finalize the turn with an inline **Error:** (no more phantom empty turns); disconnect mid-turn finalizes with an **Interrupted:** marker (idempotent, resume-safe); /cancel reports idle/success/queue outcomes; the r retry hint only renders when it actually works; the disconnected-submit warning is sticky with correct advice.
  • Narrow terminals: banner falls back to a one-line ⬡ bodek wordmark below the art width; model name truncates with ellipsis and the header is hard-clamped to its 2-row budget (viewport/mouse math can't drift); step-arg truncation floors lowered for tiny widths.

Test plan

  • make fmt / make vet clean
  • make lint — 0 issues
  • make test — full -race suite green, all packages
  • make cover — 98.9% internal coverage; all functions touched here at 100%
  • New regression tests: approval key model, thinking expansion/badge, whitespace fidelity, click hit-testing, send-failure/disconnect finalization, cancel notes, retry hint, banner fallback, header clamp, tiny-width rendering

Five improvements from a holistic UI/UX review:

- Approval flow: replace bare-letter instant decisions with an
  arrow-select + Enter option list (typing mid-prompt can no longer
  fire a decision); tab expands the full untruncated command; esc is
  an explicit labelled deny; transcript scrolling works while pending.
- Thinking: ^T posts a note and shows a persistent "✳ think" header
  badge; full reasoning is stored and ^E unfolds it on finalized
  turns; the collapsed excerpt shows the head of the thought.
- Tool steps: expanded output preserves whitespace (diffs/code keep
  alignment); mouse toggling only fires on the step header row; ^E
  shows a persistent "▼ details" footer indicator; running steps get
  a chevron affordance.
- Feedback: send failures finalize the turn with an inline error;
  disconnect mid-turn finalizes with an "interrupted" marker
  (idempotent, resume-safe); /cancel reports idle/success/queue
  outcomes; the "r retry" hint only shows when it works; the
  disconnected-submit warning is sticky with correct advice.
- Narrow terminals: banner falls back to a one-line wordmark below
  the art width; model name truncates and the header is clamped to
  its 2-row budget; step-arg truncation floors lowered for tiny
  widths.

Regression tests for every fix; coverage stays at 98.9%.
@jkyberneees
jkyberneees merged commit 8c1e7c2 into main Aug 9, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant