Skip to content

v0.34.3: two releases never reached crates.io, and the gate ran too late - #147

Merged
avrabe merged 1 commit into
mainfrom
fix/crates-version-pin
Sep 10, 2026
Merged

v0.34.3: two releases never reached crates.io, and the gate ran too late#147
avrabe merged 1 commit into
mainfrom
fix/crates-version-pin

Conversation

@avrabe

@avrabe avrabe commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

varve depends on varve-core by path and by version. cargo package
embeds that requirement, so a stale pin means the published crate asks for a
varve-core it was never built against, and cargo publish refuses — rightly.

cargo update -w does not touch the pin, because it is a requirement, not a
lock entry. v0.34.1 and v0.34.2 both shipped GitHub releases and both failed
to publish
, leaving crates.io stranded at 0.34.0 while two tags said
otherwise:

tag=0.34.2 workspace=0.34.2 internal-dep=0.34.0
::error::varve depends on varve-core 0.34.0 but the workspace is 0.34.2

Binaries, signed sums and the layer were all correct. Only the registry was
behind.

The check was right; where it ran was wrong

It lives in publish-crates.yml, which runs only on a tag — the point of no
return. By the time it spoke, the version was cut and the binaries published,
and the only remedy was another release.

manifestversions.rs asserts the same thing with cargo test, on every PR and
every local run, so a mismatched pin cannot reach a tag. The workflow keeps its
copy of the tag-vs-workspace half, which no unit test can see.

Adding the file was itself checked: the v0.34.0 mutation-scope gate refused it
until declared — the first time that gate has caught something unplanted.

Fourth instance of one shape this week

An invariant that is real, correct, and enforced somewhere that cannot act on it
in time: after the tag here; in the other assembler for release; in the wrong
directory for hub staging; behind an env-only reader for the realm root.

`varve` depends on `varve-core` by path AND by version. `cargo package`
embeds that requirement, so a stale pin means the published crate asks for a
varve-core it was never built against, and `cargo publish` refuses — rightly.

A release bumps the workspace `version` and the pin is easy to leave behind:
`cargo update -w` does not touch it, because it is a requirement and not a
lock entry. I left it behind twice. v0.34.1 and v0.34.2 both shipped GitHub
releases and both FAILED to publish, leaving crates.io stranded at 0.34.0
while two tags said otherwise. The binaries, the signed sums and the layer
were all correct; only the registry was behind.

The invariant was already checked — in publish-crates.yml, which runs only on
a tag. A tag is the point of no return: by the time that gate spoke the
version was cut and the binaries were published, and the only remedy was
another release. The check was right; where it ran was wrong.

manifestversions.rs asserts it with `cargo test`, on every pull request and
every local run, so a mismatched pin cannot reach a tag. The workflow keeps
its own copy of the tag-vs-workspace half, which no unit test can see. The
module is gated by `cargo mutants` for the same reason mutationscope.rs is:
logic added here later is covered without anyone remembering.

Adding the file was itself checked — the v0.34.0 mutation-scope gate refused
it until it was declared, which is the first time that gate has caught
something that was not planted.

This is the fourth instance this week of one shape: an invariant that is real,
correct, and enforced somewhere that cannot act on it in time — after the tag
here, in the other assembler for `release`, in the wrong directory for the hub
staging path, and behind an env-only reader for the realm root.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019TNtfRjLNhEz82G2ggeeNu
@avrabe
avrabe merged commit a6c4b6b into main Sep 10, 2026
25 checks passed
@avrabe
avrabe deleted the fix/crates-version-pin branch September 10, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant