Skip to content

Correct the two-child limit full roll-out page for the modelled exceptions and the FYE 2011 line - #2709

Merged
MaxGhenis merged 4 commits into
mainfrom
docs/two-child-full-rollout-exceptions-fye2011
Oct 28, 2026
Merged

MaxGhenis merged 4 commits into
mainfrom
docs/two-child-full-rollout-exceptions-fye2011

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2708

Summary

docs/book/validation/two-child-limit-full-rollout.md described the model as of 2.147.2:

  • Exceptions. It said the model does not apply the statutory exceptions to the limit. From 2.161.0 it does (uc_child_limit_exception, uc_child_limit_disregarded, is_CTC_child_limit_exception), as five person-level inputs that default to false. The page now says what the model supports, and separately that the Microcosm release supplies none of these inputs: they are absent from the H5, and Microcosm's build lists them among the inputs it leaves at the model default.
  • FYE 2011 line. The snippet approximated the line by overriding the absolute thresholds with £305.70/£261.92, which no longer match the parameter file (£301.34/£259.01). It now reads in_absolute_poverty_fye2011_ahc/_bhc (2.155.0) alongside the current-line flags, from the same runs.
  • Also corrected while auditing the page against main: UC claiming now also comes from would_claim_uc_at_legacy_closure, and Child Tax Credit is zero in 2025-26 because gov.dwp.tax_credits.active is false from 6 April 2025.
  • The snippet also prints the benefit units gaining and their children, which the page quotes but the old snippet did not compute.
  • Results re-run. The results and "why the results differ" sections now come from the new snippet, not the 23 October 2.147.2 run.

Lines 1–10 match main, including #2685's wording of the link to child-poverty-tcl.md.

The run

  • Pair: policyengine-uk 2.162.14 with Microcosm cut microcosm-uk-2024-25-national-20261028T061416Z-3c0d11b6 (SHA-256 a5ae72aeea3172eef2726625b88fb8f49f42d410d7c2d29f257a8b102f707551), which pins that exact version. The cut is published with a shippable certification but is not yet the latest-national pointer, which still names the 2.151.0 cut. policyengine.py 6.11.1 (latest on PyPI) certifies 2.151.0, which has neither change, so the page says this pair is not a certified one.
  • Code on main: nothing the page relies on changed between 2.162.14 and current main (exceptions, both lines, UC claiming, tax credits, reform keys).
  • How: the page's python block, verbatim except the DATASET line, in offline Modal containers (network blocked, dataset mounted read-only): nine microsimulations. No number was scaled or edited by hand.
  • Cross-checks (separate runs on the same pair): every exception variable sums to 0; Child Tax Credit totals £0; MicroSeries counts match explicit weight-array counts; a household-record breakdown reproduces every children-lifted figure and finds no household pushed into poverty in any comparison.

What changed in the conclusions

  • Cost and families gaining still line up with the IFS at full roll-out and full take-up (£3.56bn vs about £3.6bn; 767k benefit units vs "over 800,000 households").
  • On the IFS's own line (FYE 2011, AHC), children lifted are now about 42% short (366k vs 630k; 240k vs 420k). The old page said "a quarter to 30%", from an approximated line on an older model and data cut. On the FYE 2025 line the shortfall is about 30%.
  • Each children-lifted figure rests on 59–196 household records. The ten largest make up 29–69% of each figure, and one record contributes up to 57k children. So the current-law three-child FYE 2011 AHC figure (194k) is above the full roll-out one (186k), and the page says so rather than claiming full roll-out is always the largest setting.

Reproducer: n/a: documentation only with no model source or dependency change
axiom: n/a: documentation only

🤖 Generated with Claude Code

MaxGhenis and others added 4 commits October 28, 2026 09:11
… line variables

The full roll-out page said the model does not apply the statutory
exceptions to the limit; from 2.161.0 it does, as person-level inputs
that the Microcosm release leaves false. Its snippet approximated the
FYE 2011 absolute line with stale FYE 2021 constants; it now reads
in_absolute_poverty_fye2011_ahc/_bhc (2.155.0) alongside the current
line, and counts the benefit units gaining. The results are still the
23 October 2.147.2 run, labelled as such until the re-run replaces them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The results section now comes from the page's own snippet, run on
policyengine-uk 2.162.14 and the Microcosm cut built with it
(20261028T061416Z-3c0d11b6), with the exception rules and the FYE 2011
line variables in place. On the IFS's line the children lifted are about
42% short of its figures; the page also says how many household records
each figure rests on.

Refs #2708

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Leaving the statutory exceptions unset can only raise the children lifted
by abolition, but for a three-child limit it can move them either way:
a third child with an exception already gets the element, and a fourth
child with one shifts the family's income before and after the reform.

Refs #2708

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review October 28, 2026 17:20
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Merge audit for head ff7835d33d87372b71dd2fbbc85fbbf38b307679:

  • Independent review, round 1 (GPT-6.1 Sol, head cc12d6f0b): REQUEST_CHANGES with one P2 finding. The page said leaving the statutory exceptions unset "if anything raises the figures". That holds for abolition but not for a three-child limit. For a family with four children whose fourth child has an exception, the reform takes it from two to three child elements without the exception and from three to four with it.
  • Fix in ff7835d33: the direction claim now covers abolition only. A new bullet says the omission can move the three-child figures either way, with two examples checked against uc_individual_child_element, uc_child_limit_exception, uc_child_limit_disregarded and uc_child_limit_position on main.
  • Independent review, round 2 (GPT-6.1 Sol, head ff7835d33): APPROVE, with no findings. It confirmed the fix for both kinds of exception (those that keep the child in the order and those that leave it out). It also checked that all six cost and gaining figures and all 24 poverty cells match the recorded run output, and that lines 1–10 match main.
  • Run: the page's snippet, verbatim except the DATASET path, on policyengine-uk 2.162.14 with Microcosm cut microcosm-uk-2024-25-national-20261028T061416Z-3c0d11b6 (SHA-256 a5ae72ae…), in offline Modal containers. No number was scaled or edited by hand.
  • CI: gh pr checks exits 0 at this head. The skipped jobs run only when code changes, and this PR changes docs only.

This is a documentation correction to model output, so it merges on these gates.

@MaxGhenis
MaxGhenis added this pull request to the merge queue Oct 28, 2026
Merged via the queue into main with commit eb1413f Oct 28, 2026
12 checks passed
@MaxGhenis
MaxGhenis deleted the docs/two-child-full-rollout-exceptions-fye2011 branch October 28, 2026 18:28
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.

Two-child limit full roll-out page says the exceptions are unmodelled and approximates the FYE 2011 line

1 participant