Skip to content

#1203 Bar acceptance-criteria revision prompts to genuine conflicts - #1212

Merged
williamthorsen merged 8 commits into
mainfrom
1203
Aug 5, 2026
Merged

#1203 Bar acceptance-criteria revision prompts to genuine conflicts#1212
williamthorsen merged 8 commits into
mainfrom
1203

Conversation

@williamthorsen

@williamthorsen williamthorsen commented Aug 5, 2026

Copy link
Copy Markdown
Owner

What

Revises the code-review guidance to limit the circumstances under which the agent should offer to revise the acceptance criteria (AC). In particular, an implementation that goes beyond the AC or achieves them via a different route is not cause for revision. Revisions are offered only when the implementation materially deviates from or deliberately drops AC; where the review has already raised a finding on that behavior, the guidance is to leave the AC as written rather than restate them around the code. Work that is merely unbuilt, and work beyond what the AC asked, stay in the review's compliance report rather than prompting a ticket edit.

Why

Reviews were prompting for a ticket edit on more than half the tickets they reviewed, and most of those prompts were unwarranted: the implementation satisfied the criteria and only the wording differed. Each prompt cost a decision, and accepting one wrote a local ticket snapshot that then outranked the live issue for later reviews, so an unwarranted revision silently repointed the contract rather than merely costing a round trip.

Details

🐛 Bug fixes

  • The compliance status carries a stated bar. A criterion is met when the implementation delivers its substantive guarantee, whatever shape it took, and implementation that exceeds a criterion is met as well; an undelivered guarantee names in its notes whether the work is unbuilt or in conflict with the criterion.
  • The deviations menu renders off its own criteria delta rather than off the compliance status rows, so a review with nothing to propose shows no menu at all. An unbuilt criterion and implementation that goes beyond the criteria each contribute no delta line.
  • Unplanned work drives no ticket edit anywhere in the next-steps machinery — not as a render condition, not as grounds for a recommendation, and not as a source of delta lines. It stays reported in the review's unplanned-work section.
  • The deviations recommendation rules are replaced. An update is recommended where the implementation's direction is deliberate and sound; leaving the criteria alone is recommended where the review raised a finding on the conflicting behavior; neither is recommended where the reviewer cannot tell which side is wrong.
  • align-ticket-with-implementation gained a ratified-delta mode, under which a caller-supplied previewed delta is the whole of the revision and a change the delta does not contain stops the edit rather than widening it. It composes with the existing criteria-only mode: one scopes which sections change, the other how much changes within them.
  • The deviations trigger is scoped to the ticket's compliance subsection, so a pull-request description at odds with the implementation routes to the source-divergence menu, whose edit targets the description rather than the ticket.

🧪 Tests

  • The mode-contract suite anchors the new ratified-delta mode across its caller and callee halves, and the spec-inlining suite anchors the narrowed trigger, the unbuilt carve-out, and the finding carve-out in the replaced recommendation rules.

Closes #1203

A branch review counts an acceptance criterion as met when the implementation delivers its substantive guarantee, whatever the criterion's wording, and when the implementation goes beyond what the criterion asks. A criterion counts as unmet only when the guarantee is undelivered, and the review states whether the work is simply unbuilt or took a direction the criterion contradicts.
A branch review offers to revise the ticket's acceptance criteria only when the implementation deliberately took a direction a criterion contradicts. Work that is simply unbuilt, and work that goes beyond what the criteria ask, no longer produce the offer.

When the offer does appear and the review already raised a finding on the conflicting behavior, it recommends leaving the criteria alone, so accepting the edit cannot bury the finding.
When a caller hands ticket alignment a set of changes the user has already approved, the revision is exactly those changes: every other criterion and section carries through untouched, and a change the approved set did not contain stops the edit for confirmation rather than riding along with it.

Invoked on its own, ticket alignment still describes the whole branch.
Covers the clauses that keep a branch review from proposing a ticket edit it has no grounds for: the trigger's computation order, the carve-out for work that is unfinished rather than redirected, the ground for leaving criteria alone when a finding is already open, and the bound that holds ticket alignment to the changes its caller approved.
The combined next-steps example shows the deviations sub-block and the source-divergence sub-block proposing different edits, so a reader can see that each derives its own delta rather than sharing one.
The proposed-edit notation describes a reworded criterion as one the implementation contradicts, matching the bar that treats a satisfied criterion as met whatever shape the implementation took. A criterion the implementation satisfied differently no longer reads as grounds for a reword.
In a pull-request review, a criterion drawn from the pull-request description no longer offers to rewrite the ticket's acceptance criteria. Reconciling a description at odds with the implementation stays with the source-divergence offer, which edits the description instead.
A source-divergence menu's proposed-edit preview lists every narrative section its ticket edit would regenerate, so the preview describes the whole edit the user consents to.
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

Dependency audit

Production dependency audit passed.

@williamthorsen williamthorsen self-assigned this Aug 5, 2026
@williamthorsen
williamthorsen marked this pull request as ready for review August 5, 2026 23:46
@williamthorsen
williamthorsen merged commit f640da2 into main Aug 5, 2026
3 checks passed
@williamthorsen
williamthorsen deleted the 1203 branch August 5, 2026 23:53
williamthorsen added a commit that referenced this pull request Aug 7, 2026
…ssembly-mcp-v0.2.4 codeassembly-v0.6.0

codeassembly-v0.6.0
- #794 feat: Guide kb-add note placement with the store's declared taxonomy (#1223)
- #1111 feat: Declare which harnesses sync targets (#1221)
- #1214 feat: Allow an artifact to belong to more than one collection (#1219)
- #1186 drop!: Dissolve `common-mistakes` into its consumers' guidance (#1217)
- deps: Upgrade all deps to latest version
- #1203 fix: Bar acceptance-criteria revision prompts to genuine conflicts (#1212)
- #1196 feat: Add the .kb/taxonomy.yaml format with drift reporting and back-fill (#1210)
- #1165 feat: Make a vetted subset of the library declarable (#1207)
- #1197 feat: Report the retired `harnesses:` frontmatter key from `validate` (#1204)
- #963 feat!: Rename the harness id to rovo and qualify the frontmatter key (#1199)
- #1188 drop!: Retire the bundled Bitbucket inline-comment script (#1198)
- #1187 feat: Gate the boolean prefix on a test and add the tail rule it rests on (#1195)

factory-v0.2.4
- deps: Upgrade all deps to latest version
- deps: Upgrade all deps to latest version
- #1209 refactor: Clear factory's remaining lint violations and retire both deferral lists (#1216)
- #1208 refactor: Clear the visualizations lint violations and retire six rule deferrals (#1213)

kb-v0.4.0
- #794 feat: Guide kb-add note placement with the store's declared taxonomy (#1223)
- #1196 feat: Add the .kb/taxonomy.yaml format with drift reporting and back-fill (#1210)

codeassembly-lifecycle-v0.3.0
- #963 feat!: Rename the harness id to rovo and qualify the frontmatter key (#1199)

codeassembly-mcp-v0.2.4
- #1206 refactor: Retire fleet's lint deferrals (#1211)
- #1200 tooling: Retire mcp's lint deferrals and prune the dead root entries (#1205)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reviews prompt for acceptance-criteria updates that are not warranted

1 participant