Do not fail a release that is already published - #683
Merged
Conversation
Publishing v1.0.0 left main red. A maintainer cut the release by hand seconds before the tag push woke this workflow; the workflow tried to create a second one and GitHub refused with 422 immutable release already exists. The release was fine and the run was red, which is the worst combination -- RELEASE-GATE 6b asks someone to read main after every merge, and an expected red head with no explanation trains people to stop reading it. Existence is now checked before creating. Same commit, skip and succeed; different commit, fail and print both shas. Existence alone must not mean skip. A release for this tag pointing somewhere else is a tag that moved or a release cut from the wrong branch, and swallowing that is worse than the 422 -- the 422 at least made noise. So the branch is on what the tag resolves to, not on whether a release is there. Limit: a release already published is never overwritten, and never assumed correct Blast: system Undo: easy Certainty: firm Provenance: authored Record-Id: r-681idem
CommitLore — record lintTrailers: clean — 1 commit in Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
MongLong0214
added a commit
that referenced
this pull request
Aug 15, 2026
Five fixes have been sitting on main since v1.0.0 and none of them has reached
anyone. They are all defects at the install and distribution boundary, and that
boundary has exactly one delivery mechanism: a release.
#683 the release workflow failing on a release that already exists
#684 hermes install refusing the config it wrote
#687 the skills root taken from the running bundle instead of --data-root
#688 an installed plugin treated as a reason to stop rather than upgrade
#690 claude-code wired by nothing, in neither hosts nor notDetected
Measured rather than assumed: re-installing with main's install.sh still left the
plugin cache at 0.8.0 and claude-code out of both lists, because the enumeration
that #690 fixed is compiled into the binary being installed -- and that binary is
v1.0.0.
dist is unchanged and the canonical digest is identical to before the bump. The
version is read from package.json at runtime rather than compiled in. Rebuilt
through the canonical builder and verified rather than assumed, the same as
v1.0.0.
Thirty-eight pins across nine files. The installers and READMEs carry the tag in
URLs that resolve only once the tag exists, so this is one commit and the tag
goes on it.
This is the first release cut under release-gate 6c, which asks for an upgrade
over the previous version rather than a fresh install. The five fixes above are
why that section exists.
Limit: a distribution-boundary fix reaches nobody until it is released
Blast: system
Undo: costly
Certainty: firm
Provenance: authored
Record-Id: r-rel101
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.
Closes #681.
Publishing v1.0.0 left
mainred. A maintainer cut the release by hand secondsbefore the tag push woke this workflow; the workflow tried to create a second
one:
The release was fine and the run was red — the worst combination.
docs/RELEASE-GATE.md§6b now asks someone to readmainafter every merge, andan expected red head with no explanation is how that habit gets unlearned.
The branch, and the part that is easy to get wrong
Existence is checked before creating:
Existence alone must not mean skip. A release for this tag pointing at a
different commit is a tag that moved, or one cut from the wrong branch, and
swallowing that is worse than the 422 — the 422 at least made noise. So the
branch is on what the tag resolves to, not on whether a release is present.
Verified
release-tag-binding,release-publish-prerequisitesandaction-lint— 91tests, all passing.
release.ymlis not one of the workflows pinned byEXPECTED_CI_WORKFLOW_SHA256; that pin coversci.yml, checked rather thanassumed.