Repository navigation
release: v0.4.2 — republish the stack to close the PyPI version skew - #454
Merged
Merged
Conversation
…PI skew
imspy-connector on PyPI is 0.4.1, uploaded 2026-02-06 alongside the v0.4.0
tag. main's Cargo.toml also says 0.4.1, but the crate is 108 commits ahead of
that wheel and has since gained an entire submodule, py_acquisition. Same
version number, seven months of different content.
Installing current imspy-simulation against that wheel therefore breaks at
import, before any simulation code runs:
simulator.py:98 from .jobs.dda_selection_scheme import ...
dda_selection_scheme.py:13 ims_acquisition = imspy_connector.py_acquisition
AttributeError: module 'imspy_connector' has no attribute 'py_acquisition'
Versions bumped to match what main actually contains:
imspy-connector 0.4.1 -> 0.4.2 (108 Rust commits, new py_acquisition)
imspy-core 0.4.1 -> 0.4.2
imspy-predictors 0.5.1 -> 0.5.2 (includes the #452 Prosit/Koina fix)
imspy-search 0.4.0 -> 0.4.1
imspy-vis 0.4.0 -> 0.4.1
imspy-simulation 0.4.2 (bumped in #453)
The connector version lives in imspy_connector/pyproject.toml as well as
Cargo.toml, and maturin takes the wheel version from the former: bumping only
Cargo.toml compiles v0.4.2 but emits an 0.4.1 wheel, which PyPI rejects as a
duplicate, so the release would have published nothing. Both are bumped.
Pins are raised to >= the versions in this release. They were loose enough
(imspy-core asked for imspy-connector>=0.3.0) that an existing environment
kept its stale connector and reproduced the skew after upgrading everything
else. imspy-simulation also gains an explicit imspy-connector dependency: it
imports imspy_connector directly in writers.py, acquisition.py and
timsim/jobs/*, but only ever received it transitively through imspy-core,
which is what let the skew go unnoticed.
imspy-dia has no code changes and stays at 0.4.0; its pins are corrected on
main and will ship with its next release.
Verified against the artifacts this release would publish: connector wheel
built with the CI invocation (maturin build --release, no private features),
all six Python wheels built, installed into a clean environment, and the
failing import chain exercised end to end — py_acquisition present,
dda_selection_scheme and the timsim simulator import, timsim --help exits 0,
and the imspy-simulation suite runs 146 passed / 15 skipped. The one failure,
test_rt_cycle_length_raises_on_single_ms1, is pre-existing on main (both the
test and template_acquisition_common.py are byte-identical to main here; it
went unnoticed because no CI workflow runs the Python tests).
Claude-Session: https://claude.ai/code/session_01532ckxwR1fUorKF7CN66uA
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.
Why
A user installed current
imspy-simulationon a VM andtimsimdied at import:imspy-connectoron PyPI is 0.4.1, uploaded 2026-02-06 — the same day as thev0.4.0tag.main'sCargo.tomlalso says0.4.1, but the crate is 108 commits ahead of that wheel and has since gained an entire submodule,py_acquisition. Same version number, seven months of different content.The import chain that breaks:
Nothing is wrong with how he installed it. The published connector is simply stale.
What's in this release
py_acquisitionTwo traps this had to clear
1. The connector version is declared twice.
imspy_connector/pyproject.tomlcarries its ownversion, and maturin takes the wheel version from there, not fromCargo.toml. Bumping onlyCargo.tomlcompilesv0.4.2and emits an0.4.1wheel — which PyPI rejects as a duplicate, somaturin publishfails and the release ships nothing while looking like it worked. Caught by building the wheel locally; both files are bumped.2. The pins were too loose to force the upgrade.
imspy-coreasked forimspy-connector>=0.3.0,imspy-diafor>=0.4.0. An existing environment would upgrade everything else and keep its stale connector — reproducing the exact break. All pins now require the versions in this release.imspy-simulationalso gains an explicitimspy-connector>=0.4.2dependency. It importsimspy_connectordirectly inwriters.py,acquisition.pyandtimsim/jobs/*, but only ever received it transitively throughimspy-core— that undeclared dependency is what let the skew go unnoticed in the first place.imspy-diahas no code changes, so it stays at 0.4.0; its pins are fixed on main and ship with its next release.Verification
Built and exercised the exact artifacts this release would publish, in a clean environment:
maturin build --release, no--features).thermorawfile/sciexwiffare optional feature-gated deps, so no private-repo access is needed — confirmed by the build succeeding without it.Requires-Distmetadata inspected in each — every path toimspy-simulationnow forcesimspy-connector>=0.4.2.146 passed, 15 skipped, 1 failed.The one failure,
test_template_acquisition_common.py::test_rt_cycle_length_raises_on_single_ms1, is pre-existing on main — both the test andtemplate_acquisition_common.pyare byte-identical tomainin this branch, and it dates tof465dbc6(the build-from-template schedule gate), where an earliervalidate_template_schedulecheck now fires before the one the test asserts on. It went unnoticed because no CI workflow runs the Python tests — onlyrust.ymldoes, and only for the crates. Worth fixing separately; flagging it rather than folding it into a release PR.Release mechanics
Both
imspy-connector-publish.ymlandimspy-publish.ymltrigger onrelease: published, so one GitHub release ships the connector wheels (ubuntu/windows/macos-14/macos-15 × py3.11–3.13) and all Python packages.This PR contains no code changes — only version strings, dependency pins, and the version tables in
CLAUDE.md.https://claude.ai/code/session_01532ckxwR1fUorKF7CN66uA