feat(seer): Read Explorer todos and artifacts from tool results too - #121248
Merged
Conversation
Contributor
📊 Type Coverage Diff✅ no issues found |
Contributor
Story previewsPreview the stories changed in this PR on the Vercel deployment: Preview deployment: https://sentry-b0w8qnwrs.sentry.dev |
azulus
marked this pull request as ready for review
August 4, 2026 22:35
gricha
approved these changes
Aug 5, 2026
Zylphrex
approved these changes
Aug 5, 2026
seer no longer projects Code Mode todos onto block.todos — it returns them on the tool result's structuredContent and leaves them there, so the bespoke block field can eventually be deleted rather than unwound. Resolve the checklist from both channels in run order: blocks in sequence, tool results within a block, legacy field first so a same-block collision prefers the structured value. Without this the checklist would silently stop rendering for Code Mode runs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Code Mode returns run artifacts on its tool result's structuredContent rather than appending to block.artifacts, so the autofix consumer resolves both channels in run order. Additive on its own: with no producer emitting the key yet, this reads exactly what it read before. Landing the consumer first is what keeps the surface from disappearing when the producer moves. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
collectArtifacts returns Artifact[], which is already assignable to AutofixArtifact[] — the cast was unnecessary and cost a point of type coverage. Annotate the binding instead, and type the test helper's todos as TodoItem[] so it no longer needs `as any`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
azulus
force-pushed
the
jeremy/codemode-todos-dual-read
branch
from
August 5, 2026 16:13
98b9b8e to
53c325c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explorer state arrives from Seer in two different shapes, and the frontend currently only understands one of them.
The old shape is a set of per-feature fields on each block —
block.todos,block.artifacts— written directly by the tool that produced them. The new shape is MCP'sstructuredContent: a keyed object a tool returns alongside its text output, which is the standard way a tool returns structured data. Seer's Code Mode uses the new shape.Until now Seer copied Code Mode's todos into
block.todosso existing readers kept working. That copy is being removed (getsentry/seer#7612), because leaving it in place means the per-feature fields stay the only thing anyone reads and can never be deleted.So teach the two consumers to check both places. The todo checklist and the autofix artifact list now walk blocks in order and, within each block, its tool results in order, taking the per-feature field and any
structuredContententry. For todos the newest snapshot wins; artifacts accumulate.This is inert on its own — nothing emits those keys yet, so it reads exactly what it read before. It has to ship and deploy before getsentry/seer#7612, otherwise Code Mode checklists would stop rendering in the window between the two.
Stacked on #121247.