Project tags, color picker, and command palette polish#63
Merged
Conversation
Add free-form project tags so a large project list can be grouped by relationship (e.g. all client-X projects, all infra, all OSS): - New tags?: string[] field on Project, persisted through the existing settings round-trip. Right-click a project -> Tags... opens a multi-select picker that suggests tags from across all projects and can create new ones inline. - Tag filter strip at the top of the projects sidebar, single-select, auto-hides when no project has any tag and self-heals when the active tag disappears. - Each tag carries a globally-shared color the user can pick from an 8-swatch theme-safe palette; defaults to a deterministic hash of the tag name so first-time tags already have a stable look. - Dynamic-fit tag rendering on project rows (InlineTagList) measures pill widths via ResizeObserver and shows as many tags as actually fit, then surfaces overflow as a +N chip whose tooltip lists the hidden tags. Single very long tag names truncate with ellipsis instead of pushing siblings off-screen. - Filtering by tag keeps a matched parent's worktree subtree visible underneath it (full subtree, even worktrees without the tag), forcing the expanded body open without touching the user's persisted expand/collapse state. Command palette (CMD+P) improvements that ride along: - Project results show the project avatar and tag pills inline so the user can see why a result matched and skim by visual identity. - Tag keywords are emitted both bare (infra) and prefixed (#infra), so '#infra' filters projects directly. - Status bar gets a persistent 'Search CMD+P' button; the shortcut is also surfaced in Settings -> Shortcuts. Includes unit tests for normalization, the store actions, and color resolution. Version bumped to 0.16.0 with a customer-facing changelog entry. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds free-form project tags so a large project list can be grouped by relationship (clients, infra, OSS, etc.), with a color picker, dynamic-fit row rendering, and a polish pass on the command palette so tags are first-class there too.
What's new
Tagging
tags?: string[]field onProject, persisted through the existing settings round-trip.#infraandinfraboth normalize to the same canonical tag).Color picker
TAG_PALETTE). Same palette on both light and dark themes.Dynamic-fit rendering
InlineTagListmeasures pill widths viaResizeObserveragainst container width and shows as many tags as actually fit. Overflow surfaces as a+Nchip whose tooltip lists the hidden tags — nothing is silently clipped.Worktree-with-parent filtering
Command palette (⌘P)
infra) and prefixed (#infra) so#infrafilters projects directly.(try #tag).Discoverability
Tests
11 new unit tests for tag normalization, the store actions, color resolution, and dedupe — total suite now 352 passing.
Review
Ran the dual review policy (claude-opus-4.7 + gpt-5.5). All findings from both rounds addressed:
#-prefixed typing in the picker still matches existing tagsVersion
Bumped to 0.16.0 (MINOR — new user-visible features). CHANGELOG updated.