Summary
On the Tree Compare breakdown tables, replace the current change-type filter chips (regression, fixed, newFailure, etc.) with a freeform filter where users build their own (from, to) status pairs, can add multiple pairs, and can remove them individually.
Filtering stays client-side (same as today). Table change badges can remain as derived labels; only the filter UX changes.
Motivation
Change chips are named buckets over sideA → sideB transitions and are lossy (e.g. “regression” covers more than PASS → FAIL). Letting users pick exact status pairs matches what’s shown in the table and gives finer control.
Behavior
- Users pick From and To from:
PASS / FAIL / INCONCLUSIVE / — (absent)
- Add appends the pair to the active filter list (no duplicates)
- Each active pair is shown as a removable chip (e.g.
PASS → FAIL)
- Multiple pairs use OR semantics: a row matches if its
(sideA, sideB) equals any selected pair
- Empty list = show all rows
- Default (preserve today’s useful default):
PASS → FAIL and FAIL → PASS
- Would be nice to have a persistence of the filters created by user (maybe using localStorage?)
UI sketch
- Label + short tooltip explaining the four statuses (including absent)
- Two Selects (From, To) + Add
- Disable Add when incomplete or duplicate
- Removable chips for active pairs
- Reuse existing shadcn
Select / chip styling patterns from Tree Compare
Acceptance criteria
Visual reference
This is just a concept/mockup—it doesn't have to look exactly like this.

Summary
On the Tree Compare breakdown tables, replace the current change-type filter chips (
regression,fixed,newFailure, etc.) with a freeform filter where users build their own(from, to)status pairs, can add multiple pairs, and can remove them individually.Filtering stays client-side (same as today). Table change badges can remain as derived labels; only the filter UX changes.
Motivation
Change chips are named buckets over
sideA → sideBtransitions and are lossy (e.g. “regression” covers more thanPASS → FAIL). Letting users pick exact status pairs matches what’s shown in the table and gives finer control.Behavior
PASS/FAIL/INCONCLUSIVE/—(absent)PASS → FAIL)(sideA, sideB)equals any selected pairPASS → FAILandFAIL → PASSUI sketch
Select/ chip styling patterns from Tree CompareAcceptance criteria
(from, to)pairs using all statusesPASS→FAIL+FAIL→PASSVisual reference
This is just a concept/mockup—it doesn't have to look exactly like this.