mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-10-29 06:32:28 +00:00
U13. Turns the U1 instrument into a regression gate: `--check` asserts the
measured projection against a committed baseline, `--update-baseline` rewrites
it, and the benchmarks job runs the check.
Gated exactly, not budgeted. Two consecutive runs are byte-identical, so a
tolerance band would only hide real movement. Adding fixtures moves these
numbers and forces a rebaseline; that treadmill is the accepted cost of the
guard and the same trade `bench/scope-capture` already makes.
Both arms are gated, because they fail differently:
countArm call-only drop totals, split by site kind and by extension. The
per-extension split makes a single-language regression legible
instead of arriving as a moved total.
shapeArm the state of each receiver spelling by edge presence. This is the
only arm that can see `?.`, explicit type arguments and
`repos[0].save()` — they emit no edge AND no drop, so a count-only
gate is blind to them by construction.
Verified in both directions. At baseline, `--check` passes. With a real drop
injected into the corpus — `f!.make().persist()`, not a hand-edited baseline —
it fails and localizes:
countArm.callDrops: 99 -> 100
countArm.bySiteKind.call: 99 -> 100
countArm.callDropsByExtension..ts: 7 -> 8
Unlike its neighbours in that job this bench is NOT build-free: it runs the real
pipeline, so it needs dist/, which the setup action already builds. One run is
~2m15s against a 25-minute job budget that already carries eight steps — worth
watching on the first CI run rather than pre-emptively raising the timeout on a
guess.
|
||
|---|---|---|
| .. | ||
| callable-value-flow | ||
| cfg | ||
| cross-repo-trace | ||
| emit-persistence | ||
| impact-pdg | ||
| python-scope | ||
| receiver-resolution | ||
| scope-capture | ||
| scope-emission | ||
| spring-conditionals | ||
| parse-throughput.md | ||