Repository navigation
Bind the UC element targets on paid claims and an OBR UC total on the chronicle 474a0ae feed (#882) - #921
Conversation
aea3885 to
fb6b167
Compare
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Review at fb6b1674 (Claude Code, high effort; worktree checkout of the four commits on main 18271b28; without the engine or the pinned feed: 480 passed, 5 skipped, 0 failed across the thirteen touched and neighbouring suites; ruff check . and ruff format --check clean; both census tools, the coverage manifest, the spec-engine coverage check and ci_test_groups --verify current; CI green on all 23 lanes; merge-tree clean against main and #927).
The bindings are clean where they are unambiguous. Every DWP selector matches exactly one series — LCWRA the group package rather than LCWRA - Higher/Lower, Yes rather than the tenures, source_measure_id: benefit_units separating childcare's count from the mean-amount fact — and each resolved value is the twelve-month mean of the chronicle #260 rows to the float (deductions over March–December). The window is the same calendar-2025 basis the ten broad rows already use. All five element variables exist on the engine at benefit-unit entity and uc_deductions is driven by a spine input from #850, not zero by construction. The tenure mapping (council plus housing association → social, private renting → private) is consistent on both sides for the two tenure rows. The OBR row's two-member sum has precedent in the NITHC, Wales and Translink rows, the FY2025-26 → 2025 rule is the shared one, and the 424 untouched references are byte-identical to main with membership moving only by the eight new pins. The childcare all-claims caveat is declared in the binding note and pinned by test. The body table is in docs/uk-uc-baseline-2026-09-10.md with Q50f and D2 pinned, and carer and childcare are labelled as register rows there and in the gate, which passes.
Should-fix
1. The three housing rows are jointly inconsistent by DWP's "Other or unknown" tenure cell. From the same chronicle rows, paid, January–December 2025: social 2,354,588 + private 1,570,545 + other/unknown 112,518 = 4,037,651, which is the any-tenure target to the unit. On the model side uc_housing_costs_element pays only for council, housing-association and private renting and TenureType has no other/unknown value, so the model's any-tenure count is identically social plus private — your own baseline shows it (Q50f 4,006,395 = 2,348,245 + 1,658,150 exactly). Three active rows, two model degrees of freedom, contradictory by 112.5k or 2.8%: the solver has to over-fill the tenure rows to reach the total. The binding note says never to sum the tenure rows into the total, but does not say the model cannot reach the total by construction. Either drop the any-tenure row as redundant, or keep it and declare the structural bias, as a register entry or a note the gate can see.
2. The carer and childcare register entries are not adjudicated to anything a reader can open. adjudication: "uk-uc-gap-plan-2026-09-11 (María's sequencing ruling …)" resolves to nothing in the repo, and María's 2026-09-11 comment on #882 records measurements and sequencing but no ruling that these two stay out of the objective. Every other entry cites microcosm#NNN or a committed receipt. approved_by: juaristi22 and approved_on: 2026-09-11 are pre-filled while the body says the signature is María's to confirm in review, and the author is the approver. The window is 88 days to 2026-12-08 where every other entry runs exact months; it looks borrowed from the #355 tranche's expiry. Point the adjudication at an issue comment or a committed file, and let María's sign-off set the dates.
3. LCWRA is bound active while its own note declares a concept mismatch. The note says the engine's LCWRA flag is the is_disabled_for_benefits input, not a work-capability assessment, and the row fits at +15% to +20%. Carer went on the register for exactly "model concept gap, not a weight question". If magnitude is what decides between fit and register, say so where María can rule on it; the body's own follow-up asks whether the passthrough warrants an engine issue.
Body accuracy
- "Both national compile-parity receipts gain the new rows": the 2023 production receipt gains seven, not eight —
obr.universal_creditdoes not compile at 2023 because the March 2026 EFO reaches back only to FY2024. The 2025 receipt gains all eight. - The deductions note says counts are "rounded to 100,000"; the chronicle package header says only "rounded counts" with the caseload derived at 10,000.
docs/uk-uc-baseline-2026-09-10.md:11pins feedec7169bwhile the paid targets at lines 78–87 come from474a0ae; pin both.- Three #355 commits ride this #882 PR (
--baseline-pi-floor, size evaluation, receipts acrossdataset_size.py,size_evaluation.py,local_rowwise.py,build_uk_rowwise_candidate.py), and the new knob has no changelog fragment because the #355 fragment predates the branch.
Could not verify
The deductions value 3,130,000 (ODS parse), the hermetic regeneration and compile-parity tests (feed-gated; CI is the evidence), and the "provisional March 2026 month" in the OBR note.
Ordering
Merge-tree against #906 conflicts in eight files, all regenerable surfaces and count assertions (432 / 49 / 218 here) with no content dependency, so whichever lands second regenerates and re-bumps. Clean against #927 and current main.
1 is the one to settle before this is used as a fit basis, since the surface asks the solver for something the model cannot produce; 2 is governance and cheap; 3 is María's call.
…f the fit, adjudicate the register entries, state the LCWRA rule Vahid's should-fix 1: DWP's any-tenure housing entitlement is social plus private plus 'Other or unknown' tenure, and the model has no other/unknown tenure, so the any-tenure count is identically the two tenure rows and the published total exceeds what the model can reach by 112,518 (2.8 percent) in calendar 2025. The row now sits on the measure-exclusion register as a structural-bias diagnostic; the two tenure rows carry the housing element. Should-fix 2: the carer, childcare and housing entries cite microcosm#882 and docs/uk-uc-baseline-2026-09-10.md, and are signed by María in review of #921 on 2026-09-15 with a one-month window (expires 2026-10-15). Should-fix 3: the LCWRA binding note states the rule that keeps it in the objective (a concept mismatch goes to the register only when it puts the row outside the 25 percent release bound at the baseline) and defers the passthrough question to Step 3 under #882. Body accuracy: the deductions note says DWP publishes rounded counts rather than a 100,000 grain; the baseline doc pins both feeds (ec7169b for the build, 474a0ae for the element targets); a changelog fragment covers the #355 --baseline-pi-floor knob riding this branch. No generated surface changes (432 active references, receipts byte-identical). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Thanks — round 1 addressed in Should-fix 1 (housing rows). Agreed on the arithmetic: DWP's "Yes" is social + private + "Other or unknown" (112,518 in calendar 2025, 2.8 %), and the model's any-tenure count is identically the two tenure rows because Should-fix 2 (register adjudication and dates). The three entries now cite Should-fix 3 (LCWRA). The rule is now stated in the binding note and in the baseline doc: a concept mismatch goes to the register only when it puts the row outside the 25 % release bound at the baseline; LCWRA at +15 % / +20 % stays in the objective, carer and childcare do not. Whether the Body accuracy. Corrected: the 2023 production receipt gains seven rows (the OBR total does not compile at 2023 because the March 2026 EFO starts at FY2024), the deductions note now says DWP publishes rounded counts, the baseline doc pins both feeds (ec7169b for the build, 474a0ae for the element targets), and Could not verify. The deductions target is the mean of the ten published monthly counts in the 474a0ae feed ( Ordering. Noted on #906: regenerable surfaces and count assertions only, whichever lands second regenerates. |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Closing pass at c088792c (Claude Code, high effort; worktree checkout, the response commit read against the dispositions — five files, 23 lines added, 12 removed; without the engine or the feed: 373 passed, 5 skipped, 0 failed across the nine named suites; ruff check and ruff format --check clean; both census tools, the coverage manifest, the spec-engine coverage check and ci_test_groups --verify current; CI 21 lanes green with the 3.13 wheels lane still running when I posted).
All three should-fixes closed as described, and the body corrections are in.
1. Verified. dwp/uc/elements/housing is on the measure-exclusion register as a structural-bias diagnostic with the mechanism and the 112,518-of-4,037,651 gap in the reason, and the row stays bound and active in the references and membership (432 active, twelve matched facts) so it is measured on every evaluation. The binding note states the model-side identity in the same words, so the contract and the gate agree.
2. Verified. The three entries now cite microcosm#882 and the committed baseline doc, with approved_on: 2026-09-15 and expires_on: 2026-10-15; the unresolvable plan reference is gone. One thing I will say plainly rather than re-raise: the approver login is the author's, and an author cannot post a review on her own PR, so the signature is the commit rather than an independent review record. The adjudication text says María signed in review; if that is the convention, fine, but the register cannot show it.
3. Verified and consistent. The rule — a concept mismatch goes to the register only when it puts the row outside the 25% bound at baseline — is on the LCWRA note and in the baseline doc, and it holds across all six element rows against the table: LCWRA at +15 / +20 in, carer and childcare out, the two tenure rows and deductions in. The any-tenure row is registered under a separate structural-bias class, so no contradiction.
Body. The 2023 receipt is now "seven rows" with the reason, the deductions note says "rounded counts", the baseline doc pins both feeds, and the --baseline-pi-floor fragment exists. No generated surface moved: references, membership, both parity receipts and the uk-data parity register are byte-identical to fb6b1674.
One residual, should-fix before merge. The 2026-09-15 tranche is unasserted. test_uk_measure_simulation.py pins the total at 50 and asserts the 08-26 and 09-03 tranches by name, date, window and tracking, but the three dwp/uc/elements/* entries have no tranche block and no census marker, so a drift in any of their fields passes the test the docstring says exists to catch exactly that. One block in the shape of the A16 one. Nit: the register says 4,037,651 where the baseline table publishes 4,037,650 — rounding of a monthly mean, but the register is the signed record.
Ordering. Clean against main and #927. Against #906 the eight conflicts are the same regenerable surfaces as before plus the register, where both PRs append entries; whichever lands second regenerates and re-bumps.
Approving, with the tranche assertion asked for before merge.
|
Thanks for the closing pass. The residual is in
No generated surface moved; the register-consuming suites pass (108 tests). |
…er and align the any-tenure figure (#921 review round 2) The three dwp/uc/elements/* entries now have a census marker and a tranche block in test_uk_measure_simulation.py in the shape of the A16 one: names, tracking microcosm#882, approver, adjudication citing microcosm#882, the committed baseline doc and microcosm#921, and the 2026-10-15 expiry; the four element rows that stay in the objective are asserted absent. The register and the binding note quote the published any-tenure mean, 4,037,650, which the three tenure cells reproduce to the unit. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…eline-pi-floor, candidate-only and recorded (#355) A boundary row drawn at an inclusion probability of a few in a million starts the compact refit at millions of households; after the baseline is normalised to the pool mass the certainties are left too little to reach the targets under the 10x stretch bound. Q50 (spine-q, 2026-09-10): 24 such rows held 92% of the baseline, the refit ended 24% short of the pool mass at 10.2x the dense loss. Re-refitting the same checkpoint with the probabilities floored at 0.001 or above lands at 1.14x the dense loss with the pool mass intact. The floor applies to the baseline only: the search, the draw and the selected rows are unchanged, so a checkpoint resume may use it. Default 0 keeps today's behaviour; the size receipt records the floor, the rows it trimmed and the certainties' share of the baseline mass, and names the stretch reference normalized_horvitz_thompson_w_over_q_floored.
…-floor refit records (#355)
…RS 1.57.3), Q50's mass-starved refit and its mechanism, the floor experiment, Q50f and D2 (#355)
… chronicle 474a0ae feed (#882) Seven dwp_universal_credit rows (LCWRA, carer, housing any/social/private tenure, childcare, deductions) bind the chronicle#260 Payment Indicator crosses on the calendar-2025 paid-claim basis of the ten broad rows; obr.universal_credit sums the two OBR welfare-cap cells (expected_member_count 2). Three rows are measured but held out of the objective on the reviewed exclusion register: carer and childcare as model concept gaps (-45 % / +155 % against the bound targets at the 10 September baseline) and the any-tenure housing row as a structural bias (DWP's 'Yes' includes an other/unknown tenure the model cannot carry: 112,518 of 4,037,650 in calendar 2025). LCWRA stays in the objective by the stated rule: a concept mismatch goes to the register only when it puts the row outside the 25 percent release bound at the baseline. The entries cite microcosm#882 and docs/uk-uc-baseline-2026-09-10.md, signed in review of #921 on 2026-09-15 with a one-month window, and the register test asserts the tranche. Rebuilt on main after #904 and #906: the feed is the one #904 pinned for both grains (chronicle 474a0ae, chronicle#263 labels over the #260 packages), the region tier from #906 is untouched, and nothing here binds a sub-national row. National references and membership regenerate with main's schema-8 generator: 595 -> 603 active, 7 deferred, 7 signed out; no existing reference changes. Both national compile-parity receipts gain the new rows as ledger-only entries (eight at 2025, seven at 2023: the OBR total does not compile at 2023) and nothing else moves; the vendored fact resources check clean. Also: docs/uk-uc-baseline-2026-09-10.md records the Q50f/D2 UC readout, both feed pins, the compile-time targets and the element sizing from the new tools/diagnose_uk_uc_elements.py; a changelog fragment covers the #355 --baseline-pi-floor knob riding this branch. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2afa286 to
ecfefee
Compare
|
Rebuilt on main after #906 merged (head
|
…in evidence (#882) Paid-UC carer-element units rise 51 percent at design weights on the repaired twin (Q50f projection -17 percent of the calendar-2025 target) and the childcare take-up draw reaches the element (projection -24 percent), both inside the 25 percent bound the #921 rule sets for activation. The rows leave the reviewed exclusion register; their binding notes record the repairs and the realization caveat; the any-tenure housing row stays held out. Register 69 -> 67. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…in evidence (#882) Paid-UC carer-element units rise 51 percent at design weights on the repaired twin (Q50f projection -17 percent of the calendar-2025 target) and the childcare take-up draw reaches the element (projection -24 percent), both inside the 25 percent bound the #921 rule sets for activation. The rows leave the reviewed exclusion register; their binding notes record the repairs and the realization caveat; the any-tenure housing row stays held out. Register 69 -> 67. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e the A16 evidence The 2026-09-21 retirement of dwp.uc.households_housing_element read the v20 measurement (-2.8 % unbound) as noise inside the fence. It is the structural other/unknown-tenure gap the entry records (112,518 of 4,037,650, 2.79 %), which the engine's housing element cannot pay, so retiring it would put a known unreachable total back into the objective and lose the only record of why (review finding). The entry is restored verbatim with the measurement added to its reason; María's #921 reading of 2026-09-15 stands to its 2026-10-15 expiry. Register 61 -> 62 and the 2026-09-15 tranche assertions return. The retirement evidence moves into the tree: docs/evidence/uk-a16-v20/ carries the A16 rows measured on the v20 candidate (receipts.json with the candidate's digest, the output, a non-runnable copy of the script from the private evaluation stack). The input-mass exclusion changelog now records the measured numbers (charitable_investment_gifts -99.0 %, owned_land -73.5 %) and why neither signed reason is confirmed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e the A16 evidence The 2026-09-21 retirement of dwp.uc.households_housing_element read the v20 measurement (-2.8 % unbound) as noise inside the fence. It is the structural other/unknown-tenure gap the entry records (112,518 of 4,037,650, 2.79 %), which the engine's housing element cannot pay, so retiring it would put a known unreachable total back into the objective and lose the only record of why (review finding). The entry is restored verbatim with the measurement added to its reason; María's #921 reading of 2026-09-15 stands to its 2026-10-15 expiry. Register 61 -> 62 and the 2026-09-15 tranche assertions return. The retirement evidence moves into the tree: docs/evidence/uk-a16-v20/ carries the A16 rows measured on the v20 candidate (receipts.json with the candidate's digest, the output, a non-runnable copy of the script from the private evaluation stack). The input-mass exclusion changelog now records the measured numbers (charitable_investment_gifts -99.0 %, owned_land -73.5 %) and why neither signed reason is confirmed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on, targets, calibration, terminal, driver The graph full build from #901 now lives on main's code: uk_runtime/graph_build (the one-graph composition over the bound spine checkpoint), graph_population (sample, normalize, K-clone expansion, ladder locations, geography mapping and gate), graph_targets (target compilation, selection, measures, the joint problem), graph_calibration (dense reference solve, size search and draw, refit, holdout), graph_terminal (export, diagnostics, candidate and certification receipts), the full_* kernels, the country adapter that validates the UK source projection, the driver full_build_cli with tools/build_uk_full.py and the microcosm-build-uk script. Nothing of main's is removed: the seam engine, the release-role driver and every tool body stay; the graph build sits beside them with dense defaults and no release role yet (that is the next commit). Main's newer API is honoured inside the new modules rather than shimmed: the chronicle feed loader and pin (#904), area_region_codes on the local target surface (#906), baseline_pi_floor threaded as a node parameter of the size-refit and holdout nodes (#921), local_authority on the ladder columns, the geography gate's engine-domain check and the export (#971), the region-level SPI contract in fixtures (#934). The co-modified modules take #901's additions only: the strict spine-checkpoint helpers in calibration_run, the draw/derive split in geography_ladder, the geographic pool in rowwise_dataset, the prepare/solve/finish split in local_rowwise with #921 and #946 re-threaded, the size draw in dataset_size, the checkpoint loader in size_checkpoint, and eager exports for the 14 new names. UK spec: the spine's sources are declared as the 14 FRS 2024-25 raw tables with the build_uk_frs_spine contract-only kernel (added to the F0 allow-list beside the retained load_uk_national_frame), target period 2025 = the release's calibration year; the resolved UK spec digest moves (main pins none). Packaging: microcosm-data in the uk extra, the build script, uv.lock relocked, APPROVED_UV_LOCK_SHA256 recomputed, pytest pythonpath for sibling-test imports. Flagged for review: _normalise_uk_local_bound_families no longer refuses an empty declaration (the country-only scope passes none); the driver refuses every existing acceptance spine at the strict checkpoint gate because this branch's gate declarations moved, so a licensed full build needs a spine built by this branch. Verified: targeted 367 + spot-check 203 passed; whole uk group 2,599 passed / 20 skipped; worker-identity lock test 24 passed; ci_test_groups --verify ok; ruff clean. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on, targets, calibration, terminal, driver The graph full build from #901 now lives on main's code: uk_runtime/graph_build (the one-graph composition over the bound spine checkpoint), graph_population (sample, normalize, K-clone expansion, ladder locations, geography mapping and gate), graph_targets (target compilation, selection, measures, the joint problem), graph_calibration (dense reference solve, size search and draw, refit, holdout), graph_terminal (export, diagnostics, candidate and certification receipts), the full_* kernels, the country adapter that validates the UK source projection, the driver full_build_cli with tools/build_uk_full.py and the microcosm-build-uk script. Nothing of main's is removed: the seam engine, the release-role driver and every tool body stay; the graph build sits beside them with dense defaults and no release role yet (that is the next commit). Main's newer API is honoured inside the new modules rather than shimmed: the chronicle feed loader and pin (#904), area_region_codes on the local target surface (#906), baseline_pi_floor threaded as a node parameter of the size-refit and holdout nodes (#921), local_authority on the ladder columns, the geography gate's engine-domain check and the export (#971), the region-level SPI contract in fixtures (#934). The co-modified modules take #901's additions only: the strict spine-checkpoint helpers in calibration_run, the draw/derive split in geography_ladder, the geographic pool in rowwise_dataset, the prepare/solve/finish split in local_rowwise with #921 and #946 re-threaded, the size draw in dataset_size, the checkpoint loader in size_checkpoint, and eager exports for the 14 new names. UK spec: the spine's sources are declared as the 14 FRS 2024-25 raw tables with the build_uk_frs_spine contract-only kernel (added to the F0 allow-list beside the retained load_uk_national_frame), target period 2025 = the release's calibration year; the resolved UK spec digest moves (main pins none). Packaging: microcosm-data in the uk extra, the build script, uv.lock relocked, APPROVED_UV_LOCK_SHA256 recomputed, pytest pythonpath for sibling-test imports. Flagged for review: _normalise_uk_local_bound_families no longer refuses an empty declaration (the country-only scope passes none); the driver refuses every existing acceptance spine at the strict checkpoint gate because this branch's gate declarations moved, so a licensed full build needs a spine built by this branch. Verified: targeted 367 + spot-check 203 passed; whole uk group 2,599 passed / 20 skipped; worker-identity lock test 24 passed; ci_test_groups --verify ok; ruff clean. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on, targets, calibration, terminal, driver The graph full build from #901 now lives on main's code: uk_runtime/graph_build (the one-graph composition over the bound spine checkpoint), graph_population (sample, normalize, K-clone expansion, ladder locations, geography mapping and gate), graph_targets (target compilation, selection, measures, the joint problem), graph_calibration (dense reference solve, size search and draw, refit, holdout), graph_terminal (export, diagnostics, candidate and certification receipts), the full_* kernels, the country adapter that validates the UK source projection, the driver full_build_cli with tools/build_uk_full.py and the microcosm-build-uk script. Nothing of main's is removed: the seam engine, the release-role driver and every tool body stay; the graph build sits beside them with dense defaults and no release role yet (that is the next commit). Main's newer API is honoured inside the new modules rather than shimmed: the chronicle feed loader and pin (#904), area_region_codes on the local target surface (#906), baseline_pi_floor threaded as a node parameter of the size-refit and holdout nodes (#921), local_authority on the ladder columns, the geography gate's engine-domain check and the export (#971), the region-level SPI contract in fixtures (#934). The co-modified modules take #901's additions only: the strict spine-checkpoint helpers in calibration_run, the draw/derive split in geography_ladder, the geographic pool in rowwise_dataset, the prepare/solve/finish split in local_rowwise with #921 and #946 re-threaded, the size draw in dataset_size, the checkpoint loader in size_checkpoint, and eager exports for the 14 new names. UK spec: the spine's sources are declared as the 14 FRS 2024-25 raw tables with the build_uk_frs_spine contract-only kernel (added to the F0 allow-list beside the retained load_uk_national_frame), target period 2025 = the release's calibration year; the resolved UK spec digest moves (main pins none). Packaging: microcosm-data in the uk extra, the build script, uv.lock relocked, APPROVED_UV_LOCK_SHA256 recomputed, pytest pythonpath for sibling-test imports. Flagged for review: _normalise_uk_local_bound_families no longer refuses an empty declaration (the country-only scope passes none); the driver refuses every existing acceptance spine at the strict checkpoint gate because this branch's gate declarations moved, so a licensed full build needs a spine built by this branch. Verified: targeted 367 + spot-check 203 passed; whole uk group 2,599 passed / 20 skipped; worker-identity lock test 24 passed; ci_test_groups --verify ok; ruff clean. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on, targets, calibration, terminal, driver The graph full build from #901 now lives on main's code: uk_runtime/graph_build (the one-graph composition over the bound spine checkpoint), graph_population (sample, normalize, K-clone expansion, ladder locations, geography mapping and gate), graph_targets (target compilation, selection, measures, the joint problem), graph_calibration (dense reference solve, size search and draw, refit, holdout), graph_terminal (export, diagnostics, candidate and certification receipts), the full_* kernels, the country adapter that validates the UK source projection, the driver full_build_cli with tools/build_uk_full.py and the microcosm-build-uk script. Nothing of main's is removed: the seam engine, the release-role driver and every tool body stay; the graph build sits beside them with dense defaults and no release role yet (that is the next commit). Main's newer API is honoured inside the new modules rather than shimmed: the chronicle feed loader and pin (#904), area_region_codes on the local target surface (#906), baseline_pi_floor threaded as a node parameter of the size-refit and holdout nodes (#921), local_authority on the ladder columns, the geography gate's engine-domain check and the export (#971), the region-level SPI contract in fixtures (#934). The co-modified modules take #901's additions only: the strict spine-checkpoint helpers in calibration_run, the draw/derive split in geography_ladder, the geographic pool in rowwise_dataset, the prepare/solve/finish split in local_rowwise with #921 and #946 re-threaded, the size draw in dataset_size, the checkpoint loader in size_checkpoint, and eager exports for the 14 new names. UK spec: the spine's sources are declared as the 14 FRS 2024-25 raw tables with the build_uk_frs_spine contract-only kernel (added to the F0 allow-list beside the retained load_uk_national_frame), target period 2025 = the release's calibration year; the resolved UK spec digest moves (main pins none). Packaging: microcosm-data in the uk extra, the build script, uv.lock relocked, APPROVED_UV_LOCK_SHA256 recomputed, pytest pythonpath for sibling-test imports. Flagged for review: _normalise_uk_local_bound_families no longer refuses an empty declaration (the country-only scope passes none); the driver refuses every existing acceptance spine at the strict checkpoint gate because this branch's gate declarations moved, so a licensed full build needs a spine built by this branch. Verified: targeted 367 + spot-check 203 passed; whole uk group 2,599 passed / 20 skipped; worker-identity lock test 24 passed; ci_test_groups --verify ok; ruff clean. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Step 2 of the revised UC gap plan (#882, sequencing ruled 2026-09-11): bind the DWP Universal Credit element counts on paid claims now that chronicle#260 carries the Payment Indicator crosses and chronicle#263 carries the dimension labels main's schema-8 hierarchy needs. Rebuilt on main after #904 and #906 merged, so it rides #904's single
474a0aepin for both grains and leaves #906's region tier untouched; national scope only. The local grain stays where main left it (chronicle#266 / #920) and can be regenerated on this branch if #266 lands first.What lands
dwp_universal_creditrows on the calendar-2025 paid-claim basis of the ten broad rows (monthly_window_average,payment_indicator: Yes, GB): LCWRA (publisher group valueLCWRA, both rates), carer, housing any tenure, housing social rented and private rented (viabenunit_tenure_type), childcare (the ODS all-claims count, caveat declared), deductions (March–December 2025, the published history). Model side:universal_credit > 0and the element> 0.obr.universal_credit: the sum of the two OBR welfare-cap cells (expected_member_count: 2, FY2025/26, UK) against the model's total award. The in/outside-cap split stays excluded; the model cannot attribute spend to the welfare-cap concept.is_disabled_for_benefitspassthrough warrants an engine change is a Step 3 question.474a0ae, 141,400 facts): national references and membership 595 → 603 active, 7 deferred, 7 signed out, no existing reference changes; the 2025 compile-parity receipt gains the eight rows and the 2023 production receipt seven (the OBR total does not compile at 2023, the March 2026 EFO starts at FY2024), nothing else moves; the vendored fact resources check clean. No feed re-pin in this PR.--baseline-pi-floorcommits from the 10 September rebuild (the Q50f baseline was built with them;changelog.d/355-baseline-pi-floor.added.mdcovers the knob),docs/uk-uc-baseline-2026-09-10.md(the Q50f/D2 UC readout recorded on Align UK UC claim, child and period definitions #882, both feed pins, the compile-time targets, the element sizing) andtools/diagnose_uk_uc_elements.py, which sizes element support conditioned on paid awards.Measured at the baseline
Calendar-2025 paid targets against Q50f / D2 at their calibrated weights:
The carer gap is the engine's carer condition (Carer's Allowance receipt) against DWP's 35-hours-a-week concept, with the engine's
care_hoursinput never filled by the spine; the childcare gap is an element paid to every working family with reported childcare costs and no take-up lever. Both repairs are Step 3 of the plan.Verification
CHRONICLE_UK_FACTS), atfb6b1674(pre-UK region-grain activation: fan out the 18 two-level targets over the region tier and make region a cross-grain control (#905) #906): 2,098 passed, 22 skipped, 1 failed —test_committed_surfaces_regenerate_from_pinned_feed[local], the UK local target surface cannot compile since #855: sub-national geographies have no hierarchy label (needs chronicle geography.name) #920 local-generator refusal (LedgerHierarchyMetadataError, nogeography.name) that fails identically on main and skips in CI. The national hermetic regeneration and compile-parity tests pass. Round 1 (c088792c) and round 2 changed no generated surface; after the rebuild on UK region-grain activation: fan out the 18 two-level targets over the region tier and make region a cross-grain control (#905) #906 the twelve touched and neighbouring suites re-run green with the pinned feed (result in the rebase comment).ruff check .clean; CI green on all 23 checks atfb6b1674,c088792cand2afa2869; re-running on the rebuilt head.Review
Approved by Vahid at
c088792c(2026-09-15); the pre-merge should-fix (the register tranche assertion) landed in2afa2869. Rebuilt on main after #906 merged; the diff is the same content on the new base. Round 1 addressed inc088792c: the any-tenure housing row moved to the register as a structural-bias diagnostic, the three register entries adjudicated to #882 and the committed baseline doc and signed by María with a one-month window, the LCWRA fit-versus-register rule stated, and the body corrections above (2023 receipt count, deductions rounding, both feed pins, the #355 fragment).Follow-ups
🤖 Generated with Claude Code