diff --git a/pyproject.toml b/pyproject.toml index 7744aef87..293c5707d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,7 +59,7 @@ backend = [ # yet; pinned to a specific commit, same pattern as rankweave. Ships a # PyO3/maturin Rust core with no fallback wheel, so building this from # source needs a Rust toolchain -- see backend/Dockerfile. - "fast-mlsirm @ git+https://github.com/ContextualWisdomLab/fast-mlsirm.git@d025b7d237d8db7ca97a5611606c6285d5870895", + "fast-mlsirm @ git+https://github.com/ContextualWisdomLab/fast-mlsirm.git@09f762ded35786dd1078222a4577ff09d649816f", ] [tool.setuptools.packages.find] diff --git a/tests/test_fast_mlsirm_release_dependency.py b/tests/test_fast_mlsirm_release_dependency.py new file mode 100644 index 000000000..271ffa7e4 --- /dev/null +++ b/tests/test_fast_mlsirm_release_dependency.py @@ -0,0 +1,43 @@ +"""Consumer contract for the released fast-mlsirm owner dependency.""" + +from __future__ import annotations + +from pathlib import Path +import tomllib + + +ROOT = Path(__file__).parents[1] +PYPROJECT = ROOT / "pyproject.toml" +UV_LOCK = ROOT / "uv.lock" +OWNER_RELEASE_VERSION = "0.9.1" +OWNER_RELEASE_COMMIT = "09f762ded35786dd1078222a4577ff09d649816f" +OWNER_REPOSITORY = "https://github.com/ContextualWisdomLab/fast-mlsirm.git" +STALE_CONSUMER_COMMIT = "d025b7d237d8db7ca97a5611606c6285d5870895" + + +def test_backend_extra_consumes_exact_released_fast_mlsirm_owner_commit() -> None: + """Keep psychometric code owner-pinned to the immutable v0.9.1 release target.""" + pyproject = PYPROJECT.read_text(encoding="utf-8") + assert STALE_CONSUMER_COMMIT not in pyproject + assert f"fast-mlsirm @ git+{OWNER_REPOSITORY}@{OWNER_RELEASE_COMMIT}" in pyproject + + +def test_universal_lock_binds_fast_mlsirm_package_to_the_released_owner_source() -> None: + """Bind version, repository, revision, and resolved commit in one lock record.""" + lock_text = UV_LOCK.read_text(encoding="utf-8") + assert STALE_CONSUMER_COMMIT not in lock_text + + lock = tomllib.loads(lock_text) + packages = [ + package + for package in lock.get("package", []) + if package.get("name") == "fast-mlsirm" + ] + assert len(packages) == 1 + + package = packages[0] + expected_source = ( + f"{OWNER_REPOSITORY}?rev={OWNER_RELEASE_COMMIT}#{OWNER_RELEASE_COMMIT}" + ) + assert package.get("version") == OWNER_RELEASE_VERSION + assert package.get("source") == {"git": expected_source} diff --git a/uv.lock b/uv.lock index f94e79cf4..3da51f51e 100644 --- a/uv.lock +++ b/uv.lock @@ -483,8 +483,8 @@ wheels = [ [[package]] name = "fast-mlsirm" -version = "0.8.0" -source = { git = "https://github.com/ContextualWisdomLab/fast-mlsirm.git?rev=d025b7d237d8db7ca97a5611606c6285d5870895#d025b7d237d8db7ca97a5611606c6285d5870895" } +version = "0.9.1" +source = { git = "https://github.com/ContextualWisdomLab/fast-mlsirm.git?rev=09f762ded35786dd1078222a4577ff09d649816f#09f762ded35786dd1078222a4577ff09d649816f" } dependencies = [ { name = "numpy" }, ] @@ -725,7 +725,7 @@ requires-dist = [ { name = "certifi", specifier = ">=2024.0.0" }, { name = "coverage", marker = "extra == 'dev'", specifier = ">=7.6" }, { name = "cryptography", specifier = ">=42.0" }, - { name = "fast-mlsirm", marker = "extra == 'backend'", git = "https://github.com/ContextualWisdomLab/fast-mlsirm.git?rev=d025b7d237d8db7ca97a5611606c6285d5870895" }, + { name = "fast-mlsirm", marker = "extra == 'backend'", git = "https://github.com/ContextualWisdomLab/fast-mlsirm.git?rev=09f762ded35786dd1078222a4577ff09d649816f" }, { name = "fastapi", marker = "extra == 'backend'", specifier = ">=0.141.1" }, { name = "httpx", marker = "extra == 'dev'", specifier = ">=0.27.0" }, { name = "httpx2", marker = "extra == 'dev'", specifier = ">=2.12.0" },