Skip to content

Report each pull request's effect on national aggregates on the certified dataset - #2335

Draft
MaxGhenis wants to merge 11 commits into
mainfrom
aggregate-impact-report
Draft

MaxGhenis wants to merge 11 commits into
mainfrom
aggregate-impact-report

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2334

This is workstream W3 of the Autumn Budget 2026 CI plan. It stays a draft until the independent GPT-6.1 Sol review is back.

The workflow has already run on this PR: see the "Aggregate impact on certified data" comment below. Both sides ran on uk-data 1.58.0 in identical environments (the same environment hash), at about 5 minutes a side. That comment was removed with the data-protection fix below and the next run replaces it. The result was pass, with no moves, as expected for a PR that changes no formula.

What it adds

  1. An aggregate-impact report. The module is policyengine_uk.utils.aggregate_impact, and the workflow is .github/workflows/aggregate-impact.yaml. On every PR, the workflow measures the base and the head on the same certified dataset, on the same runner image. Each side syncs its own uv.lock and runs the PR head's copy of the tool. The report covers every year from 2025-26 to 2031-32:

    • receipts by tax head;
    • spending and caseloads by benefit;
    • poverty: absolute and relative, BHC and AHC, for everyone, children, working-age adults and pensioners;
    • the Gini coefficient;
    • mean income in each side's own deciles, and household-matched decile changes within the base deciles;
    • ten standard reform costings: the eight fixtures, plus a 10% rise in the Universal Credit standard allowance and in the State Pension.

    Base and head are measured in one job. The dataset is licensed survey microdata, so only aggregates leave that job; a test enforces it (see "Data protection" below).

    It posts one comment and updates it on later runs. It fails on:

    • a crash;
    • a different dataset on the two sides;
    • non-finite figures;
    • any check that the base passes and the head breaks.

    Moves above the flag thresholds are listed, not failed.

  2. A fiscal partition, policyengine_uk/data/fiscal_partition.yaml. The tax heads are the specification from the Corporate SDLT is counted twice in household and government tax totals #2159 work (Count corporate SDLT once and let SDLT abolition remove all of it #2235), which was written from the OBR receipts lines and each variable's formula. They are encoded here for main before that fix: corporate_sdlt is a declared double count inside expected_sdlt. The spending heads cover gov_spending and household_benefits.

  3. Immutable test data and a mandatory-data mode, in tests/conftest.py.

    • tests/certified_dataset.yaml pins uk-data 1.58.0's enhanced_frs_2024_25.h5 by Hugging Face commit 47bbb58d, with sha256 5ba399ea…. That is the artifact policyengine.py#555 certified with model 2.125.1.
    • Data tests verify those bytes once per process before they run.
    • With POLICYENGINE_UK_REQUIRE_TEST_DATA=1, every data test fails in setup when the dataset is unavailable, and runs only on the pinned file.
    • Without the flag, tests skip as before. Credential-free unit tests are unaffected.
    • W2 wires the flag into the existing workflows; this PR does not touch them.
  4. Reform fixtures rebased onto 1.58.0. reforms_config.yaml keeps every earlier value as a receipt, with the model and data that produced it. It also records current main's figure on 1.40.3, so the data's share of each move is visible. The earlier values were computed on whatever Enhanced FRS was latest until the 1.40.3 pin landed on 2026-04-05.

Invariants the report enforces

  • Closure. For each of gov_tax, household_tax, pre_budget_change_household_tax, gov_spending and household_benefits, the model's own component list is exactly the partition's heads plus its declared double counts, each listed once. Each head's declared entity is its variable's entity.
  • Identities, household by household.
    • Heads plus double counts equal each model total, respecting dropped_when (council tax abolition).
    • gov_balance equals gov_tax − gov_spending.
    • Household net income equals market income plus benefits, less taxes and pension contributions.
  • Counted once. Adding £1 to any component of a tax total moves that total by exactly £1 per unit. On a spending total it moves by at most £1 per unit: means tests can claw some of it back, but no other benefit may rise.
    • A declared double count must still be contained in its head, or the check fails as stale.
    • The check reuses one simulation, restores every input it overrode, and requires the recomputed baseline to match the first run exactly.
  • Bounds and finiteness. Weights are finite and non-negative. Poverty rates lie in [0, 1]. Every figure is finite. Heads declared sign: nonnegative are never negative.
  • Determinism. A rebuilt unreformed simulation reproduces the baseline gov_balance exactly.
  • Reform responsiveness. Each standard reform names the variable it must move, the direction and a minimum (standard_reforms.yaml). A reform that moves its target by less, by nothing or the wrong way in any year fails responsive:<id>, so a reform the model silently ignores cannot pass as a small number.
    • Relative reforms are built from each side's own baseline parameters: that model year's value times the factor.
    • On 1.58.0 all ten respond in every year. The UC standard allowance rise adds £3.0bn to £3.4bn of Universal Credit; the State Pension rise adds £12.4bn to £14.4bn.
  • Comparison.
    • Comparing a side with itself changes nothing and flags nothing.
    • Changes are antisymmetric.
    • A flag fires exactly when |head − base| > max(absolute, relative × |base|).
    • The comment always carries its marker and fits GitHub's limit.

Tests

  • Property-based (Hypothesis):
    • the data plan over random environments: mandatory mode never skips and runs only on the pin, and unrelated variables never change the plan;
    • pin parsing: only a 40-hex commit passes;
    • byte verification against random tampering;
    • partition mutations: a duplicate head, a missing head, an extra component, a mis-scoped double count;
    • head-order invariance;
    • counted-once on a fake simulation with known containment: the coefficient is 2 exactly when a head contains another;
    • responsiveness: a reform passes exactly when every year moves enough in the right direction, and the verdict is symmetric under negation;
    • comparison identity, antisymmetry and thresholds;
    • comment size.
  • Differential:
    • the partition against the model's own lists;
    • decile impacts against a pandas groupby;
    • Gini against microdf;
    • head totals against Microsimulation.calculate(...).sum(), comparing person and benefit-unit weights with household-mapped sums.
  • On certified data (microsimulation marker): test_aggregate_impact_certified.py runs 2026-27 with the counted-once check on every tax component and four benefits, and the two relative reforms.

Commands run locally:

  • pytest policyengine_uk/tests/aggregate_impact: 79 passed without credentials (7 data tests skipped); the 7 data tests pass with POLICYENGINE_UK_REQUIRE_TEST_DATA=1 and a token.
  • pytest policyengine_uk/tests -m microsimulation on the 1.58.0 pin: every test outside the rebased fixtures passed before the rebase; the rebased fixtures were then recomputed.
  • A base-against-head rehearsal of the workflow (main against this branch): pass, no moves.

The full Python suite was not run locally; CI runs it.

What the report already finds on main

These figures are from certified 1.58.0, 2026-27, main at 6d89338. The first two are filed as #2337 and #2338, and the negative VAT as policyengine-uk-data#565.

Data protection

An earlier version of this workflow (commits 073e808 to 8d3e482) uploaded each side's measurement as an Actions artifact, including the household-level arrays the decile comparison uses, and cached the dataset in the Actions cache. Those artifacts and the cache were deleted on 11 October, and fd94415 removes both:

  • both sides are measured in one job, and only the report directory is uploaded (two result.json files of aggregates, the comment and the summary);
  • the dataset is never cached;
  • household detail is written under private/;
  • check details give counts and weighted totals, never one household's value.

test_aggregate_impact_workflow.py fails if the workflow uploads anything else, uses the cache, or splits the measurement across jobs.

Thresholds and methodology

These are proposals pending cos d1344:

  • the flag thresholds in report_spec.yaml: max(£100m, 0.1%) for £ totals, max(5,000, 0.5%) for caseloads, 0.1pp for rates and 0.001 for Gini. Flags never fail the job;
  • the responsiveness minimums in standard_reforms.yaml, each well below the reform's smallest yearly effect on 1.58.0.

No model semantics change in this PR.

Not in this PR

  • W2 sets POLICYENGINE_UK_REQUIRE_TEST_DATA in the existing workflows.
  • The uk-data gates (model-fixed comparison, final-fit and target-coverage gates, single-age and HBAI checks, OBR ingestion) come in separate uk-data PRs for the d833 batch.

axiom: n/a: CI, test-data and reporting infrastructure; no policy change

🤖 Generated with Claude Code

MaxGhenis and others added 4 commits October 11, 2026 13:43
The report measures one model checkout on the pinned certified dataset over
2025-26 to 2031-32: receipts by tax head, spending and caseloads by benefit,
poverty by measure and group, inequality, own-decile incomes and the
standard reform costings. It checks them against a fiscal partition of the
model's totals (policyengine_uk/data/fiscal_partition.yaml):
- closure: each total's components are exactly the partition's heads and
  declared double counts;
- accounting identities, household by household;
- a counted-once check, which perturbs each component by £1 and requires
  each tax total to move by exactly £1 per unit, and each spending total by
  at most £1.

compare then sets a base measurement against a head one. It fails on a
crash, a different dataset, non-finite figures or a check the base passes
and the head breaks. It flags moves above the proposed thresholds, and
renders a pull request comment.

The partition's tax heads follow the #2159 work's specification, encoded
for main before that fix: corporate_sdlt is a declared double count inside
expected_sdlt. Spending heads cover gov_spending and household_benefits.

Test data: conftest pins enhanced_frs_2024_25 from uk-data 1.58.0 by
Hugging Face commit and SHA-256 (tests/certified_dataset.yaml), verifies the
bytes before data tests run, and adds a mandatory-data mode
(POLICYENGINE_UK_REQUIRE_TEST_DATA). In that mode, data tests fail rather
than skip without data, and run only on the pinned dataset. The reform-cost
fixtures are rebased onto 1.58.0, keeping each earlier value as a receipt
with the model and data that produced it.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
.github/workflows/aggregate-impact.yaml measures the pull request's base
and head on the same runner image. Each side syncs its own uv.lock and runs
the head's copy of the tool against its own model, on the pinned dataset
whose bytes the tool verifies. The report job then compares the two, writes
the job summary and one updated comment, and fails on structural failures.
Fork and Dependabot runs, which cannot read the private dataset, record a
skip instead.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sections with no change collapse into one line, an unchanged decile table
into one sentence, and the counted-once summary lists only real violations
(a tax total moving by other than £1 per unit, or a spending total by more
than £1), not the means-test offsets every benefit shows.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
The aggregate impact report (#2335) adds gov_spending, household_benefits
and spending_heads to fiscal_partition.yaml. The tax tests now check the
three tax totals only, require that spending heads borrow no tax head id or
variable and that no spending head names a tax total, and apply dropped_when
to the tax totals alone. Checked against #2335's file with these tax
sections merged in: this file's tests and #2335's partition and guard tests
pass.

The vat head records that 76 households have negative VAT on
policyengine-uk-data 1.58.0 (consumption or the full-rate expenditure share
is negative in the data; policyengine-uk-data issue 565).

Refs #2159

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
…lookup

- Set POLICYENGINE_UK_REQUIRE_TEST_DATA=1 (W3's conftest switch, #2335)
  wherever require-data is on: main pushes, merge queue groups and
  releases. A test that needs the dataset then fails with its own message
  instead of skipping. Unused until #2335 lands.
- A manual dispatch of the main workflow always tests; the merge queue
  lookup applies only to pushes, and a failed lookup parses to zero.
- Document the re-run path's residual and where docs-only pull requests
  build the documentation; the workflow-shape test covers the release
  workflow's require-data and the lookup.

From the GPT-6.1 Sol delta review of 96e9cec (APPROVE, non-blocking).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 11, 2026 19:24
The standard reforms move into the tool (standard_reforms.yaml), so a
vendored copy carries them: the eight reform-cost fixtures, plus a 10% rise
in the Universal Credit standard allowance and in the State Pension. Each
names the variable it must move, the direction and a minimum. A reform that
moves its target by less, by nothing or the wrong way in any year fails
responsive:<id>, so a reform the model silently ignores cannot pass as a
small number.

A relative reform is built from each side's own baseline parameters: that
model year's value times the factor, for every year of the horizon.

On uk-data 1.58.0 all ten respond in every year, 2025-26 to 2031-32. The
UC standard allowance rise adds £3.0bn to £3.4bn of Universal Credit, and
the State Pension rise £12.4bn to £14.4bn.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The certified dataset is licensed survey microdata, and only aggregates may
be published. The workflow uploaded each side's measurement as an artifact,
including the household-level arrays the decile comparison uses, and cached
the dataset in the Actions cache. Both are removed:

- base and head are now measured in one job, so the household detail never
  travels between jobs; only the report directory (the two result.json
  files, the comment and the summary) is uploaded;
- the dataset is downloaded on each run and never cached;
- measure writes household detail under private/, apart from result.json;
- check details give counts and weighted totals, not one household's value.

test_aggregate_impact_workflow.py fails if the workflow uploads anything
but the report, uses the Actions cache, copies anything private into the
report, or splits the measurement across jobs.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@PolicyEngine PolicyEngine deleted a comment from github-actions Bot Oct 11, 2026
MaxGhenis added a commit that referenced this pull request Oct 11, 2026
The aggregate impact report (#2335) adds gov_spending, household_benefits
and spending_heads to fiscal_partition.yaml. The tax tests now check the
three tax totals only, require that spending heads borrow no tax head id or
variable and that no spending head names a tax total, and apply dropped_when
to the tax totals alone. Checked against #2335's file with these tax
sections merged in: this file's tests and #2335's partition and guard tests
pass.

The vat head records that 76 households have negative VAT on
policyengine-uk-data 1.58.0 (consumption or the full-rate expenditure share
is negative in the data; policyengine-uk-data issue 565).

Refs #2159

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 3f174d07ec against head c6d99a2944, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.0, sha256 5ba399ea5ab9), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 4 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds proposed in report_spec.yaml, pending cos d1344; a flag does not fail the job).

Workflow run and full report

Moves flagged for review

None.

Household net income by decile

No household's net income changes in any year.

No change in any year: receipts by tax head; spending by benefit and service; caseloads; government balance, each component counted once; model totals; components the model counts twice; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles; standard reform costings (change in gov_balance); standard reforms: change in each reform's target.

Checks failing on both base and head (4)
  • VAT is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-69,996,281 in total; 2026-27: 76 units below zero, a weighted £-71,878,301 in total; 2027-28: 76 units below zero, a weighted £-73,587,136 in total
  • At most one of expected_sdlt, expected_ltt, expected_lbtt is non-zero for any household (overlap_guard:property_transaction_tax_geography): 2025-26: 86 households have more than one, a weighted 39,273; 2026-27: 86 households have more than one, a weighted 39,422; 2027-28: 88 households have more than one, a weighted 39,718
  • Raising statutory_maternity_pay by £1 raises its own head by £1, moves no other tax head and raises no other benefit (counted_once:statutory_maternity_pay): gov_spending: universal_credit rises by 0.0068 per unit of statutory_maternity_pay; household_benefits: universal_credit rises by 0.0068 per unit of statutory_maternity_pay
  • Raising statutory_sick_pay by £1 raises its own head by £1, moves no other tax head and raises no other benefit (counted_once:statutory_sick_pay): gov_spending: universal_credit rises by 0.0099 per unit of statutory_sick_pay; household_benefits: universal_credit rises by 0.0099 per unit of statutory_sick_pay
Counted-once check

Each of 82 components was raised by £1 per unit in 2026-27: tax totals must rise by exactly £1 per unit and spending totals by at most £1. 2 failed; 0 were skipped (zero for every unit, or not money).

  • statutory_maternity_pay: gov_spending 1.0068, household_benefits 1.0068
  • statutory_sick_pay: gov_spending 1.0099, household_benefits 1.0099

In the model's own totals:

  • jsa_income moves gov_spending by 45.6619 per unit
  • jsa_income moves household_benefits by 65.8035 per unit
  • income_support moves gov_spending by 45.6619 per unit
  • income_support moves household_benefits by 65.8035 per unit
  • working_tax_credit moves gov_spending by 17.9161 per unit
  • working_tax_credit moves household_benefits by 17.9161 per unit
  • incapacity_benefit moves gov_spending by 27.2846 per unit
  • incapacity_benefit moves household_benefits by 27.2846 per unit
  • maternity_allowance moves gov_spending by 2.7303 per unit
  • maternity_allowance moves household_benefits by 2.7303 per unit
  • statutory_maternity_pay moves gov_spending by 1.0068 per unit
  • statutory_maternity_pay moves household_benefits by 1.0068 per unit
  • statutory_sick_pay moves gov_spending by 1.0099 per unit
  • statutory_sick_pay moves household_benefits by 1.0099 per unit
  • corporate_sdlt moves gov_tax by 2.0000 per unit
  • corporate_sdlt moves household_tax by 2.0000 per unit
  • corporate_sdlt moves pre_budget_change_household_tax by 2.0000 per unit
  • declared double count corporate_sdlt is still contained in expected_sdlt (coefficient 1.000; Corporate SDLT is counted twice in household and government tax totals #2159)
Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 3f174d07ec uk 2.126.10, core 3.32.27, py 3.13.16 aarch64 82ac7ba16ba2 779be6fce587 384.08s
head #2335 merged into main c6d99a2944 uk 2.126.10, core 3.32.27, py 3.13.16 aarch64 82ac7ba16ba2 779be6fce587 389.38s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@47bbb58d3f6467aa4a7059bc6110d2bdcf699b29, sha256 5ba399ea5ab9a6c7d4e9aaf6c623080beb34d9ad5f330f6244dbad72b8d960b6 (verified on both sides), policyengine-uk-data 1.58.0.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax £300.49bn £320.54bn £338.02bn £353.23bn £369.12bn £387.23bn £411.43bn
National Insurance (employee and self-employed) £53.13bn £55.50bn £57.32bn £59.02bn £60.93bn £62.87bn £65.32bn
National Insurance (employer) £154.54bn £161.15bn £166.17bn £170.81bn £177.11bn £182.68bn £189.88bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.72bn £13.16bn £13.65bn £14.15bn £14.65bn £15.20bn £15.77bn
Student loan repayments £7.83bn £8.13bn £8.35bn £8.56bn £8.79bn £9.04bn £8.06bn
VAT £317.14bn £325.66bn £333.41bn £341.43bn £349.79bn £358.40bn £367.14bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.04bn £24.14bn £26.10bn £26.16bn £25.89bn £25.24bn £25.82bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.31bn £4.46bn £4.48bn £4.50bn £4.52bn £4.54bn £4.61bn
Council tax £49.77bn £52.67bn £56.01bn £59.64bn £63.25bn £67.02bn £67.31bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.49bn £0.51bn £0.52bn £0.53bn
Northern Ireland domestic rates £0.58bn £0.61bn £0.64bn £0.67bn £0.70bn £0.74bn £0.74bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £19.45bn £20.44bn £21.41bn £22.39bn £23.39bn £24.49bn £25.65bn
Land transaction tax (Wales) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land and buildings transaction tax (Scotland) £0.10bn £0.10bn £0.11bn £0.11bn £0.12bn £0.13bn £0.13bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £123.61bn £128.31bn £130.13bn £132.24bn £136.14bn £140.17bn £144.30bn
Pension Credit £6.69bn £7.05bn £7.03bn £7.11bn £7.23bn £7.36bn £6.71bn
Winter Fuel Payment £1.70bn £1.69bn £1.62bn £1.60bn £1.59bn £1.57bn £1.56bn
Pension Age Winter Heating Payment (Scotland) £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn £0.23bn
Universal Credit £79.30bn £83.59bn £85.21bn £86.75bn £87.59bn £84.52bn £84.96bn
Housing Benefit £8.16bn £8.48bn £8.73bn £8.86bn £9.13bn £9.36bn £7.91bn
Council Tax Reduction £2.11bn £2.16bn £2.21bn £2.26bn £2.32bn £2.38bn £2.14bn
Employment and Support Allowance (income-related) £2.16bn £2.22bn £2.27bn £2.32bn £2.37bn £2.43bn £2.49bn
Employment and Support Allowance (contribution-based) £5.19bn £5.32bn £5.45bn £5.58bn £5.72bn £5.86bn £6.00bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.30bn £0.31bn £0.31bn £0.32bn £0.33bn £0.34bn £0.34bn
Income Support £0.17bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £26.93bn £28.06bn £28.81bn £29.51bn £30.23bn £30.97bn £31.73bn
Disability Living Allowance £7.48bn £7.80bn £8.01bn £8.20bn £8.40bn £8.61bn £8.82bn
Attendance Allowance £8.74bn £9.11bn £9.35bn £9.57bn £9.81bn £10.05bn £10.30bn
Carer's Allowance £4.65bn £4.84bn £4.97bn £5.09bn £5.22bn £5.35bn £5.48bn
Carer Support Payment (Scotland) £0.38bn £0.39bn £0.40bn £0.41bn £0.42bn £0.43bn £0.44bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.02bn £0.02bn £0.02bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.51bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.59bn
Armed Forces Compensation Scheme £0.57bn £0.58bn £0.60bn £0.61bn £0.63bn £0.64bn £0.66bn
Child Benefit £16.23bn £16.90bn £17.34bn £17.76bn £18.18bn £18.62bn £19.05bn
Scottish Child Payment £0.50bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.58bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.06bn £0.06bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.34bn £3.43bn £3.51bn £3.59bn £3.68bn £3.77bn £3.86bn
Statutory Sick Pay £1.18bn £1.21bn £1.24bn £1.27bn £1.30bn £1.33bn £1.37bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.65bn £0.67bn £0.69bn £0.70bn £0.72bn £0.74bn £0.76bn
Tax-Free Childcare £0.56bn £0.57bn £0.57bn £0.59bn £0.56bn £0.58bn £0.56bn
Extended childcare entitlement £4.77bn £5.31bn £5.43bn £5.58bn £5.68bn £5.86bn £5.93bn
Universal childcare entitlement £1.30bn £1.37bn £1.41bn £1.45bn £1.53bn £1.57bn £1.61bn
Targeted childcare entitlement £0.44bn £0.46bn £0.47bn £0.48bn £0.50bn £0.50bn £0.50bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.17bn £0.17bn
Adult Dependants' Grant £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £205.23bn £206.01bn £206.77bn £207.60bn £208.52bn £209.45bn £210.35bn
State education spending £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £30.94bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,410k 11,315k 11,062k 10,978k 11,026k 11,076k 11,124k
Pension Credit 1,483k 1,481k 1,468k 1,447k 1,448k 1,445k 1,072k
Winter Fuel Payment 7,113k 7,035k 6,701k 6,596k 6,562k 6,475k 6,396k
Pension Age Winter Heating Payment (Scotland) 829k 830k 829k 827k 831k 835k 838k
Universal Credit 6,348k 6,361k 6,372k 6,388k 6,368k 6,307k 6,291k
Housing Benefit 1,232k 1,232k 1,234k 1,219k 1,224k 1,226k 1,041k
Council Tax Reduction 3,390k 3,414k 3,432k 3,455k 3,471k 3,504k 3,284k
Employment and Support Allowance (income-related) 189k 190k 190k 191k 192k 192k 193k
Employment and Support Allowance (contribution-based) 717k 719k 722k 725k 728k 731k 735k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 69k 70k 70k 70k 70k 71k 71k
Income Support 34k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,561k 3,575k 3,588k 3,602k 3,618k 3,634k 3,650k
Disability Living Allowance 1,335k 1,340k 1,345k 1,350k 1,356k 1,362k 1,368k
Attendance Allowance 1,717k 1,723k 1,729k 1,736k 1,744k 1,752k 1,759k
Carer's Allowance 1,073k 1,077k 1,081k 1,086k 1,090k 1,095k 1,100k
Carer Support Payment (Scotland) 87k 87k 87k 88k 88k 88k 89k
Carer's Allowance Supplement (Scotland) 0k 87k 87k 88k 88k 88k 89k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 136k 137k 137k 138k 138k 139k 140k
Armed Forces Compensation Scheme 87k 88k 88k 88k 89k 89k 89k
Child Benefit 8,145k 8,170k 8,197k 8,229k 8,262k 8,296k 8,318k
Scottish Child Payment 353k 354k 356k 357k 357k 359k 357k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 209k 209k 210k 211k 212k 213k 214k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 321k 323k 324k 325k 326k 328k 329k
Statutory Sick Pay 186k 187k 187k 188k 189k 190k 190k
Sure Start Maternity Grant 28k 28k 28k 28k 29k 29k 29k
Bereavement Support Payment 92k 93k 93k 93k 94k 94k 95k
Tax-Free Childcare 974k 980k 971k 977k 958k 967k 915k
Extended childcare entitlement 962k 958k 959k 964k 956k 963k 954k
Universal childcare entitlement 379k 386k 389k 391k 404k 407k 409k
Targeted childcare entitlement 92k 92k 92k 93k 93k 92k 91k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 99k 99k 100k 100k 100k 83k 83k
Adult Dependants' Grant 10k 11k 11k 11k 11k 11k 11k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance 2k 2k 2k 2k 2k 2k 2k
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £975.84bn £1,018.31bn £1,057.41bn £1,092.91bn £1,130.52bn £1,169.83bn £1,214.13bn
Government spending £538.03bn £552.21bn £559.03bn £566.05bn £574.52bn £579.31bn £589.95bn
Government balance, each receipt once £437.80bn £466.11bn £498.38bn £526.85bn £555.99bn £590.53bn £624.18bn
Benefits in household_benefits but not in gov_spending £0.55bn £0.57bn £0.59bn £0.60bn £0.61bn £0.63bn £0.64bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £978.97bn £1,021.44bn £1,060.54bn £1,096.04bn £1,133.65bn £1,172.96bn £1,217.26bn
household_tax £507.29bn £534.63bn £560.97bn £583.79bn £606.74bn £631.88bn £660.24bn
pre_budget_change_household_tax £499.46bn £526.50bn £552.61bn £574.74bn £597.44bn £622.32bn £651.65bn
gov_spending £538.03bn £552.21bn £559.03bn £566.05bn £574.52bn £579.31bn £589.95bn
household_benefits £538.39bn £552.58bn £559.41bn £566.44bn £574.92bn £579.71bn £590.35bn
gov_balance £440.93bn £469.24bn £501.51bn £529.98bn £559.12bn £593.66bn £627.31bn
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,671.23bn £1,733.93bn £1,786.79bn £1,837.49bn £1,899.44bn £1,958.07bn £2,030.31bn
Household net income £1,662.85bn £1,710.91bn £1,743.12bn £1,776.97bn £1,812.65bn £1,849.60bn £1,901.81bn
Household net income (HBAI definition) £1,477.50bn £1,524.37bn £1,557.42bn £1,590.63bn £1,624.77bn £1,659.80bn £1,706.27bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,713k 69,978k 70,237k 70,518k 70,828k 71,147k 71,453k
Benefit units 35,437k 35,572k 35,703k 35,846k 36,004k 36,166k 36,321k
Households 31,245k 31,364k 31,480k 31,606k 31,745k 31,888k 32,025k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 15.8% 15.0% 15.5% 15.6% 15.7% 16.0% 15.9%
Absolute poverty, before housing costs: children 23.0% 20.6% 21.3% 21.1% 21.3% 21.7% 21.7%
Absolute poverty, before housing costs: working-age adults 13.7% 13.4% 14.0% 14.1% 14.2% 14.5% 14.2%
Absolute poverty, before housing costs: pensioners 14.1% 13.6% 13.7% 13.9% 13.9% 14.0% 14.6%
Absolute poverty, after housing costs: everyone 20.8% 20.3% 20.9% 21.1% 21.4% 22.1% 22.0%
Absolute poverty, after housing costs: children 31.7% 30.0% 30.7% 30.9% 31.3% 32.8% 32.6%
Absolute poverty, after housing costs: working-age adults 19.4% 19.2% 19.8% 20.0% 20.3% 21.0% 20.5%
Absolute poverty, after housing costs: pensioners 12.5% 12.3% 12.1% 12.3% 12.4% 12.4% 13.4%
Relative poverty, before housing costs: everyone 17.1% 16.5% 16.4% 16.7% 16.8% 16.3% 17.0%
Relative poverty, before housing costs: children 25.6% 23.3% 22.9% 23.1% 23.2% 22.2% 23.4%
Relative poverty, before housing costs: working-age adults 14.6% 14.4% 14.7% 14.9% 15.2% 14.8% 15.1%
Relative poverty, before housing costs: pensioners 15.2% 15.2% 14.7% 14.8% 14.8% 14.4% 15.8%
Relative poverty, after housing costs: everyone 21.3% 21.1% 21.1% 21.2% 21.4% 22.0% 21.9%
Relative poverty, after housing costs: children 32.5% 31.3% 31.0% 31.0% 31.3% 32.5% 32.6%
Relative poverty, after housing costs: working-age adults 19.7% 19.8% 20.0% 20.1% 20.3% 21.0% 20.5%
Relative poverty, after housing costs: pensioners 13.1% 12.8% 12.6% 12.7% 12.4% 12.4% 13.4%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,008k 10,507k 10,884k 10,991k 11,106k 11,381k 11,373k
Absolute poverty, before housing costs: children 3,459k 3,104k 3,225k 3,214k 3,250k 3,329k 3,339k
Absolute poverty, before housing costs: working-age adults 5,861k 5,780k 6,068k 6,170k 6,241k 6,419k 6,320k
Absolute poverty, before housing costs: pensioners 1,688k 1,623k 1,591k 1,608k 1,614k 1,633k 1,714k
Absolute poverty, after housing costs: everyone 14,535k 14,233k 14,646k 14,868k 15,139k 15,746k 15,689k
Absolute poverty, after housing costs: children 4,765k 4,529k 4,640k 4,694k 4,779k 5,023k 5,017k
Absolute poverty, after housing costs: working-age adults 8,271k 8,234k 8,594k 8,748k 8,924k 9,278k 9,102k
Absolute poverty, after housing costs: pensioners 1,499k 1,470k 1,412k 1,426k 1,435k 1,445k 1,569k
Relative poverty, before housing costs: everyone 11,894k 11,526k 11,553k 11,765k 11,930k 11,608k 12,143k
Relative poverty, before housing costs: children 3,842k 3,520k 3,468k 3,508k 3,540k 3,405k 3,610k
Relative poverty, before housing costs: working-age adults 6,228k 6,198k 6,367k 6,543k 6,676k 6,529k 6,684k
Relative poverty, before housing costs: pensioners 1,824k 1,808k 1,718k 1,714k 1,713k 1,674k 1,850k
Relative poverty, after housing costs: everyone 14,870k 14,734k 14,834k 14,981k 15,157k 15,681k 15,680k
Relative poverty, after housing costs: children 4,880k 4,722k 4,689k 4,715k 4,784k 4,986k 5,016k
Relative poverty, after housing costs: working-age adults 8,415k 8,492k 8,682k 8,795k 8,935k 9,254k 9,098k
Relative poverty, after housing costs: pensioners 1,575k 1,520k 1,463k 1,472k 1,438k 1,441k 1,566k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3117 0.3094 0.3106 0.3113 0.3119 0.3137 0.3127
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £18,263 £18,566 £18,588 £18,712 £19,079 £19,169 £19,488
Decile 2: mean household_net_income per household £28,213 £29,006 £28,623 £28,878 £29,211 £29,528 £30,103
Decile 3: mean household_net_income per household £34,413 £35,673 £36,287 £36,892 £37,204 £37,192 £37,444
Decile 4: mean household_net_income per household £37,643 £39,340 £40,284 £41,010 £41,559 £42,170 £43,753
Decile 5: mean household_net_income per household £45,172 £46,059 £46,924 £47,338 £48,018 £48,015 £49,373
Decile 6: mean household_net_income per household £48,821 £50,247 £51,421 £52,277 £52,862 £54,632 £56,252
Decile 7: mean household_net_income per household £55,388 £56,756 £57,200 £58,135 £58,986 £60,252 £62,409
Decile 8: mean household_net_income per household £70,806 £72,028 £73,226 £74,342 £75,651 £76,729 £77,557
Decile 9: mean household_net_income per household £78,614 £80,277 £81,557 £83,394 £84,834 £86,473 £90,592
Decile 10: mean household_net_income per household £121,629 £124,669 £125,904 £128,225 £130,773 £133,647 £135,670
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.23bn £6.51bn £6.72bn £6.92bn £7.13bn £7.37bn £7.65bn
Raise higher rate by 1pp £3.67bn £3.98bn £4.22bn £4.37bn £4.61bn £4.89bn £5.11bn
Raise personal allowance by ~800GBP/year £-3.82bn £-3.94bn £-4.03bn £-4.07bn £-4.13bn £-4.23bn £-1.71bn
Raise child benefit by 25GBP/week per additional child £-1.98bn £-1.74bn £-1.63bn £-1.53bn £-1.43bn £-1.32bn £-1.22bn
Reduce Universal Credit taper rate to 20% £-19.99bn £-20.59bn £-20.87bn £-21.21bn £-21.27bn £-21.32bn £-21.42bn
Raise Class 1 main employee NICs rate to 10% £11.19bn £11.65bn £11.97bn £12.26bn £12.57bn £12.91bn £13.39bn
Raise VAT standard rate by 2pp £31.26bn £32.10bn £32.86bn £33.65bn £34.48bn £35.33bn £36.19bn
Raise additional rate by 3pp £2.83bn £3.05bn £3.24bn £3.55bn £3.76bn £4.00bn £4.33bn
Raise the Universal Credit standard allowance by 10% £-3.02bn £-3.16bn £-3.21bn £-3.27bn £-3.30bn £-3.33bn £-3.36bn
Raise the State Pension by 10% £-9.04bn £-9.26bn £-9.30bn £-9.37bn £-9.56bn £-9.81bn £-10.31bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.38bn £6.67bn £6.89bn £7.09bn £7.31bn £7.55bn £7.82bn
Raise higher rate by 1pp: change in income_tax £3.67bn £3.98bn £4.23bn £4.38bn £4.62bn £4.90bn £5.12bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.96bn £-4.09bn £-4.18bn £-4.23bn £-4.30bn £-4.39bn £-1.77bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.33bn £2.14bn £2.03bn £1.92bn £1.82bn £1.71bn £1.59bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.03bn £20.62bn £20.91bn £21.25bn £21.31bn £21.36bn £21.46bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.46bn £11.92bn £12.26bn £12.57bn £12.88bn £13.23bn £13.71bn
Raise VAT standard rate by 2pp: change in vat £31.26bn £32.10bn £32.86bn £33.65bn £34.48bn £35.33bn £36.19bn
Raise additional rate by 3pp: change in income_tax £2.83bn £3.05bn £3.24bn £3.55bn £3.76bn £4.00bn £4.33bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.03bn £3.16bn £3.22bn £3.28bn £3.31bn £3.34bn £3.37bn
Raise the State Pension by 10%: change in state_pension £12.36bn £12.83bn £13.01bn £13.22bn £13.61bn £14.02bn £14.43bn

MaxGhenis and others added 3 commits October 11, 2026 19:44
Counted-once check. It judged each total's net movement, which a means-test
fall, or the eligibility-jump exclusion, could use to hide a double count.
It now reads each head's response household by household:
- a component's own head must rise by exactly £1;
- no other tax head may move;
- no other benefit may rise in any household (rises and falls are not
  netted);
- the model's own total must move by what its heads moved, plus one for a
  declared double count.
That last rule catches a total whose formula adds a zero component twice.
A head that declares a read may respond, but not one for one. The snapshot
of supplied inputs is taken after formula results are discarded, so an
earlier result is never frozen as an input.

Comparison.
- A missing or crashed base now fails.
- A check failing in a year where the base passes is a regression, even if
  it already failed in another year.
- A check the base ran that is missing from the head fails (or is noted,
  when the partition changed), and the head must have run the core checks.
- A figure on one side only is shown as added or removed, never as no
  change.
- A non-finite head figure fails directly.
- Households must match one to one.

Measurement.
- Finiteness is checked after the reform costings.
- A rebuilt baseline must match in every year.
- A skipped check is recorded as skipped.
- metrics_version covers the effective spec, horizon and reforms.
- Geographic exclusivity guards are checked on the data.

Test data.
- Data tests are identified by their marker, so the data-free tests under
  microsimulation/ run without credentials.
- The setup hook runs before pytest's skip handling, so a skip marker
  cannot turn missing data into a skip.
- The latest-data smoke test is a named exception to the pin.

The partition's notes now describe main before the #2159 fix correctly.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Qualification compares a candidate's report with the previous pair's. With
only a status per check, a check that fails in more years than before looks
unchanged; failing_scopes lets it be told apart.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tool digest was read from disk when a measurement finished, so editing
the tool during a run stamped the result with code that had not produced
it. It is now taken when the module loads.

Refs #2334.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Two fixes from this PR's W3 report change the lists fiscal_partition.yaml closes against. Here is what the partition needs once each lands (checked against this PR's head 9b33fe1):

  1. Count Scottish Child Payment, Healthy Start and the Two Child Limit Payment in government spending #2366 (fixes Scottish Child Payment and Healthy Start are household benefits but missing from government spending #2338) adds scottish_child_payment, healthy_start_vouchers and two_child_limit_payment to GOV_SPENDING_VARIABLES.
  2. Count statutory sick, maternity and paternity pay as Universal Credit earned income #2365 (fixes Universal Credit rises with SSP and SMP: tax on them is deducted but they aren't counted as earnings #2337) adds statutory_paternity_pay next to statutory_maternity_pay in four lists: HOUSEHOLD_BENEFIT_VARIABLES, GOV_SPENDING_VARIABLES, HBAI_HOUSEHOLD_NET_INCOME_ADDS and hbai_benefits.adds.
    • The partition needs a statutory_paternity_pay spending head with totals: [gov_spending, household_benefits], like the SSP and SMP heads.
    • uk-data never fills SPP, so no survey aggregate moves.

Neither PR touches tests/conftest.py, aggregate-impact.yaml or reforms_config.yaml.

This branch has not been deployed

No deployments
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.

Report each pull request's effect on national aggregates on the certified dataset

1 participant