Repository navigation
Verify the version in the package workflow, not in a unit test - #1647
Merged
malatewang merged 4 commits intoSep 19, 2026
Merged
Conversation
test_get_version asserts that get_version() returns a version matching a hand-written pattern: release, optional .devN, optional local segment. On speedkick that assertion fails on every pull request, because the annotated tag v0.3.9-post1 (2026-08-31, "Post-release build from speedkick, after v0.3.9") sits on that branch's ancestry and setuptools-scm renders each build as 0.3.9.post2.devN+g<sha>, a shape the pattern never allowed. main passes today only because that tag is not yet reachable from it; it becomes reachable the moment speedkick merges, and any post-release tag would do the same. The test is deleted rather than patched. get_version() is a wrapper around importlib.metadata.version for two distribution names; nothing in it produces a version shape. The shape comes from setuptools-scm, the repository's tags and the working tree, so the test could only ever fail for environmental reasons, and that is its whole history: the regex was widened in MemMachine#993 (dotted local segment), MemMachine#1038 (two-component tag) and would have been again here, while the function under test has not changed since MemMachine#951 wrote it. It also rejected a documented output: MemMachine#951 specifies client_version as "not available" when memmachine-client is not installed, which is the case for a wheel install of the server, whose package does not depend on the client. The test passed only because the uv workspace installs every member. test_version_string stays; it tests the model's own string form. The check moves to the layer that owns it. The Test Server Package workflow already builds the wheels and installs them; a new step runs the installed memmachine-server --version and requires the reported server version to equal the version in the wheel's filename. That ties the binary to the artifact it shipped in without asserting anything about the version's format. Verified locally on this branch: the trimmed test file passes and is clean under ruff check and ruff format --check; the new step, run verbatim against wheels built from this tree and installed into a fresh virtualenv, passes (and reports "client: not available", which the deleted test would have rejected). Unrelated but worth knowing: the pytest workflow's test step has no shell key, so on windows it runs under pwsh, which does not stop on the first command's non-zero exit and returns the last command's status (the client suite). A server-suite failure on windows would not fail the job. On main the windows server run passes today (1830 passed on MemMachine#1584's run), so nothing is hidden yet; on speedkick two windows-only failures are. Forcing bash there is left for when those are fixed. Same change as MemMachine#1604 on speedkick, applied to main. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
malatewang
approved these changes
Sep 18, 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.
test_get_versionasserts thatget_version()returns a version matching a hand-written pattern:release[.devN[+local]]. Onspeedkickthat assertion fails on every pull request:mainpasses it today, and this PR is the same change as #1604 (merged onspeedkick) applied here, so the two branches carry the same test file and the same package-workflow check, and somaindoes not start failing the moment the cause becomes reachable from it.Cause
The annotated tag
v0.3.9-post1("Post-release build from speedkick, after v0.3.9", 2026-08-31) sits on speedkick's ancestry and is the nearest tag for every commit since. setuptools-scm therefore renders each speedkick build as0.3.9.post2.devN+g<sha>. The test's pattern never allowed a post-release segment, so it rejected a version setuptools-scm produces by design.mainis unaffected only because that tag is not yet reachable from it —git describeonmaingivesv0.3.9-22-g..., onspeedkickv0.3.9-post1-21-g.... Mergingspeedkickintomain, or tagging any post-release onmain, reproduces the failure here.Why the test is deleted rather than patched
get_version()is a wrapper aroundimportlib.metadata.versionfor two distribution names. Nothing in it produces a version shape; the shape comes from setuptools-scm, the repository's tags and the working tree. So the test could only ever fail for environmental reasons, and that is its whole history:+g<sha>.d<date>0.1v0.3.9-post1The function under test has not changed since #951 wrote it. The test also rejected a documented output: #951 specifies
client_versionas "not available" when memmachine-client is not installed, which is the case for a wheel install of the server (the server package does not depend on the client). It passed only because the uv workspace installs every member.test_version_stringstays; it tests the model's own string form.Where the check goes instead
The Test Server Package workflow already builds the wheels and installs them. A new step runs the installed
memmachine-server --versionand requires the reported server version to equal the version in the wheel's filename. That ties the binary to the artifact it shipped in without asserting anything about the version's format, so tag conventions can change without touching it.Verification
ruff checkandruff format --check.client: not available, which the deleted test would have rejected.Out of scope: the windows unit-test step runs under pwsh
The pytest workflow's test step has no
shell:key, so on windows it runs under pwsh, which does not stop on the first command's non-zero exit and returns the status of the last command (the client suite). A server-suite failure on windows would not fail the job. Onmainthe windows server run passes today (1830 passed, 4 skipped on #1584's run), so nothing is hidden yet; onspeedkicktwo windows-only failures are, and forcing bash there would turn windows red until they are fixed. Left as is here for parity.🤖 Generated with Claude Code