feat(ui): PR picker becomes a persistent excluder, newest-first
Build & push image / build-and-push (push) Successful in 13s
CI / test (push) Successful in 10m43s

Invert the PR scope from opt-in to exclusion: untick a PR to drop it
from the comparison; the excluded set persists in localStorage and new
PRs are included automatically as they arrive. The list is now reverse
chronological (last run/report first) with the date shown per PR, the
footer states the total count so truncation fears are checkable at a
glance, and the scrollable list is pinned with min-height:0 for
robustness.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 05:55:32 -04:00
parent 7fce78a664
commit e381c0ad41
2 changed files with 54 additions and 40 deletions
+7 -5
View File
@@ -138,11 +138,13 @@ ungraded, points, **points-per-minute**, points-per-run, by-severity — with **
(date range, repo, provider, model, lens, grade/severity), free-text search, and a click-to-scope
findings detail table.
Comparisons can be scoped to **specific PRs**: the **PRs** button opens a searchable checkbox popup
listing every `repo#pr` with how many models ran it (`steve/x#12 · 3/5 models`) — tick the PRs you
want and the entire table (runs, minutes, findings, points) counts only those, so a model with 2
runs can be compared against one with 60 on exactly the work you choose. **all**/**none** apply to
the current search, so you can filter to a repo and select all its PRs in one click.
Comparisons can be scoped by **excluding PRs**: the **PRs** button opens a searchable checkbox popup
listing every `repo#pr` newest-first, each with model coverage and last-review date
(`steve/x#12 · 3/5 models · 2026-07-01`) — untick a PR and the entire table (runs, minutes,
findings, points) stops counting it. It's an *exclusion* (not an opt-in) so it persists in
`localStorage` and **new PRs are included automatically** as they arrive; reset doesn't touch it.
**all**/**none** apply to the current search, so you can filter to a repo and exclude or restore all
its PRs in one click.
True to the store's "no points" rule, **scoring lives in the browser**: the page has an editable
points curve (default `trivial=1, small=3, medium=5, high=8, critical=20`) and computes