Skip to content

Add tag catalog and sidebar tag filtering#1

Merged
kevinher7 merged 10 commits into
personalfrom
feature/kevin/create_tag_filtering
May 4, 2026
Merged

Add tag catalog and sidebar tag filtering#1
kevinher7 merged 10 commits into
personalfrom
feature/kevin/create_tag_filtering

Conversation

@kevinher7
Copy link
Copy Markdown
Owner

@kevinher7 kevinher7 commented Apr 29, 2026

Summary

  • First-class tag support across the orchestration stack: events, command invariants, decider, projector, projection pipeline, snapshot query, persistence, contracts, and WebSocket.
  • Web sidebar surfaces tags as a dedicated, filterable section (collapsible pills + dropdown menus) with a per-project tag editor.
  • Builds on the projection_tags table and tags_json column on projection_projects introduced by Banded migration ids + set-difference runner #2 (already on personal).

Changes

Server / orchestration

  • Tag create / rename / delete commands wired through commandInvariants, decider, projector, and the projection pipeline.
  • New ProjectionTags persistence layer + service with normalized-name uniqueness.
  • ProjectionProjects updated to read/write the tags_json column.
  • WebSocket additions in ws.ts for tag mutations and snapshot delivery.

Web / UI

  • New SidebarTagFilter and SidebarSectionHeader components; ProjectTagsEditor for assigning tags to projects.
  • Sidebar.tsx extended with collapsible tag pills and dropdown selection.
  • store / uiStateStore track tag-filter state.
  • Internal refactor: flatten components/sidebar/ into components/.

Contracts

  • New tag schemas in packages/contracts/src/orchestration.ts and a shared TagId base schema.

Testing

  • Unit tests added/updated across orchestration (decider, command invariants, projector, projection pipeline, snapshot query), persistence (projection repositories, event store), and web logic (sidebar grouping, tag filtering).
  • Migration runner / 5001_ProjectionTags tests live on personal via Banded migration ids + set-difference runner #2.
  • Recommend running bun fmt, bun lint, and bun typecheck before merging.

Notes

  • Rebased onto personal after Banded migration ids + set-difference runner #2 merged. The migration runner refactor, banded-id convention, and 5001_ProjectionTags migration are no longer in this PR — they ship on personal independently.
  • Removed from the prior description (now on personal, not in this PR): PR-template-aware generation, username-prefixed branch names, editor command pre-resolution.

@github-actions github-actions Bot added size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Apr 29, 2026
@kevinher7 kevinher7 self-assigned this May 4, 2026
@kevinher7 kevinher7 changed the base branch from main to personal May 4, 2026 11:09
kevinher7 added 8 commits May 4, 2026 21:12
- Project tag catalog into snapshots and projections
- Add tag invariants, persistence, and schema plumbing
- Update tests and read models for tag-aware data
- Swap inline tag chips for a compact filter dropdown
- Add project tag assignment and tag management actions
- Cover new tag toggling logic with tests
- Replace the tag filter dropdown with inline selectable pills
- Add pill context menus for rename and delete actions
- Keep clear/new tag actions in the sidebar header
- Reuse a shared header component for sidebar sections
- Simplify tag filter pills and align tag/project controls
- Increase tag pill text size for better readability
- Add foreground tint to the default unpressed state
- Move TagFilterPills (renamed SidebarTagFilter), the project-tag editor
  menu (renamed ProjectTagsEditor), and the shared SidebarSectionHeader
  out of Sidebar.tsx into apps/web/src/components/sidebar/
- Drop now-unused imports from Sidebar.tsx (XIcon, Toggle, Collapsible*,
  MenuItem, MenuCheckboxItem, cn)
- Sidebar.tsx shrinks by ~330 lines; the new components are short,
  single-purpose, and easy to review on their own

No behavior change. Dialog state, store selectors, and command-dispatch
handlers stay in Sidebar.tsx; props on the call sites are unchanged.
Co-locate the sidebar-specific components with their siblings (PlanSidebar,
AppSidebarLayout, etc.) so the components/ folder follows the same flat
layout used by the rest of the app.

- git mv four files out of components/sidebar/ into components/
- Re-anchor relative imports (../../foo -> ../foo, ../ui/x -> ./ui/x)
- Update Sidebar.tsx imports to drop the ./sidebar/ path prefix
- Remove the now-empty sidebar/ subdirectory
@kevinher7 kevinher7 force-pushed the feature/kevin/create_tag_filtering branch from 53d51cf to ae00cb4 Compare May 4, 2026 12:13
- Rewrap menu and collapsible imports
- Tighten component and popup formatting
- No behavior change
@kevinher7 kevinher7 changed the title Add tag catalog support and PR template-aware generation Add tag catalog and sidebar tag filtering May 4, 2026
- Preserve project shape while overriding the sortable id
- Keep project tag filtering and thread sorting logic unchanged
@kevinher7 kevinher7 merged commit 40b9fbd into personal May 4, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant