Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion app/public/data/lanes.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"country": "US | UK | BE | NZ \u2014 the model instance the lane feeds (issue #42)",
"note": "Repo-committed status feed (issue #7); graduate to Supabase when lane count makes commits noisy. Every lane writes its transition here."
},
"updated": "2026-10-25",
"updated": "2026-10-26",
"lanes": [
{
"id": "urban-sotsn",
Expand Down
6 changes: 3 additions & 3 deletions app/public/data/populations.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"built": "2026-10-25",
"built": "2026-10-26",
"note": "Non-Urban populations exported from scorecard.db: the populace reform-validation registry (issue #20) plus the compute campaign's attached comparisons (US: TPC/CPSP/PWBM/CBO/JCT; UK: the HMRC ready-reckoner family and the complete OBR Policy measures database, including historical HM Treasury scores; BE: JRC EUROMOD-BE claims with demo-grade Axiom concept-mismatch attachments and the 2026 PIT-reform scorekeeper claims; NZ: official budget scores). Claims explicitly opted into pre-result display remain in the feed with latest status not_computed and empty history. Recorded result statuses and calibration relationships are verbatim; nothing here is a pass/fail grade.",
"summary": {
"claims": 29771,
Expand Down Expand Up @@ -30104,7 +30104,7 @@
"measure_key": "uk_free_childcare_hours_and_tfc_100k_limit_removed",
"program": "free_childcare_hours_and_tax_free_childcare",
"scoring_method": "post_behavioural",
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json)"
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json, data/uk/certified_pairs.json)"
},
"measure": null,
"reform_framework": "policy_ref",
Expand Down Expand Up @@ -30161,7 +30161,7 @@
"measure_key": "uk_free_childcare_hours_and_tfc_100k_limit_removed",
"program": "free_childcare_hours_and_tax_free_childcare",
"scoring_method": "post_behavioural",
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json)"
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json, data/uk/certified_pairs.json)"
},
"measure": null,
"reform_framework": "policy_ref",
Expand Down
2 changes: 1 addition & 1 deletion data/lanes.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"country": "US | UK | BE | NZ \u2014 the model instance the lane feeds (issue #42)",
"note": "Repo-committed status feed (issue #7); graduate to Supabase when lane count makes commits noisy. Every lane writes its transition here."
},
"updated": "2026-10-25",
"updated": "2026-10-26",
"lanes": [
{
"id": "urban-sotsn",
Expand Down
6 changes: 3 additions & 3 deletions data/populations.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"built": "2026-10-25",
"built": "2026-10-26",
"note": "Non-Urban populations exported from scorecard.db: the populace reform-validation registry (issue #20) plus the compute campaign's attached comparisons (US: TPC/CPSP/PWBM/CBO/JCT; UK: the HMRC ready-reckoner family and the complete OBR Policy measures database, including historical HM Treasury scores; BE: JRC EUROMOD-BE claims with demo-grade Axiom concept-mismatch attachments and the 2026 PIT-reform scorekeeper claims; NZ: official budget scores). Claims explicitly opted into pre-result display remain in the feed with latest status not_computed and empty history. Recorded result statuses and calibration relationships are verbatim; nothing here is a pass/fail grade.",
"summary": {
"claims": 29771,
Expand Down Expand Up @@ -30104,7 +30104,7 @@
"measure_key": "uk_free_childcare_hours_and_tfc_100k_limit_removed",
"program": "free_childcare_hours_and_tax_free_childcare",
"scoring_method": "post_behavioural",
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json)"
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json, data/uk/certified_pairs.json)"
},
"measure": null,
"reform_framework": "policy_ref",
Expand Down Expand Up @@ -30161,7 +30161,7 @@
"measure_key": "uk_free_childcare_hours_and_tfc_100k_limit_removed",
"program": "free_childcare_hours_and_tax_free_childcare",
"scoring_method": "post_behavioural",
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json)"
"pe_missing": "fiscal year 2031-32 is outside the data years of every certified pair this lane has run (pe5.0.2_uk2.89.2_populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z 2023-2030; data/uk/replay_variants.json, data/uk/certified_pairs.json)"
},
"measure": null,
"reform_framework": "policy_ref",
Expand Down
97 changes: 97 additions & 0 deletions data/uk/certified_pairs.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{
"_what": "Certified pairs a lane runs on outside the replay variant index (pipeline/uk_certified_pairs.py). Each is one policyengine.py release's certified bundle, in the replay variant's identity shape, under the id pair-<variant slug>. Never a replay variant: no event replay runs on one.",
"kind": "uk_certified_pairs",
"pairs": [
{
"certification": {
"certified_for_model_version": "2.132.6",
"compatibility_basis": "built_with_model_package",
"data_build_id": "microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71",
"source": "policyengine.py 6.11.0 packaged bundle manifest (policyengine/data/bundle/manifest.json, sha256 bccf23acde631aed4665757094c04f86e60993fb9d388e7dc958b90c876e5a80; PyPI wheel sha256 b2aa90b97a5c608f4aaad5e6833c21014d786bfd96bb831c9c51b9bb60ff2a50); the pair was certified in PolicyEngine/policyengine.py#685 (merged 2026-10-21)"
},
"data_years": [
2024,
2025,
2026,
2027,
2028,
2029,
2030,
2031,
2032
],
"data_years_evidence": {
"simulation_dataset_years": [
2024,
2025,
2026,
2027,
2028,
2029,
2030,
2031,
2032
],
"source": "Measured for the same policyengine-uk 2.132.6, policyengine-core 3.33.3 and dataset by the experiment population probe under policyengine 6.10.0 (data/uk/experiments/probes/exp-pe6.10.0_uk2.132.6_microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71.json); every lane run checks its managed simulation's sim.dataset.years against this list before any calculation."
},
"executor": [
"local"
],
"identity": {
"dataset": {
"path": "microcosm_uk_2024_25.h5",
"repo_id": "policyengine/populace-uk-private",
"repo_type": "dataset",
"revision": "microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71",
"sha256": "810ba980005a8b907cb51464279fa5e0125464b7af9a4871b7f6744c30951ece",
"size_bytes": 321798995
},
"materialization": "policyengine_data_dir",
"packaged_bundle_manifest_sha256": "bccf23acde631aed4665757094c04f86e60993fb9d388e7dc958b90c876e5a80",
"packages": {
"policyengine": {
"record_sha256": "113897bc23a82dab3fd29a0715c7a111fbb948f9b791eaf866e1324d75c06bbf",
"version": "6.11.0"
},
"policyengine-core": {
"record_sha256": "e68eb6a81f472df42aff4fbf56c8537d1185075078ffb2e0a6399f1df0b66bc2",
"version": "3.33.3"
},
"policyengine-uk": {
"record_sha256": "ca7c36b7617f950f48a04e2816a29e1eb962c44097f3ef08ed4036d7414d2709",
"version": "2.132.6"
}
},
"python": "3.12",
"release_bundle": {
"bundle_id": "uk-6.11.0",
"certified_by": "policyengine.py bundle certification",
"certified_data_artifact_sha256": "810ba980005a8b907cb51464279fa5e0125464b7af9a4871b7f6744c30951ece",
"certified_data_build_id": "microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71",
"compatibility_basis": "built_with_model_package",
"country_id": "uk",
"data_build_fingerprint": null,
"data_build_model_git_sha": null,
"data_build_model_version": "2.132.6",
"data_package": "microcosm-data",
"data_version": "0.1.0",
"default_dataset": "microcosm_uk_2024_25",
"default_dataset_uri": "hf://policyengine/populace-uk-private/microcosm_uk_2024_25.h5@microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71",
"model_package": "policyengine-uk",
"model_version": "2.132.6",
"policyengine_version": "6.11.0"
},
"requirements_sha256": "f57a4899ec639cd89ae0eba15525f1d0bba25ff9bc091c95a14ae4d46d363d80"
},
"identity_sha256": "9bb966d62e65c29e44a83620b21d720934fb33e57b8fc13695254657acd9b35a",
"note": "policyengine.py 6.11.0 (released 25 October 2026) with the pair its bundle certifies: policyengine-uk 2.132.6 and the Microcosm UK 2024-25 national cut built with it. A lane runs on it before the release-replay pipeline qualifies it; no event replay runs on it.",
"pair_id": "pair-pe6.11.0_uk2.132.6_microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71",
"requirements": {
"path": "docs/uk_replay/requirements/pairs/pair-pe6.11.0_uk2.132.6_microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71.txt",
"sha256": "f57a4899ec639cd89ae0eba15525f1d0bba25ff9bc091c95a14ae4d46d363d80"
},
"status": "certified_pair"
}
],
"schema_version": 1
}
3 changes: 2 additions & 1 deletion docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,8 @@ Operating rules for the agent stage:
come from `pipeline/compute_uk_childcare_100k.py` on the certified
populace-uk pair: static, the three free-hours entitlements (plus
Tax-Free Childcare for CBP) summed for people in English households.
Each certified variant's artifact keeps its run in the history, and a
Each certified variant's or certified pair's
(`data/uk/certified_pairs.json`) artifact keeps its run in the history, and a
claim's latest result is the newest run that computed its year. Ingest
takes an artifact only for a pair with a `verified_pairs` entry, and an
engine or run note attaches only to the pairs its `variants` names.
Expand Down
28 changes: 28 additions & 0 deletions docs/uk_replay/RELEASE_REPLAY.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,34 @@ A model/data combination is **incompatible** when no certified variant
records it. There is no flag that relaxes a check: running a newer engine
means adding a variant whose certification names it.

### Certified pairs (lane runs only)

A lane can need a policyengine.py release's certified bundle before this
pipeline qualifies it as a variant: `uk-childcare-100k` (issue #228) runs on
policyengine.py 6.11.0's Microcosm pair. `data/uk/certified_pairs.json`
(kind `uk_certified_pairs`, `pipeline/uk_certified_pairs.py`) records each
such bundle in the variant record's shape less the fields that file a
replay: `pair_id` (`pair-<variant slug>`) in place of `variant_id`, status
`certified_pair`, and no `layout` or `result_root`
(`uk_certified_pairs.FIELDS` is the whole field set).

- **The checks are the variant's.** `uk_replay_variants.validate_identity`
is check 1 for both kinds; `validate_record` adds only the variant's
status, layout, result root and legacy checks. A pair's preflight then
runs checks 2 to 6 through the same code: `verify_installed`, then
`compute_uk_event.materialized_preflight`, the second half of
`variant_preflight`.
- **No event replay runs on a pair.** The event runner resolves only
`replay_variants.json`; a lane resolves either kind with
`uk_certified_pairs.get_record`, and its ingest reads both files.
- **A pair stays when a variant arrives.** A variant this pipeline later
qualifies for the same bundle has its own requirements file, so its own
identity and id. The pair remains the identity the lane's runs on it were
checked against.
- Experiment populations (`docs/uk_replay/POLICY_EXPERIMENTS.md`) are a
third kind: their results are never ingested, while a lane's runs on a
pair are.

## Unsupported years

Each event registry's `calendar_years` is the construction's window; a
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Certified pair pair-pe6.11.0_uk2.132.6_microcosm-uk-2024-25-national-20261019T083323Z-6cba5d71 (data/uk/certified_pairs.json, pipeline/uk_certified_pairs.py); not a replay variant.
# Resolved with uv pip compile for Python 3.12, x86_64-manylinux_2_28, within the exp-pe6.10.0 experiment population's freeze; identical to it apart from the policyengine pin.
# policyengine 6.11.0 from PyPI (policyengine-6.11.0-py3-none-any.whl, sha256 b2aa90b97a5c608f4aaad5e6833c21014d786bfd96bb831c9c51b9bb60ff2a50).
annotated-types==0.8.0
anyio==4.15.1
asttokens==3.0.2
attrs==26.1.0
blosc2==4.14.1
certifi==2026.7.22
charset-normalizer==3.5.2
click==8.5.0
decorator==5.3.1
dpath==2.2.0
executing==2.3.0
filelock==4.1.0
fsspec==2026.9.0
h11==0.16.0
h2==4.4.1
h5py==3.16.0
hf-xet==1.7.0
hpack==4.2.0
httpcore==1.0.9
httpcore2==2.13.1
httpx==0.28.1
httpx2==2.13.1
huggingface-hub==2.2.0
hyperframe==6.1.0
idna==3.20
iniconfig==2.3.1
ipython==8.39.0
jedi==0.20.0
jinja2==3.1.6
jsonpickle==4.1.3
jsonschema==4.26.0
jsonschema-specifications==2025.9.1
markdown-it-py==4.2.0
markupsafe==3.0.4
matplotlib-inline==0.2.2
mdurl==0.1.2
microdf-python==1.3.10
msgpack==1.2.3
ndindex==1.10.1
networkx==3.7
numexpr==2.14.2
numpy==2.5.4
packaging==26.3
pandas==3.0.6
parso==0.8.7
pexpect==4.9.0
plotly==5.24.1
pluggy==1.6.0
policyengine==6.11.0
policyengine-core==3.33.3
policyengine-uk==2.132.6
prompt-toolkit==3.0.53
psutil==6.1.1
ptyprocess==0.7.0
pure-eval==0.2.4
py-cpuinfo==9.0.0
pydantic==2.14.0
pydantic-core==2.50.0
pygments==2.21.0
pytest==9.1.1
python-dateutil==2.9.0.post0
pyvis==0.3.2
pyyaml==6.0.3
referencing==0.37.0
requests==2.34.2
rich==15.0.0
rpds-py==2026.9.1
six==1.17.0
sortedcontainers==2.4.0
stack-data==0.6.3
standard-imghdr==3.13.0
tables==3.11.1
tenacity==9.2.1
threadpoolctl==3.7.0
tqdm==4.70.1
traitlets==5.16.1
truststore==0.10.4
typing-extensions==4.16.0
typing-inspection==0.4.4
urllib3==2.8.0
wcwidth==0.9.2
wheel==0.48.0
Loading
Loading