Trust a pointer that only ever names something published #365

Open
PerishFire wants to merge 1 commit from task/the-pointer-only-names-published into main
Owner

The install step skipped the channel pointer when it named the ref being released — a guard against installing a version that had not been published. That case cannot happen: the pointer is written by activate, which runs after publish, so it only ever names an exact release that already stands.

The guard did cause a real failure. seal advances the pointer to the version this run is publishing, so every job after seal read its own version back, blanked it, and fell to canonical stable:

project (cargo, rehearse):  installed plumb v0.26.0
    → Packaging plumb v0.27.0-beta.11
    → failed to select `plumb-macro = "=0.27.0-beta.11"`

The Cargo rehearsal was performed by v0.26.0 and failed on exactly the sibling pin this release exists to skip. Jobs before seal had the previous exact and were correct; jobs after had the fix in the repository and not in their hands.

Without the guard, a job after seal installs the release it is projecting. That is not a hazard, it is the intent — the media are projected by the version being released, and that version is published before any of them run.

The install step skipped the channel pointer when it named the ref being released — a guard against installing a version that had not been published. **That case cannot happen:** the pointer is written by `activate`, which runs after `publish`, so it only ever names an exact release that already stands. The guard did cause a real failure. `seal` advances the pointer to the version this run is publishing, so **every job after `seal` read its own version back, blanked it, and fell to canonical stable**: ``` project (cargo, rehearse): installed plumb v0.26.0 → Packaging plumb v0.27.0-beta.11 → failed to select `plumb-macro = "=0.27.0-beta.11"` ``` The Cargo rehearsal was performed by v0.26.0 and failed on exactly the sibling pin this release exists to skip. Jobs before `seal` had the previous exact and were correct; jobs after had the fix in the repository and not in their hands. Without the guard, a job after `seal` installs the release it is projecting. That is not a hazard, it is the intent — the media are projected by the version being released, and that version is published before any of them run.
Trust a pointer that only ever names something published
All checks were successful
guard / guard (pull_request) Successful in 2m48s
b30b50170b
The install step skipped the channel pointer when it named the ref being
released, guarding against installing a version that had not been published.
That guard was for a case that cannot happen: the pointer is written by
`activate`, which runs after `publish`, so it only ever names an exact release
that already stands.

The guard did cause a real one. `seal` advances the pointer to the version this
run is publishing, so every job after `seal` read its own version back, blanked
it, and fell to canonical stable — which is how the Cargo rehearsal in
v0.27.0-beta.11 was performed by v0.26.0 and failed on the sibling pin the
release exists to skip. The jobs before `seal` had the previous exact and were
correct; the jobs after had the fix in the repository and not in their hands.

Without the guard, a job after `seal` installs the release it is projecting.
That is not a hazard, it is the intent: the media are projected by the version
being released, and the version is published before any of them run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
All checks were successful
guard / guard (pull_request) Successful in 2m48s
This pull request has changes conflicting with the target branch.
  • .forgejo/workflows/ship.yml
  • crates/cli/assets/ship/install.yml.in
  • plumb.toml
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin task/the-pointer-only-names-published:task/the-pointer-only-names-published
git switch task/the-pointer-only-names-published
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
PerishLab/plumb!365
No description provided.