Repository navigation
UK local build (K=25, 2026-10-06): data-quality defects on the target surface and the spine #1123
Description
Context
Measurement build uk-local-candidate-f100-s42-20261006T094003Z-835d98d9 (run tree uk-local-k25-8edd82066, code uk-identity-cgt-residential-branch 8edd820 + c1d4f8c on main 45d1ae3, policyengine-uk 2.100.0, feed chronicle-uk-artifact-825406f, 2,000 epochs, seed 42; fixes in #1115). The dense solve on the 25-clone pool (1,595,675 rows, D25) is the reference here: it fits 99.7 % of constituency rows and 99.5 % of local-authority rows within 10 %, so a miss that survives the dense solve is a spine or target problem, not a selection one. Selection mechanics are #1124. The land rows' ×K artefact is the per-block resolution defect #1115 commit 9 removes and is not listed.
1. HMRC income by area and the SPI bands bind two different surfaces
- The constituency and local-authority rows (
hmrc.employment_income.*,hmrc.self_employment_income.*, 4,031 rows) come from Personal Incomes Statistics tables 3.12 to 3.15a for tax year 2023/24 and are bound at period 2025 without uprating. The national SPI band rows are at 2025. - Sums: employment-income amounts £1,079bn by area against £1,193bn in the bands (+10.6 %); counts 27.14m against 29.77m (+9.7 %); self-employment amounts £106.8bn against £98.8bn (−7.5 %); self-employment counts 3.67m against 3.92m (+6.8 %).
- The dense solve splits the difference: area sum +3 %, band sum −13 %, with the £500k–£1m employment band at −38 % and the ITL £2m+ band at −11 %.
- The Declare cross-grain target reconciliation for the UK local surface: national wins, sub-national rescales (#495 increment 6 companion) #802 rule (national wins, sub-national rescales) never fired because no bridge is declared between the band family and the area family (the First calibrated rowwise UK local candidate (#495 increment 6) #762 A1-2/A1-3 rulings: area facts carry no bands).
- Ask: (a) Chronicle states which vintage or projection the 2025 area tables should carry; (b) microcosm declares a per-metric cross-grain factor that rescales each area table to the SPI national total for the same concept, receipted like the A15/A17 factors; (c) retire the stale exclusion
hmrc.spi_region.income_tax_by_region_12570_15000@E12000008(the row is inside the fence now).
2. One declared period rule per target family
The surface mixes vintages at period 2025: census households 2021 × 1.0336 (A15), tenure 2021 uprated (A17), ages mid-2024 unuprated, UC May 2025, HMRC 2023/24 unuprated, council-tax stock 2025, and ons.rent.private_rent composed from the PIPR July 2026 edition (data to June 2026) for a 2025 target. Ask: the feed declares, per family, the period the fact represents and the uprating applied to reach the calibration year, and microcosm refuses a family whose declared period differs from the calibration year without a declared factor. Include the CGT total in the review: the 2025 row carries £119.3bn of gains while uk-data's fixture for the same concept carries £67.7bn; confirm which projection the fact should carry.
3. VAT and fuel duties miss before any selection
obr.vat: +24 % in D25 and +21 % in the 2026-09-30 national build from main (family_equal). Spine consumption basis (LCFS) against the OBR line; Adjust VAT methodology to include flat % assumptions on VAT band shares by consumption category policyengine-uk-data#241 raised the band-share methodology.obr.fuel_duties_cars: −25 % in D25, −10 % in the national build.- Ask: reconcile the spine's VAT-able expenditure and road-fuel bases with the OBR concepts (what the line includes: business and public-sector VAT, duty on non-car fuel) and either fix the stage or declare the concept gap as a reviewed exclusion with a receipt.
4. Private rent in high-rent districts is unreachable from region-level FRS rents
ons.rent.private_rentat local-authority grain: Kensington and Chelsea −39 % and Brighton and Hove −22 % in D25 even with 1.6m rows to choose from; 13 English districts fail after selection, family within-10 share 91 % (the lowest local family).- Cause: rent is an FRS variable carried from the source household's region; the pool has no households whose rent matches the top districts' PIPR means, so no reweighting reaches them.
- Ask: condition rent on the assigned area (the UK graph: move geography assignment ahead of enrichment (geography-first reordering) #931 item (b) enrichment reorder: frs_brma / rent after geography) or impute rent from PIPR by BRMA at the assigned location, with a distribution receipt against the pre-move build.
5. Age 20–30 in student constituencies
- Leeds Central and Headingley −16 % and Sheffield Central −7 % in D25 (−44 % both after selection), Bristol Central and Belfast South and Mid Down in the same group.
- Cause: the mid-year estimates count students in halls and other communal establishments; the FRS is a private-household survey. The pool cannot carry that population.
- Ask: declare a communal-establishment adjustment for the age targets (Census 2021 TS011 communal-establishment residents by age and constituency is published) or sign deferrals for the cells where the communal share exceeds a declared threshold.
6. No nation-level household control
- The only household-count rows are the per-area census rows (650 + 361; they sum to 29.003m at both grains). Nothing binds England, Wales, Scotland or Northern Ireland household totals, so a solve that loses on the per-area rows loses the nation's household count silently (Northern Ireland −29 % in every area after selection).
- Ask: bind ONS household estimates by country for the target period as national rows, and add a surface check that constituency, local-authority and nation sums agree.
7. Council-tax micro-cells are written off
- Blaenau Gwent band H target 3 households → 325 estimated (+107×); Barking and Dagenham band G 4 → 325 (+79×). The cap-10 loss stops paying for them and they sit past the 25 % fence forever.
- Ask: a published-cell size rule (defer cells under a declared household floor, with the floor in the register) in the pattern of the First calibrated rowwise UK local candidate (#495 increment 6) #762 A14 band-H deferral; relates to Make zero-valued calibration targets intentionally nonzero-weighted #104.
8. Register hygiene the battery surfaced
charitable_investment_giftstail-concentration exclusion is stale (the column is under the threshold); remove.atomic_area_basisis a constant column at the pre-export frame; drop at export or sign a degenerate-surface exclusion.- The QRF tail-concentration verdict sits at 0.99947 against a 0.99947 threshold; decide a margin or per-product exclusions rather than hugging the constant.
9. Spine items this build re-confirms (existing issues, no new evidence needed)
#866 savings interest, #867 housing benefit, #868 SLC plan-2 stocks, #869 JSA claimants, #882 UC definitions, #840 SPI-channel composition, #1090 Scottish rent grain, #1112 residence-value ceiling. Exclusion clock from #796: UC housing element 2026-10-15, savings interest 2026-10-22, SLC 2026-11-03.
Out of scope
Selection and refit mechanics: #1124. The incumbent comparison basis (separate). The per-block engine artefact (#1115).
Acceptance
Items 1, 2, 6 and 7 are declared in the feed or the registers before the next local candidate; items 3, 4 and 5 each have a stage change or a signed exclusion with a receipt; item 8 is retired with #1115 or a register PR. The next dense solve on a current spine has no bound local row past 25 % that is not covered by a signed entry.
Activity
Re-pin the US spec digest and the diesel donor factor the engine lane…
Hash every target-deciding module in both UK target kernels; add a ta…
Name the SPI amounts' ITL band index in the contract, as the committe…
Enforce UK cross-grain coverage: nation grain, multi-leg rows, partit…
Reconcile the UK national register across its own grains and bind the…
Declare every UK hold: uprating holds register, local appliers, refus…
Hold the salary-sacrifice income-tax and employee-NIC reliefs on the …
Keep zero-valued targets in the loss on purpose and census them (#104, …
Read a numeric month beside its year as a period in layout values (#1123
Re-pin the UK Chronicle feed to 942a1fa: the 2025 calibration inputs (#…
Add a rolled_forward_by_ratio value operation with period-pinned oper…
Bind HMRC income on a taxpayer basis at both grains and reconcile the…
Control census households by each nation's official estimate; partiti…
Drift England's census tenure shares by SPREE's 2022-2024 share change (
50 remaining items
Re-pin the US spec digest and the diesel donor factor the engine lane…
Merge pull request #1198 from PolicyEngine/uk-target-surface-1123
Retire the UK gate against the 2023 production surface (#1123)
Give the UK compile-parity gates the unresolved references (#1123)
Retire the UK gate against the 2023 production surface (#1123)
Attest the unsupported report and test its full-build path (#1123)
Regenerate the gate digests on main after #1123 (#1164)
Score graph-built candidates from their target selection, on the #1123 …
juaristi22 commentedon Oct 14, 2026
Closing into #1278. Items 1, 2, 6 and 7 landed in #1198; item 3 is on #1207; item 4 is #1262; item 8 is carried by #1242 (the QRF-tail surface and the
atomic_area_basisexclusion) and #1276 (the gate's counting and the charitable-gifts entry). Item 5 (student constituencies) and item 7's micro-cell rule move to #1278; item 9's issues carry their own status.UK local release: nation-grain doctrine at K=15, a 100,000-household …
Track the registers on #1278, which #1123 and #1207 closed into
Point two hold reasons and the SLC exclusions at #1278 (#1278)
Track the registers on #1278, which #1123 and #1207 closed into
Point two hold reasons and the SLC exclusions at #1278 (#1278)