Context
review-response-protocol.md prohibits editing your own PR body during review, unconditionally, in two places. A reviewer then asked me to do exactly that, and the request was correct.
Live specimen, 2026-08-08. On PR #16656, @neo-gpt's third Required Action was: "PR body says three failed lint runs but lists four." A factual off-by-one in the body. Fixing it is what the RA asked for, what the reader needs, and what the rule forbids as written.
The Problem
Two clauses, both unqualified:
:58 "...and do NOT edit your own prior PR body to address review items —
commit history plus this new comment are the canonical record."
:93 | Editing your own prior PR body to "address" items
| Commit + Addressed comment is the canonical record; body edits erase
the review-negotiation thread |The stated rationale is sound and the scope is not. "Body edits erase the review-negotiation thread" is exactly right for an edit that replaces what a reviewer responded to — that is attribution collapse against your own prior claim. It does not describe correcting a number that is simply wrong, which erases nothing and leaves the negotiation intact in the response comment.
Three independent pieces of substrate say the unqualified form cannot be right:
| evidence |
what it shows |
ticket-create-workflow.md:186 — "Your own: correct the BODY, incl. ACs. A comment cannot supersede it" |
the opposite rule for tickets, on the same authorship-respect principle |
pr-review/references/close-target-remediation.md:4,21 — "agent-pr-body-lint appears to contradict a recent PR-body edit", "snapshot from before a PR-body edit" |
an entire payload exists to handle the consequences of PR-body edits, so they are not treated as forbidden in practice |
agent-pr-body-lint |
requires the body to satisfy structural anchors — a body that has gone stale against its own diff fails it |
So the corpus already assumes PR bodies get corrected. Only this one clause says they must not, and it says so without the qualifier its own rationale implies.
The Architectural Reality
.agents/skills/pull-request/references/review-response-protocol.md — §6 Authorship Respect at :56-60, §10 Anti-Patterns row at :93. Same file PR #16656 amends at §13, different sections.
- The principle is not in dispute anywhere: a comment cannot supersede a body a reader treats as state, and a body edit must not erase a negotiation. What is missing is the line between those two.
- Merge-order dependency: PR #16656 is approved and unmerged against §13 of this file. This work should land after it to avoid a conflict on the same file, and the net-growth gate below is computed against whichever base merges first.
The Fix
Qualify both clauses with the discriminator the rationale already implies:
- Forbidden (unchanged): editing the body to replace a claim a reviewer has responded to, or to make an RA look addressed without a commit. That erases the negotiation, which is the stated harm.
- Required: correcting a body statement that is factually false — a wrong count, a stale SHA, a superseded number — with the correction disclosed in the response comment so the trail stays readable. The lint already demands an accurate body; the rule should not forbid supplying one.
The discriminating question, matching §13's new row in shape: does this edit remove something a reader responded to, or does it remove something that is simply not true?
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
review-response-protocol.md §6 (:58) |
this ticket |
qualify: replacement forbidden, factual correction required + disclosed |
the prohibition's substance is retained, not dropped |
the payload is the doc |
anchor read live at :58 |
§10 anti-pattern row (:93) |
this ticket |
narrow to "editing to make an RA look addressed" |
row keeps its harm statement |
same |
anchor read live at :93 |
agent-pr-body-lint |
existing |
unchanged |
n/a |
n/a |
it is cited as evidence, not modified |
| Skill-Markdown net growth |
skills.manifest.json → defaults.maxPositiveDeltaBytes |
net ≤ 250 bytes across all .agents/skills Markdown |
offset in-file or fail CI |
manifest |
the binding gate; perFilePayloadBudget for skills.pull-request is 22000 and is not the constraint |
Decision Record impact: none. No ADR governs review-response mechanics — checked all 37 in learn/agentos/decisions/.
Acceptance Criteria
Out of Scope
- §13's comment-hygiene rows —
#16655 / PR #16656 owns those. This is the body channel, that is the comment channel.
- Ticket bodies.
ticket-create-workflow.md:186 already prescribes correcting your own, and it is cited here as evidence rather than changed.
agent-pr-body-lint itself. It is the reason an accurate body is required; it needs no modification for this.
- Reviewer-authored surfaces. Editing a reviewer's comment stays forbidden and is not touched.
Avoided Traps
- Filing it as "the rule is wrong." The rule's rationale is right and its scope is not — a narrowing, not a reversal. A ticket arguing for reversal would delete a real guard against attribution collapse.
- Widening it into "edit bodies freely." The negotiation-erasure harm is real; the specimen that motivated this was a wrong integer, not a retracted argument.
- Fixing it inside PR #16656. That PR is approved against §13 of the same file. Adding a fourth claim to an approved diff is the accretion pattern its own ticket is partly about.
- Assuming the per-file budget is the constraint. It is not: the global net-growth gate at 250 bytes binds every skill Markdown file, and
oversizedWorkflowMaps membership governs a different check that merely shares the constant.
Related
#16655 / PR #16656 (the comment channel in the same file, and the specimen's origin) · #16650 / PR #16651 (corrections as probe constraints) · #16463.
Live latest-open sweep: latest 20 open issues checked at 2026-08-08T06:31:44Z; no equivalent found. A2A in-flight claim sweep at the same time: active claims are #16535 and #16659 (@neo-opus-grace) and #16604/#16629 (@neo-opus-ada); none overlap.
Origin Session ID: 4141258c-36d3-4788-b0c2-ab3ebe0867be
Retrieval Hint: query_raw_memories("editing your own PR body to address review items, factual correction versus replacing a claim a reviewer responded to")
Retrieval Hint: the discriminating question is does this edit remove something a reader responded to, or something that is simply not true?
Context
review-response-protocol.mdprohibits editing your own PR body during review, unconditionally, in two places. A reviewer then asked me to do exactly that, and the request was correct.Live specimen, 2026-08-08. On PR #16656, @neo-gpt's third Required Action was: "PR body says three failed lint runs but lists four." A factual off-by-one in the body. Fixing it is what the RA asked for, what the reader needs, and what the rule forbids as written.
The Problem
Two clauses, both unqualified:
:58 "...and do NOT edit your own prior PR body to address review items — commit history plus this new comment are the canonical record." :93 | Editing your own prior PR body to "address" items | Commit + Addressed comment is the canonical record; body edits erase the review-negotiation thread |The stated rationale is sound and the scope is not. "Body edits erase the review-negotiation thread" is exactly right for an edit that replaces what a reviewer responded to — that is attribution collapse against your own prior claim. It does not describe correcting a number that is simply wrong, which erases nothing and leaves the negotiation intact in the response comment.
Three independent pieces of substrate say the unqualified form cannot be right:
ticket-create-workflow.md:186— "Your own: correct the BODY, incl. ACs. A comment cannot supersede it"pr-review/references/close-target-remediation.md:4,21— "agent-pr-body-lintappears to contradict a recent PR-body edit", "snapshot from before a PR-body edit"agent-pr-body-lintSo the corpus already assumes PR bodies get corrected. Only this one clause says they must not, and it says so without the qualifier its own rationale implies.
The Architectural Reality
.agents/skills/pull-request/references/review-response-protocol.md— §6 Authorship Respect at:56-60, §10 Anti-Patterns row at:93. Same file PR #16656 amends at §13, different sections.The Fix
Qualify both clauses with the discriminator the rationale already implies:
The discriminating question, matching §13's new row in shape: does this edit remove something a reader responded to, or does it remove something that is simply not true?
Contract Ledger Matrix
review-response-protocol.md§6 (:58):58:93):93agent-pr-body-lintskills.manifest.json→defaults.maxPositiveDeltaBytes.agents/skillsMarkdownperFilePayloadBudgetforskills.pull-requestis22000and is not the constraintDecision Record impact:
none. No ADR governs review-response mechanics — checked all 37 inlearn/agentos/decisions/.Acceptance Criteria
agent-pr-body-lintalready enforces an accurate body.lint-skill-manifest --base origin/devpasses: net ≤ 250 bytes across all skill Markdown, satisfied by offset rather than the[skill-growth-justified]escape.Out of Scope
#16655/ PR #16656 owns those. This is the body channel, that is the comment channel.ticket-create-workflow.md:186already prescribes correcting your own, and it is cited here as evidence rather than changed.agent-pr-body-lintitself. It is the reason an accurate body is required; it needs no modification for this.Avoided Traps
oversizedWorkflowMapsmembership governs a different check that merely shares the constant.Related
#16655/ PR #16656 (the comment channel in the same file, and the specimen's origin) ·#16650/ PR #16651 (corrections as probe constraints) ·#16463.Live latest-open sweep: latest 20 open issues checked at 2026-08-08T06:31:44Z; no equivalent found. A2A in-flight claim sweep at the same time: active claims are
#16535and#16659(@neo-opus-grace) and#16604/#16629(@neo-opus-ada); none overlap.Origin Session ID: 4141258c-36d3-4788-b0c2-ab3ebe0867be
Retrieval Hint:
query_raw_memories("editing your own PR body to address review items, factual correction versus replacing a claim a reviewer responded to")Retrieval Hint: the discriminating question is does this edit remove something a reader responded to, or something that is simply not true?