Problem
sc-compose (and likely sc-composer-beads) publish PyPI wheels tagged cp311-cp311 — built against CPython 3.11's specific (non-stable) ABI, not the stable abi3 ABI. requires-python = ">=3.11" in bindings/python/pyproject.toml implies broader compatibility, but no wheel actually resolves for 3.12+.
Verified directly against the published 1.6.1 release:
$ pip download sc-compose==1.6.1 --python-version 3.14 --only-binary=:all:
ERROR: Could not find a version that satisfies the requirement sc-compose==1.6.1 (from versions: none)
ERROR: No matching distribution found for sc-compose==1.6.1
Published wheel set for 1.6.1:
sc_compose-1.6.1-cp311-cp311-macosx_11_0_arm64.whl
sc_compose-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sc_compose-1.6.1-cp311-cp311-manylinux_2_34_x86_64.whl
sc_compose-1.6.1-cp311-cp311-win_amd64.whl
sc_compose-1.6.1.tar.gz
Gaps:
- No forward compatibility past 3.11. Wheels are per-exact-interpreter (
cp311-cp311), not abi3, so 3.12/3.13/3.14 users get no wheel and must build from the sdist — which requires a Rust toolchain locally. On a machine without Rust, pip install sc-compose fails outright for any Python != 3.11.
- No macOS x86_64 (Intel) wheel.
- No Windows ARM64 wheel.
Root cause
bindings/python/Cargo.toml (and bindings/sc-composer-beads-python/Cargo.toml) declare:
[dependencies]
pyo3 = "0.29"
[features]
python-extension = ["pyo3/extension-module"]
No abi3-pyXXX feature is enabled, so maturin builds a version-specific wheel instead of a stable-ABI one.
The release matrix in release/publish-artifacts.toml for sc-compose is:
wheels = ["ubuntu-latest", "ubuntu-24.04-arm", "macos-latest", "windows-latest"]
macos-latest is an arm64 (Apple Silicon) runner, and there's no Windows ARM64 or Intel macOS entry.
Proposed fix
- Add an
abi3-py311 feature to the pyo3 dependency in bindings/python/Cargo.toml (and bindings/sc-composer-beads-python/Cargo.toml if the same policy should apply there), e.g.:
pyo3 = { version = "0.29", features = ["abi3-py311"] }
This makes maturin emit cp311-abi3-<platform> wheels that install on any CPython >= 3.11 without a rebuild per minor version — matching what requires-python = ">=3.11" already claims.
- Broaden the
wheels matrix in release/publish-artifacts.toml for the sc-compose (and sc-composer-beads) [[python_distributions]] entries to add:
- macOS x86_64 (Intel) — e.g.
macos-13 runner
- Windows ARM64 — e.g.
windows-11-arm runner
Motivation
Found while evaluating sc-compose as a dependency for sc-install in synaptic-canvas (using it to render .local.j2 template artifacts at install time). A hard dependency on sc-compose isn't viable for sc-install users until it reliably installs via wheel across the platforms/Python versions sc-install itself supports.
Problem
sc-compose(and likelysc-composer-beads) publish PyPI wheels taggedcp311-cp311— built against CPython 3.11's specific (non-stable) ABI, not the stableabi3ABI.requires-python = ">=3.11"inbindings/python/pyproject.tomlimplies broader compatibility, but no wheel actually resolves for 3.12+.Verified directly against the published 1.6.1 release:
Published wheel set for 1.6.1:
Gaps:
cp311-cp311), notabi3, so 3.12/3.13/3.14 users get no wheel and must build from the sdist — which requires a Rust toolchain locally. On a machine without Rust,pip install sc-composefails outright for any Python != 3.11.Root cause
bindings/python/Cargo.toml(andbindings/sc-composer-beads-python/Cargo.toml) declare:No
abi3-pyXXXfeature is enabled, so maturin builds a version-specific wheel instead of a stable-ABI one.The release matrix in
release/publish-artifacts.tomlforsc-composeis:macos-latestis an arm64 (Apple Silicon) runner, and there's no Windows ARM64 or Intel macOS entry.Proposed fix
abi3-py311feature to thepyo3dependency inbindings/python/Cargo.toml(andbindings/sc-composer-beads-python/Cargo.tomlif the same policy should apply there), e.g.:cp311-abi3-<platform>wheels that install on any CPython >= 3.11 without a rebuild per minor version — matching whatrequires-python = ">=3.11"already claims.wheelsmatrix inrelease/publish-artifacts.tomlfor thesc-compose(andsc-composer-beads)[[python_distributions]]entries to add:macos-13runnerwindows-11-armrunnerMotivation
Found while evaluating
sc-composeas a dependency forsc-installinsynaptic-canvas(using it to render.local.j2template artifacts at install time). A hard dependency onsc-composeisn't viable forsc-installusers until it reliably installs via wheel across the platforms/Python versionssc-installitself supports.