Cut 1.5.0 - #19
Merged
Merged
Conversation
Master carries the CLI affordance work, the numpy import fix, the CI repairs and the mcp deprecation, all filed under Unreleased, while version.py still said 1.4.0 -- which is already on PyPI. So there is nothing publishable: a build from master would either collide with an existing filename or ship this work mislabelled as 1.4.0. A minor rather than a patch on three counts. The CLI accepts flags in positions it used to refuse, `--verbose` shows an entire severity that was previously displayed by no command at all, and `plainsong spec` exits non-zero on finding no specs where it used to exit 0. That last one is the only thing an upgrader has to read: a script that ran `plainsong spec` against an install missing its spec files and treated 0 as success will now see a failure, which is the point -- that exact silence is what let a broken package through a release. No notation changes. 6,321 files compile to exactly the music they did in 1.0.0, which the corpus fingerprint checks rather than assumes. Verified in every environment CI uses and one it cannot: stdlib-only 705 tests 0 errors, pytest clean, specs 7/7, ruff check and format clean, fingerprint unmoved, and verify_release --stage wheel 10/10, which builds the wheel, installs it into a throwaway venv outside the source tree and drives the console script from /tmp with PYTHONPATH stripped. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PBAjxy7cD6DzJ72NX8TJEc
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.
Master carries the CLI affordance work, the numpy import fix, the CI repairs and the
plainsong mcpdeprecation — all filed under Unreleased, whileversion.pystill said 1.4.0, which is already on PyPI. So there is nothing publishable: a build from master would either collide with an existing filename or ship this work mislabelled as 1.4.0.Why a minor and not a patch
Three things changed that a user can observe:
--json,-vand-qafter the subcommand, where it used to refuse them outright.--verboseshows info-level diagnostics, an entire severity previously displayed by no command at all.plainsong specexits non-zero on finding no specs, where it used to exit 0.That last one is the only thing an upgrader has to read. A script that ran
plainsong specagainst an install missing its spec files and treated0as success will now see a failure — which is the point. That exact silence is what let a broken package through a release.No notation changes. 6,321 files compile to exactly the music they did in 1.0.0, which the corpus fingerprint checks rather than assumes.
Verified
In every environment CI uses, and one it cannot:
ruff check/format --checkverify_release.py --stage wheelThe last one is the check the test suite structurally cannot perform: it builds the wheel, installs it into a throwaway virtualenv outside the source tree, and drives the console script from
/tmpwithPYTHONPATHstripped — so a data file that stopped being packaged fails here rather than after release.README.md's stated version is bumped to 1.5 alongside, whichtests/test_readme_links.pyenforces against the tree — it once said "Version 1.0" while PyPI shipped 1.2.0.Tagging
The release workflow refuses a tag that disagrees with the tree, so after merge:
Tag the commit that carries the bump, not whatever master was when you started —
v1.2.0was created one commit early and the guard caught it.The blocker this does not fix
Publishing needs a Trusted Publisher configured on PyPI, and there has never been one. All six previous release runs died at the same step with
invalid-publisher: valid token, but no corresponding publisher, and every version now on PyPI was uploaded by hand. Until that is set up, tagging builds green and then fails at the publish step.PyPI → the
plainsongproject → Publishing → add a publisher: ownerSuperInstance, repoplainsong, workflowrelease.yml, environment left empty (environment: MISSINGin the error means exactly that).docs/releasing.mdhas the long version.Companion PR: SuperInstance/plainsong-mcp#5 gives the sibling a release workflow it has never had, so 1.0.1 there can ship too.
Generated by Claude Code