review: re-review accountability, code-rendered from the reconciler keep-list#244
Open
jwbron wants to merge 4 commits into
Open
review: re-review accountability, code-rendered from the reconciler keep-list#244jwbron wants to merge 4 commits into
jwbron wants to merge 4 commits into
Conversation
🦋 Changeset detectedLatest commit: da1e1db The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
63c8e1e to
6a5adf7
Compare
…ity, code-rendered from the reconciler keep-list
6a5adf7 to
5dd182b
Compare
f85b74f to
491a983
Compare
Contributor
Author
This was referenced Jul 9, 2026
2 tasks
Contributor
Review live A/BBaseline:
Regressions (baseline caught, candidate missed)
Adversarial hard gate: FAILED on the candidate arm
Gate flips retried (best of three, flipped cases only)
Single-run-stable rows: recall, verdict agreement, regressions, adversarial gate. Judge quality and noise are not: they jitter run-to-run at this corpus size, and a regressed reviewer can score HIGHER on judge quality (fewer, surer comments each read better). Recall against the labeled specs is the load-bearing metric. |
…ut-artifact-upload' into jwbron/review-rereview-accountability
…ut-artifact-upload' into jwbron/review-rereview-accountability
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.
Summary
Second of five PRs in the fold-in batch two stack (stacked on #243; the stack is based on #238,
jwbron/review-trial-skill). The top of the batch-two stack will bejwbron/review-skill-rule-quote.Today a re-review resolves the threads the author fixed and says nothing about the rest. Observed on the v1.4.0 re-run lifecycle (Khan/webapp#40730): run 2 left three blocking threads open and unacknowledged under a bare "Changes requested" body, and run 3 approved with an empty body while resolving 11 threads and posting 8 notes. The author reading the verdict has no way to see which earlier findings remain open.
Failure scenario fixed: an author pushes a partial fix; the re-review resolves two of five threads and requests changes with an empty body; the author reasonably assumes everything visible is new, misses the three open blocking threads (one is collapsed as outdated), and pushes again without addressing them; the cycle repeats.
The verdict body now accounts for every prior thread, and the section is code-rendered rather than prompt-trusted:
lib/rereview.ts: renders the accountability section deterministically from thethread-reconciler's keep/resolve lists. Still-unaddressed threads are enumerated as links to the prior comments ("N of M prior review threads resolved; K still unaddressed as of <sha>:"), blocking first, each with the prior comment's Conventional-Comment label and a verbatim, code-truncated excerpt of its opening line (text this workflow itself posted on the earlier run; no new model prose). When the run resolved the last open threads, the section states "All N prior review threads are resolved.", so an approval accounts for its resolutions. Fail-open: missing or unparseable staging inputs render an empty section, leaving the body exactly as today.threads.jsonstaging gainsurl(the thread's first commenthtml_url, already present in theget_review_commentsoutput) to power the links; a thread without one renders as a plainpath:linetoken.renderReviewBodygains arereviewSectionslot spliced between the verdict head and the note lines, and review.md Step 6 tells the orchestrator to run the CLI and append itssectionverbatim, never to compose the accounting itself. The redundant-approval skip treats a non-empty section as content, and since resolved threads leavethreads.jsonon later runs, the "all resolved" line appears only on the run that resolved them (no repeat-approval noise).Scope cut, deliberate: the optional batched "still open as of <sha>" reply per still-open blocking thread is not implementable on gh-aw v0.81.6; there is no reply-capable safe output (
create_pull_request_review_commenthas no in-reply-to parameter, checked against the v0.81.6 tool schema), and a fresh inline comment at the same path:line would open a duplicate thread, which the reconciler dedup rules exist to prevent. The verdict-body enumeration carries the accountability.cc @jeresig
Testing
npx vitest run workflows/review: 477 tests green (20 new inlib/rereview.test.ts: label parsing, blocking-first ordering, singular/plural and all-resolved wording, link and no-url fallbacks, body splicing, CLI fail-open paths).npx tsc --noEmitclean.