Repository navigation
ci: sdk-tag never replaces a released SDK tarball - #229
Merged
Merged
Conversation
Every push to main touching `sdk/**` ran the pack and publish steps even when the version's tag already existed, and the publish step uploaded with `--clobber`: the released `fizzy-sdk-v<version>.tar.gz` was replaced by main's later `sdk/`. Plugins pin that asset by hash, so a replaced one fails every clean fetch. It has happened: `sdk-v0.2.15` was released on 10-02 and its tarball repacked from #207's merge on 10-04 (the asset's creation time is that run's). Now a push that leaves `sdk_version` alone publishes nothing. The tag step reports whether to publish: yes for a tag it just created, and for an existing tag whose release has no tarball (a run that failed after pushing the tag), which is then packed from the tag's own commit, not from main. The upload no longer clobbers, so if `gh` misreports a tarball as missing, the run fails rather than replacing it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 of 6 tasks
foxnne
added a commit
that referenced
this pull request
Oct 8, 2026
The step told agents to abandon `::<area>/<slug> ~ ::main@origin` after fetching, but by then the bookmark is gone: GitHub deletes a merged branch, and `jj git fetch` abandons the changes only it held (seen on #229's merge). What the step needs is the order: forget the PR's workspace first, since a change still checked out somewhere is kept, then fetch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
foxnne
added a commit
that referenced
this pull request
Oct 8, 2026
* contributing: one step per PR, a required gate, SDK release train How a change gets to main, written down where every session and contributor reads it. The rules lived in one person's local agent memory, where a cloud session (or a second person) never saw them, and CLAUDE.md had drifted (it still called the SDK "0.2.0, unreleased"). CONTRIBUTING.md, imported by CLAUDE.md: one plan step per PR (plans are issues, ~800 lines of non-test diff, `<area>/<slug>` branches never reused, the PR title is the squash commit); claiming work with a draft PR before building it; jj in a workspace of one's own; verifying and saying how; and the SDK on a release train. A feature PR records `recorded_sdk_shape_fingerprint` and leaves `sdk_version` alone; only an `sdk: release 0.2.N` PR bumps it. Two branches no longer race for the same number, and a morning's SDK changes cost one repin round instead of several. The doc comments in `sdk/src/version.zig`, `sdk/sdk_version.zig`, `sdk/src/dylib.zig` and docs/PLUGINS.md that tied a bump to every fingerprint change now say the same. CI: `ci-ok`, one job that passes when every other job passed or was skipped, is the check main's ruleset requires (recorded in `.github/rulesets/main.json`). The workflow-level `paths-ignore` goes, since it would leave a Markdown-only PR's required check waiting for good; a `changes` job decides instead whether the builds run. CI also runs for `merge_group`, so a merge queue needs no workflow change. RELEASING.md bumps VERSION through a PR, SDK release first if the fingerprint moved. A PR template asks for the SDK impact and per-platform verification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * contributing: after a merge, jj git fetch drops the merged stack The step told agents to abandon `::<area>/<slug> ~ ::main@origin` after fetching, but by then the bookmark is gone: GitHub deletes a merged branch, and `jj git fetch` abandons the changes only it held (seen on #229's merge). What the step needs is the order: forget the PR's workspace first, since a change still checked out somewhere is kept, then fetch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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 changes
A merge to
mainthat touchessdk/**without bumpingsdk_versionno longer repacks and replaces the latest SDK release's tarball.Until now, every push touching
sdk/**ran the pack and publish steps even when the version's tag already existed, and the publish step uploaded with--clobber. The releasedfizzy-sdk-v<version>.tar.gzwas replaced by main's latersdk/. Plugins pin that asset by hash, so a replaced one fails every clean fetch.It has already happened:
sdk-v0.2.15shipped on 10-02 (edb77afd). Its tarball was then repacked from #207's merge on 10-04 (run 37163565097 logsRelease sdk-v0.2.15 exists — uploading/replacing asset, and the asset'screatedAtis that run's). The store plugins have since moved to 0.2.16/0.2.17, so nothing should be fetching it now.sdk-v0.2.16andsdk-v0.2.17are intact: nothing has touchedsdk/since either shipped.Now:
ghever misreports a tarball as missing, the run fails instead of replacing it.This needs to land before #230's release train. Under the train every SDK feature PR touches
sdk/**without a version bump, so each one would have repacked the latest release.SDK impact
sdk/file changes.Verified
gh, behaves as intended in three cases:publish=false, HEAD unchangedpublish=true, tag checked outgherroring:publish=truefrom the tag, and the non-clobbering upload would then fail if the asset existssteps.tag.outputs.publish.main; the firstsdk/**merge after this one is the live test (expect "nothing to publish").Follow-ups
sdk-v0.2.15's original tarball is your call. Its original hash isfizzy-0.2.15-SGBwY-gGGwAbpDp0riHXnY2CnhgJGPS51MxM5vLoVhiw, and it can probably be rebuilt by packingedb77afd's tree with that commit's ownscripts/pack-sdk.shon Linux, as CI did. Today's script writes.pathsdifferently, so it may not match.zig fetchthe result to check the hash before uploading.🤖 Generated with Claude Code