Skip to content

Merge dev → main#1164

Merged
zbigniewsobiecki merged 8 commits intomainfrom
dev
Apr 23, 2026
Merged

Merge dev → main#1164
zbigniewsobiecki merged 8 commits intomainfrom
dev

Conversation

@zbigniewsobiecki
Copy link
Copy Markdown
Member

Promotes dev to main for production deployment.

What's in this batch

  • fix(combobox): data-[disabled=true] prevents cmdk false-positive greyout — all PM wizard dropdowns (team, label, project) were rendered pointer-events-none/opacity-50 due to cmdk always setting data-disabled="false" on non-disabled items; Tailwind's bare [data-disabled] selector matched it. Regression test added.
  • feat(pm-wizard): Labels step redesign — searchable Combobox with color swatches replaces NativeSelect; bulk-create banner for fresh setup; per-row create form collapses once slot is mapped.
  • feat(ui): Color swatch support in ComboboxOption.
  • fix(router): Scope trigger dedup by work item; clear linear work item locks by canonical id.
  • fix(webhook-logs): Add Linear and Sentry to filter UI and CLI.
  • fix: Harden JIRA env handling; parse linear comment webhooks.
  • feat(cli): Accept manual run work item metadata.
  • refactor(inline-checklist): Extract ID helpers to shared module.
  • fix(pm-wizard): Support stored credentials in edit mode; restore PM wizard styling regression.

🤖 Generated with Claude Code

zbigniewsobiecki and others added 8 commits April 18, 2026 20:11
Optional `swatch` field on ComboboxOption. When set, the Combobox
renders a 12×12 rounded dot before the label in both the trigger
(selected value) and every option row in the dropdown. Accepts any
CSS color value — hex/rgb/named. Additive; existing callers that
don't set `swatch` are unchanged.

PM wizard label picker (next commit) uses this so operators can
distinguish `cascade-*` labels at a glance.

Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
The Labels step shipped with three controls per row — a dropdown, a
text input pre-filled with the SAME value as the dropdown, and a
Create button — repeated for every slot whether mapped or not.
Confusing, noisy, and makes fresh setup a 5-click chore.

This rewrite:

- **Searchable Combobox** replaces the plain <select> for enum-mode
  rows (Linear + Trello). Each label shows a color swatch so
  `cascade-*` labels are visually distinguishable.
- **Bulk-create banner** at the top: when ≥1 slot has a default but
  no mapping, one click creates every missing label with canonical
  defaults (5 clicks → 1). Hidden when every slot is mapped or when
  the provider doesn't declare `createLabel`. Wires the existing but
  previously unused `createMissingLabelsMutation` hook.
- **Per-row Create form** now renders only when the slot is unmapped.
  Mapped rows show a single clean Combobox. Cuts visual clutter ~50%.

Free-text mode (JIRA) is unchanged — plain Input per slot.

The Trello and Linear `useProviderHooks` expose the new
`onCreateMissingLabels` + `creatingMissingLabels` values; the
adapters pass them through. JIRA doesn't declare `createLabel` so
the banner stays hidden automatically.

Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
Migrates the test strategy: enum mode uses element-tree traversal
(same pattern as container-pick.test.ts) because the new Combobox-
based rendering can't SSR through radix Popover. Free-text mode stays
on renderToStaticMarkup.

Adds coverage for the new UX contracts:
- Each slot renders a Combobox with `swatch` mapped from label.color.
- Mapped rows get `data-mapped="true"` and `data-has-create-form="false"`.
- Bulk banner renders when missing-with-defaults ≥ 1 and both
  onCreateLabel + onCreateMissingLabels are supplied; hides otherwise.

Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>
…eyout

cmdk v1+ always sets data-disabled="false" on every non-disabled
CommandItem. The bare Tailwind variant data-[disabled]: generates the
CSS selector [data-disabled], which matches any element that *has* the
attribute — including data-disabled="false". This caused every option
in every PM-wizard combobox (team picker, label picker, project-scope
picker) to receive pointer-events-none + opacity-50, making all
options visually greyed-out and impossible to click.

Fix: data-[disabled=true]: generates [data-disabled="true"], which
only fires on explicitly disabled items.

Also:
- Make renderBulkBanner's onCreate param required (always guarded at
  call site by showBulkBanner check)
- Add seed-once comment to CreateLabelForm to document intentional
  useState(defaultName) behaviour
- Add structural regression test that pins both Tailwind class strings
  so the fix can't be silently reverted

Tally: 3 files changed, 57 insertions(+), 5 deletions(-)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Resolved conflict in label-mapping.tsx: kept required (non-optional)
`onCreate` param and direct `onCreate(...)` call — the optional-chaining
variant on dev was superseded by the type-tightening in this branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…el-mapping-ux

feat(pm-wizard): label-mapping UX redesign + combobox disabled-item fix
@zbigniewsobiecki zbigniewsobiecki merged commit 6b709ab into main Apr 23, 2026
14 checks passed
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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.

2 participants