Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
9302273
Bind the d2011 pair: UK 2.151.0 and Microcosm a6299504, pending release
MaxGhenis Oct 25, 2026
dede846
Anchor both Microcosm cuts' ageing at their 2025 calibration year
MaxGhenis Oct 25, 2026
72898f6
Accept 6.11.0-form certificates, route the a133 fallback as d2011 say…
MaxGhenis Oct 25, 2026
83e14d2
Merge #38's household-list guards and 2.151.0 audit into the d2011 bi…
MaxGhenis Oct 25, 2026
da5efe2
Keep the solved-weight identity to Microcosm; the Enhanced FRS's 2025…
MaxGhenis Oct 25, 2026
743ca09
Keep the exact solved-weight identity to builds from microcosm#1095
MaxGhenis Oct 26, 2026
fac3d5d
Name d2011's a6299504 among the builds that divide by the model's pro…
MaxGhenis Oct 26, 2026
88550bf
Identify the local-area cut and the certifying merge; make the fill s…
MaxGhenis Oct 26, 2026
aac81df
Compare the release with the workflow's exact rewrite of the certifyi…
MaxGhenis Oct 26, 2026
ece7c36
Merge main (#38 and #40) into the d2011 binding branch
MaxGhenis Oct 26, 2026
6a3f00e
Test the tag's own bytes, non-ASCII text and non-dict data releases
MaxGhenis Oct 26, 2026
c48aa2a
Fill d2011's identities from policyengine.py 6.11.1
MaxGhenis Oct 27, 2026
9452630
Describe the released carrier in the remaining pending wording
MaxGhenis Oct 27, 2026
30961ed
Finish the released-carrier wording outside the reviewed sites
MaxGhenis Oct 27, 2026
f08f85d
Make the tampered-manifest test reach the provenance refusal
MaxGhenis Oct 27, 2026
61363c1
Bind the installed manifest's bytes, not just its content, in tests
MaxGhenis Oct 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ jobs:
python-version: "3.13"
activate-environment: true
- name: Install
# #715 candidate UK 2.147.2/core 3.33.3; released certification pending. Retained
# d2011's UK 2.151.0/core 3.33.3 and the carrier the lock pins (policyengine.py 6.11.1,
# the pair's release; tests require provenance to certify the filled pair). Retained
# historical pilot receipts keep their original model/data labels;
# no test needs the private Enhanced FRS file.
run: |
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This is a **provisional, model-conditional** release ahead of the 28 October 202

Headline, 2039-40 (Enhanced FRS, cash terms, UK): a **provisional, model-conditional expected saving of £11.1bn gross and £7.9bn net of tax and benefits**, the probability-weighted average over 50,000 simulated paths of prices and earnings centred on the OBR's forecast, estimated from 160 full runs (Monte Carlo error about ±£0.1bn).

**Data.** The published figures use the certified bundle, **policyengine.py 6.2.6** (policyengine-uk 2.125.1, policyengine-core 3.33.0) with **Enhanced FRS 1.58.0**. The same 40 paths are also run on **Microcosm's UK release** (`microcosm_uk_2024_25`, tag `microcosm-uk-2024-25-national-20261002T230158Z-5c6b3f68`, uncertified under this bundle) as a paired cross-check: Microcosm minus Enhanced FRS is +£1.12bn gross and +£0.49bn net in 2039-40. The cross-check is in `data/results.json` but not on the dashboard. This is the historical pre-Budget bundle. The binding rebuild will use the **pending d1727 release**, certifying policyengine-uk main around 26 October and **Enhanced FRS 1.58.2**, with separate model and data bridge steps before coverage and the fiscal run; see [REBUILD.md](docs/REBUILD.md).
**Data.** The published figures use the certified bundle, **policyengine.py 6.2.6** (policyengine-uk 2.125.1, policyengine-core 3.33.0) with **Enhanced FRS 1.58.0**. The same 40 paths are also run on **Microcosm's UK release** (`microcosm_uk_2024_25`, tag `microcosm-uk-2024-25-national-20261002T230158Z-5c6b3f68`, uncertified under this bundle) as a paired cross-check: Microcosm minus Enhanced FRS is +£1.12bn gross and +£0.49bn net in 2039-40. The cross-check is in `data/results.json` but not on the dashboard. This is the historical pre-Budget bundle. The binding rebuild will use d2011's pair, released in **policyengine.py 6.11.1** (policyengine-uk 2.151.0, policyengine-core 3.33.3): Microcosm's national cut `microcosm-uk-2024-25-national-20261025T091414Z-a6299504` as primary, with its local-area cut for constituency and local-authority runs, and **Enhanced FRS 1.58.2** as the paired sensitivity. Separate model and data bridge steps run before coverage and the fiscal run; see [REBUILD.md](docs/REBUILD.md).

## What the dashboard shows

Expand Down
67 changes: 67 additions & 0 deletions data/binding-bridge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"schema_version": 1,
"status": "ready",
"decision": "d2011 = A, Max 2026-10-25: the certified 2.151.0 Microcosm UK Budget pair (microcosm#1396) replaces #715's a133f37a pair; d1983 = B, Max 2026-10-24, put the binding primary on Microcosm",
"baseline_receipt": {
"path": "data/pilot/J-bridge-certified.json",
"sha256": "f5f42f5a6e20eb251dd26a283b840fdb825843e8edc9078c02fea78f14b6ac2f"
},
"steps": {
"model": {
"from": {
"packages": {
"policyengine": "6.2.6",
"policyengine-uk": "2.125.1",
"policyengine-core": "3.33.0"
},
"dataset": {
"name": "enhanced_frs_2024_25@1.58.0",
"sha256": "5ba399ea5ab9a6c7d4e9aaf6c623080beb34d9ad5f330f6244dbad72b8d960b6"
}
},
"to": {
"packages": {
"policyengine": "6.11.1",
"policyengine-uk": "2.151.0",
"policyengine-core": "3.33.3"
},
"dataset": {
"name": "enhanced_frs_2024_25@1.58.0",
"sha256": "5ba399ea5ab9a6c7d4e9aaf6c623080beb34d9ad5f330f6244dbad72b8d960b6"
}
}
},
"data": {
"from": {
"packages": {
"policyengine": "6.11.1",
"policyengine-uk": "2.151.0",
"policyengine-core": "3.33.3"
},
"dataset": {
"name": "enhanced_frs_2024_25@1.58.0",
"sha256": "5ba399ea5ab9a6c7d4e9aaf6c623080beb34d9ad5f330f6244dbad72b8d960b6"
}
},
"to": {
"packages": {
"policyengine": "6.11.1",
"policyengine-uk": "2.151.0",
"policyengine-core": "3.33.3"
},
"dataset": {
"name": "microcosm_uk_2024_25@a6299504",
"sha256": "b96a8cd625b645a409c063b1de5158532708a2f0d3c3897a794a8fb0bbd5064e"
}
}
}
},
"pending_release": {
"pull_request": "https://github.com/PolicyEngine/policyengine.py/pull/720",
"reviewed_head": "99a3e48b405e513a98850c64ee3564f0ca8e7553",
"bundle_manifest_path": "src/policyengine/data/bundle/manifest.json",
"policyengine_version": "6.11.1",
"bundle_manifest_sha256": "ab60903b390e7a765ea6558ec5e2d8fa5aede06b6f735fbf4e4c96109ffd1617",
"gate": "d2011 = A: the 2.151.0 national (microcosm#1396, a6299504) and its local-area cut certified together; fallback to #715's a133f37a pair with policyengine.py #699's area routing if not certified by 2026-10-27T18:00Z"
}
}
18 changes: 9 additions & 9 deletions data/binding-bridge.pending.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"schema_version": 1,
"status": "pending",
"decision": "d1983 = B, Max 2026-10-24; certified policyengine.py #715 Microcosm UK Budget pair supersedes d1727 qualification-ledger primary",
"decision": "d2011 = A, Max 2026-10-25: the certified 2.151.0 Microcosm UK Budget pair (microcosm#1396) replaces #715's a133f37a pair; d1983 = B, Max 2026-10-24, put the binding primary on Microcosm",
"baseline_receipt": {
"path": "data/pilot/J-bridge-certified.json",
"sha256": "f5f42f5a6e20eb251dd26a283b840fdb825843e8edc9078c02fea78f14b6ac2f"
Expand All @@ -22,7 +22,7 @@
"to": {
"packages": {
"policyengine": null,
"policyengine-uk": "2.147.2",
"policyengine-uk": "2.151.0",
"policyengine-core": "3.33.3"
},
"dataset": {
Expand All @@ -35,7 +35,7 @@
"from": {
"packages": {
"policyengine": null,
"policyengine-uk": "2.147.2",
"policyengine-uk": "2.151.0",
"policyengine-core": "3.33.3"
},
"dataset": {
Expand All @@ -46,22 +46,22 @@
"to": {
"packages": {
"policyengine": null,
"policyengine-uk": "2.147.2",
"policyengine-uk": "2.151.0",
"policyengine-core": "3.33.3"
},
"dataset": {
"name": "microcosm_uk_2024_25@a133f37a",
"sha256": "64f83900ca3a1242fb017585234844ce89f743d32e41cd2b6558057777f914aa"
"name": "microcosm_uk_2024_25@a6299504",
"sha256": "b96a8cd625b645a409c063b1de5158532708a2f0d3c3897a794a8fb0bbd5064e"
}
}
}
},
"pending_release": {
"pull_request": "https://github.com/PolicyEngine/policyengine.py/pull/715",
"reviewed_head": "e02d41bceab57756373b2dc3bcf78635b856ec81",
"pull_request": null,
"reviewed_head": null,
"bundle_manifest_path": "src/policyengine/data/bundle/manifest.json",
"policyengine_version": null,
"bundle_manifest_sha256": null,
"gate": "draft stacked on #704; attribution 2026-10-24T22:00Z to 2026-10-25T10:00Z, then review and release"
"gate": "d2011 = A: the 2.151.0 national (microcosm#1396, a6299504) and its local-area cut certified together; fallback to #715's a133f37a pair with policyengine.py #699's area routing if not certified by 2026-10-27T18:00Z"
}
}
2 changes: 1 addition & 1 deletion docs/CALIBRATION_ANCHOR.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Calibration anchor and certified-input bridge

> **Integration (part D).** The anchor is now part of each dataset's registry entry (`datasets.ageing_anchor`: 2025 for Enhanced FRS 1.56.16 and 1.57.4, read from `frs_release.py` at each tag; Microcosm has no published calibration year, so its anchor is 2024, the first year the ONS projection covers). *Superseded for Microcosm: every registered cut's targets are dated 2025, so each anchors at 2025 (5c6b3f68 since 95732e2). Builds from microcosm#1095 on, such as a133f37a, also write the solved weights at the data year divided by the model's own projection, so their 2025 weights are exactly the solved ones; 5c6b3f68's are the solved ones times 1.0072 ([METHOD.md](METHOD.md)).* The rake keeps the dataset's own weights in the anchor year and every year before it (`demography.annual_weights`). The level difference described below, runtime 2025 weights = calibrated weights × 1.0072 × 1.027 / 1.039 = 0.9956, is reported upstream as policyengine-uk-data#538. Re-checked on policyengine-uk 2.120.0: every 2025 weight is its 2024 weight × 1.0072.
> **Integration (part D).** The anchor is now part of each dataset's registry entry (`datasets.ageing_anchor`: 2025 for Enhanced FRS 1.56.16 and 1.57.4, read from `frs_release.py` at each tag; Microcosm has no published calibration year, so its anchor is 2024, the first year the ONS projection covers). *Superseded for Microcosm: every registered cut's targets are dated 2025, so each anchors at 2025 (5c6b3f68 since 95732e2). Builds from microcosm#1095 on (a133f37a, and d2011's a6299504 at microcosm#1396) also write the solved weights at the data year divided by the model's own projection, so their 2025 weights are exactly the solved ones; 5c6b3f68's are the solved ones times 1.0072 ([METHOD.md](METHOD.md)).* The rake keeps the dataset's own weights in the anchor year and every year before it (`demography.annual_weights`). The level difference described below, runtime 2025 weights = calibrated weights × 1.0072 × 1.027 / 1.039 = 0.9956, is reported upstream as policyengine-uk-data#538. Re-checked on policyengine-uk 2.120.0: every 2025 weight is its 2024 weight × 1.0072.

The pilot uses **2025**, the calibration year configured in the exact source release for its certified Enhanced FRS. It anchors to the runtime's native 2025 weights. Those weights do not restore the builder's original calibrated weights, so preserved Housing Benefit and Pension Credit calibration remains an acceptance gate.

Expand Down
Loading
Loading