Skip to content

v0.3.0 — the gated path, and survivors you can find

Choose a tag to compare

@Disble Disble released this 15 Aug 02:35
· 105 commits to main since this release

Full entry with every number: CHANGELOG.md. The notes behind each measurement are in docs/experiments/.

Added

Gated() runs a file's mutants from one compilation instead of one each. Starting the test command costs 750–950 ms per mutant regardless of what the suite does, and that fixed toll is the dominant cost of a run.

It is opt-in, and that is measured rather than assumed. On a real repository the two paths report the same 69 mutants, the same 58 killed and the same 11 survivors at identical addresses, for 51 invocations against 69 — but only 18 of 69 mutants gated. The gating rate is a property of the file, ranging from 26% to 72% across the real files measured, because Expand admits comparisons and integer literals and refuses everything else. A compilation paid for a quarter of the mutants is an option, not a default.

A gated run says how much of it came from one compilation. Zero is spelled none, so the line reads as a fact rather than an unfilled placeholder.

Plus a performance baseline that ratchets in both directions, and a golden test that pins what a run says rather than only what it costs.

Fixed

  • Gated() was a no-op under go test -v, which is what CI runs. Measured: none of 7 gated under -v before, 4 of 7 after, against a control of 4 of 7 without it.
  • A red baseline reported a perfect score. Measured at 4 killed of 4 against 1 of 4 for the same mutants.
  • The compiler was found through PATH, and the test command inherited git's addressing. Both are the same shape: something ambient deciding what a subprocess really is.

Changed — breaking

A survivor is now clickable. Every mutant carries path:line:col and the text it replaced, and survivors are listed by address before any diff. 129 of 135 mutants used to be indistinguishable from another by what ditto printed.

The label changed shape, from path → Virus to path:line:col → Virus. Subtest names change with it — anything matching on those strings needs updating; anything reading the exit code does not.

Checks

make lint test.failfast green on every commit — 337 tests, 0 lint issues. CI green on a97e04a, the tagged commit. SonarCloud quality gate passing.

This repository is a fork, so GitHub does not fire Actions on push or pull request; the CI run above was dispatched by hand, which is the only route available. mutation.yml has no dispatch trigger and could not be run.