Context
Slice 09 polished the command palette chrome: 52px ghost header, L32-compliant rows, and fixed 480 height to stop result-count jump. What remains is the content layer: when no filter is applied, the palette only shows about 5 default commands and the lower 60% of the modal sits empty.
What needs work
- Default view: only about 5 commands listed when nothing typed. Lots of empty area below.
- Information architecture: file picker, command palette, and session search are all the same surface today (
dialog-select-file.tsx); the result is a flat list with mixed item types and no visual rhythm.
- Missing high-value entries: recent sessions, recent files, recent commands, and suggested actions are absent from the default view.
- No grouping cues until the user starts typing.
Priority triage
P1.
The command palette is an app-wide navigation and recall surface. For everyday users, the empty default state makes high-value actions such as reopening recent sessions, finding recent files, and repeating common commands feel undiscoverable. This is not only visual polish; it affects whether users can move through the product quickly after opening PawWork.
Decisions needed before implementation
- Default-view groups: which categories, such as Recent, Suggested, Commands, Sessions, Files, or Pinned, and how many rows per group.
- Sort and recency rules: last touched, last opened, or frecency.
- Whether to keep one fused entry surface or split palette, file picker, and session jump behavior.
- Optional footer hints. This was considered and rejected once for slice-09; revisit only if the content design needs more affordance.
Out of scope for this issue
- Chrome: header height, divider, item radius, fixed body height. Already shipped in slice-09.
- New keyboard shortcuts beyond Cmd+K.
- Replacing the full sidebar or session list.
Files likely touched
packages/app/src/components/dialog-select-file.tsx - current single-surface implementation.
packages/ui/src/components/command-palette.css - chrome lives here; layout and spacing tweaks may follow content decisions.
packages/app/src/i18n/{en,zh}.ts - new strings for groups and empty states.
Verification
- Add or update user-path E2E coverage for opening the palette with no query and seeing useful grouped default entries.
- Verify keyboard navigation, Enter selection, Escape close, and filtering still work.
- Manually verify the palette in Electron via
bun run dev:desktop because this is a visible app flow.
Context
Slice 09 polished the command palette chrome: 52px ghost header, L32-compliant rows, and fixed 480 height to stop result-count jump. What remains is the content layer: when no filter is applied, the palette only shows about 5 default commands and the lower 60% of the modal sits empty.
What needs work
dialog-select-file.tsx); the result is a flat list with mixed item types and no visual rhythm.Priority triage
P1.
The command palette is an app-wide navigation and recall surface. For everyday users, the empty default state makes high-value actions such as reopening recent sessions, finding recent files, and repeating common commands feel undiscoverable. This is not only visual polish; it affects whether users can move through the product quickly after opening PawWork.
Decisions needed before implementation
Out of scope for this issue
Files likely touched
packages/app/src/components/dialog-select-file.tsx- current single-surface implementation.packages/ui/src/components/command-palette.css- chrome lives here; layout and spacing tweaks may follow content decisions.packages/app/src/i18n/{en,zh}.ts- new strings for groups and empty states.Verification
bun run dev:desktopbecause this is a visible app flow.