Skip to content

feat(seer): Autofix Overview — status-grouped triage board with narrative cards#120163

Draft
jshchnz wants to merge 34 commits into
masterfrom
jc-autofix-step-indicator
Draft

feat(seer): Autofix Overview — status-grouped triage board with narrative cards#120163
jshchnz wants to merge 34 commits into
masterfrom
jc-autofix-step-indicator

Conversation

@jshchnz

@jshchnz jshchnz commented Jul 20, 2026

Copy link
Copy Markdown
Member

Reworks the Autofix Overview (/issues/autofix/overview/, from #119794) into a Linear-style triage board: cards grouped under sticky status sections, each card a single narrative — what broke, what Seer changed, what you do next. Frontend only; everything rendered derives from data the rows already carried.

Status groups (Linear-style)

Cards live under collapsible sticky sections in fixed triage order — Needs your input → Awaiting your review → Code changes ready → Ready to generate code → Errored → Needs investigation → Running → Merged — derived from the run's attention state (Needs investigation = settled diagnosis-only runs whose next steps are manual; no pipeline button ≠ nothing to do).

  • Headers (icon + label + count badge) park below the top bar while their section scrolls and get pushed off by the next header (Sticky + Disclosure); collapse state persists per user in localStorage; empty groups don't render; a quiet Collapse-all/Expand-all toggle sits on the filter row.
  • Hovering a section icon shows the pipeline checklist — "N steps until issue fix" with ✓/○ rows for staged groups, a one-line description for variable-stage ones.
  • The old "Needs you first" sort retired into the group order; the Sort select orders within groups (Recent activity / Most events, resetting the pagination cursor).

Card anatomy

ECharts tooltip crashes when chart data refreshes while hovering   [1 file +11 −1]
409 events · 317 users · 5 days ago
⊙ ROOT CAUSE
TooltipView re-shows tooltips using stale series indices after a data update.
-o- PROPOSED FIX
Adds a useEffect in baseChart.tsx that dispatches hideTip whenever series changes…
[+11 −1  static/app/components/charts/baseChart.tsx                          ⌄]
[⌥ Review PR]                                        ▎JAVASCRIPT-3A3N  ⬡ javascript
  • Thought order, one voice: LLM headline title (lg, matching feed rows) over a vitals subline, then Root cause (one sentence — the tightened prompt owes only the why), Proposed fix, and on fix-less cards a single-sentence Next steps. No boxes, no expand toggles — the whole analysis reads on the face, lg air between blocks.
  • Prompts (runQuestions.tsx, self-invalidating cache): the Diagnosis/summary question is removed (overlapped root cause); the notes prompt returns one sentence, empty on fix cards, and is forbidden from suggesting "have Seer generate the fix" (that's the card's button).
  • Inline file differ for small fixes (≤2 files, ≤25 changed lines, ≤60 rendered hunk lines): collapsed FileDiffViewer headers expanding the syntax-highlighted diff in place — the Seer drawer's own renderer. Oversized diffs keep the stat pill + hover file list (left-truncated paths).
  • Tail row: the state verb (Review PR / Generate code / View run / Retry / Merged, sm scale) anchors the bottom left with the #PR link; level line + short id + project badge (linking to its project) sit right as provenance.

Page chrome

  • Title in the app's slim top bar (Layout.Title → TopBar slot) with the description as its info tip; no in-content h1, header buttons, stat cards, or width caps.
  • Project selector (ProjectPageFilter in PageFiltersContainer) leads the filter row (Outcome / Needs attention / Activity / Sort); the selection replaces the issues request's hardcoded project: -1 and scopes the whole page.

Deep-link focus mode

?id=<issueId> renders that issue as a single card with inline diffs expanded, fetched by group id so it resolves outside the list's filters/pagination/project selection; list chrome hides and an "All issues" link clears the param.

Follow-up

#120170 (backend, separate per deploy split) exposes mergeableState on the group pull-requests endpoint for a future merge-readiness badge next to the PR link.

14 tests cover the grouping/collapse behavior, section order, differ gating, project scoping, and focus mode.

🤖 Generated with Claude Code

jshchnz and others added 14 commits July 20, 2026 15:50
The overview cards opened with the issue-level line, which says nothing
about the run. Replace it with a two-glyph unit: a pie fill for how far
through the pipeline the run got and a step icon (drawer v3 vocabulary)
for which stage that is, tinted by run status — pulsing accent while
running, warning when awaiting input, danger on error, all-success with
a merge glyph once the PR merged. A shared tooltip carries the step
checklist. The level moves into the Full analysis identity strip.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A quarter per Seer stage now fills the circle at PR opened; the
checkmark is reserved for the merged PR, and the checklist always shows
Merged as the finale. Also opens up the header spacing so the glyph
pair reads as one unit apart from the title.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pie icons only come in quarters, so an unmerged PR rendered a full
circle — reading as done with the merge step still outstanding. Swap
the glyph for a ProgressRing filled a fifth per step (4/5 at PR
opened); the checkmark stays reserved for the merged PR. The ring color
resolves through the same variant mapping the icons use.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The ring plus its tooltip checklist carry the step on their own; the
extra icon read as clutter. The processing pulse moves onto the ring,
and the step metadata slims down to labels.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Full analysis disclosure and the provenance/vitals run lived in a
bordered footer, adding a full row of vertical space per card. They now
sit as a quiet subline directly under the title — tight xs gap to the
header so they read as one title block, md rhythm to the body kept, no
divider needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The events/updated run now sits as a quiet subline directly under the
title (ring nudged to center on the title's first line). The Full
analysis trigger anchors the bottom row with the project badge inline
at the right, and the analysis itself expands as a full-width block so
its two-column grid gets the whole card. The core Disclosure gave way
to a small controlled toggle since trigger and panel now live in
different rows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The ring now vertically centers against the title + vitals subline
instead of hanging off the first line, and grows to 18px so it reads
at a glance.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Full analysis trigger now stretches across the card's tail so the
whole row is a click target (label pinned left) and steps up from the
zero-size button font to xs. The project badge links to its project
page — ProjectBadge's canonical destination.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The ring now centers a small status-colored digit — steps remaining
until the fix is merged — and its tooltip leads with the verdict:
"1 step until issue fix", or "Issue fixed" once merged. Untouched
rings stay empty rather than shouting a 5. Ring nudged to 20px so the
digit breathes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reuses the drawer's FileDiffViewer against the structured patches the
row builder already had in hand. Strictly gated — at most 2 files, 25
changed lines, 60 rendered hunk lines — and each qualifying file shows
as a collapsed header (+N −N, path) that expands the highlighted diff
in place, aligned with the body's text column. Oversized diffs keep
today's pill + hover file list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The canonical ProjectPageFilter (inside PageFiltersContainer), first in
the filter toolbar ahead of the client-side selects. The selection
replaces useAutofixIssues' hardcoded project:-1 on the issues request
and the query gates on page-filters readiness; the runs/state fan-out
follows the filtered group ids, so the whole page scopes with it.
Changing projects resets the cursor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The page title moves into the app's slim top bar via Layout.Title with
the description as its info tip, matching the issue stream pages. The
filters become an unboxed first row of the content (project selector +
the client-side selects), stat cards follow, and the bordered toolbar
container goes away. The 85% content cap and the 90ch caps inside
cards are removed — neither came from the design system.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paths have no break points, so long ones overflowed the tooltip's max
width and pushed the +/- counts past its clipped edge. Truncate paths
from the left (rtl, like the diff viewer's file header) so the
filename stays visible and the counts stay inside.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Jul 20, 2026
The ring's arc now colors by pipeline stage instead of run status — a
single accent-scale ramp (gray → deepening blue) so arc length and
intensity both say how far the run got, no legend needed. Urgency
stays on the action button and the tooltip's status word; success
green remains reserved for the merged checkmark. The steps-remaining
digit follows the ramp.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
jshchnz and others added 2 commits July 20, 2026 19:58
Red when only the root cause exists, amber with a plan, greening as
code and the PR land — matching the steps-until-fix framing so the
ring reads instantly. Replaces the too-subtle gray-to-blue ramp.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Heat now builds toward the finish: quiet gray at root cause, amber as
a plan and code land, hottest at PR-opened where the human's review is
the one step left, green checkmark once merged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Audited against the stream rows and details page: the card ran 1-2px
small in three places. Title goes lg (16px, the feed's row-title
size), the vitals subline goes sm (12px, the feed's metadata line),
and fix/analysis prose goes md (14px, details-page body). Uppercase
eyebrow labels stay xs per the codebase's label convention.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The heat ramp's red/amber read as "something is wrong" rather than
"almost done". Back to gray-to-deepening-blurple as the run advances,
keeping alarm colors reserved for the action buttons and the merged
checkmark green as the terminal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The four stat cards and their whole apparatus go: the StatCard
component, the ?quick= URL filter (the cards were its only entry
point), the per-page counts, and the now-unused imports. The Needs
attention select covers the same filtering.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
With ?id= present the overview becomes a single-card permalink: the
issue is fetched by group id (the endpoint pins exact ids in that mode
and ignores list filters/pagination, and project scoping is widened so
a stale selection can't hide the link's target), the card renders with
Full analysis and inline diffs expanded, list chrome and pagination
hide, and an All issues link clears the param while preserving the
rest of the URL. No card affordance links here — the param is for
externally shared links.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The FixabilityTag component, the row's fixabilityScore field, its
derivation from the issue serializer, and the spec assertions all go
with it. The identity strip keeps level + short id.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
jshchnz and others added 2 commits July 20, 2026 23:37
When no code was drafted, the reviewer notes ARE the human's to-do —
they now render as their own block under the Diagnosis instead of
hiding in the collapsed analysis. Same anatomy as its siblings, but in
the accent voice with an accent left edge (the one block asking the
reader to act) and the markdown bullets restyled into an arrow to-do
rail. With a drafted fix, the notes stay in the details as the Review
checklist as before.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The accent edge + accent label + custom arrow markers read as too
much, and the marker CSS fought the markdown renderer's own bullets
(double markers). Now the same muted anatomy as the Diagnosis block
with plain markdown bullets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The header actions (Review PR / Open PR / Generate code / View run /
Retry / PR link) step up from the 24px zero size to sm (32px, 14px
font) — the same size as this page's filter triggers and the standard
in-content action size.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
jshchnz and others added 2 commits July 20, 2026 23:44
The reviewer-notes prompt suggested it as a step, so every list ended
with one — but that action IS the card's Generate code button. The
prompt now forbids it and asks for what the fix should do instead.
Prompt edits self-invalidate the answer cache, so lists regenerate on
next load.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Only the highest-leverage steps make the card.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jshchnz jshchnz changed the title feat(seer): Autofix overview — progress ring, inline differ, standard chrome feat(seer): Autofix Overview — steps-to-fix ring, on-card fix content, inline diffs, standard chrome Jul 21, 2026
updateQuery now clears the pagination cursor — every caller is a
filter or sort change where a stale page makes no sense (the project
filter already did this via resetParamsOnChange). The spec drops two
overlapping tests: the running-indicator check folds into the triage-
ordering test (whose third card is already an in-flight run) and the
bullet-normalization check folds into the no-code-drafted test; a
half-wrong comment about the inline-differ gate now names both
disqualifiers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cards now live under sticky, collapsible sections — the triage tiers
made visible: Needs your input, Awaiting your review, Code changes
ready, Ready to generate code, Errored, Needs investigation (settled
diagnosis-only runs whose next steps are manual — no pipeline button
does not mean nothing to do), Running, Merged. Headers (icon + label +
count) park below the top bar while their group scrolls and are pushed
off by the next section; collapse state persists per user in
localStorage; empty groups don't render. The Sort select now orders
within groups (Needs you first retired — the group order carries it,
so getTriageRank goes too). Focus mode stays ungrouped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
One quiet link-variant button on the filter row's right (beside Clear
all): Collapse all folds every visible group, then reads Expand all to
undo. State flows through the same persisted collapsed-groups list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
IconChevron isDouble — up while collapsing is on offer, down once
everything is folded and the button reads Expand all.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The card is now one continuous document in thought order — Root cause
(one sentence, tightened prompt) → Proposed fix → Next steps — all in
the shared eyebrow+prose voice with no boxes, no More-details toggle,
and lg air between blocks. The Diagnosis/summary question is removed
(it overlapped the root cause) and the reviewer notes collapse to a
single next-step sentence that only exists on fix-less cards — the
review-checklist arm is gone. The CTA anchors the card's bottom left,
inline with the level/short-id/project provenance on the right; the
header keeps just the diff pill. The step ring is retired entirely
(stepIndicator.tsx deleted): its steps-until-fix checklist now hovers
on the group headers' icons, where the stage is shared by every card
in the section. The now-dead placement plumbing goes too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jshchnz jshchnz changed the title feat(seer): Autofix Overview — steps-to-fix ring, on-card fix content, inline diffs, standard chrome feat(seer): Autofix Overview — status-grouped triage board with narrative cards Jul 21, 2026
Add a card/table segmented control to the overview toolbar, persisted in
local storage. Table mode renders each issue as a compact, scannable row
via the new IssueTableRow, while card mode keeps the full analysis face.

Extract the shared primary-action logic (running/merged/review-PR/view-run)
into IssuePrimaryAction so both renderings stay in sync.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Frontend Automatically applied to PRs that change frontend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants