specs/053-icon-hierarchy-polish/spec.md
Feature specification: Icon hierarchy polish
Branch: gui/icon-hierarchy-polish
Created: 2026-10-12
Status: Accepted
Input: Audit icons, visual hierarchy and command placement across the app against web best practices; use apple-design and emil-design-eng; open a PR. User explicitly reiterated position audit.
User scenarios and testing
US1 - Recognize controls without guessing (P1)
Users distinguish Changes, Task Board, creating tabs and arranging panes from the symbols and nearby labels. Independent test: Inspect production toolbar/sidebar/details/empty-state symbols and their accessible names in light/dark and high contrast; activate the same controls. Acceptance scenarios:
- Changes uses the same diff-oriented symbol in the header, compact sidebar and details card, distinct from pane split symbols.
- Task Board uses a column-oriented board symbol consistently across header/sidebar/empty state.
- Application-owned navigation icons share a 16px grid and consistent optical stroke weight; metadata renders at the intended native size.
- Common native close/menu/navigation symbols remain recognizable. Decorative icons do not add redundant spoken names.
US2 - Find commands at the right scope (P1)
Users find creation beside workspace context, workspace views together, and pane layout actions separate from closing that pane. Independent test: Check visible ordering and activate New Tab, Board and Changes at wide/compact widths; inspect pane split/close controls and actual widget bounds/focus. Acceptance scenarios:
- New Tab is a labeled control at spacious widths, close to the workspace breadcrumb, and uses the existing action/shortcut. It becomes icon-only at medium/narrow widths.
- Task Board and Changes remain a coherent workspace-view group near attention and the app menu; settings stay in the pinned sidebar footer.
- Close Pane is visually separated from the paired Split Right/Split Down controls; hit areas and activation remain intact.
- At 360px the workspace context, New Tab, menu and window controls fit. Compact labeled Board/Changes remain in the sidebar as introduced by feature052.
- Worktree refresh/create controls sit in the window's action header near their content; checkout Open/Remove stay with their own rows.
US3 - Keep secondary information quiet and usable (P2)
Users read names and context first, while secondary glyphs support recognition without competing with attention/status. Independent test: Inspect sidebar metadata and details, copy a path and open Changes; verify enlarged/high-contrast focus and symbol readability. Acceptance scenarios:
- Folder/branch metadata and details use the same owned symbols; decorative glyphs align with labels and do not dominate them.
- Details copy action follows the same restrained control shape and retains its clipboard behavior and accessible name.
- Pure typography, semantic colors, attention hierarchy and existing terminal widget identities remain intact.
Edge cases
- Missing external icon themes, symbolic inversion in light/dark, enlarged text and native high contrast.
- Long workspace names/paths and narrow windows; no control overflow or lost keyboard focus.
- Right-to-left UI direction; grouping follows logical start/end rather than hardcoded screen coordinates.
- Empty boards, empty projects, restored panes and hover/focus reveal of pane actions.
Requirements
- FR-001: Semantic icon roles MUST be consistent across surfaces and Changes MUST be distinct from pane split.
- FR-002: Owned navigation icons MUST retain monochrome theme-aware rendering, coherent weight and the native16px grid.
- FR-003: New Tab MUST stay beside workspace context, labeled when space permits, and retain its existing action/shortcut.
- FR-004: Workspace views and pane split/close MUST be grouped by target/function with clear separation.
- FR-005: Worktree window actions MUST be in the action header; row-specific operations MUST remain next to their checkout.
- FR-006: New controls/placement MUST preserve keyboard order, accessible naming, RTL adaptation and existing hit areas.
- FR-007: Light/dark, 360px, enlarged/high-contrast and secondary windows MUST retain readable hierarchy and reachable actions.
- FR-008: Server state, IPC, persistence, terminal reconcile and safety/retry flows from feature052 MUST remain intact.
Key entities
No model changes. Existing workspace, tab, pane, checkout and UI icon roles are presentation inputs.
Success criteria
- Each visible Changes entry uses the same recognizable icon; it differs from both split directions.
- Native icon resolution succeeds without relying on an external icon theme for owned symbols.
- New Tab is visible/labeled at desktop widths, icon-only at constrained widths, and remains inside the360px window.
- Pane close is separated from split actions while every existing action remains operable.
- Worktree actions and owned row targets survive repositioning; details copy still produces the exact full path.
- Independent source/visual review and full verification pass without terminal identity regressions.
Assumptions
Keep the accepted restrained T3-like direction and native GTK interaction patterns. Use original monochrome SVGs in the existing icon bundle; no icon/font library or copied Apple symbol artwork. Common native system symbols stay native. The audit does not authorize model/IPC changes, toolbar customization, new navigation destinations or decorative icons on every row. PR100 merged during delivery. This PR now targets main745f72f after rebasing only the polish commits; it retains the parent's final pending-window close guard.