docs: cut the /release skill down to pipelex-sdk-python's specifics - #26
Merged
Conversation
The skill now names the workspace release play and declares only what is this repo's own: what the push to main publishes through publish.yml and how the landing verifies it, the pyproject.toml version with the uv.lock that make li regenerates, the agent-check and agent-test gates including the version-sync test that must run again after the lock, the files the release commit carries by name, the workflows that gate a release pull request, and the particulars — the refused pre-release form, the lightweight tags, the SHA-pinned Sigstore action, the exact mthds pin, and the absence of automatic release follow-ups. Dropped the procedure the play already carries once for every repo: the git status pre-flight that offered to fold uncommitted changes or unpushed commits into the release, the release branch created in place from the current HEAD, the numbered restatement of the changelog, bump, commit and pull request steps, and the post-merge reminder that the merge is what publishes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016F72qvy4QBZHe7XX24QmcT
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
The repo's
/releaseskill now carries only what is specific topipelex-sdk-pythonand names the workspace release play,docs/releasing.md, for the procedure itself. Everything the play already does once for every repo is gone from the skill: thegit statuspre-flight that offered to fold uncommitted changes or unpushed commits into the release, the release branch created in place from the current HEAD, the numbered restatement of the changelog / bump / commit / pull-request steps, and the post-merge reminder that the merge is what publishes. What is left is the part that cannot be regenerated from the play — this repo's own facts, verified against the tree and.github/workflows/rather than carried over on trust.Under the six headings the play reads by name, the skill now declares:
mainfirespublish.ymlon the push, so its run sits undermainwith the merge commit as its head SHA. Its jobs run in sequence:buildmakes the sdist and wheel once and every later job downloads that artifact;publish-to-pypiuploads to PyPI aspipelex-sdkthrough trusted publishing (OIDC, no token) with noskip-existing, which is the only thing standing between an unbumped push tomainand a failed upload, sinceversion-check.ymlruns on pull requests only;github-releaseslices the changelog section for the version, signs the dists with Sigstore and creates thevX.Y.ZRelease. Two failure shapes are written down because they are silent: signing is notcontinue-on-errorand happens before the Release is created, so an outage leaves the version on PyPI with no Release and no tag (re-run the failed jobs, which reuse the stored build), and a missing## [vX.Y.Z] -heading makes the extraction step warn and exit rather than fail, shipping a Release whose body is the placeholderRelease vX.Y.Z. The landing verifies the run, the registry and the tag with three commands.pyproject.toml's[project].versionis the one place the number is written, and it must stay the file's firstversion =line because four different readers grep it differently.uv.lockis regenerated bymake liafter the bump, andpackage-check.ymlrunsuv lock --lockedon every pull request, so a stale lock is a red PR. Nothing else is stamped:pipelex_sdk/version.pyderives__version__from the installed distribution metadata, and the README carries no version badge.make agent-check(it rewrites files, so what it touched joins the release commit) andmake agent-test, with the note that the test gate must run again after the bump andmake li, becausetests/unit/test_version.pycompares__version__read from installed metadata against thepyproject.tomlversion and skips itself entirely when the distribution is not installed.make checkis explicitly not part of the release: it addspylintand no workflow runs it.pyproject.toml,CHANGELOG.md,uv.lock, and each filemake agent-checkrewrote, staged by name.guard-branches.yml(gate-mainis what makesrelease/vX.Y.Zthe only head that can reachmain),version-check.yml,changelog-check.yml,package-check.yml,lint-check.yml,tests-check.ymlandcla.yml, each with what it actually asserts and what it does not:version-check.ymlcompares only against the branch name and never against the version already onmain, so a backwards bump passes it, andchangelog-check.ymlasserts nothing about[Unreleased], so removing a leftover heading is the skill's job rather than CI's.release/v[0-9]+\.[0-9]+\.[0-9]+at both ends, andversion-check.ymlfails rather than skips on a non-matching head, even thoughpublish.ymlcarries pre-release detection nothing can reach); the changelog heading carries thev; the tags are lightweight, created bygh release create, so tag reads need--tags; the Sigstore action is SHA-pinned because the enterprise Actions allowlist keys on the SHA, making a version move an out-of-band change needing an admin; the exactmthds==X.Y.Zpin belongs to thebump-mthdsskill and must stay co-installable withpipelex's own exact pin; andledger.tomldeclares norelease_followupsfor this repo, so follow-ups are filed by hand.The ledger item's 2026-09-07 survey disagreed with the tree in three places, and the tree won each time. The survey listed
make agent-checkas the whole of Gates, butmake agent-testis a separate Makefile target and CI runs the same suite throughmake gha-testsintests-check.yml— and the version-sync test makes the ordering around the bump load-bearing, which the survey did not capture. It recorded the changelog convention as "never recreates" an[Unreleased]section; what is true is that the release folds it into the new entry and leaves none behind, and the next change to land creates one again. And it proposed verifying the publish withpip index versions pipelex-sdk, which does not work from the release worktree:wtprovisions through the Makefile'sinstalltarget, and the uv-made.venvhas nopip— the skill reads the PyPI JSON API instead and keeps thepipform as the alternative for a shell that has one.Closes L-260907-6e6622
🤖 Generated with Claude Code
https://claude.ai/code/session_016F72qvy4QBZHe7XX24QmcT
Summary by cubic
Trims the
/releaseskill to only what is specific topipelex-sdk-python, pointing to the workspace release play for the general procedure.Closes L-260907-6e6622
Changes
agent-checkandagent-testgates (including the version-sync test that must run again after the lock), the release commit contents, CI checks on the release PR, and particulars like the pre-release refusal, lightweight tags, SHA-pinned Sigstore action, exactmthdspin, and no automatic follow-ups.git statuspre-flight, branch creation from current HEAD, the numbered changelog/bump/commit/PR steps, and the post-merge publishing reminder.Written for commit cada2f3. Summary will update on new commits.