Make release gates actually gate (FIG-617)#134
Merged
Conversation
Release-Notes: Internal: Release automation now commits published documentation pins to main with bounded race retries.
Release-Notes: Internal: Release automation now requires green target-SHA CI and full performance budgets on Blacksmith, removes the nightly perf cron, and moves sim-unit-perf-guards to Blacksmith.
Release-Notes: Internal: Push and pull-request CI now exercises runtime and Lashlang performance measurement paths without enforcing release budgets.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cutting
v0.1.0-alpha.112exposed three failures with one shape: something that looks like a gate but does not gate. This closes them.1. The release stamps its own docs pin
Releasing did not bump
docs/released-version.txt+ the README/docs pins, so the instant a tag was cut,Test docs + build cachefailed on every open PR until a human noticed (#128 and #129 were both blocked by exactly this).PUBLISHING.mddocumented the step andstamp-docsalready existed — it was simply skipped.Now the release runs
stamp-docsafter publishing and commits tomaindirectly. Safety: lints before committing; no-ops cleanly when there is no diff; rebase-and-retry up to three times on a racing push; and a failure here can never turn a successful publish red (warning +continue-on-error). Two subtleties worth noting — aGITHUB_TOKENpush does not trigger push workflows, so it explicitly dispatchesci.ymlfor the pin commit; and the generateddocs: stamp release X.Y.Zsubject is excluded from release-note collection so the next release doesn't mistake it for curated notes.2. Perf becomes a release gate; the nightly is deleted
The nightly
Performancelane had been red since 2026-07-24 and was never consulted, so alpha.111 and alpha.112 both shipped over it. Release readiness was judged fromCIalone.perf.yml's cron is removed (workflow_dispatchstays). The full budget-enforcing profile now runs as a release gate onblacksmith-16vcpu-ubuntu-2404, andpublish-cratesdepends on it — the tag is created only after budgets pass. No budget was recalibrated and none needed to be: the enforced values are stack bytes, allocation counts and instruction counts, not wall-clock timings, so they are machine-independent.Additionally the release now refuses a SHA whose
CIrun is not a completed success — missing, pending, cancelled or failed all block, reporting the run id/title/state/URL. No override.3. Fast perf smoke on every push/PR
With the nightly gone nothing measured perf continuously, so a regression would only surface when someone attempted a release. The existing
Lintjob now runs both measurement paths with a quick profile and no--enforce-budgets— a functional signal that the harness is sound; budgets stay a release concern. Measured ~15–60s warm, well under the ~9 min critical path, and it adds no new job. Justification: an assertion that checked attachment position instead of survival compiled fine, could never pass, and took two days to surface because it only ran nightly (#128).4. Corrected an over-cautious exclusion
#131 kept
sim-unit-perf-guardsonubuntu-lateston the stated grounds its budgets were machine-calibrated. That rationale was wrong (see above), so it now matches its sibling shards on Blacksmith and the incorrect comment is removed.Verification
Job/matrix display names expanded at base and HEAD: 35 entries, identical sets — no required check renamed or dropped.
test_confidence_gate_ci_contract.py25/25. Workflow behaviour is CI-only verifiable.