Repository navigation
Widen CGT taxpayer count bound for the 1.59.1 release - #631
Conversation
The fit table's receipts row is obr/capital_gains_tax (targets/source_manifests/obr_march_2026.yaml; targets/sources/obr.py). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Calibration fit against the base build: pass
A drop of more than 2.0% fails. National targets in a worse error band on the head (3)
Flags are for review: builds of the same code move 2 to 12 national targets to a worse band (#598). Bands are of |estimate / target - 1|; no target's estimate or error is published. Income distribution and single ages against the base build: passHBAI FYE 2025 (DWP), period 2024: equivalised income in £ a week, rates and Gini in per cent. A value outside HBAI's 95% interval is marked (outside).
FlagsNone. These measures report and flag but do not fail yet: their same-code spread is unmeasured (#598). Aggregate impact of the data change: passBase dataset Checks: 0 broken by this change, 4 failing on both sides, 0 fixed. Moves flagged for review: 7 (thresholds in Notes
Moves flagged for review
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
Household net income by decileThe datasets hold different households, so households are not matched; compare the mean income in each side's own deciles. Checks failing on both base and head (4)
Counted-once checkCounted-once check not run: not requested. Provenance
Base dataset: Head 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
Components the model counts twice: 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
|
|
Merged by the UK hub (session local_8e19f9d5, Opus 5.5) at head
🤖 Generated with Claude Code |
Refs #630 for the calibration follow-up and restoration of the ±20% bound.
axiom: n/a: data test bound
Reproducer:
policyengine_uk_data/tests/test_cgt_band_donors.py::test_built_cgt_taxpayer_countMax ruled d1735 = A in the Budget coordinator session on 2026-10-20 (~22:20Z): widen the bound to cover the measured miss, disclose it, and publish.
The unseeded, 512-epoch 1.59.0 publish build (push 39320323369) measured 375k weighted CGT taxpayers against HMRC's 548k (ratio 0.68, −32%) and failed the ±20% test. All three release builds (that publish build and seeded #618 and #621) missed the count target in the 25–50% error band. Use its lower edge for unseeded publish variability (#598), with the two-sided ratio check
0.5 <= ratio <= 1.2; the upper bound stays at #571's level. #630 records the fit-band table and the investigation into why the combined 512-epoch calibration undershoots the taxpayer targets.Release note for 1.59.1 (1.59.0's contents, which failed to publish, plus this bound): CGT taxpayers 375k against HMRC's 548k (−32%) in the 1.59.0 publish build; total gains passed its built-data bound in that build; CGT receipts improved in the seeded release fit summaries, from band 2 (25–50% off the OBR's March 2026 receipts forecast) on 1.58.2 to band 1 (10–25%).
The
630.fixed.mdfragment will cut 1.59.1 on merge; 1.59.0's version commit remains unpublished. The hub will merge after CI, thenpush.yamlpublishes the release.Validation:
uv run pytest policyengine_uk_data/tests/test_cgt_band_donors.py -n 0 -q— passed: 7 passed, 6 skipped (local FRS/enhanced FRS datasets absent).uvx ruff format --check .— passed (281 files already formatted).git diff --check— passed.On the 0.5 floor. The hub's independent review (20261020-225457-ud631-review) would prefer 0.6 but calls 0.5 non-blocking. 0.5 is kept: all three release-candidate builds sat in the 25–50% band for this target, and unseeded publish builds vary (#598), so a tighter floor risks a second failed multi-hour publish before the 28 October Budget. #630 restores ±20%.