Skip to content

V1 ship polish: layout, visual consistency, focus lifecycle, chrome#156

Merged
jeremy merged 5 commits intomainfrom
v1-ship-polish
Feb 25, 2026
Merged

V1 ship polish: layout, visual consistency, focus lifecycle, chrome#156
jeremy merged 5 commits intomainfrom
v1-ship-polish

Conversation

@jeremy
Copy link
Member

@jeremy jeremy commented Feb 25, 2026

Summary

Final polish pass before V1 ship. Addresses layout jank, visual inconsistencies, focus lifecycle gaps, a cross-account boost bug, and chrome discoverability issues. Builds on #155.

  • Toast overlay — toast no longer pushes layout; overlays the penultimate line so content height stays constant (no reflow on show/hide)
  • Boost AccountID — Todos, Cards, Messages, and Detail views now include AccountID in BoostTarget for correct cross-account routing (matches Hey/Assignments/Pulse)
  • Visual consistency — normalize ... across all loading/truncation, right-panel spinners fill their panel, rune-safe truncation in checkins, kanban empty/deferred column text, mystuff separator
  • Focus lifecycle — Search refocuses text input on back-nav, Detail does silent refresh (no spinner flash) when data exists, BoostPicker included in relayout()
  • Chrome polish — QuickJump category badges capitalized, · separator, account switcher humanized error, Detail exposes scroll bindings in FullHelp, date placeholders drop hardcoded year

Test plan

  • make check passes clean
  • Show a toast (complete a todo) → content does not jump/reflow
  • Boost a todo from within a project → verify cross-account routing
  • All loading spinners show not ...; right-panel spinners fill panel
  • Search → open result → back → cursor is in search input
  • Detail back-nav shows content immediately (no spinner flash)
  • QuickJump categories show "Recent", "Starred" not "recent", "bookmark"

Copilot AI review requested due to automatic review settings February 25, 2026 06:45
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This is a final polish pass before V1 ship addressing layout consistency, visual polish, focus lifecycle improvements, cross-account boost routing, and chrome discoverability. The PR builds on #155 by ensuring project-scoped views (Todos, Messages, Cards, Detail) include AccountID in BoostTarget for correct cross-account boost routing, matching the pattern already established in Hey/Assignments/Pulse.

Changes:

  • Toast overlay now replaces penultimate line instead of pushing layout, preventing content reflow
  • All ellipsis changed from ASCII ... to Unicode for visual consistency across loading states and truncation
  • Search refocuses text input on FocusMsg, Detail does silent refresh when data exists
  • QuickJump categories capitalized, Detail FullHelp exposes scroll bindings, date placeholders use relative dates
  • Right-panel spinners now fill their panel with width/height constraints

Reviewed changes

Copilot reviewed 44 out of 44 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
internal/tui/workspace/workspace.go Toast overlay implementation, createBoostFunc spy injection, BoostPicker relayout, CreateBoost cross-account routing
internal/tui/workspace/workspace_test.go BoostPicker initialization in test helpers, cross-account boost tests, toast layout stability test
internal/tui/workspace/msg.go Added AccountID to BoostTarget struct
internal/tui/workspace/data/hub.go CreateBoost signature updated for cross-account routing with ClientFor lookup
internal/tui/workspace/data/hub_global.go Ellipsis changed to Unicode in PingRooms and timeline excerpt truncation
internal/tui/workspace/views/*.go AccountID added to BoostTarget in todos/messages/cards/detail/hey/pulse/assignments, ellipsis updates, loading spinner polish
internal/tui/workspace/views/search.go FocusMsg refocuses text input on back-nav
internal/tui/workspace/views/detail.go Silent refresh on FocusMsg when data exists, FullHelp scroll bindings, date placeholders, ellipsis updates
internal/tui/workspace/widget/*.go Truncate function updated to use Unicode ellipsis with rune-safe truncation
internal/tui/workspace/chrome/*.go QuickJump categoryLabel capitalization, account switcher humanized error, metrics panel ellipsis
internal/tui/format/recording.go Ellipsis changed to Unicode in truncate function
internal/tui/*.go Loading messages updated to Unicode ellipsis

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Toast was appended as a layout section between content and status bar,
causing the main content area to shrink by one row for the 3s duration.
Now overlays the penultimate line (above status bar) so content height
stays constant—no reflow on show/hide.
Todos, Cards, Messages, and Detail views built BoostTarget without
AccountID, causing CreateBoost to fall through to the wrong account
in multi-account setups. Now set from session scope, matching the
pattern already used by Hey, Assignments, and Pulse.
- Normalize "..." to "…" across all loading messages and truncation
- Right-panel spinners in Todos/Messages/Checkins fill their panel
  with Width/Height instead of floating in the corner
- Checkins truncateContent: rune-safe truncation for multibyte chars
- Kanban: "No cards" instead of "(empty)", deferred shows hint text
- MyStuff: thin rule separator between sections
- Home: label truncation adds ellipsis
- Widget Truncate threshold adjusted for single-char "…"
…esize

- Search: handle FocusMsg to refocus text input after back-navigation
- Detail: FocusMsg with existing data does silent refresh (no spinner
  flash) — only shows loading indicator when data is nil
- BoostPicker: include in relayout() so terminal resize while open
  doesn't use stale dimensions
…ders

- QuickJump: capitalize category badges (Recent, Starred, Project, Tool)
  and use " · " separator instead of parentheses for descriptions
- Account switcher: show "Could not load accounts" instead of raw error
- Detail: expose ctrl+d/ctrl+u scroll bindings in FullHelp
- Date placeholders: remove hardcoded year, use "mar 15" style examples
@jeremy jeremy merged commit 50b13e6 into main Feb 25, 2026
10 checks passed
@jeremy jeremy deleted the v1-ship-polish branch February 25, 2026 07:03
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.

2 participants