Skip to content

R7 Q7: a per-leaf question on a whole-repository review - #98

Merged
buzzdan merged 3 commits into
mainfrom
claude/r7-q7-scope-aware
Oct 18, 2026
Merged

buzzdan merged 3 commits into
mainfrom
claude/r7-q7-scope-aware

Conversation

@buzzdan

@buzzdan buzzdan commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

What

  • Q7 knows its scope. On a whole-repository review, R7 Q7 (does a mutant survive a leaf's tests?) is not judged. Its receipt reads R7 Q7: <hits> hit(s) → per-leaf, not judged, R7's tally takes the partial form, and the not reached: line names the three leaf directories with the most hits as /<prefix>-review <dir>. On a scoped review the question is judged in full, as before.
  • Narrower lead. The Q7 Detect-grep skips the files its own Detection says to skip. In ts-react that is .tsx files, components/, hooks/ and context/; in Go and Python it is cmd/, main and handlers/.
  • The hunter's output block and SKILL.md's receipt list name the new receipt form.
  • Hand check reads the error assertions (Python, ts-react). The hand check opens the leaf's test file, also when the file is outside the review's scope. Then it reads each error assertion. In Python it does this once for each leaf file in scope, not only where a hit row points. An assertion that matches only a word all the leaf's errors share (toThrow('tenant'), match="tenant") is a violation. A removed check or a changed message survives such an assertion. Go and generic do not change.

Why

Every whole-repository run ended with R7 Q7: 0 of 50 hits judged. A mutation run or a hand check over every leaf never fits a hunter's budget, so the question produced nothing. Both plugins also missed the three R7.Q7 plants on substance in the A/B, even though their basename graders passed.

Measured on the fixtures (detection pass only, no model)

fixture Q7 hits before after plant files still hit
go-mini 36 36 3 of 3
py-mini 35 33 3 of 3
ts-react-mini 50 44 3 of 3

The narrower lead helps little. The main change is the routing.

Checks

  • task check, task lint-core, task docs:check: green. task test-gate: 2 macOS-only failures, fixed in test-gate: the repo-brain tests run on macOS #97.
  • Eval case: the ldd-evals PR "case G: a scoped review of the three leaves whose mutants survive".
  • Case G ×2 for each suite (model claude-sonnet-5, $28.08 in total over three rounds):
    • go: 2/2 in the first round, with no change after that.
    • ts-react: 0/2 in the first round. Every report missed the tenant error-assertion plant, and all other graders passed. 2/2 after the hand-check item.
    • Python: 0/2 in the first round, and 0/2 after the hand-check item. The hunter judged Q7 one hit at a time, and it cleared tenant.py on its length rows. 2/2 after the item "once per leaf file, not only where a hit row points".
  • Not measured yet: review-full for the new receipt and the not reached: line.

🤖 Generated with Claude Code

R7 Q7 asks for a mutation run, or a hand check, on each leaf. Under a
whole-repository hunter's budget that never fits, so every --all run ended
with "0 of 50 hits judged" and nothing else. On a whole-repository review the
question is now not judged: its receipt reads "per-leaf, not judged", R7's
tally takes the partial form, and the not-reached line names the three leaf
directories with the most hits as the scoped reviews that judge them. On a
scoped review the question is judged in full, as before.

The lead skips what the Detection already says to skip: .tsx components,
components/, hooks/ and context/ in ts-react; cmd/, main and handlers/ in Go
and Python. On the fixtures that moves the count from 50 to 44 (ts-react),
35 to 33 (py) and 36 to 36 (go); every Q7 plant keeps its hits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@buzzdan

buzzdan commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Eval case: buzzdan/ldd-evals#47

buzzdan and others added 2 commits October 18, 2026 16:58
In case G, no Python or ts-react report found the tenant mutant. The tests
match only the word "tenant", which every tenant error shares. In ts-react,
a removed empty check survives: the empty input reaches the character check,
and its error also contains "tenant". In Python, a changed message survives.
The hand check asked for rows at comparisons only, so it did not look at the
assertions.

The hand check now opens the leaf's test file, also when the file is outside
the review's scope, and reads each error assertion. An assertion on part of
the message is a violation. Go and generic do not change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Python R7 hunter judged Q7 one hit at a time. The only hit in tenant.py
is the length comparison, and the table has rows for it, so the hunter
cleared the file and did not read its error assertion. The hand check now
reads the error assertions of each leaf file in scope, also where no hit row
points.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@buzzdan
buzzdan merged commit f879936 into main Oct 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant