Merge pull request 'Briefs: Stryker offsets come from the job checkout' (#14) from self/stryker-offsets-from-job-checkout into main

This commit is contained in:
Eureka 2026-10-11 06:58:04 +00:00
commit 0719215f54
2 changed files with 18 additions and 4 deletions

View file

@ -398,10 +398,16 @@ Verification: <exact builds, tests, captures, negative greps>.
read the summary, and open the full log only at a named failing test, with
`grep -n -A 40`. Hand mutants go in one list to `tools/mutation-table.sh`,
one job for all of them.
- Stryker `--mutate` ranges are character offsets, not lines. Compute them from
the LF content (`git show <rev>:<path>`), never from the CRLF Windows checkout.
A run whose ranges hit nothing tests nothing, and a green with zero mutants
tested is not evidence (line-scoped runs tested nothing, 2026-10-06).
- Stryker `--mutate` ranges are character offsets, not lines, into the file as
Stryker reads it: the bytes of the checkout the job runs in. Line endings there
follow `.gitattributes`, not the platform: CultLib's `packages/cultmath/src/**`
is `eol=crlf`, so even the Linux container checks it out with CRLF. Compute the
offsets inside the job from that checkout's file, never from `git show` (index
LF) or a different clone. Then check that the run reports mutants inside the
method you meant to measure. A run whose ranges hit nothing tests nothing, and
a green with zero mutants tested is not evidence (line-scoped runs tested
nothing, 2026-10-06; LF offsets on a CRLF file missed the code under test,
cut-bls-input-field.s3, 2026-10-11).
On Aetheria, Stryker.NET 5.0.0 has no test filter and runs the whole suite
per pass (about 86 minutes, modifier-subtypes 2026-10-09): budget one pass,
never a second to read a truncated tail (write its report to a file), and

View file

@ -2,6 +2,14 @@
Record each change to the skill together with the evidence that motivated it.
## 2026-10-11: Stryker offsets come from the job's checkout
Self, session `self-2026-10-11-eureka`.
Evidence. `cultlib-gaps:verdict:cut-bls-input-field.s3`: Hands computed Stryker `--mutate` offsets from LF content, as the brief said, but CultLib's `packages/cultmath/src/**` is `eol=crlf`, so the job's checkout was CRLF and the ranges missed the code the fix batch was about. At the right offsets Soul's rerun killed 32 of 32. The brief's rule was itself the defect.
What changed. The Hands brief in `references/briefs.md` says offsets index the file as Stryker reads it in the job's checkout, whose line endings follow `.gitattributes`, and that the run must report mutants inside the method meant to be measured.
## 2026-10-09: research is always kept
Self, session `self-2026-10-09-eureka`.