Refs #17141
Refs #17163
The substrate half of #17141, and the sibling of #17163 — which carried the runtime half (per-family review budget + repair-minted re-entry, ACs 1-2) and merged as PR #17164. This leaf owns ACs 5, 6 and 7: the review-asset shape and its byte budget. #17141 stays open for ACs 3, 4, 8, 9 and 10.
Problem
Round 2 of a PR review is currently a smaller copy of Round 1. It carries the same fourteen sections, the same anchors, and the same permission to mint a fresh list of Required Actions — so a second round can quietly restate, renumber, or expand the first round's demands instead of answering them. The author then negotiates against a moving target, and the thread grows without converging.
That is the mechanism #17141 exists to close: Round 2 should be a disposition over Round 1, not a re-review. Each Round-1 required action gets quoted verbatim and marked ADDRESSED / DEFENDED / STILL_OPEN. A STILL_OPEN item keeps the original review authoritative rather than generating a replacement packet.
The Architectural Reality
- The canonical validator requires four premise anchors on every review body. A disposition round routed through it is refused for omitting exactly what the new shape removes — the guard enforces the structure the substrate is replacing, so the asset cannot land without a validation tier of its own.
- That tier has precedent in the same file:
micro-review and micro-delta already establish minimal floors beside the canonical one. This is a third entry in an existing pattern, not a new mechanism.
Premise Coherence must not be relaxed globally to make room. That anchor exists because a green checklist over a wrong premise is theater; weakening it for every shape to fit one new shape is the cheap fix and the wrong one.
- The review-body contract is duplicated between
ai/services/github-workflow/PullRequestService.mjs and .github/workflows/agent-pr-review-body-lint.yml. Each carries its own copy of the shape constants, so a new format must land in both or the managed path and CI disagree about what is valid. That duplication is unowned and predates this work.
- Two downstream docs teach the superseded contract:
CodebaseOverview.md describes "two ordinary RCs, then COMMENTED closure", and ProgressiveDisclosureSkills.md describes the same two-round shape. A doc that outlives the rule it describes is how the old model gets re-derived by the next reader.
The Fix
- A disposition-only Round-2 asset: anchor, the verbatim carried-action table with its three dispositions, and a verdict. Nothing that mints new actions.
- A Round-2 validation tier beside
micro-review and micro-delta, dispatched before the follow-up tier, leaving Premise Coherence intact for every existing shape.
- Registration in both contract copies — service and CI workflow.
- Round-1 guidance tightened to require artifact/population execution or a carried executable falsifier (AC-6).
- Both downstream docs updated to the shipped contract.
Out of Scope
- ACs 3, 4, 8, 9, 10 of #17141 — the COMMENT-channel refusal, direct-bypass telemetry, the plain-APPROVE default, the #17103 cohort receipt, and the full falsifier matrix. Those stay on the parent.
- Deduplicating the service/CI contract copies. Named here because this leaf pays the cost of it; fixing it is a separate owner.
- The exceptional Drop+Supersede template, which deliberately keeps full structure — AC-5 scopes the reduction to ordinary Round 2 only.
Acceptance Criteria
Decision Record impact
none — #17141 carries no Decision Record line and this leaf inherits its scope.
Evidence class
Parent-derived, with the split already established in production: #17163 carried ACs 1-2 and merged as PR #17164 on 2026-08-15, leaving this half explicitly unowned. The duplication and both stale docs were read at source during implementation, not inferred.
Live latest-open sweep: checked the latest 20 open issues at 2026-08-15T13:45:13Z; #17141 is the parent and #17163 the merged sibling — no equivalent leaf exists. A2A claim sweep at 2026-08-15T13:46Z: no competing claim; @neo-fable-clio's 13:09Z message confirms this half is mine.
🖖 Authored by Grace (Claude Opus 5, Claude Code). Session b17338dd-b474-494f-b08c-683044de2ddb.
Refs #17141 Refs #17163
The substrate half of #17141, and the sibling of #17163 — which carried the runtime half (per-family review budget + repair-minted re-entry, ACs 1-2) and merged as PR #17164. This leaf owns ACs 5, 6 and 7: the review-asset shape and its byte budget. #17141 stays open for ACs 3, 4, 8, 9 and 10.
Problem
Round 2 of a PR review is currently a smaller copy of Round 1. It carries the same fourteen sections, the same anchors, and the same permission to mint a fresh list of Required Actions — so a second round can quietly restate, renumber, or expand the first round's demands instead of answering them. The author then negotiates against a moving target, and the thread grows without converging.
That is the mechanism #17141 exists to close: Round 2 should be a disposition over Round 1, not a re-review. Each Round-1 required action gets quoted verbatim and marked
ADDRESSED/DEFENDED/STILL_OPEN. ASTILL_OPENitem keeps the original review authoritative rather than generating a replacement packet.The Architectural Reality
micro-reviewandmicro-deltaalready establish minimal floors beside the canonical one. This is a third entry in an existing pattern, not a new mechanism.Premise Coherencemust not be relaxed globally to make room. That anchor exists because a green checklist over a wrong premise is theater; weakening it for every shape to fit one new shape is the cheap fix and the wrong one.ai/services/github-workflow/PullRequestService.mjsand.github/workflows/agent-pr-review-body-lint.yml. Each carries its own copy of the shape constants, so a new format must land in both or the managed path and CI disagree about what is valid. That duplication is unowned and predates this work.CodebaseOverview.mddescribes "two ordinary RCs, thenCOMMENTEDclosure", andProgressiveDisclosureSkills.mddescribes the same two-round shape. A doc that outlives the rule it describes is how the old model gets re-derived by the next reader.The Fix
micro-reviewandmicro-delta, dispatched before the follow-up tier, leavingPremise Coherenceintact for every existing shape.Out of Scope
Acceptance Criteria
STILL_OPENpreserves the originalCHANGES_REQUESTEDwithout creating a new action packet; ordinary fresh findings become accepted risk. (=#17141 AC-5)pr-review/SKILL.mdrouter has zero positive byte delta; the PR body includes the/turn-memory-pre-flightMap-vs-Atlas audit. (=#17141 AC-7).agents/skills/pr-review/**bytes and procedural steps net-decrease or the growth is discharged throughlint-skill-manifest's sanctioned[skill-growth-justified: …]marker with a stated retirement trigger — the ordinary-Round-2 step count must fall regardless.validate_pr_review_bodyat the new tier rather than the canonical one, and the canonical tier still refuses a body missingPremise Coherence.CodebaseOverview.mdandProgressiveDisclosureSkills.mddescribe the shipped contract, with no surviving reference to the superseded two-round shape.Decision Record impact
none— #17141 carries no Decision Record line and this leaf inherits its scope.Evidence class
Parent-derived, with the split already established in production: #17163 carried ACs 1-2 and merged as PR #17164 on 2026-08-15, leaving this half explicitly unowned. The duplication and both stale docs were read at source during implementation, not inferred.
Live latest-open sweep: checked the latest 20 open issues at 2026-08-15T13:45:13Z; #17141 is the parent and #17163 the merged sibling — no equivalent leaf exists. A2A claim sweep at 2026-08-15T13:46Z: no competing claim; @neo-fable-clio's 13:09Z message confirms this half is mine.
🖖 Authored by Grace (Claude Opus 5, Claude Code). Session b17338dd-b474-494f-b08c-683044de2ddb.