Repository navigation
Conversation
Pin the six sourced metadata corrections and verify that Core preserves agency and coverage strings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in Notes
Moves flagged for reviewNone. Spending by benefit and service
Caseloads
Standard reform costings (change in gov_balance)
Standard reforms: change in each reform's target
Household net income by decileNo household's net income changes in any year. No change in any year: receipts by tax head; government balance, each component counted once; model totals; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles. Checks failing on both base and head (1)
Counted-once checkEach of 91 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.
Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #2696
What and why
The coverage tracker now shows the correct responsible agencies and nations for these programmes. The registry previously gave it the wrong agency or national coverage.
agency: HMRCagency: HMRCagency: DESNZcoverage: Great Britaincoverage: Great Britaincoverage: England, Wales and Northern IrelandThe sources agree with the issue's proposed values. DESNZ identifies the responsible government department. The change preserves model parameter paths and verified years.
The tax-credit note records the end of the programme because HMRC's general enquiries guidance says tax credits ended on 5 April 2025. The Winter Fuel Payment note retains historical Great Britain coverage and the Northern Ireland qualification, and explains that Scotland replaced it with Pension Age Winter Heating Payment from winter 2024-25. The Scottish Government progress report, Winter heating benefits → Pension Age Winter Heating Payment distinguishes that replacement from the later administration handover. The note qualifies the blanket pension-age eligibility claim and describes HMRC's recovery of payments from higher-income recipients, consistent with GOV.UK eligibility and HMRC recovery guidance. The existing Energy Price Guarantee note already agrees with the regional-rates guidance on its March 2024 end date.
CountryTaxBenefitSystem.modelled_policiespoints to this registry. Core'sTaxBenefitSystem.add_modelled_policy_metadataloads the YAML without an agency or coverage enum, so the corrected values remain plain strings that existing readers accept.Invariants:
This patch changes no policy rule; its differential test compares the metadata readers. No existing test expectation changes.
Overlap: the required
git diff origin/main...origin/ab26-autumn-budget-2026 --statidentifiespolicyengine_uk/programs.yamlas shared with #2719. The current files for #2735 also include that registry. #2700, #2727, #2731 and #2234 share none of this patch's files.Test plan
uvx ruff@0.17.2 format --checkanduvx ruff@0.17.2 check, and runuvx ruff@0.17.2 check --select F811,F821 policyengine_ukandgit diff --check. Use these focused checks instead of repository-wide formatting to preserve unrelated files.pytest -q -o xfail_strict=true --hypothesis-show-statistics policyengine_uk/tests/test_program_registry.py: 115 passed; the reader property passed all 56 generated cases.origin/mainregistry: 8 failed and 107 passed. Every new field and note regression failed on its old value.agency: Ofgemyields 1 expected failure and 5 passes, with 107 deselected.coverage: UKyields 1 expected failure and 5 passes, with 107 deselected. Both mutations fail at the changed field assertion.changelog.d/2696.fixed.md.The normal test runs use
--rss-gb 4; both scratch runs use--rss-gb 2, and all use--timeout 1500. The capped runs execute each test file separately from/private/tmp, keep the shared environment read-only and unset both dataset environment variables. An import assertion checks that the package belongs to this workspace. No run uses survey data or downloads a dataset. The full suite and documentation build are outside this metadata-only validation scope.Reproducer
Reproducer: policyengine_uk/tests/test_program_registry.py::test_program_agency_and_coverage
axiom: n/a: programme metadata, no rule changes.
🤖 Generated with Claude Code