From 06a3fa3a20f49b8fea94cc997299612260b06c7f Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Mon, 12 Oct 2026 08:04:34 -0400 Subject: [PATCH] Certify policyengine-uk 2.126.12 with policyengine-uk-data 1.58.0 Certifies the pair on the publisher's compatibility claim in the 1.58.0 release manifest at HF commit 0aa3eee1 (manifest sha256 9bde769f), which appends policyengine-uk ==2.126.12 to the earlier claims. Core stays at 3.33.0. Regenerated together: the bundle manifest, both TRO sidecars, the lockfile (policyengine-uk only) and the test constants that pin the certified pair. The gate refuses an unclaimed version (2.126.11). Fixes #584 Co-Authored-By: Claude Opus 5.5 --- changelog.d/584.changed.md | 1 + pyproject.toml | 6 +++--- src/policyengine/data/bundle/manifest.json | 18 +++++++++--------- .../data/bundle/uk.trace.tro.jsonld | 18 +++++++++--------- .../data/bundle/us.trace.tro.jsonld | 4 ++-- tests/test_models.py | 2 +- tests/test_release_manifests.py | 4 ++-- uv.lock | 12 ++++++------ 8 files changed, 33 insertions(+), 32 deletions(-) create mode 100644 changelog.d/584.changed.md diff --git a/changelog.d/584.changed.md b/changelog.d/584.changed.md new file mode 100644 index 00000000..b65f92ea --- /dev/null +++ b/changelog.d/584.changed.md @@ -0,0 +1 @@ +Certify policyengine-uk 2.126.12 with policyengine-uk-data 1.58.0 (`enhanced_frs_2024_25`), on the publisher's compatibility claim in the 1.58.0 release manifest; policyengine-core stays at 3.33.0. Reforms keyed from 6 April, such as `2026-04-06.2100-12-31`, now apply in that fiscal year. Baseline UK results change with policyengine-uk 2.125.2 to 2.126.12, chiefly fuel duty (+2.04%, from litre divisors on DESNZ pump prices), income tax (+0.29% to +0.45%, from banding savings and dividend income above property income), Carer's Allowance (-2.2% to -3.5%, from applying the earnings limit) and Pension Credit in 2025. diff --git a/pyproject.toml b/pyproject.toml index 3d427ee0..9e3b7fc1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,12 +42,12 @@ graph = [ models = [ "policyengine-core==3.33.0", "policyengine-us==2.2.1", - "policyengine-uk==2.125.1", + "policyengine-uk==2.126.12", "spm-calculator==1.0.0", ] uk = [ "policyengine-core==3.33.0", - "policyengine-uk==2.125.1", + "policyengine-uk==2.126.12", ] us = [ "policyengine-core==3.33.0", @@ -71,7 +71,7 @@ dev = [ "hypothesis>=6.100.0", "policyengine-core==3.33.0", "policyengine-us==2.2.1", - "policyengine-uk==2.125.1", + "policyengine-uk==2.126.12", "spm-calculator==1.0.0", ] diff --git a/src/policyengine/data/bundle/manifest.json b/src/policyengine/data/bundle/manifest.json index 170968eb..9c19f45b 100644 --- a/src/policyengine/data/bundle/manifest.json +++ b/src/policyengine/data/bundle/manifest.json @@ -22,7 +22,7 @@ "built_with_model_git_sha": "4cbedbecca352f52dffe47e849553c2759a00711", "built_with_model_version": "2.122.2", "certified_by": "policyengine.py bundle certification", - "certified_for_model_version": "2.125.1", + "certified_for_model_version": "2.126.12", "compatibility_basis": "legacy_compatible_model_package", "data_build_fingerprint": "sha256:c094d7006fdd81df220090284212f16bbffb15624643bc442c4bb3e1b1e5dac8", "data_build_id": "policyengine-uk-data-1.58.0" @@ -41,7 +41,7 @@ "data_package": { "name": "policyengine-uk-data", "release_manifest_path": "releases/1.58.0/release_manifest.json", - "release_manifest_revision": "fdeba38517bd86067f34c0a5d8ed8923efb3b10a", + "release_manifest_revision": "0aa3eee1cdae8f8125f4aff126a8f01957595dc3", "repo_id": "policyengine/policyengine-uk-data-private", "repo_type": "model", "version": "1.58.0" @@ -95,9 +95,9 @@ "default_dataset_uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@1.58.0", "model_package": { "name": "policyengine-uk", - "sha256": "a0983b4cef868467578a4fd0d163a977a0da8f710dd5194ec01c75f66d512c5a", - "version": "2.125.1", - "wheel_url": "https://files.pythonhosted.org/packages/ec/3a/1d90bad4346d1a8c2715be211ed3d3d7f48917da0d90405b8257b7304091/policyengine_uk-2.125.1-py3-none-any.whl" + "sha256": "4aa6d7ba411de0009d460efdc4e4992f2e8c89cbf8ec419024b1bce89d407ace", + "version": "2.126.12", + "wheel_url": "https://files.pythonhosted.org/packages/4f/3f/0a611e9b25beb75db3f2f521d359eabad0d1ab4e50194b866663355591ff/policyengine_uk-2.126.12-py3-none-any.whl" }, "policyengine_version": "6.3.0", "region_datasets": { @@ -105,9 +105,9 @@ "path_template": "enhanced_frs_2024_25.h5" } }, - "release_manifest_uri": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/fdeba38517bd86067f34c0a5d8ed8923efb3b10a/releases/1.58.0/release_manifest.json", + "release_manifest_uri": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/0aa3eee1cdae8f8125f4aff126a8f01957595dc3/releases/1.58.0/release_manifest.json", "schema_version": 1, - "source_manifest_uri": "hf://model/policyengine/policyengine-uk-data-private@fdeba38517bd86067f34c0a5d8ed8923efb3b10a/releases/1.58.0/release_manifest.json", + "source_manifest_uri": "hf://model/policyengine/policyengine-uk-data-private@0aa3eee1cdae8f8125f4aff126a8f01957595dc3/releases/1.58.0/release_manifest.json", "version": "policyengine-uk-data-1.58.0" }, "us": { @@ -310,10 +310,10 @@ "policyengine-uk": { "country": "uk", "import_name": "policyengine_uk", - "install_requirement": "policyengine-uk==2.125.1", + "install_requirement": "policyengine-uk==2.126.12", "name": "policyengine-uk", "role": "country_model", - "version": "2.125.1" + "version": "2.126.12" }, "policyengine-us": { "country": "us", diff --git a/src/policyengine/data/bundle/uk.trace.tro.jsonld b/src/policyengine/data/bundle/uk.trace.tro.jsonld index 8dcd64ad..ae3f4a57 100644 --- a/src/policyengine/data/bundle/uk.trace.tro.jsonld +++ b/src/policyengine/data/bundle/uk.trace.tro.jsonld @@ -45,7 +45,7 @@ "trov:hasArtifact": { "@id": "composition/1/artifact/data_release_manifest" }, - "trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/fdeba38517bd86067f34c0a5d8ed8923efb3b10a/releases/1.58.0/release_manifest.json" + "trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/0aa3eee1cdae8f8125f4aff126a8f01957595dc3/releases/1.58.0/release_manifest.json" }, { "@id": "arrangement/1/location/dataset", @@ -61,7 +61,7 @@ "trov:hasArtifact": { "@id": "composition/1/artifact/model_wheel" }, - "trov:hasLocation": "https://files.pythonhosted.org/packages/ec/3a/1d90bad4346d1a8c2715be211ed3d3d7f48917da0d90405b8257b7304091/policyengine_uk-2.125.1-py3-none-any.whl" + "trov:hasLocation": "https://files.pythonhosted.org/packages/4f/3f/0a611e9b25beb75db3f2f521d359eabad0d1ab4e50194b866663355591ff/policyengine_uk-2.126.12-py3-none-any.whl" } ] } @@ -75,14 +75,14 @@ "@type": "trov:ResearchArtifact", "schema:name": "policyengine.py bundle manifest for uk", "trov:mimeType": "application/json", - "trov:sha256": "5880d61838b08e6e0aa94c5ff8b6b0806892efae4f0a1c262319b9ce722dff13" + "trov:sha256": "2677e139e19ba2dfd0e06b03f476e5b685b457b2b85812d7bf63f3bfa4eedda8" }, { "@id": "composition/1/artifact/data_release_manifest", "@type": "trov:ResearchArtifact", "schema:name": "policyengine-uk-data release manifest 1.58.0", "trov:mimeType": "application/json", - "trov:sha256": "ddd63e1f7755ee358c4ede9050bfdde09f3a80f48a5c0d8ee9d1fb531e4a1a07" + "trov:sha256": "9bde769f476b0c550dc1a40862e413e95a18185ae6beffc970551913ea5e4613" }, { "@id": "composition/1/artifact/dataset", @@ -94,15 +94,15 @@ { "@id": "composition/1/artifact/model_wheel", "@type": "trov:ResearchArtifact", - "schema:name": "policyengine-uk==2.125.1 wheel", + "schema:name": "policyengine-uk==2.126.12 wheel", "trov:mimeType": "application/zip", - "trov:sha256": "a0983b4cef868467578a4fd0d163a977a0da8f710dd5194ec01c75f66d512c5a" + "trov:sha256": "4aa6d7ba411de0009d460efdc4e4992f2e8c89cbf8ec419024b1bce89d407ace" } ], "trov:hasFingerprint": { "@id": "composition/1/fingerprint", "@type": "trov:CompositionFingerprint", - "trov:sha256": "5a84f161fc95544ff2d6d8bfbcc3e8dd10e8573b8bc7e3b9b876b9f1b115d703" + "trov:sha256": "1c5e7030b9bfc4b54d4d8d2f9806d79f97fa042f5b0de41f92d38075930f0725" } }, "trov:hasPerformance": { @@ -111,12 +111,12 @@ "pe:builtWithModelGitSha": "4cbedbecca352f52dffe47e849553c2759a00711", "pe:builtWithModelVersion": "2.122.2", "pe:certifiedBy": "policyengine.py bundle certification", - "pe:certifiedForModelVersion": "2.125.1", + "pe:certifiedForModelVersion": "2.126.12", "pe:compatibilityBasis": "legacy_compatible_model_package", "pe:dataBuildFingerprint": "sha256:c094d7006fdd81df220090284212f16bbffb15624643bc442c4bb3e1b1e5dac8", "pe:dataBuildId": "policyengine-uk-data-1.58.0", "pe:emittedIn": "repository-bundle", - "rdfs:comment": "Certification of build policyengine-uk-data-1.58.0 for policyengine-uk 2.125.1.", + "rdfs:comment": "Certification of build policyengine-uk-data-1.58.0 for policyengine-uk 2.126.12.", "trov:accessedArrangement": { "@id": "arrangement/1" }, diff --git a/src/policyengine/data/bundle/us.trace.tro.jsonld b/src/policyengine/data/bundle/us.trace.tro.jsonld index 96156a44..469c2385 100644 --- a/src/policyengine/data/bundle/us.trace.tro.jsonld +++ b/src/policyengine/data/bundle/us.trace.tro.jsonld @@ -74,7 +74,7 @@ "@type": "trov:ResearchArtifact", "schema:name": "policyengine.py bundle manifest for us", "trov:mimeType": "application/json", - "trov:sha256": "5880d61838b08e6e0aa94c5ff8b6b0806892efae4f0a1c262319b9ce722dff13" + "trov:sha256": "2677e139e19ba2dfd0e06b03f476e5b685b457b2b85812d7bf63f3bfa4eedda8" }, { "@id": "composition/1/artifact/data_release_manifest", @@ -101,7 +101,7 @@ "trov:hasFingerprint": { "@id": "composition/1/fingerprint", "@type": "trov:CompositionFingerprint", - "trov:sha256": "c5765f37db02194b84a3100e16426431eded1862eb1332855db27507eca18248" + "trov:sha256": "065a4e0ae179fe96c4dd4646c96c437c3c7bdeaccf3d8045d418faa624da5ea7" } }, "trov:hasPerformance": { diff --git a/tests/test_models.py b/tests/test_models.py index 5d10bdef..4867298b 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -43,7 +43,7 @@ def test_has_release_manifest_metadata(self): assert uk_latest.release_manifest is not None assert uk_latest.release_manifest.country_id == "uk" assert uk_latest.model_package.name == "policyengine-uk" - assert uk_latest.model_package.version == "2.125.1" + assert uk_latest.model_package.version == "2.126.12" assert uk_latest.data_package.name == "policyengine-uk-data" assert uk_latest.data_package.version == "1.58.0" assert ( diff --git a/tests/test_release_manifests.py b/tests/test_release_manifests.py index 55371a4c..ff8867c4 100644 --- a/tests/test_release_manifests.py +++ b/tests/test_release_manifests.py @@ -75,11 +75,11 @@ "hf://policyengine/populace-us/populace_us_2024_acs_local.h5" f"@{US_LOCAL_AREA_RELEASE_ID}" ) -UK_MODEL_VERSION = "2.125.1" +UK_MODEL_VERSION = "2.126.12" UK_BUILT_WITH_MODEL_VERSION = "2.122.2" UK_DATA_RELEASE_VERSION = "1.58.0" UK_DATA_RELEASE_ID = "policyengine-uk-data-1.58.0" -UK_DATA_RELEASE_REVISION = "fdeba38517bd86067f34c0a5d8ed8923efb3b10a" +UK_DATA_RELEASE_REVISION = "0aa3eee1cdae8f8125f4aff126a8f01957595dc3" UK_DATA_RELEASE_PATH = "releases/1.58.0/release_manifest.json" # The prior certified default, kept resolvable via dataset_overlays. UK_POPULACE_RELEASE_ID = "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z" diff --git a/uv.lock b/uv.lock index ed2d9338..7eb0cfd5 100644 --- a/uv.lock +++ b/uv.lock @@ -1884,9 +1884,9 @@ requires-dist = [ { name = "policyengine-core", marker = "extra == 'models'", specifier = "==3.33.0" }, { name = "policyengine-core", marker = "extra == 'uk'", specifier = "==3.33.0" }, { name = "policyengine-core", marker = "extra == 'us'", specifier = "==3.33.0" }, - { name = "policyengine-uk", marker = "extra == 'dev'", specifier = "==2.125.1" }, - { name = "policyengine-uk", marker = "extra == 'models'", specifier = "==2.125.1" }, - { name = "policyengine-uk", marker = "extra == 'uk'", specifier = "==2.125.1" }, + { name = "policyengine-uk", marker = "extra == 'dev'", specifier = "==2.126.12" }, + { name = "policyengine-uk", marker = "extra == 'models'", specifier = "==2.126.12" }, + { name = "policyengine-uk", marker = "extra == 'uk'", specifier = "==2.126.12" }, { name = "policyengine-us", marker = "extra == 'dev'", specifier = "==2.2.1" }, { name = "policyengine-us", marker = "extra == 'models'", specifier = "==2.2.1" }, { name = "policyengine-us", marker = "extra == 'us'", specifier = "==2.2.1" }, @@ -1935,7 +1935,7 @@ wheels = [ [[package]] name = "policyengine-uk" -version = "2.125.1" +version = "2.126.12" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "microdf-python" }, @@ -1943,9 +1943,9 @@ dependencies = [ { name = "pydantic" }, { name = "tables" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/64/3b/c7b4eaa2b80df7e520d0576399cf1c2cec6e29bdf4ecb0104496cfa0b946/policyengine_uk-2.125.1.tar.gz", hash = "sha256:96e0354c3e8d19cd9d4e7dc5ba6c3611f1305a589b63c5f065441df346c33ed5", size = 2112669, upload-time = "2026-10-10T00:21:19.345Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/c9/5ad8f2c5833742db4873098f2689cd45cf7bc7f3d79755d5e13b98dd8ab4/policyengine_uk-2.126.12.tar.gz", hash = "sha256:86ac5ac83f7a22b6ef69ca701b0a87017c4a143f2f34937c74d5311786ed34b4", size = 2277744, upload-time = "2026-10-12T04:31:37.012Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/3a/1d90bad4346d1a8c2715be211ed3d3d7f48917da0d90405b8257b7304091/policyengine_uk-2.125.1-py3-none-any.whl", hash = "sha256:a0983b4cef868467578a4fd0d163a977a0da8f710dd5194ec01c75f66d512c5a", size = 3305979, upload-time = "2026-10-10T00:21:17.194Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3f/0a611e9b25beb75db3f2f521d359eabad0d1ab4e50194b866663355591ff/policyengine_uk-2.126.12-py3-none-any.whl", hash = "sha256:4aa6d7ba411de0009d460efdc4e4992f2e8c89cbf8ec419024b1bce89d407ace", size = 3524817, upload-time = "2026-10-12T04:31:34.999Z" }, ] [[package]]