Record the three releases the CHANGELOG skipped, and re-pin to ci-v3.2.1 - #17
Merged
Merged
Conversation
`ci-v3.2.1` is cut at 605e51c — the publish-verification bound fix (#16). Cutting it is what makes that fix reach anyone: consumers pin by commit SHA, so a fix sitting on unreleased `main` reaches nobody. Two problems are fixed here, and the second is why this is not a docs-only commit. **The CHANGELOG had no record of two releases that had already shipped.** Its heading still read "Unreleased (on `main`, after ci-v3.0.0)" while `ci-v3.1.0` and `ci-v3.2.0` were both cut on 08-03. Nine of the ten bullets under that heading described work that had *already* shipped in `ci-v3.1.0` — verified by checking each bullet's artifact into the tree at 33c5e5f (`tests/example-fidelity.sh`, `tests/consumer-drift-cases.sh`, `.ruby-version`, `examples/edgeproc-core/`, the secret-scan job in `examples/aml-filter/ci.yml`, the `configured` job in `security-audit.yml`). Renaming that heading to `ci-v3.2.1` wholesale would have billed nine shipped entries as new and told consumers to re-pin for work they already had. So each release now has its own section and its own commit SHA: ci-v3.2.1 605e51c the publish-verification bound ci-v3.2.0 7226072 the re-pin that runs setup-uv v9 ci-v3.1.0 33c5e5f setup-uv v9 + PRs #9-#14 `ci-v3.1.0` is marked do-not-pin, the way `ci-v2.0.0` already is: its tree runs the v9.0.0 composite but its own refs still name `ci-v3.0.0`, so pinning that tag executes v8.3.2 — the exact split it set out to close. `ci-v3.2.0` is the re-pin. **Every first-party ref moves to ci-v3.2.1** — 41 refs across 23 files, 9 in `.github/` and 32 in `examples/`. This is not optional bookkeeping. The currency half of `validate_first_party_release_lineage` requires every ref to name the newest release tag, and it exempts exactly one state: HEAD sitting on the newest tag's own commit, where a ref may name the immediately-preceding release because a commit cannot contain its own SHA. A CHANGELOG-only commit moves HEAD off 605e51c, the exemption stops firing, and all 41 refs naming `ci-v3.2.0` become "a superseded release, not ci-v3.2.1". Same reason `ci-v2.0.2` and `ci-v2.0.3` each landed a re-pin in the commit after the tag. No brick changed shape in ci-v3.2.1 and no composite behavior changed, so the release-commit bootstrap gap does not apply to it: every composite reached through these refs is byte-identical to the one in this tree. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mNrrQ5dDEr6ZwLntu7XtF
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
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.
What this is
ci-v3.2.1is already cut — annotated tag at605e51c, release live. This PR is the commit that always follows a release in this repo: record the release SHA and re-pin every first-party ref. Same shape as8d46d90("Re-pin every first-party ref to ci-v2.0.3 and record the release SHA") ande22b4bf.The tag had to come first — a commit cannot contain its own SHA, so the
Commit <sha>.line can only be written after the tag exists. That is the documented release-commit bootstrap.Two things are fixed
1. The CHANGELOG had no record of two releases that already shipped. Its heading still read
Unreleased (on main, after ci-v3.0.0)whileci-v3.1.0andci-v3.2.0were both cut on 08-03. Nine of the ten bullets under it described work that had already shipped inci-v3.1.0. I verified that per bullet by checking each one's artifact into the tree at33c5e5f:tests/example-fidelity.shtests/example-fidelity-cases.shtests/consumer-drift-cases.sh.ruby-version(3.4.10)examples/edgeproc-core/examples/aml-filter/ci.ymlconfigured:jobSo renaming that heading to
ci-v3.2.1wholesale would have billed nine shipped entries as new and told consumers to re-pin for work they already have. Each release now gets its own section and its own SHA:ci-v3.2.1605e51cci-v3.2.07226072ci-v3.1.033c5e5fci-v3.1.0is marked do-not-pin, the wayci-v2.0.0already is: its tree runs the v9.0.0 composite but its own refs still nameci-v3.0.0, so pinning that tag executes v8.3.2 — the exact split it set out to close.2. Every first-party ref moves to
ci-v3.2.1— 41 refs across 23 files (9 in.github/, 32 inexamples/). Not bookkeeping: without it this branch is red. See below.The claim this PR touches
"Every first-party
uses:ref names the newest release." — the currency half ofvalidate_first_party_release_lineage.Watched it fail. With HEAD off the tagged commit the bootstrap exemption stops firing. Reverting one pin (
python-gate.yml) back toci-v3.2.0:Restored, it prints
Security policy checks passed.(exit 0).tests/lineage-guard-cases.shalso passes (exit 0).That is also the proof a CHANGELOG-only commit would have reddened
main: every one of the 41 refs was in exactly that state before this commit.Diff shape
CHANGELOG.md— the only file with prose changes.23 workflow/example files — pin lines only. This prints
0:All 41 new pins carry the exact comment
# ci-v3.2.1; no comment names a version other than its SHA's tag.Not in this PR
6-consumer-pins.showns those and opens one PR per consumer repo. It explicitly skipsciitself (# ci pins its own actions; it is the source of the release, not a consumer), which is why ci's own 41 self-pins are here.ci-v3points at72521e7(a Dependabot merge from PR ci: Bump actions/checkout from 7.0.0 to 7.0.1 #5), not at the newest 3.x release. The CHANGELOG header says theci-vNpointer moves to the newest release in that major. Blast radius is limited becausetests/security-policy.shrejects a moving@ci-vNref, but the pointer is public and wrong.ci-v3andci-v3.0.0are lightweight tags.ci-v3.1.0,ci-v3.2.0,ci-v3.2.1and everyci-v2*are annotated, which is the house rule.ci-v3.2.0GitHub release has an empty body.