#1304 Gate the review divergence callout on criteria, not timestamps - #1305
Merged
Conversation
Revises `review-branch`'s specification-compliance guidance so the⚠️ divergence callout is gated on a content difference rather than a timestamp delta. Previously any nonzero gap between the two auto-resolved ticket candidates' `last_updated` values triggered it, which fired hardest on the healthy path: saving a local ticket snapshot and pushing the same refined text to the remote are two steps of one operation, so the timestamps differ while the content is identical. The callout is now one-directional. It is emitted only where the chosen source is the local snapshot and its acceptance criteria differ materially from the rejected remote candidate's, the case in which the contract the review judged is not the one published on the ticket. Where the remote candidate wins, the guidance directs silence: the snapshot is a plan-time artifact the selection rule already supersedes. Resolution correspondingly retains the rejected candidate's `content` rather than its `last_updated`, and retains nothing at all on the remote-wins branch.
Revises `review-branch`'s resolution bullet so the retention clause and the callout that consumes it turn on the same test. The clause retained the rejected candidate's `last_updated` alongside its `content`, though the callout renders no timestamp for that candidate and the `**Source:**` line renders only the chosen source's. The field had no consumer, and binding it to the divergence check invited the reading that timestamps still feed the comparison. Retention is now `content` alone. The condition widens from "when the local snapshot won over a remote candidate" to "when the chosen source is the local snapshot and a remote candidate existed", mirroring the render step. `--spec-source=local` forces a selection rather than winning one, so the narrower phrasing left the override path asking for a comparison whose input was never held.
Dependency auditProduction dependency audit passed. |
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.
What
Revises the guidance in
review-branchto correct the issue that agents treated any difference in timestamps between remote and local versions of a ticket as worthy of a warning. The new guidance surfaces a divergence only when the local snapshot guided the review, and only when their acceptance criteria differ enough to change a verdict.Why
A ticket refined during planning is snapshotted locally and pushed to the remote moments apart, so a review of a freshly-planned ticket reported a caution about two contracts that said the same thing. A downstream agent relaying that caution would typically add that the sources agree anyway, inverting the signal a second time.
Details
🐛 Bug fixes
## Specification complianceoutput template is now a comparison of the two candidates' acceptance criteria, read by the same extraction rule the compliance table states, so both candidates are judged by one rule. Materiality is bounded rather than left to judgment: a criterion on one side with no counterpart on the other (absence on either side counts), or worded so the verdict could differ; rewording that cannot change a verdict is not material.--ticket,pr_descriptionsource) survive alongside them.--spec-sourcepointer inside the callout narrows fromremote|localtoremote. On the only branch that renders, the reader is already on the local snapshot.contentin place of itslast_updated, and retains nothing where the remote candidate is chosen. Retention and render now turn on the same test, so the--spec-source=localoverride cannot reach the comparison with nothing held.Closes #1304