Skip to content

v0.9.0 — the gate finishes, and says what it measured

Choose a tag to compare

@Disble Disble released this 30 Aug 21:33

The release that makes ditto's own gate finish, by making it ask a question it
can afford.

Added

  • ditto changed --since <ref>, and PlanChanged / RunChanged behind it.
    It is staged asked 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 staged cannot 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
    HEAD while 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 -failfast already 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.mutation is untouched and workflow_dispatch still 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