review: fold in failure scenarios, the change-provenance gate, and orchestrator cost fixes#224
Closed
jwbron wants to merge 3 commits into
Closed
review: fold in failure scenarios, the change-provenance gate, and orchestrator cost fixes#224jwbron wants to merge 3 commits into
jwbron wants to merge 3 commits into
Conversation
…chestrator cost fixes Quality fold-ins: - failure_scenario is required on every finding (schema v2), emitted by every producer, carried into claims.json, and attacked by the claim-validator - quote-the-rule discipline: a skill/conventions violation is only flagged when the exact rule text and the exact violating line can both be quoted - amplification nuance: a pre-existing mechanism confirms only when the diff materially amplifies its consequence, and the finding must say so - method-angle procedures in the correctness reviewer: line scan, removed-behavior audit, cross-file trace Cost fixes: - change-provenance gate enforced in code (lib/diff.ts + lib/provenance.ts): a finding not anchored on an added/modified diff line cannot carry a blocking label, and pre-existing observations collapse into one note - whole-change reviewers and lenses read a generated-stripped diff staged by the provenance CLI (routing.json now exposes generatedFiles) - graceful budget exhaustion: the orchestrator lands the review from validated findings plus skipped-dimension notes instead of dying at the credits cap - batched safe-output tail: same-kind safe outputs (thread resolutions, comments) emit together in as few calls as possible
🦋 Changeset detectedLatest commit: 6381656 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 |
Two tripwires close the quiet recall leak where a partially garbled full.diff would silently demote one file's findings into the pre-existing note: - orphan-hunk check in computeDiffProvenance: hunk headers the section splitter could not attribute to a file mean the map is incomplete, so it carries a warning and the gate fails open - completeness cross-check in the provenance CLI: every files.json entry with hasPatch: true must appear in the parsed map (hasPatch is new in the Step 1 staging contract; false for binary/too-large files, absent entries skip the check for older staging)
This was referenced Jul 9, 2026
Contributor
Author
|
Split into a stack of three for reviewability and independent revert: #226 (failure_scenario schema v2 + corpus migration), #227 (change-provenance gate + generated-stripped diffs), #228 (prompt disciplines + cost fixes). The stack's tip is byte-identical to this branch apart from the changeset files. |
jwbron
added a commit
that referenced
this pull request
Jul 9, 2026
## Summary First of three PRs split out of #224 (stack: this PR, then #227 provenance gate, then #228 prompt disciplines). Each lands independently revertable; the three together are byte-identical to #224. Every finding (not just blocking ones) now carries a concrete `failure_scenario`: the specific inputs or state and the wrong outcome they produce. The field is required in the structured finding schema (`FINDING_SCHEMA_VERSION` bumped to 2), emitted by every producer (label-shape reviewers and all 11 specialist lenses), and carried verbatim into `claims.json`. The claim-validator now attacks exactly that stated scenario: confirmed means the named scenario occurs on the cited lines, and a scenario too vague to check caps at plausible. `FINDING_SCHEMA_VERSION` is now 2 (a required field invalidates previously serialized findings, per the schema module's own rule); every corpus fixture is migrated with a hand-written failure scenario. cc @jeresig ## Testing - `npx vitest run workflows/review`: 410 tests green, including the smoke set. - `npx tsc --noEmit` clean. Author: jwbron Reviewers: jeresig, jaredly Required Reviewers: Approved By: jeresig Checks: ✅ 3 checks were successful Pull Request URL: #226
jwbron
added a commit
that referenced
this pull request
Jul 9, 2026
…tripped diffs (#227) ## Summary Second of three PRs split out of #224; stacked on #226 (retarget to main when it merges). The follow-up prompt-disciplines PR stacks on this one. **Change-provenance gate, enforced in code.** New `lib/diff.ts` (unified-diff parsing) and `lib/provenance.ts` (gate + CLI) compute a per-file changed-line map (`provenance.json`). A finding whose anchor is not an added or modified line of the diff cannot carry a blocking label, and pre-existing observations collapse into at most one non-blocking collapsed note (`renderPreExistingNote`). Deletion findings pass via `removedAdjacent` lines. The gate fails open (gates nothing, with a review-body note) whenever the parsed map cannot be trusted: an unparseable diff, hunk headers not attributable to any file section, or a changed file whose patch is missing from the parse (`files.json` now carries a `hasPatch` flag so binary/too-large files do not false-positive the check). Wired through the no-post eval runner and covered by unit tests plus a new smoke corpus case (`provenance-pre-existing-note`). **Generated-stripped whole-change diffs (measured cost fix).** The provenance CLI also stages `full-stripped.diff` (the full diff minus files the router classifies `linguist-generated`; `routing.json` now exposes `generatedFiles`). Every whole-change reviewer and specialist lens reads it instead of the full diff; `pattern-triage` keeps the full diff since classification is its job. These ship together because the same CLI writes both artifacts. No trigger config or consumer files touched. cc @jeresig ## Testing - `npx vitest run workflows/review`: 452 tests green, including the new end-to-end smoke case for the provenance gate. - New unit suites: `lib/diff.test.ts`, `lib/provenance.test.ts`, plus `renderPreExistingNote` rendering tests and router `generatedFiles` coverage. - `npx tsc --noEmit` clean under the repo's strict compiler options. Author: jwbron Reviewers: jeresig, jwbron, somewhatabstract, kevinb-khan Required Reviewers: Approved By: jeresig Checks: ✅ 3 checks were successful Pull Request URL: #227
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
One release folding eight changes into the shared PR reviewer (
workflows/review/): five quality disciplines and three measured cost fixes. Smoke-set gated; no eval cycle needed.cc @jeresig
Quality fold-ins
failure_scenario: the specific inputs or state and the wrong outcome they produce. The field is required in the structured finding schema (FINDING_SCHEMA_VERSIONbumped to 2), emitted by every producer (label-shape reviewers and all 11 specialist lenses), and carried verbatim intoclaims.json. The claim-validator now attacks exactly that stated scenario: confirmed means the named scenario occurs on the cited lines, and a scenario too vague to check caps at plausible.lib/diff.ts(unified-diff parsing) andlib/provenance.ts(gate + CLI) compute a per-file changed-line map (provenance.json). A finding whose anchor is not an added or modified line of the diff cannot carry a blocking label, and pre-existing observations collapse into at most one non-blocking collapsed note (renderPreExistingNote). Deletion findings pass viaremovedAdjacentlines. The gate fails open (gates nothing, with a review-body note) whenever the parsed map cannot be trusted: an unparseable diff, hunk headers not attributable to any file section, or a changed file whose patch is missing from the parse (files.jsonnow carries ahasPatchflag so binary/too-large files do not false-positive the check). Wired through the no-post eval runner and covered by unit tests plus a new smoke corpus case.Measured cost fixes
full-stripped.diff(the full diff minus files the router classifieslinguist-generated;routing.jsonnow exposesgeneratedFiles). Every whole-change reviewer and specialist lens reads it instead of the full diff;pattern-triagekeeps the full diff since classification is its job.Notes
FINDING_SCHEMA_VERSIONis now 2 (a required field invalidates previously serialized findings, per the schema module's own rule); every corpus fixture is migrated with a hand-written failure scenario."review": minor.Testing
npx vitest run workflows/review: 447 tests green, including the smoke set and a new end-to-end smoke case for the provenance gate (provenance-pre-existing-collapses).lib/diff.test.ts,lib/provenance.test.ts, plusrenderPreExistingNoterendering tests and routergeneratedFilescoverage.lib/diff.tsandlib/provenance.tstype-check clean under the repo's strict compiler options.