Skip to content

A lens can correct its own report after that round's receipt is written, and the receipt has no route back #719

Description

@topij

Severity M. 2026-09-09, #717's panel, round 1.

Reproduction

  1. The adversarial lens returned a terminal report whose verification section said its make test phase had not reached a terminal result — its first attempt was killed by a self-imposed timeout 300 and the rerun was still in flight when it reported.
  2. The cockpit recorded the round-1 receipt with pr_watch.py 717 --record-review "fallback:panel" --lenses adversarial,correctness --head 06ff7d7 --disposition -, and the disposition faithfully said the pytest phase reached no terminal result. That ordering is required: #666 makes the receipt precede the round's fixes.
  3. The lens then finished on its own and notified again, reporting 1 failed, 2484 passed, 1 skipped in 424.47s at the same sha, and explicitly superseding its earlier verification limit.

The posted disposition was now wrong about what the panel had established, and it was already on the pull request.

Mechanism

A receipt is head-bound and written once. #666's ordering forces it to be written before the round's fixes, which is before a resumable lens has necessarily finished. Nothing in fallback-review-panel.md's recording step, or in pr_watch.py's --record-review, defines what happens when a lens amends its own report afterwards:

  • Re-recording at the same head is not offered as a correction route, and re-running --record-review for a head that already has one is not described anywhere as an amendment.
  • The engine's own guard cuts the other way: #666 reports that a retroactive --record-review --head <older sha> is refused with PR head changed during review. That guard is right, and it means a correction cannot be backdated either.

In this instance the cockpit restated the correction in the next round's disposition. That worked only because there was a next round. A lens that amends its report after the final round has no carrier at all — the standing receipt keeps a claim the lens itself has withdrawn, and the merge rests on it.

This is also an instance of AGENTS.md's Prose that goes false, merged as b866298: outside state falsified a sentence in a record already published, and the record's author did not touch it.

Proposed

Name the case in the panel doctrine's recording step, and say which of these it is:

  • a follow-up comment on the pull request that references the receipt it corrects, leaving the receipt itself alone (cheapest, no engine change, and matches how the retroactive round-1 disposition on #709 was handled by hand); or
  • a sanctioned re-record at the same head, which would need --record-review to accept a second write for a head it already has and to make the supersession visible rather than silent.

Whichever is chosen, the doctrine should also say that a lens which yields a verification limit is expected to be resumed to a terminal result before the receipt is written where that is possible — which would have avoided this instance entirely, though not the general case.

Related

#666 (the ordering this collides with), #305 (the receipt/head binding), #32 (per-lens receipts from the lens's own context, which would make a lens's correction its own to record). All stay open.

https://claude.ai/code/session_01936YzSmyhWE9xmeHWYGsn1

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions