From bd77fd037a300930f317ea81ce4bd73fb19076ed Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 23 Aug 2026 18:45:11 +0200 Subject: [PATCH 1/2] Bump the policyengine-us engine lock to 1.819.0 (pin-unlock step 0) The build packages allow policyengine-us>=1.745.0,<2 but uv.lock has resolved 1.764.6 since 2026-07-06, so every Populace build since Build I was produced with that engine and policyengine.py's certification has mirrored it (compatibility_basis: built_with_model_package). Moving the lock is the first step toward a build on a current engine; the certified pin in policyengine.py only moves once such a build is certified. uv lock --upgrade-package policyengine-us: 1.764.6 -> 1.819.0 (pulls policyengine-core 3.26.11 -> 3.31.0). No other packages changed. Co-Authored-By: Claude Fable 5 --- uv.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/uv.lock b/uv.lock index fa0f498a7..0e1eae873 100644 --- a/uv.lock +++ b/uv.lock @@ -1364,7 +1364,7 @@ wheels = [ [[package]] name = "policyengine-core" -version = "3.26.11" +version = "3.31.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dpath" }, @@ -1384,9 +1384,9 @@ dependencies = [ { name = "standard-imghdr" }, { name = "wheel" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/7f/90a055ede0e75cea2ac02b99ce3825dd441f1ee8f2777fd252ccd204aa47/policyengine_core-3.26.11.tar.gz", hash = "sha256:2331d3879e484f6503ea9c11f1f185a873d31a4a5269dbc4250dcc9fb2edb40a", size = 480237, upload-time = "2026-05-21T18:00:03.649Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/5e/227324f4c7b7fdce0e0eb0d6246afc6bb7d1fb2a61546f514fe698c20c29/policyengine_core-3.31.0.tar.gz", hash = "sha256:4e7811d9f1668cb198ee68a460d7383add3443db1f0e32d591dc92ed4e5b4319", size = 503277, upload-time = "2026-08-14T15:03:43.216Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/0a/a99bdb1deccdbe48050ce2d4dff8bdc4e41992e923156007710087edf103/policyengine_core-3.26.11-py3-none-any.whl", hash = "sha256:17fb1b107f1e74792a8bfebe8ad0f2620a1cbdbabf8f358f25ac5f92738b8986", size = 235649, upload-time = "2026-05-21T18:00:01.716Z" }, + { url = "https://files.pythonhosted.org/packages/fb/75/d30a9de4352d02e1c81135c7d7c1b64f6506af7cab3883d9a4d51c4599cb/policyengine_core-3.31.0-py3-none-any.whl", hash = "sha256:6537c2ecebd2a49a7a345dbe3d3d4f37fc3c3babc6bba1990a2eb99a9f55d67d", size = 245717, upload-time = "2026-08-14T15:03:41.571Z" }, ] [[package]] @@ -1406,7 +1406,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.764.6" +version = "1.819.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "microdf-python" }, @@ -1416,9 +1416,9 @@ dependencies = [ { name = "tables" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/cc/9e65a9586069beab1f02102a23f7a0e6332f1a9c2d590cb9f0e68f9ac987/policyengine_us-1.764.6.tar.gz", hash = "sha256:9817d48abc5b7d690b8abe33047005e5cf40b71654a85a2534bb5e3bcf921f79", size = 11009555, upload-time = "2026-07-06T13:13:07.254Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/74/49209575800c4f5fc3ef1be0072243820eeade215124611ebb90b44fc1a3/policyengine_us-1.819.0.tar.gz", hash = "sha256:6e0e41887358dc5e80b8229b49a9027104ad2e49f32c2a8f08ce19a138556d9f", size = 11759362, upload-time = "2026-08-23T11:11:17.944Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/5a/0566666f30ad06e416f0cf25b24bdee73acd71897fb2de3c0ac43b59e3e3/policyengine_us-1.764.6-py3-none-any.whl", hash = "sha256:2b2c5c02c26ab212270948db1f30129728b625fc6109fc9ca0c604b714546909", size = 13117921, upload-time = "2026-07-06T13:13:03.476Z" }, + { url = "https://files.pythonhosted.org/packages/f4/cc/cf126d6c14ea4cd5192b91e9810a680304694ce14f255d62cd09f565eb9a/policyengine_us-1.819.0-py3-none-any.whl", hash = "sha256:525bdf8b238c3eb11cd60c5f4f7a7b0c57bc7eea5c1cf4346c261241b061be45", size = 14639026, upload-time = "2026-08-23T11:10:57.547Z" }, ] [[package]] From 2f7069ba01dffdba41d0b2909c9f84280f8ad95e Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 23 Aug 2026 19:20:10 +0200 Subject: [PATCH 2/2] Move the engine pin guard to 1.819.0 after re-verifying the OBBBA window premise Per the guard's own instructions: the window test was re-run in a [us]-extra environment on policyengine-us 1.819.0 and the TY2025-TY2028 premise holds (overtime and tip deductions absent at 2024-01-01 and 2029-01-01, present at 2025/2026/2028 in both deduction lists), so the locked-pin guard moves with the lock. Co-Authored-By: Claude Fable 5 --- packages/microcosm-build/tests/test_us_fiscal_targets.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/microcosm-build/tests/test_us_fiscal_targets.py b/packages/microcosm-build/tests/test_us_fiscal_targets.py index e2736dac1..a04899c48 100644 --- a/packages/microcosm-build/tests/test_us_fiscal_targets.py +++ b/packages/microcosm-build/tests/test_us_fiscal_targets.py @@ -858,14 +858,16 @@ def test_locked_policyengine_us_pin_guards_the_obbba_window_premise() -> None: # Companion to the engine-gated window test above, enforced in the BASE # environment (mandatory CI installs no engine extra, so that test skips # there). The window premise was verified against policyengine-us - # 1.764.6, and uv.lock is the only door a different engine can enter - # mandatory CI through — so pin it here. Bumping the engine must move + # 1.764.6 and re-verified against 1.819.0 on 2026-08-23 in a [us]-extra + # environment (both deductions absent at 2024-01-01 and 2029-01-01, + # present at 2025/2026/2028), and uv.lock is the only door a different + # engine can enter mandatory CI through — so pin it here. Bumping the engine must move # this pin in the same change, after re-running # test_obbba_no_tax_channels_are_absent_from_2024_law_deduction_lists in # a [us]-extra environment to re-verify the TY2025-TY2028 window. lock_text = (Path(__file__).parents[3] / "uv.lock").read_text() versions = re.findall(r'name = "policyengine-us"\nversion = "([^"]+)"', lock_text) - assert versions == ["1.764.6"], versions + assert versions == ["1.819.0"], versions def test_us_fiscal_target_references_pass_issue_40_coverage_gate() -> None: