sweep-tests

A preserved method from https://github.com/freddie-northam/skills at e8417d4e7724, path skills/sweep-tests, MIT. 73 of 412 source lines differ (18%), every difference claimed by an entry of the ledger with its reason. Entries: baseline-copies-2026-09-11, fold-2026-09-11, fold-walk-2026-09-11, series-s7-roster-2026-09-11.

  • correction 1
  • harness 2
  • lifecycle 3
  • location 1
  • method 2
  • scope 1

Files

Every difference, as it stands

SKILL.md

---
---
harnesschangedbaseline-copies-2026-09-11

greenline renders its own frontmatter: quoted name and description, the description from the manifest override where one existed, no upstream activation flag

name: sweep-tests
name: "sweep-tests"
description: >-
description: "Prune or audit a test suite with mutation proof, as its own announced task on a green suite. Invoke it by name when tests break on refactors that change no behavior, coverage is high but defects still ship, or production code carries seams only tests use."
Use when asked to prune, audit, or improve a test suite; when tests break on
refactors that change no behavior; when a test file changes in the same commit
as its source again and again; when coverage is high but defects still ship;
or when production code carries interfaces, mocks, dependency hooks, or
exported symbols that only tests use.
---
---
 
 
# Test value sweep
# Test value sweep
 
 
scopechangedfold-2026-09-11

one opening paragraph in the skill's voice after the title: a standing program, not an initiative stage, fired by name on a green suite in its own dedicated ticket and never inside another ticket's build; a red check goes to diagnosing-bugs and the review of the committed result to delivery-review; it deletes nothing unproved by mutation, adds no test and never certifies its own review

This skill is a standing program, not an initiative stage. It fires by name, when tests break on refactors that change no behavior, when coverage is high but defects still ship, or when production code carries seams only tests use, and it runs on a green suite in its own dedicated ticket, never inside another ticket's build. A red check goes to diagnosing-bugs; the review of the sweep's committed result is delivery-review's. It deletes nothing it has not proved by mutation, adds no test, and never certifies its own review.
 
A test must justify its presence. A test that changes when the implementation
A test must justify its presence. A test that changes when the implementation
changes, while the behavior stays the same, asserts implementation. Delete it.
changes, while the behavior stays the same, asserts implementation. Delete it.
 
 
5 unchanged lines
Then simplify the source. Seams in production code often exist only because
Then simplify the source. Seams in production code often exist only because
those tests demanded them. When the test goes, the seam goes with it.
those tests demanded them. When the test goes, the seam goes with it.
 
 
## The gate
## The gate
 
 
**Run this only when the suite is green.**
**Run this only when the suite is green.**
 
 
A red check makes test deletion fraud, not maintenance. When a check is red,
A red check makes test deletion fraud, not maintenance. When a check is red,
methodchangedseries-s7-roster-2026-09-11

the gate's 'repair the source' names its owner, diagnosing-bugs, and the sweep restarts from the top once the suite is green, a step upstream lacks; upstream's rule that no test is touched until then stands Confirmed by the operator on 2026-09-11 (method-rulings.md).

repair the source. You may not touch a test at all until the suite is green
repair the source through diagnosing-bugs, and restart the sweep from the top
again.
once the suite is green again. You may not touch a test at all until the suite
is green again.
 
 
lifecyclechangedfold-2026-09-11

upstream's 'separate task' is a dedicated ticket in .greenline/work/tickets/, and 'another task' is another ticket's build

This skill is a separate task. Announce it. Never run it inside another task.
This skill is a separate task with its own ticket in `.greenline/work/tickets/`.
Announce it. Never run it inside another ticket's build.
 
 
## Prove each deletion
## Prove each deletion
 
 
9 unchanged lines
You may not read a test and then declare it worthless. That judgment certifies
You may not read a test and then declare it worthless. That judgment certifies
itself, and it always says yes. Run the mutation check instead.
itself, and it always says yes. Run the mutation check instead.
 
 
**If the repository already has a mutation runner, use it.** Look for Stryker,
**If the repository already has a mutation runner, use it.** Look for Stryker,
mutmut, go-mutesting, PIT, or a `test:mutation` script. Its configuration holds
mutmut, go-mutesting, PIT, or a `test:mutation` script. Its configuration holds
knowledge this skill does not have, such as which files repay the run and which
knowledge this skill does not have, such as which files repay the run and which
generate thousands of worthless mutants.
generate thousands of worthless mutants.
 
 
**The mutation scope must cover the subject file of every test you delete in the
**The mutation scope must cover the subject file of every test you delete in the
batch.** A test whose subject sits outside the scope is never proved, however
batch.** A test whose subject sits outside the scope is never proved, however
green the score looks. Widen the scope, or split the batch.
green the score looks. Widen the scope, or split the batch.
 
 
harnesschangedfold-2026-09-11

the <skill-dir> in upstream's command is this skill's installed directory, found by the glob **/sweep-tests/bin/mutate.mjs under the installed skills rather than by assuming a harness; the command itself is unchanged

Only when the repository has none, use the tool that ships here:
Only when the repository has none, use the tool that ships here, `bin/mutate.mjs`
in this skill's installed directory. Find it with the glob
`**/sweep-tests/bin/mutate.mjs` under the installed skills rather than assuming
a harness:
 
 
```bash
```bash
node <skill-dir>/bin/mutate.mjs --file src/thing.js --fn theFunction
node <skill-dir>/bin/mutate.mjs --file src/thing.js --fn theFunction
3 unchanged lines
```
```
 
 
Either tool breaks the source on purpose, one change at a time, and runs the
Either tool breaks the source on purpose, one change at a time, and runs the
suite after each change. A mutant that survives is a behavior that no test
suite after each change. A mutant that survives is a behavior that no test
covers.
covers.
 
 
methodchangedseries-s7-roster-2026-09-11

the bundled mutate.mjs masks strings and comments but its raw-text ternary operator can swap a quoted ternary inside a comment, so a survivor is judged only after the measurement is validated, and a survivor on an error path is the highest-value finding and is never pruned on coverage alone: two criteria upstream does not state Confirmed by the operator on 2026-09-11 (method-rulings.md).

Validate the measurement before judging a survivor. The bundled tool masks
strings and comments for its comparison and numeric operators, but its raw-text
ternary operator can still swap a quoted ternary example inside a comment, and
its "defect your suite ships" line is a candidate, not a diagnosis. A mutation
that changes no executable behavior, or whose validity is unresolved, is an
invalid measurement, not a shipped defect: the run proves no deletion, so keep
the tests and seams, record the invalid measurement with the sweep's evidence,
and use an already available capable runner only within the authorized scope.
Never add a test for a comment, and never drop a baseline mutant to make the
score pass.
 
A survivor inside error-handling code is the sweep's highest-value finding.
Code that has not run does not work, and error handlers run rarest of all: a
study of production failures in distributed data-intensive systems (Yuan et
al., OSDI 2014) found 92% of catastrophic failures came from incorrect handling
of non-fatal errors the software explicitly signaled. A test that exercises an
error path is never pruned as redundant on coverage grounds alone; weigh its
deletion against what its mutants proved.
 
**Take the report before you delete anything. Take it again at the end.**
**Take the report before you delete anything. Take it again at the end.**
 
 
Compare mutants by identity, not by number. Three failures hide behind an
Compare mutants by identity, not by number. Three failures hide behind an
19 unchanged lines
unchanged total:
unchanged total:
 
 
1. **A trade.** Two mutants swap status and the total holds.
1. **A trade.** Two mutants swap status and the total holds.
2. **A disappearance.** You removed the source a mutant lived in, so the mutant
2. **A disappearance.** You removed the source a mutant lived in, so the mutant
is gone. Nothing moved from killed to survived, and the behaviour is now
is gone. Nothing moved from killed to survived, and the behaviour is now
untested. This is the one that catches seam removal.
untested. This is the one that catches seam removal.
3. **A scope change.** The second run covered fewer files than the first.
3. **A scope change.** The second run covered fewer files than the first.
 
 
So: record every baseline mutant identifier before you start, with the source
So: record every baseline mutant identifier before you start, with the source
hash and the exact test command. At the end, **every baseline mutant must still
hash and the exact test command. At the end, **every baseline mutant must still
exist and must still be killed.** A missing mutant fails the sweep exactly as a
exist and must still be killed.** A missing mutant fails the sweep exactly as a
survived one does.
survived one does.
 
 
The suite stays green throughout, so green proves nothing here.
The suite stays green throughout, so green proves nothing here.
 
 
The score is not proof either. It shows that the mutants this runner generated,
The score is not proof either. It shows that the mutants this runner generated,
under this operator set, over this file set, kept their status. Behaviour no
under this operator set, over this file set, kept their status. Behaviour no
operator reaches is invisible to it, and a dynamic caller found only through a
operator reaches is invisible to it, and a dynamic caller found only through a
configuration string or a plugin registry is invisible to your grep. **A sweep
configuration string or a plugin registry is invisible to your grep. **A sweep
without a score has proved nothing. A sweep with one has proved something
without a score has proved nothing. A sweep with one has proved something
narrow.** Say which.
narrow.** Say which.
 
 
locationchangedfold-2026-09-11

the before-report and the after-report go to different paths under the sweep ticket's evidence home, .greenline/work/evidence/TKT-NNN/

Write the before-report and the after-report to different paths. A runner that
Write the before-report and the after-report to different paths under the
overwrites its own baseline leaves you unable to find the mutant you lost.
sweep ticket's evidence home, `.greenline/work/evidence/TKT-NNN/`. A runner
that overwrites its own baseline leaves you unable to find the mutant you lost.
 
 
correctionchangedfold-2026-09-11

upstream's 'the report names one killer for each mutant' holds only for a runner that reports per-test identities; the bundled mutate.mjs reports suite-level killed and survived outcomes and names no killer, so that attribution is never invented and its absence is not evidence that a test is redundant; the rest of the paragraph (run order, not ownership; shortlist, never proof; the rerun is the proof) is upstream's

**The report names one killer for each mutant: the first test that reached it.**
**A runner that reports per-test identities names one killer for each mutant:
That is run order, not ownership. A test credited with no kills can still be the
the first test that reached it.** That is run order, not ownership. The bundled
only real net under a mutant that another test happens to reach first. Use the
`mutate.mjs` reports suite-level killed and survived outcomes and names no
report to shortlist candidates. Never use it as proof. The rerun is the proof.
killer; do not invent that attribution, and its silence is not evidence that a
test is redundant. A test credited with no kills can still be the only real net
under a mutant that another test happens to reach first. Use the report to
shortlist candidates. Never use it as proof. The rerun is the proof.
 
 
### Delete in batches
### Delete in batches
 
 
62 unchanged lines
Time one scoped run before you plan the sweep. The cost ranges from seconds to
Time one scoped run before you plan the sweep. The cost ranges from seconds to
many minutes, so whether one run for each candidate is affordable depends on the
many minutes, so whether one run for each candidate is affordable depends on the
repository. When it is not, delete a batch and run once.
repository. When it is not, delete a batch and run once.
 
 
- The score holds. The whole batch stands.
- The score holds. The whole batch stands.
- The score falls. One test in the batch was the only killer of a mutant.
- The score falls. One test in the batch was the only killer of a mutant.
Restore the batch, halve it, and run again. Repeat until you find the test
Restore the batch, halve it, and run again. Repeat until you find the test
that matters, then keep it and delete the rest.
that matters, then keep it and delete the rest.
 
 
A batch proof is weaker than a proof for each test. It shows that no deletion
A batch proof is weaker than a proof for each test. It shows that no deletion
was the unique killer of a mutant. That is enough, and it is affordable.
was the unique killer of a mutant. That is enough, and it is affordable.
 
 
## Delete
## Delete
 
 
- Tests that assert that a call happened, when the call is not the contract
- Tests that assert that a call happened, when the call is not the contract
- Tests whose assertions restate the source line above them
- Tests whose assertions restate the source line above them
- Snapshot tests that you regenerate instead of read
- Snapshot tests that you regenerate instead of read
- Tests that exercise only a mock
- Tests that exercise only a mock
- Repeated coverage of one behavior across many cases
- Repeated coverage of one behavior across many cases
- Tests for a private function that a public function already reaches
- Tests for a private function that a public function already reaches
 
 
## Keep
## Keep
 
 
- The only test that covers a behavior, however ugly it is
- The only test that covers a behavior, however ugly it is
- Call assertions on a unit whose whole job is to drive other units. There the
- Call assertions on a unit whose whole job is to drive other units. There the
call and its arguments are the result, and the mutation score will show it
call and its arguments are the result, and the mutation score will show it
- Regression tests that name a defect or an issue
- Regression tests that name a defect or an issue
- Contract tests at a boundary that you do not own
- Contract tests at a boundary that you do not own
- Property tests and fuzz tests
- Property tests and fuzz tests
 
 
## Remove the seams
## Remove the seams
 
 
A deleted test may have been the only caller of a seam. Grep for each one.
A deleted test may have been the only caller of a seam. Grep for each one.
 
 
- An interface with one implementation
- An interface with one implementation
- A constructor parameter that only a test supplies
- A constructor parameter that only a test supplies
- An exported symbol that only tests import
- An exported symbol that only tests import
- A mock or fake, and the hook it plugs into
- A mock or fake, and the hook it plugs into
- A flag that only a test reads
- A flag that only a test reads
 
 
Delete the seam, or inline it. Follow each simplification to its end. When you
Delete the seam, or inline it. Follow each simplification to its end. When you
remove a seam and a wrapper becomes a pass-through, remove the wrapper too.
remove a seam and a wrapper becomes a pass-through, remove the wrapper too.
 
 
**A seam can have one caller, and that caller can be a test in another file.
**A seam can have one caller, and that caller can be a test in another file.
Leave that seam alone.** Report it as a candidate for a later sweep. A sweep that
Leave that seam alone.** Report it as a candidate for a later sweep. A sweep that
reaches past its own scope breaks files that nobody asked you to touch.
reaches past its own scope breaks files that nobody asked you to touch.
 
 
**A grep does not find every caller.** Dependency injection tokens, plugin
**A grep does not find every caller.** Dependency injection tokens, plugin
registries, configuration strings and generated registrations all reference a
registries, configuration strings and generated registrations all reference a
symbol without naming it in a way `rg` matches. Removing such a seam keeps every
symbol without naming it in a way `rg` matches. Removing such a seam keeps every
unit test green, removes the mutants that lived in it, and fails in production.
unit test green, removes the mutants that lived in it, and fails in production.
When a symbol is exported across a package boundary, treat the grep as
When a symbol is exported across a package boundary, treat the grep as
inconclusive and leave it.
inconclusive and leave it.
 
 
## Report
## Report
 
 
Close with the two scores and one table.
Close with the two scores and one table.
 
 
```
```
Tests: 26 -> 9 (-65%) Mutation score: 16/18 -> 16/18 (no change)
Tests: 26 -> 9 (-65%) Mutation score: 16/18 -> 16/18 (no change)
```
```
 
 
The table lists each test you deleted and each seam you removed. Prose is not
The table lists each test you deleted and each seam you removed. Prose is not
the report.
the report.
 
 
lifecyclechangedfold-2026-09-11

the sweep's evidence and its review: the Report section says the baselines, survivors and kills, both reports, the table and the resulting checks stay with the sweep's ticket under its evidence home, acceptance is judged against those measurements since an aggregate score cannot prove each baseline mutant remains killed, and the committed result goes to delivery-review like any implementation with the sweeper never writing its own review record; the Handoff section names the green suite and the sweep's own ticket consumed, the reports and table produced under .greenline/work/evidence/TKT-NNN/ with the ticket implementing then implemented, and delivery-review next

The baselines, the identified survivors and kills, both reports, the table and
the resulting checks stay with the sweep's ticket under its evidence home, and
acceptance is judged against those measurements: an aggregate score alone
cannot prove that each baseline mutant remains killed. The sweep is
implementation work. Commit its result under the ticket and hand it to
delivery-review like any implementation; the sweeper never writes its own
review record.
 
## Don't
## Don't
 
 
- Delete a test to turn a red check green
- Delete a test to turn a red check green
10 unchanged lines
- Delete a test that you did not prove by mutation
- Delete a test that you did not prove by mutation
- Rewrite a test and count that as a sweep
- Rewrite a test and count that as a sweep
- Add a test in this pass
- Add a test in this pass
- Change anything outside the test suite and its seams
- Change anything outside the test suite and its seams
 
 
## It's working if
## It's working if
 
 
- Every deletion has a mutation report before it and one after it.
- Every deletion has a mutation report before it and one after it.
- Both reports name the same mutants, not just the same total.
- Both reports name the same mutants, not just the same total.
- The close is two scores and a table. Prose is not the report.
- The close is two scores and a table. Prose is not the report.
- Seams disappear in the same pass as the tests that demanded them.
- Seams disappear in the same pass as the tests that demanded them.
- A sweep that cannot prove a deletion says so, and keeps the test.
- A sweep that cannot prove a deletion says so, and keeps the test.
- You deleted nothing while a check showed red.
- You deleted nothing while a check showed red.
lifecyclechangedfold-2026-09-11

the sweep's evidence and its review: the Report section says the baselines, survivors and kills, both reports, the table and the resulting checks stay with the sweep's ticket under its evidence home, acceptance is judged against those measurements since an aggregate score cannot prove each baseline mutant remains killed, and the committed result goes to delivery-review like any implementation with the sweeper never writing its own review record; the Handoff section names the green suite and the sweep's own ticket consumed, the reports and table produced under .greenline/work/evidence/TKT-NNN/ with the ticket implementing then implemented, and delivery-review next

 
## Handoff
 
Consumes: a green suite and the sweep's own ticket at ready
Produces: the before and after mutation reports at different paths, the deletion and seam table, and the baselines and kills, under .greenline/work/evidence/TKT-NNN/; the ticket at implementing then implemented with its committed result
Next: delivery-review reviews the sweep's ticket like any implementation

The timeline

Each entry that touched this method, with the differences it claimed as they stood at its commit, read from the repository's history.

2026-09-11 baseline-copies-2026-09-11

the cutover to an edited copy (ADR 0039): the composed output written as the copy, every difference from upstream claimed with the reason of the overlay that produced it

SKILL.md

harnesschangedbaseline-copies-2026-09-11

greenline renders its own frontmatter: quoted name and description, the description from the manifest override where one existed, no upstream activation flag

name: sweep-tests
name: "sweep-tests"
description: >-
description: "Prune or audit a test suite with mutation proof, as its own announced task on a green suite. Invoke it by name when tests break on refactors that change no behavior, coverage is high but defects still ship, or production code carries seams only tests use."
Use when asked to prune, audit, or improve a test suite; when tests break on
refactors that change no behavior; when a test file changes in the same commit
as its source again and again; when coverage is high but defects still ship;
or when production code carries interfaces, mocks, dependency hooks, or
exported symbols that only tests use.
lifecyclechangedbaseline-copies-2026-09-11

greenline prelude, to fold: a standing program in its own ticket; the installed mutate.mjs reports suite-level outcomes; validate the measurement before judging a survivor; red checks go to diagnosing-bugs

**greenline prelude: a standing program, not an initiative stage.** A sweep is its own task: run it through a dedicated ticket, never inside another ticket's build.
 
The `<skill-dir>` in the body's `node <skill-dir>/bin/mutate.mjs` is this skill's own installed directory, `.claude/skills/sweep-tests/` under Claude Code and `.agents/skills/sweep-tests/` under Codex. Glob for `**/sweep-tests/bin/mutate.mjs` rather than assuming a harness.
 
The body's first-killer discussion applies only when the chosen runner reports individual test identities. The bundled `mutate.mjs` reports suite-level killed/survived outcomes, not which test reached a mutant first. Do not invent that attribution. Its before/after mutant comparison remains the required proof; absence of per-test attribution is not evidence that a test is redundant.
 
Validate the measurement before judging a survivor. The bundled fallback masks comments for its comparison and numeric operators, but its raw-text ternary operator can still swap a quoted ternary example inside a comment; its unconditional "defect your suite ships" output is a candidate, not a diagnosis. If a generated mutation changes no executable behavior, or its validity is unresolved, the run is inconclusive for deletion proof: retain the tests and seams, record the invalid measurement, and use an already available capable runner only within the authorized scope. Do not add a test for a comment or silently drop a baseline mutant to make the score pass. This preserves the body's rule that an unproven deletion keeps the test.
 
The gate's "repair the source" has an owner: a red check goes to `diagnosing-bugs`, and the sweep restarts from the top once the suite is green again. Nothing is deleted while any check is red.
 
Error paths are the least-executed, most-catastrophic code: code that has not run does not work, and error handlers run rarest of all. A study of production failures in distributed data-intensive systems (Yuan et al., OSDI 2014) found 92% of catastrophic failures resulted from incorrect handling of non-fatal errors explicitly signaled in software. So a mutant surviving inside error-handling code is the sweep's highest-value finding, and a test exercising an error path is never pruned as redundant on coverage grounds alone; weigh its deletion against what its mutants proved.
 
lifecyclechangedbaseline-copies-2026-09-11

greenline completion, to fold: retain baselines, kills and the deletion table with the sweep's ticket; the sweeper does not certify its own review

 
 
## greenline completion: the sweep's evidence
 
Retain the mutation baselines, identified survivors and kills, deletion/seam table, and resulting checks with the sweep's ticket. The current execution account records consulted guidance and application evidence. Judge acceptance against the actual measurements; an aggregate score alone cannot prove that each baseline mutant remains killed. The sweep is implementation work. Its committed result receives an independent review under the common work contract; the sweeper does not certify its own review by writing a review artifact.

2026-09-11 fold-2026-09-11

the fold (ADR 0039, S3): the prelude and completion are gone; the dedicated ticket, the installed mutate.mjs and what it can and cannot report, the measurement validation, the error-path priority, the reports' evidence home and the review by delivery-review sit at the steps that use them, with the Handoff section the skills-handoff gate parses

SKILL.md

scopechangedfold-2026-09-11

one opening paragraph in the skill's voice after the title: a standing program, not an initiative stage, fired by name on a green suite in its own dedicated ticket and never inside another ticket's build; a red check goes to diagnosing-bugs and the review of the committed result to delivery-review; it deletes nothing unproved by mutation, adds no test and never certifies its own review

This skill is a standing program, not an initiative stage. It fires by name, when tests break on refactors that change no behavior, when coverage is high but defects still ship, or when production code carries seams only tests use, and it runs on a green suite in its own dedicated ticket, never inside another ticket's build. A red check goes to diagnosing-bugs; the review of the sweep's committed result is delivery-review's. It deletes nothing it has not proved by mutation, adds no test, and never certifies its own review.
 
dependencychangedfold-2026-09-11

the gate's 'repair the source' names its owner: a red check goes to diagnosing-bugs and the sweep restarts from the top once the suite is green; upstream's rule that no test is touched until then stands unchanged

repair the source. You may not touch a test at all until the suite is green
repair the source through diagnosing-bugs, and restart the sweep from the top
again.
once the suite is green again. You may not touch a test at all until the suite
is green again.
lifecyclechangedfold-2026-09-11

upstream's 'separate task' is a dedicated ticket in .greenline/work/tickets/, and 'another task' is another ticket's build

This skill is a separate task. Announce it. Never run it inside another task.
This skill is a separate task with its own ticket in `.greenline/work/tickets/`.
Announce it. Never run it inside another ticket's build.
harnesschangedfold-2026-09-11

the <skill-dir> in upstream's command is this skill's installed directory, found by the glob **/sweep-tests/bin/mutate.mjs under the installed skills rather than by assuming a harness; the command itself is unchanged

Only when the repository has none, use the tool that ships here:
Only when the repository has none, use the tool that ships here, `bin/mutate.mjs`
in this skill's installed directory. Find it with the glob
`**/sweep-tests/bin/mutate.mjs` under the installed skills rather than assuming
a harness:
correctionchangedfold-2026-09-11

a survivor is judged only after the measurement is validated: the bundled mutate.mjs masks strings and comments for its comparison and numeric operators but its raw-text ternary operator can swap a quoted ternary inside a comment, and its 'defect your suite ships' line is a candidate, not a diagnosis, so a mutation that changes no executable behavior or whose validity is unresolved is an invalid measurement that proves no deletion (keep the tests and seams, record it with the sweep's evidence, use an available capable runner only within the authorized scope, never add a test for a comment or drop a baseline mutant); the same paragraph carries greenline's priority that a survivor inside error-handling code is the highest-value finding (Yuan et al., OSDI 2014) and an error-path test is never pruned on coverage grounds alone, which restates upstream's proof-by-mutation rule for that class of test

Validate the measurement before judging a survivor. The bundled tool masks
strings and comments for its comparison and numeric operators, but its raw-text
ternary operator can still swap a quoted ternary example inside a comment, and
its "defect your suite ships" line is a candidate, not a diagnosis. A mutation
that changes no executable behavior, or whose validity is unresolved, is an
invalid measurement, not a shipped defect: the run proves no deletion, so keep
the tests and seams, record the invalid measurement with the sweep's evidence,
and use an already available capable runner only within the authorized scope.
Never add a test for a comment, and never drop a baseline mutant to make the
score pass.
 
A survivor inside error-handling code is the sweep's highest-value finding.
Code that has not run does not work, and error handlers run rarest of all: a
study of production failures in distributed data-intensive systems (Yuan et
al., OSDI 2014) found 92% of catastrophic failures came from incorrect handling
of non-fatal errors the software explicitly signaled. A test that exercises an
error path is never pruned as redundant on coverage grounds alone; weigh its
deletion against what its mutants proved.
 
locationchangedfold-2026-09-11

the before-report and the after-report go to different paths under the sweep ticket's evidence home, .greenline/work/evidence/TKT-NNN/

Write the before-report and the after-report to different paths. A runner that
Write the before-report and the after-report to different paths under the
overwrites its own baseline leaves you unable to find the mutant you lost.
sweep ticket's evidence home, `.greenline/work/evidence/TKT-NNN/`. A runner
that overwrites its own baseline leaves you unable to find the mutant you lost.
correctionchangedfold-2026-09-11

upstream's 'the report names one killer for each mutant' holds only for a runner that reports per-test identities; the bundled mutate.mjs reports suite-level killed and survived outcomes and names no killer, so that attribution is never invented and its absence is not evidence that a test is redundant; the rest of the paragraph (run order, not ownership; shortlist, never proof; the rerun is the proof) is upstream's

**The report names one killer for each mutant: the first test that reached it.**
**A runner that reports per-test identities names one killer for each mutant:
That is run order, not ownership. A test credited with no kills can still be the
the first test that reached it.** That is run order, not ownership. The bundled
only real net under a mutant that another test happens to reach first. Use the
`mutate.mjs` reports suite-level killed and survived outcomes and names no
report to shortlist candidates. Never use it as proof. The rerun is the proof.
killer; do not invent that attribution, and its silence is not evidence that a
test is redundant. A test credited with no kills can still be the only real net
under a mutant that another test happens to reach first. Use the report to
shortlist candidates. Never use it as proof. The rerun is the proof.
lifecyclechangedfold-2026-09-11

the sweep's evidence and its review: the Report section says the baselines, survivors and kills, both reports, the table and the resulting checks stay with the sweep's ticket under its evidence home, acceptance is judged against those measurements since an aggregate score cannot prove each baseline mutant remains killed, and the committed result goes to delivery-review like any implementation with the sweeper never writing its own review record; the Handoff section names the green suite and the sweep's own ticket consumed, the reports and table produced under .greenline/work/evidence/TKT-NNN/ with the ticket implementing then implemented, and delivery-review next

The baselines, the identified survivors and kills, both reports, the table and
the resulting checks stay with the sweep's ticket under its evidence home, and
acceptance is judged against those measurements: an aggregate score alone
cannot prove that each baseline mutant remains killed. The sweep is
implementation work. Commit its result under the ticket and hand it to
delivery-review like any implementation; the sweeper never writes its own
review record.
 
lifecyclechangedfold-2026-09-11

the sweep's evidence and its review: the Report section says the baselines, survivors and kills, both reports, the table and the resulting checks stay with the sweep's ticket under its evidence home, acceptance is judged against those measurements since an aggregate score cannot prove each baseline mutant remains killed, and the committed result goes to delivery-review like any implementation with the sweeper never writing its own review record; the Handoff section names the green suite and the sweep's own ticket consumed, the reports and table produced under .greenline/work/evidence/TKT-NNN/ with the ticket implementing then implemented, and delivery-review next

 
## Handoff
 
Consumes: a green suite and the sweep's own ticket at ready
Produces: the before and after mutation reports at different paths, the deletion and seam table, and the baselines and kills, under .greenline/work/evidence/TKT-NNN/; the ticket at implementing then implemented with its committed result
Next: delivery-review reviews the sweep's ticket like any implementation

2026-09-11 fold-walk-2026-09-11

the coherence walk: the survivor criterion and the restart step re-kinded as method edits

SKILL.md

methodchangedfold-walk-2026-09-11

the gate's 'repair the source' names its owner, diagnosing-bugs, and the sweep restarts from the top once the suite is green, a step upstream lacks; upstream's rule that no test is touched until then stands

repair the source. You may not touch a test at all until the suite is green
repair the source through diagnosing-bugs, and restart the sweep from the top
again.
once the suite is green again. You may not touch a test at all until the suite
is green again.
methodchangedfold-walk-2026-09-11

the bundled mutate.mjs masks strings and comments but its raw-text ternary operator can swap a quoted ternary inside a comment, so a survivor is judged only after the measurement is validated, and a survivor on an error path is the highest-value finding and is never pruned on coverage alone: two criteria upstream does not state

Validate the measurement before judging a survivor. The bundled tool masks
strings and comments for its comparison and numeric operators, but its raw-text
ternary operator can still swap a quoted ternary example inside a comment, and
its "defect your suite ships" line is a candidate, not a diagnosis. A mutation
that changes no executable behavior, or whose validity is unresolved, is an
invalid measurement, not a shipped defect: the run proves no deletion, so keep
the tests and seams, record the invalid measurement with the sweep's evidence,
and use an already available capable runner only within the authorized scope.
Never add a test for a comment, and never drop a baseline mutant to make the
score pass.
 
A survivor inside error-handling code is the sweep's highest-value finding.
Code that has not run does not work, and error handlers run rarest of all: a
study of production failures in distributed data-intensive systems (Yuan et
al., OSDI 2014) found 92% of catastrophic failures came from incorrect handling
of non-fatal errors the software explicitly signaled. A test that exercises an
error path is never pruned as redundant on coverage grounds alone; weigh its
deletion against what its mutants proved.
 

2026-09-11 series-s7-roster-2026-09-11

The operator's ruling on the method-class edits put to them by the S3 fold: the edit is kept and re-recorded with the ruling as its authority.

SKILL.md

methodchangedseries-s7-roster-2026-09-11

the gate's 'repair the source' names its owner, diagnosing-bugs, and the sweep restarts from the top once the suite is green, a step upstream lacks; upstream's rule that no test is touched until then stands Confirmed by the operator on 2026-09-11 (method-rulings.md).

repair the source. You may not touch a test at all until the suite is green
repair the source through diagnosing-bugs, and restart the sweep from the top
again.
once the suite is green again. You may not touch a test at all until the suite
is green again.
methodchangedseries-s7-roster-2026-09-11

the bundled mutate.mjs masks strings and comments but its raw-text ternary operator can swap a quoted ternary inside a comment, so a survivor is judged only after the measurement is validated, and a survivor on an error path is the highest-value finding and is never pruned on coverage alone: two criteria upstream does not state Confirmed by the operator on 2026-09-11 (method-rulings.md).

Validate the measurement before judging a survivor. The bundled tool masks
strings and comments for its comparison and numeric operators, but its raw-text
ternary operator can still swap a quoted ternary example inside a comment, and
its "defect your suite ships" line is a candidate, not a diagnosis. A mutation
that changes no executable behavior, or whose validity is unresolved, is an
invalid measurement, not a shipped defect: the run proves no deletion, so keep
the tests and seams, record the invalid measurement with the sweep's evidence,
and use an already available capable runner only within the authorized scope.
Never add a test for a comment, and never drop a baseline mutant to make the
score pass.
 
A survivor inside error-handling code is the sweep's highest-value finding.
Code that has not run does not work, and error handlers run rarest of all: a
study of production failures in distributed data-intensive systems (Yuan et
al., OSDI 2014) found 92% of catastrophic failures came from incorrect handling
of non-fatal errors the software explicitly signaled. A test that exercises an
error path is never pruned as redundant on coverage grounds alone; weigh its
deletion against what its mutants proved.