Skip to content

feat: workflow pins/favorites (BACKLOG Standing #5) - #50

Merged
alicoding merged 1 commit into
mainfrom
feat/workflow-pins
Aug 13, 2026
Merged

feat: workflow pins/favorites (BACKLOG Standing #5)#50
alicoding merged 1 commit into
mainfrom
feat/workflow-pins

Conversation

@alicoding

Copy link
Copy Markdown
Owner

Summary

  • Workflow pins/favorites: a plain ordered pinnedWorkflowIds: string[] on shared/store.ts's existing persisted store (localStorage tier, same pattern as goal 0033's activeWorkTabKey), with a togglePinnedWorkflow action.
  • app/workflowFrecency.ts gains sortWorkflowsByPinnedAndFrecency, partitioning pinned rows (in pin order) above the existing frecency-sorted unpinned tail — reuses sortWorkflowsByFrecency rather than a new algorithm.
  • A subtle Primer PinIcon toggle on both the Quick Panel's and the ⌘K palette's workflow rows: muted outline unpinned, accent-colored once pinned.
  • Found + fixed a real Primer interaction bug along the way: ActionList.Item's TrailingVisual wraps children in a VisualWrap span with pointer-events: none (trailing visuals are decorative-only by the library's own convention) — silently ate every click on the toggle until pointer-events: auto was added back on the button.
  • SPEC.md + BACKLOG.md updated in the same change (Standing build(deps-dev): Bump vitest from 3.2.7 to 4.1.10 in /frontend #5 checked off).

Test plan

  • npx tsc --noEmit
  • npm run lint (0 errors, pre-existing warnings only)
  • npx vitest run (251/251, including new pinned-sort cases)
  • npm run boundaries (0 violations)
  • npx playwright test e2e/quick-panel.spec.ts e2e/command-palette.spec.ts (10/10, including the new pin→sort→unpin→reload-persists case)
  • Local lefthook pre-commit suite green

🤖 Generated with Claude Code

https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh

A plain ordered workflow-ID list (shared/store.ts's pinnedWorkflowIds,
persisted via the existing zustand `persist` localStorage tier, same
pattern as goal 0033's activeWorkTabKey) with a togglePinnedWorkflow
action. app/workflowFrecency.ts gains sortWorkflowsByPinnedAndFrecency,
partitioning pinned rows (in pin order) above the existing
frecency-sorted unpinned tail rather than a second ranking algorithm.

A subtle Primer PinIcon toggle lands on both the Quick Panel's and the
⌘K palette's workflow rows -- muted outline unpinned, accent-colored
once pinned. Along the way, found and fixed a real Primer interaction
bug: ActionList.Item's TrailingVisual wraps children in a VisualWrap
span with pointer-events: none (trailing visuals are decorative-only
by the library's own convention), which silently ate every click on
the toggle until pointer-events: auto was added back on the button
itself.

Vitest covers the pinned-above-frecency/pin-order/dropped-stale-id/
no-mutation cases; quick-panel.spec.ts gained a full
pin-sorts-above-frecency -> unpin-reverts -> persists-across-reload
e2e case.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh
@alicoding
alicoding enabled auto-merge (squash) August 13, 2026 05:36
@alicoding
alicoding merged commit 6ba3e8f into main Aug 13, 2026
16 checks passed
alicoding added a commit that referenced this pull request Aug 15, 2026
A plain ordered workflow-ID list (shared/store.ts's pinnedWorkflowIds,
persisted via the existing zustand `persist` localStorage tier, same
pattern as goal 0033's activeWorkTabKey) with a togglePinnedWorkflow
action. app/workflowFrecency.ts gains sortWorkflowsByPinnedAndFrecency,
partitioning pinned rows (in pin order) above the existing
frecency-sorted unpinned tail rather than a second ranking algorithm.

A subtle Primer PinIcon toggle lands on both the Quick Panel's and the
⌘K palette's workflow rows -- muted outline unpinned, accent-colored
once pinned. Along the way, found and fixed a real Primer interaction
bug: ActionList.Item's TrailingVisual wraps children in a VisualWrap
span with pointer-events: none (trailing visuals are decorative-only
by the library's own convention), which silently ate every click on
the toggle until pointer-events: auto was added back on the button
itself.

Vitest covers the pinned-above-frecency/pin-order/dropped-stale-id/
no-mutation cases; quick-panel.spec.ts gained a full
pin-sorts-above-frecency -> unpin-reverts -> persists-across-reload
e2e case.


Claude-Session: https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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