Repository navigation
v0.9.0 — the gate finishes, and says what it measured
The release that makes ditto's own gate finish, by making it ask a question it
can afford.
Added
-
ditto changed --since <ref>, andPlanChanged/RunChangedbehind it.
It isstagedasked of a committed range instead of the index: the scope is
<ref>...HEAD, the diff against their merge base, so a base that has moved on
does not drag somebody else's commits into the bill. The diff parsing, the byte
offsets, the fail-open rule and the sandbox are the staged path's, unchanged.It exists because
ditto stagedcannot be a CI gate. A CI checkout has nothing
staged — the change is already committed — so a gate pointed at the staged
scope skips, reports success, and measures nothing.It refuses a checkout with staged changes in it. A range scope names bytes of
HEADwhile the sandbox is written from the index, and those agree exactly
while the index agrees with HEAD; scoping against one and mutating the other is
the defect already measured at seven of eight verdicts moving. A worktree-only
modification never reaches the sandbox and is allowed — written the other way
round first, it refused ditto's own CI in fifty-one seconds, because the Devbox
install step modifies a tracked lockfile.There is no default base, and there will not be one: on a CI checkout the
useful base is the last release, on a branch it is the trunk, and a base
guessed wrong is either a bill nobody asked for or a scope of nothing reported
as green.
Changed
-
ditto's own CI gate mutates the change rather than the repository. The
repository-sized run asks for 783 mutants and dies at its thirty minutes having
reached about 424, measured four times. Both levers were already spent: gating
removes 54% of the compilations and does not close it, and cutting the mutant's
suite by 46% moved the gate by 0.5%, because-failfastalready stops a killed
mutant at its first failing test. The bill was the wrong size rather than badly
paid — backlog entry 21, open since the measurement and now closed.make test.mutationis untouched andworkflow_dispatchstill reaches it. The
repository-sized question is worth asking on purpose; it was being asked on
every push, against a clock it could not beat.
Measured
This repository's own gate, before and after:
| Run | Result |
|---|---|
| Repository-sized, on the 0.8.0 merge | FAIL … 1800.181s — the -timeout=30m exactly |
| Changed gate, on this release's merge | PASS in 153.96s — 49 mutants, score 0.90 against a 0.50 minimum |