Repository navigation
ci: release in Scient Desktop's order, so a version is used up only when published - #53
Merged
Merged
Conversation
yaacovcorcos
force-pushed
the
claude/release-order-20261114
branch
from
November 14, 2026 12:50
47278dd to
9428d30
Compare
…hen published A release was a pushed v<version> tag. The tag went on main before the build was qualified, so a release run that failed (v0.1.6) or a draft nobody published (v0.1.7) used its number up, and the next attempt took the next one: users went from 0.1.5 to 0.1.8. A release is now a manual run of the workflow on main with `release` set, as Scient Desktop's release is a dispatched run. Its first job refuses scient.json's version unless it comes right after the latest published release and no tag carries it (scripts/scient/release-version.ts). Only after every job passed does the run check again, replace any unpublished draft of that version and draft the release on the commit it built. The draft has no tag; publishing it creates v<version>. A failed or superseded run is run again with the same version. Pushing a v* tag no longer starts a release. Scient-Divergence: SA-RELEASE Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex review: GitHub's delete-release endpoint cannot limit itself to drafts, so a draft published between the listing and the DELETE would be deleted with its assets. Each draft is now read again just before its DELETE, and the run stops if it was published. SCIENT.md says not to publish a draft while a release run of the same version is running, which closes the remaining window. Scient-Divergence: SA-RELEASE Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
yaacovcorcos
force-pushed
the
claude/release-order-20261114
branch
from
November 14, 2026 14:46
9428d30 to
133d5f6
Compare
Releases made the old way push v<version> before anything is published. If such a run fails or its draft is left unpublished, that tag sits on the next version: the new release check refused it as "tagged already" and refused the version after it as not next, with no way forward named. The check now says the tag on the next, unpublished version must be deleted before the release runs again, and SCIENT.md says so. Scient-Divergence: SA-RELEASE Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 14, 2026
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.
Scient Agent's releases skipped numbers: users went from 0.1.5 to 0.1.8. A release was a pushed
v<version>tag, so the number was used up before the build was qualified. v0.1.6's run failed (Oh My Pi's browser WebMCP tests) and v0.1.7's draft was never published, and each retry took the next number.This gives the agent Scient Desktop's order: check the version first, tag last.
What changes
mainwithreleaseset (workflow_dispatch), as Desktop's release is a dispatched run. Pushing av*tag no longer starts a release.scripts/scient/release-version.ts, refusesscient.json's version unless it is the next patch, minor or major after GitHub's latest published release and no tag carries it. It fails closed on any GitHub error other than 404.--target <built commit>. The draft has no tag; publishing it createsv<version>on that commit. The job fails if drafting created the tag anyway.scient.jsonversion. Its draft and its downloads.scientfactory.com copy replace the unpublished ones.scient.jsoninstead of the tag name.SCIENT.mddocuments the procedure and the rule. TheSA-RELEASEledger entry lists the new script and its test.Unchanged: who publishes (a person publishes the draft); signing, notarization, R2 copy and compression; Desktop's catalog, which reads only published releases (
releases/latest) andv<version>download URLs.Checks
scripts/scient/release-version.test.ts: 4 pass, covering the successor rule (0.1.9→0.1.10), skipping, repeating and going back, a tagged version, the first release and a malformed version.bun test scripts/scient: 77 pass.Script against the live repository: main's
0.1.8→ refused (tagged);0.1.9→ accepted,version=0.1.9written toGITHUB_OUTPUT;0.1.7→ refused (orphan tag);0.1.10→ refused (not next).actionlint1.7.7: no new findings. It reports only the runner labels it doesn't know (xcode-27,macos-15-intel,windows-11-arm), and reports the same onmain.oxlint,oxfmt --check, and the divergence check pass.Codex review (GPT-6.1 Sol, high; run through the Codex CLI because Scient's delegation failed): one finding. GitHub can't make a deletion apply only to drafts, so a draft published between the listing and the DELETE would have been deleted. Fixed in
47278dd9bf: each draft is read again right before its DELETE, the run stops if the draft has been published, andSCIENT.mdsays not to publish a draft while a release run of the same version is running. Codex found nothing else wrong with the expressions, gating, tag behaviour, the script or the docs.Rebased twice while other sessions released 0.1.9 and 0.1.10 the old way.
c28e94bab7makes the check say so when a hand-pushed tag on the next, never-published version blocks the release. Live: 0.1.10 is tagged but its release is still building, and the check now reports that tag instead of a dead end.Not exercised: a real release run. This PR's CI covers the ordinary path, not the dispatched release path. The first real release (0.1.9) is that run, and its draft step fails loudly if GitHub ever creates the tag at drafting.
Not in this PR
The unpublished v0.1.7 draft and the unused
v0.1.6andv0.1.7tags remain. Removing them waits for the owner's OK. They don't block anything: the next release is 0.1.9.