Skip to content

feat(seer): Autofix overview sections driven by issue.autofix_state#120294

Draft
NicoHinderling wants to merge 37 commits into
masterfrom
feat/autofix-overview-state-sections
Draft

feat(seer): Autofix overview sections driven by issue.autofix_state#120294
NicoHinderling wants to merge 37 commits into
masterfrom
feat/autofix-overview-state-sections

Conversation

@NicoHinderling

Copy link
Copy Markdown
Contributor

Forked from the jc-autofix-step-indicator WIP (#120163) so the section-classification rework can iterate independently; the shared branch continues untouched.

On top of the existing autofix overview page work, this changes how the page's five sections (Awaiting your review / Code changes ready / Ready to generate code / Needs investigation / Merged) are populated:

  • Each section is now its own issue-stream query against the new issue.autofix_state search key, with true per-section counts from the X-Hits header — replacing the client-side classification that fetched full run state from Seer per issue (2 Seer round trips each) and could only count the current page of 10.
  • Sections fetch up to 100 issues in one request each; the global cursor pagination is removed.
  • Card content (root-cause/fix prose, diff stats, PR state) now loads viewport-lazily per card via LazyRender, so off-screen cards cost nothing.
  • The Outcome and Needs-attention filters are removed; Projects, Activity period, and Sort remain and map onto the section queries server-side.
  • getStatusGroup/buildOverviewRows client classification deleted; the card/table view toggle is unaffected.

Depends on the backend search key landing first: #120293. Until it does, the flag-gated page renders its error state.

Design doc: docs/superpowers/specs/2026-07-21-autofix-overview-activity-sections-design.md (included in this branch).

https://claude.ai/code/session_01QwraWVnfkhnijryUdzYzm4

jshchnz and others added 30 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>
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>
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>
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>
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>
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>
jshchnz and others added 7 commits July 21, 2026 15:10
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>
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.
Design spec for moving the overview page's section classification server-side via a new issue.autofix_state search key backed by SEER_* activity rows and the seer-run PR join, replacing the per-issue Seer fan-out.
Two-part plan (backend search key off master; frontend section rework as one commit) from the approved spec. Drops the SeerAgentRun index migration: the group FK already carries db_index=True.
Each section is now its own issue-stream query against the new search key with true counts from X-Hits, replacing the client-side classification that required two Seer round trips per issue. Card content (prose, diffs, PR state) loads viewport-lazily per card. Removes the Outcome and Needs-attention filters and page-level pagination; sections fetch up to 100 issues each.

Requires the issue.autofix_state backend PR (#120293) to land first.
@github-actions github-actions Bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Jul 22, 2026
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.

3 participants