6.1.4 Filter-builder UI on /issues — built-in fields (rows, combinator, live-apply URL state, facet upgrade, applied summary)
Estimate: 35m · Depends on: 6.1.1, 6.1.3
The builder surface for the built-in fields, per the 6.1.3 design, on the 6.1.1 AST/codec/registry.
Build (extending the 2.5.3 IssueListToolbar + 2.5.4 IssueFilterBar area): the Advanced entry + panel; condition rows driven BY THE REGISTRY (field picker lists the registry's built-in entries; choosing a field populates its operator set; the operator selects the value-editor kind — the UI renders the registry, it never hard-codes field lists); the combinator control; add/remove/clear + the row cap; live-apply with pending-row exclusion (the designed rule) writing the ?filter=v1: param (composing with ?view/?sort/?page, Suspense-keyed like the shipped params); the facet upgrade ("Edit in Advanced" → lossless rows) + the superseded-facet state; the applied toolbar summary + count; zero-results; the invalid-param recovery state. Both views consume the compiled filter through their existing reads (no view-specific query code here). Strings via next-intl.
A11y: rows are labelled groups; every picker keyboard-complete (the Combobox bar); the combinator reads as a sentence for SR users; the applied count announced; extends the /issues strict sweep.
Acceptance criteria
- The builder matches the design panel-for-panel for every built-in editor kind; rows render from the registry (a registry addition appears with zero UI changes — asserted with a test-only registry entry).
- Live-apply + pending exclusion + URL round-trip (reload/share restores state; composes with view/sort/page); the facet upgrade is lossless; the superseded state appears exactly when the AST exceeds facet expressiveness.
- Both views show identical match sets (spot E2E); count + zero-results + invalid-param states work.
- Axe-clean; token tiers only; next-intl; integration tests over the row/registry wiring + URL codec round-trip in the browser; coverage ≥90%.
Context refs
design/work-items/filter-builder.mock.html+ notes (6.1.3) — THE authority- 6.1.1 (AST/codec/registry — the UI contract);
IssueListToolbar/IssueFilterBar(2.5.3/2.5.4 — the surface this extends) - The URL-driven param conventions (2.5.8
?view, 2.5.12?page) - The i18n threading pattern