Skip to content

Certify policyengine-uk 2.126.12 with policyengine-uk-data 1.58.0 - #585

Merged
MaxGhenis merged 1 commit into
mainfrom
w4/certify-uk-2.126.12
Oct 12, 2026
Merged

MaxGhenis merged 1 commit into
mainfrom
w4/certify-uk-2.126.12

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #584

Certified versions

Version Basis
UK data policyengine-uk-data 1.58.0, enhanced_frs_2024_25 (sha256 5ba399ea…b960b6) release manifest at HF commit 0aa3eee1 (manifest sha256 9bde769f…)
UK model policyengine-uk 2.126.12 legacy_compatible_model_package: the publisher's claim in that manifest (==2.122.2, ==2.123.4, ==2.125.1, ==2.126.12)
Core policyengine-core 3.33.0 unchanged (2.126.12 requires >=3.32.27)
US policyengine-us 2.2.1 and its datasets unchanged

Before this PR, main (6.3.0) certified 1.58.0 with policyengine-uk 2.125.1 (#555). On merge, the changed fragment makes this a patch release (6.3.1 if nothing else merges first).

Why now. The UK Autumn Budget is on 28 October, and there is no model freeze (cos d1152), so the latest qualified pair is what runs on the day. 2.126.12 is the current policyengine-uk (released 04:31Z on 2026-10-12). Its #2305 makes April-dated reforms apply: a 21% basic rate keyed 2026-04-06.2100-12-31 raises £6.67bn in 2026-27 on 2.126.12, against £0.00bn on 2.125.1.

Certification

  • The publisher's claim. HF commit 0aa3eee1, whose parent is fdeba385, changes only releases/1.58.0/release_manifest.json, appending policyengine-uk==2.126.12. The 1.58.0 tag still points at 47bbb58d. The UK data session wrote the commit after a GPT-6.1 Sol review recomputed every figure in its description from the raw runs. The description carries the evidence summarised below.
  • Command. scripts/bundle.py certify-data --country uk --data-producer populace --manifest-uri hf://model/policyengine/policyengine-uk-data-private@0aa3eee1…/releases/1.58.0/release_manifest.json --model-version 2.126.12. It ran in an environment synced from this branch's lockfile, so the manifest records policyengine 6.3.0 like main. The gate accepts 2.126.12 on the claim and refuses an unclaimed version: 2.126.11 exits 2 with "matches neither the build-time model (2.122.2) nor any publisher compatibility claim".
  • Regenerated together:
    • the bundle manifest;
    • both TRO sidecars (bundle.py generate --include-tros with the HF token; bundle.py check --include-tros passes);
    • uv.lock, with uv 0.12.13 and --upgrade-package policyengine-uk only: 12 lines, and its wheel sha256 4aa6d7ba… matches the manifest's;
    • the two test constants that pin the certified pair (tests/test_release_manifests.py, tests/test_models.py).
    • Not changed: docs/households.md names the core version, which did not change. No household snapshot drifted.

Evidence (policyengine_uk.Microsimulation on the 1.58.0 artifact)

I ran 2.125.1 against 2.126.12, both with core 3.33.0, in clean environments for 2024, 2025, 2026 and 2030. These claims cover this dataset and these years; they are not proofs for every input.

  • Finiteness: every aggregate is finite in all four years on both pairs.
  • 2.126.12 itself: every total, caseload and poverty rate is bit-identical between 2.126.11 and 2.126.12. Its change is how reforms are applied.
  • Bisection: every move was bisected across each release from 2.125.2 to 2.126.12. 2.126.1 was not run: it changes two CI workflows, CHANGELOG.md and the version, and no production model code. Inside the 2.126.11 rollup, eight of ten merges were run; #2269 and #2194 were inspected and change no production model code. #1846, run on its own, moves no total by more than 1.2e-7 (relative; at most £5.4k).

Moves, 2.125.1 to 2.126.12:

  • Fuel duty, +2.04% in every year (#2186). The litre divisors now use DESNZ annual pump prices instead of January 2024 RAC prices.
  • Income tax, +0.29% (2024) to +0.45% (2030) (#2352). Savings and dividend income are now banded above property income (ITA 2007 ss. 16, 16A). That merge alone adds £1.12bn in 2026 and £1.81bn in 2030.
  • Carer's Allowance, −2.2% to −3.5% (#2312). The earnings limit now applies (SSCBA 1992 s. 70(1)(b)).
  • Universal Credit, +0.06% to +0.17%. #2312 contributes because Carer's Allowance is unearned income for UC. 2.126.3 contributes the protected LCWRA amount.
  • Pension Credit, +5.25% in 2025 only (2.126.9: the standard minimum guarantee rises from £221.85 to £227.10). The change in other years is at most 0.15%. This drives the largest poverty move: relative BHC poverty for people aged 65 and over falls 1.17pp in 2025.
  • NI, −0.26% and employer NI, −0.30% in 2030 (2.126.2). Child Benefit is −0.04% (2.126.5).

What changes for users

These figures use policyengine.py's own API (pe.uk.ensure_datasets, Simulation, Aggregate, calculate_uk_poverty_rates and _by_age) for 2026. Both columns use the bundle's certified default dataset.

  • Left column: policyengine 6.2.7 from PyPI.
  • Right column: this PR's head.
  • Exact match with direct runs: in each environment, every total and overall poverty rate below equals the direct policyengine_uk.Microsimulation run on the same file exactly. Across environments with different numpy/pandas/microdf versions, the totals agree to within 3.1e-9 relative (£5.3m on household net income).
Total, 2026-27 (£bn) 6.2.7 (uk 2.125.1) This PR (uk 2.126.12) Change
Income tax 320.55 321.62 +0.34%
Fuel duty 24.14 24.64 +2.04%
Universal Credit 83.51 83.65 +0.17%
Carer's Allowance 4.84 4.74 −2.21%
Housing Benefit 8.48 8.48 +0.00%
Child Benefit 16.90 16.90 −0.04%
Pension Credit 7.05 7.05 −0.00%
Household net income 1,710.83 1,709.29 −0.09%

In 2026-27, the poverty rates barely move: across absolute and relative, BHC and AHC, for everyone, children, working-age adults and people aged 65 and over, the largest move is 0.004pp. Absolute BHC is 15.0% overall in both columns, 20.0% for children and 15.0% for people aged 65 and over. Reforms change most: April-dated reform keys now apply.

Review

GPT-6.1 Sol reviewed the head independently and approved it (~/reviews/w4-budget-ci-2026-10-11/pr585-round1-sol.md). It verified the eight-file diff, the pins, the manifest edit and its sha256, the wheel bytes against PyPI, the sidecar hashes, and the gate's acceptance and refusal. It also checked every figure here against the raw runs. Its one Low finding, that two differences should be called relative, is fixed above.

Tests

The full suite passes on this branch, against the real certified dataset (HF token set): 1345 passed, 9 skipped, with no failures. Every household snapshot matches. All 9 skips are unrelated to the UK pair: 4 Belgium Axiom pilot tests need unpublished source checkouts (microcosm-frame, RUN_BE_AXIOM_INTEGRATION), and 5 SPM development tests need the explicit local-wheel development manifest.

axiom: n/a: data certification and package pin, no policy encoding

🤖 Generated with Claude Code

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 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 12, 2026 13:50
@MaxGhenis
MaxGhenis merged commit 7b101eb into main Oct 12, 2026
12 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merged by W4 (UK Budget release qualification) at reviewed head 06a3fa3a.

Gates

  • gh pr checks exited 0 on the latest run (12 of 12 pass).
  • mergeable: CLEAN; not a draft; no change requests.

Review

  • GPT-6.1 Sol approved independently: ~/reviews/w4-budget-ci-2026-10-11/pr585-round1-sol.md.
  • It verified the diff, the pins, the publisher manifest edit and its sha256, the wheel bytes against PyPI, the sidecars, the gate's acceptance and refusal, and every figure in the description.
  • Its one Low finding (two differences to be called relative) is fixed in the description.

Authority

@MaxGhenis
MaxGhenis deleted the w4/certify-uk-2.126.12 branch October 13, 2026 13:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Certify policyengine-uk 2.126.12 with policyengine-uk-data 1.58.0

1 participant