You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The GC ratchet has measured nothing since 2026-08-05
gc-ratchet fails on main in test_pinned_artifact_retention_is_deterministic:
AssertionError: 6768 != 0 : 12_large_live_set.heap_used_bytes was not
deterministic when pinned; it must not be in a gating family
That assertion lives in the "Harness unit tests and artifact validation" step, which runs before the measurement step. So the probes themselves — all twelve — have not executed on any branch since this broke. The job is red, and the thing it exists to measure is not running at all. That is CLAUDE.md's fourth failure mode ("the gate runs but its subject never did") in its most expensive form, compounded by gc-ratchet not being a required context, so the red blocks nothing either.
It has failed on every completed main run since 2026-08-05T15:07Z, which is the window in which #7446 re-pinned the artifact.
The assertion is right; the artifact is unfit
This is not an over-strict test. benchmarks/gc_ratchet/tolerances.json justifies gating heap_used_bytes on exactly this basis:
"Observed spread 0.000% over 21 runs on all 8 probes: bit-identical. The band is therefore pure anti-brittleness margin … not a noise allowance."
The pinned artifact contradicts its own premise. Every other probe still holds it:
12_large_live_set genuinely became non-deterministic. 6,768 bytes on a 60 MB heap is 0.011% — small, but the gating premise is bit-identical, and the other eleven probes still are. If retention on the largest live set is now sample-dependent, that is a real finding about the collector and worth knowing on its own.
Distinguishing them is cheap: re-run that probe ~21× on a quiet host and see whether the outlier recurs.
Why this matters right now
Roughly fifteen GC-affecting changes landed today — layout installation at allocation (#7532), the shape-install memo (#7535), write-barrier gating (#7536), the tape leaving the old generation (#7553), plus a spill-path rooting fix (#7546). None of them were checked by the ratchet, because it has not measured anything since before they were written. Several carried their own PERRY_GC_DIAG A/Bs, which is why I merged them, but that is per-PR diligence rather than a standing gate.
Suggested acceptance
12_large_live_set.heap_used_bytes deterministic across ≥21 runs on the pinned host, or the probe explicitly moved out of the gating family with the reason recorded next to it (the mechanism the assertion's own message points at).
The ratchet's measurement step observed green on main at least once, so we know the probes run.
Consider promoting gc-ratchet to a required context after that first green — a new gate has never been green, and promoting it while red would block every open PR.
The GC ratchet has measured nothing since 2026-08-05
gc-ratchetfails onmainintest_pinned_artifact_retention_is_deterministic:That assertion lives in the "Harness unit tests and artifact validation" step, which runs before the measurement step. So the probes themselves — all twelve — have not executed on any branch since this broke. The job is red, and the thing it exists to measure is not running at all. That is CLAUDE.md's fourth failure mode ("the gate runs but its subject never did") in its most expensive form, compounded by
gc-ratchetnot being a required context, so the red blocks nothing either.It has failed on every completed
mainrun since 2026-08-05T15:07Z, which is the window in which #7446 re-pinned the artifact.The assertion is right; the artifact is unfit
This is not an over-strict test.
benchmarks/gc_ratchet/tolerances.jsonjustifies gatingheap_used_byteson exactly this basis:The pinned artifact contradicts its own premise. Every other probe still holds it:
heap_used_bytesspread01_nursery_churn…11_collect_at_depth(11 probes)12_large_live_setand the samples show it is a single outlier, not noise:
heap_total_byteson the same probe is spread 0 across all seven.Two possible causes, and they need different fixes
12_large_live_set, ideally with more repeats.12_large_live_setgenuinely became non-deterministic. 6,768 bytes on a 60 MB heap is 0.011% — small, but the gating premise is bit-identical, and the other eleven probes still are. If retention on the largest live set is now sample-dependent, that is a real finding about the collector and worth knowing on its own.Distinguishing them is cheap: re-run that probe ~21× on a quiet host and see whether the outlier recurs.
Why this matters right now
Roughly fifteen GC-affecting changes landed today — layout installation at allocation (#7532), the shape-install memo (#7535), write-barrier gating (#7536), the tape leaving the old generation (#7553), plus a spill-path rooting fix (#7546). None of them were checked by the ratchet, because it has not measured anything since before they were written. Several carried their own
PERRY_GC_DIAGA/Bs, which is why I merged them, but that is per-PR diligence rather than a standing gate.Suggested acceptance
12_large_live_set.heap_used_bytesdeterministic across ≥21 runs on the pinned host, or the probe explicitly moved out of the gating family with the reason recorded next to it (the mechanism the assertion's own message points at).mainat least once, so we know the probes run.gc-ratchetto a required context after that first green — a new gate has never been green, and promoting it while red would block every open PR.