Prove a green suite was earned: changed-line coverage and mutation checks
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 50/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- javascript, python, rust
- Domain
- cli, devtools, testing-qa
Research direction
Start with the transcript Edit payloads and their oldString/newString and structuredPatch data, then trace how the Stop hook can inspect coverage reports without model calls. Implement one format end to end, such as coverage.xml, and verify that changed lines are mapped only when the report is newer than the last edit. Done means an unsupported result is reported when changed lines were not covered, while mutation remains opt-in via backcheck --mutate.
Written by the indexing model from the issue text.
Description
Today backcheck can tell you the suite passed and that nobody disabled a test to get there.
It cannot tell you the passing suite actually exercises the code that changed — the most
common way a green bar means nothing.
An agent edits src/billing.py, runs the suite, everything passes. If no test touches the new
branch, the green is real and meaningless.
What would close the gap
Changed-line coverage. The agent edited these files; the coverage report says these lines
ran. Were any of the changed lines covered?
✗ unsupported tests pass
`pytest` passed, but none of the 14 lines changed in src/billing.py were executed
by the suite (coverage.xml)
This is tractable because coverage output is a file on disk with a stable format, and
backcheck already knows exactly which lines were edited — the Edit payloads in the
transcript carry oldString/newString and a structuredPatch.
- parse
coverage.xml/.coverage(Python) - parse
lcov.info(JS, Rust via tarpaulin/llvm-cov) - parse
cobertura.xml(widely emitted) - map changed lines from the transcript's patches onto the coverage report
- report only when a coverage file exists and is newer than the last edit
Mutation signal (harder, later). A test that runs a line but asserts nothing about it still
passes when the line is broken. Scoped mutation testing on changed lines only is the rigorous
version of "was this green earned", and is
discussed
as the real answer to agents gaming test suites. It is slow and invasive, so it would have to be
opt-in (backcheck --mutate) and probably delegated to mutmut/cargo-mutants/stryker
rather than reimplemented.
Design constraint
Coverage parsing keeps the no-model-calls rule intact and stays deterministic, which is why it
is the right first step. Anything that needs to run code (mutation) must be explicitly opt-in
and must never happen inside the Stop hook — the hook has to stay fast enough to be invisible.
Start with one coverage format end-to-end rather than a general framework.
- Dominant language
- Rust
- Stars
- 0
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from VectorInstitute/backcheck
-
accuracy false-negative false-positive help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
good first issue help wanted runner
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
accuracy enhancement help wanted
Difficulty 5/5 Over a week Newbie friendliness 32/100
VectorInstitute/backcheck#11 ·
-
enhancement good first issue help wanted
Difficulty 4/5 3-5 days Newbie friendliness 55/100
VectorInstitute/backcheck#10 ·
-
enhancement good first issue help wanted
Difficulty 3/5 1-2 days Newbie friendliness 68/100
All issues in VectorInstitute/backcheck
Similar issues
-
area:casework bug criticality:p3 triage:needs-implementation
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
registrystack/registry-stack#1623 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
leptos-rs/leptos#4885 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
longbridge/gpui-kit#3276 ·
Maintainers usually reply within 1 day
-
A-Migration Guides D-Straightforward S-Ready-For-Implementation X-Uncontroversial
Difficulty 1/5 Under an hour Newbie friendliness 88/100
bevyengine/bevy-website#2607 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day