Skip to content

bug(reviewer): findings can name text that does not exist in the target file — Fixer cannot satisfy them, spec cycles, only a stubborn refusal ends it #614

Description

@wrenrichley

A third escalation shape, distinct from #612 — the Reviewer emitted a finding about text that does not exist

bookwright#234 (ticket 66572) escalated needs_help at 16:22Z. This is not
duplicate dispatch.
The Fixer applied one finding correctly (1accdba) and
could not apply the other, because the line it names has never been in the file.

Reviewer Finding 1: remove import pytest from sub-request 3's imports block.

Verified against the spec at branch HEAD, with a live control first — because
a zero from a mis-specified pattern is indistinguishable from a zero from an
absent string, and my own first control got this wrong (it assumed a four-space
indent where the block uses three, and returned 0 while seven import lines sat
in the file):

check result
import/from lines at any indent (control) 7 — grep is live
the word pytest anywhere 2 — both prose: a uv run pytest … command and a coverage note
import pytest 0

The Fixer's account is accurate and its refusal was correct.

Why this is its own report rather than a comment on #612

#612 is the same work dispatched twice. This is a finding about a fact that
was never true
— the Reviewer is not repeating stale work, it is describing a
file it did not read, or read at a revision that never existed.

The ticket had already been through four SpecReview→SpecFix rounds
(#3→#4, #5→#6, #7→#8, #9→#10) before this one. That churn is worth
looking at alongside the phantom: a Reviewer that can emit unfalsifiable
findings will keep a spec cycling indefinitely, because each round produces a
Fixer that cannot satisfy it and a Reviewer that re-raises it.

The asymmetry that makes this expensive

There is a standing operator rule to verify Fixer dismissals against the
artifact
— Fixers have fabricated resolutions before, so a dismissal is
treated as a claim requiring proof.

There is no equivalent check on the Reviewer. A Reviewer finding is taken as
ground truth by the Fixer that consumes it, and the only thing standing between
a phantom finding and an infinite fix loop is a Fixer stubborn enough to refuse
and escalate — which costs a human read either way.

Both roles can be wrong. Only one of them is currently doubted.

Asked for

A cheap, property-shaped guard: a Reviewer finding whose target quotes text
must be rejected at emission if that text does not appear in the file it names.

Findings that quote nothing are unaffected. This makes the failure impossible to
emit rather than something a downstream role has to survive.

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