Skip to content

UK local release builds: deferred-cell legs, the savings-interest renewal and the export surface's high-value support columns (#1301) - #1310

Merged
juaristi22 merged 3 commits into
mainfrom
uk-deferred-legs-1301
Oct 19, 2026
Merged

juaristi22 merged 3 commits into
mainfrom
uk-deferred-legs-1301

Conversation

@juaristi22

@juaristi22 juaristi22 commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

The changes the local release builds (#1301) need on top of main 58b0f24. The release builds run from this PR's commits, so merge it with a merge commit, never squash or rebase: the release records the build's commit, and it must stay in main's history (the runbook asks the same of the sign-off PR).

Build 1 ran from d0f0fafec on 18 October. It passed target compilation and uk.full.problem, the solve and the size search, but its calibrated gates blocked it on uk_export_surface, which no sign-off can cover; see 3. The next build runs from the head.

1. Let a leg of deferred cells stand without a control (d8b913d73)

#1307 merged at e119867af, one commit before its fix, 89cc6b9bb, reached the PR, so main does not have it. On main, the build's target compilation (uk.full.target_compilation, that is load_uk_full_target_inputs then compile_uk_full_target_surface) refuses the local surface:

cross-grain inconsistency 'exact:uk.household.count:eae2efd5da4f:region_over_la' has unparented lower-grain leg(s) ['E12000001', 'W92000004']

2. Renew the savings-interest diagnostic exclusion (d0f0fafec)

This is #1308's R0 (0610d6356), unchanged in the register: ons.savings_interest_income stays a measured diagnostic and moves from 2026-10-22 to 2027-01-08 (renewed by juaristi22 on 2026-10-16). It carries the one-line test update #1308's re-review asked for, since test_packaged_exclusions_load pins the entries approved on 2026-10-16.

  • The re-review recommends shipping R0 alone.
  • Without it, every dense sign-off would hit a hard stop on 22 October:
    • the build-2 gate clock range ends there;
    • the assembly deadline (build 2, its verification and the assembly) falls the same day;
    • the national line could not calibrate after it.
  • The register change is solve-changing, so it has to be in build 1's commit for build 2 to reuse build 1's solve.
  • Port the uk-data wave to policyengine-uk 2.134.4: stamp duty, Move to UC, national home values (sixth #1095 PR) #1308 drops the commit when it rebases, because the change is identical.

3. Allow the high-value homes support columns on the export surface (07d6b43e7)

Build 1 failed uk_export_surface on three household columns outside the incumbent surface with no allow-list entry: high_value_support_copies, high_value_support_copy_index and household_is_high_value_support_copy.

  • They are the UK: data fixes to model the High Value Council Tax Surcharge (mansion tax) correctly, and the related housing and council-tax gaps #1240 support split's declared outputs: the release input coverage manifest lists them. The CGT support split's three columns, their exact analog, are already on the list.
  • Place high-value homes where the Land Registry sees them (#1240) #1270 added the stage but not the allow-list entries, so every UK build since then fails this gate, national builds included.
  • The fix adds them to gates.json and UK_ALLOWED_EXTRA_EXPORT_COLUMNS beside the CGT columns. The gate fails only on missing or unexpected columns, so a line without them is unaffected.
  • The full gate battery's policy, gates-manifest and spec digests and the release-cut part's digests are re-pinned. The spine, calibration-seam and dense digests do not move, so build 1's spine stays valid.
  • uk_export_surface has no gate-only register, and gates.json is in the solve fingerprint. So the next build re-solves rather than reusing build 1's solve.

Checks

These ran locally on these commits; CI runs the full suites.

  • Tests. The cross-grain, UK ledger-target and off-surface-cell test files pass. So does every engine-free test file that reads the measure-exclusion register: country spec, sign-off draft, full-build CLI and preparation, full targets, measure simulation, national graph, rowwise national role, solve scope, support floor and UC family.
  • Target compilation. On main plus the fix, against the pinned abf0921 feed, the build's target load and compile pass. deferred_legs_without_control names exactly two legs, E12000001 and W92000004, for contract:microcosm.high_value_homes.over_2m, and nothing else.
  • The export-surface fix. The gate, contract, country-spec, battery-binding, terminal-gate, solve-scope, sign-off draft and source-stage tests pass, and every pinned digest matches the edited gates.json.
  • Problem support. The bound high-value-homes local-authority cells were checked against uk.full.problem's zero-support refusal, which stopped the 16 October dense build on cells the 400-home floor now defers. The check used the public Land Registry value knots and the OA ladder. Every bound cell has a constituency whose value distribution reaches the threshold.

No figure in this PR comes from licensed microdata.

🤖 Generated with Claude Code

juaristi22 and others added 2 commits October 18, 2026 02:09
Signing out the North East and Wales £2m region rows (4850088) left
their local-authority cells, all deferred by the 400-home floor, on legs
with no control. The small-cell rule adds such cells to the
reconciliation frame to take their share of a region control, so the
unparented-leg check then refused the surface:
compile_uk_full_target_surface stopped on the abf0921 feed, and build 1
would have failed at uk.full.target_compilation. Nothing in CI compiles
the full surface on the feed.

The local surface now passes the reconciliation the area rows that bind
nothing (its frame-only rows). A leg on which every open row is one of
them and every target is licensed empty needs no control: it is
receipted under deferred_legs_without_control instead of refused. A
bound row on such a leg, a frame-only row without the licence, and a row
of a target the leg is not licensed for are still orphans, as the
Scottish authority of an England-only target is.

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

The ons.savings_interest_income measure exclusion lapses on 2026-10-22.
After that date no national calibration could run, since the window is
checked when the exclusions are applied, and the dense two-build flow's
gate clock and assembly deadline stop there too. The row stays a measured
diagnostic and is never fitted, as ruling R3 of 2026-09-22 set: the ONS
D.41 row is a national-accounts concept, while the model carries cash
interest, and the SPI interest rows are the fitting anchor. Renewed by
juaristi22 on 2026-10-16 in the sixth #1095 ports PR (#1308), and shipped
here ahead of it, unchanged, so that the first local release build stands
on it; #1308's re-review recommended shipping it alone. The
packaged-exclusions test pins the new window and the renewal note, and
the 2026-10-16 approvals are now the employer NICs diagnostic and this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1301)

The first dense release build (microcosm#1301, attempt 1f0939c4) failed
uk_export_surface on three household columns outside the incumbent surface
with no allow-list entry: high_value_support_copies,
high_value_support_copy_index and household_is_high_value_support_copy.
They are the microcosm#1240 high-value homes support split's declared
outputs (the release input coverage manifest lists them), the exact analog
of the CGT support split's three columns, which the list already carries.
microcosm#1270 added the stage but not the allow-list entries, so every UK
build since then fails the gate at the calibrated battery.

Add them to gates.json and UK_ALLOWED_EXTRA_EXPORT_COLUMNS in the same
place as the CGT split's columns. The gate fails only on missing or
unexpected columns, so a line that does not carry them is unaffected.
Re-pin the full gate battery's policy, gates-manifest and spec digests and
the release-cut part's digests; the spine, calibration-seam and dense
digests do not move, so existing spines stay valid. gates.json is in the
solve fingerprint, so the next dense build re-solves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@juaristi22 juaristi22 changed the title UK local release build 1: let a leg of deferred cells stand without a control, and renew the savings-interest diagnostic (#1301) UK local release builds: deferred-cell legs, the savings-interest renewal and the export surface's high-value support columns (#1301) Oct 18, 2026
@juaristi22
juaristi22 merged commit 69f7a26 into main Oct 19, 2026
10 checks passed
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.

1 participant