Skip to content

UK release input-coverage contract: 145-required gate, effective-mass semantics, and the real-donor HMRC replay - #420

Merged
MaxGhenis merged 26 commits into
mainfrom
builduk-coverage-contract
Jul 13, 2026
Merged

UK release input-coverage contract: 145-required gate, effective-mass semantics, and the real-donor HMRC replay#420
MaxGhenis merged 26 commits into
mainfrom
builduk-coverage-contract

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

What this is

The UK arm of the coverage-contract program: every input column the UK national build exports is now under an enforced release contract — present with weighted signal, or carrying an evidence-backed reviewed exclusion — plus the first real-donor HMRC replay of the SPI channel, run under the UKDS-licensed 2022–23 donor.

The contract

  • 145 required columns / 0 reviewed exclusions (final state after the two charitable columns' exclusions went stale — the weighted-support wiring gave gift_aid and charitable_investment_gifts real signal above the 1 ppm floor, so the gate itself demanded their promotion to hard requirements).
  • Effective-mass semantics: coverage is weighted support (1 ppm person-mass floor), not raw nonzero counts — a column carried only by zero-weight rows is not covered. Per-column and per-family effective-mass diagnostics ship in the gate report.
  • Fail-closed everywhere: degenerate-required, wrong-entity, dormant/stale-exclusion, and missing-column classes each fail the gate with named columns.

The real-donor HMRC replay (adjudicated, fenced)

Run against the licensed SPI donor (identity re-verified: sha256 5ef82946…, 141,323,762 bytes — never committed, held out via git exclude; only aggregate artifacts are tracked) and the pinned HMRC ODS (ad063b06…):

  • SPI-side machinery is exact: deterministic TEI + TII = TI holds for all 432,779 donor predictions; the ODS parse contract passes against the real sheets.
  • All 208 published-table facts ship as evidence-fenced exclusions — zero exact, zero directional. The FRS instrument cannot express five of the ten SPI employment-measure constituents (taxable benefits-in-kind, deductible employment expenses, taxable termination pay, both miscellaneous legs — collected as receipt flags or gross amounts, not taxable monetary measures), and two more only partially (per-constituent evidence table in UK_COVERAGE_PROGRESS.md). Because the missing legs include a subtraction (expenses), omission bias is not one-directional, so no directional facts survive either. HMRC's distribution tables cannot oracle FRS-based microdata like-for-like; the report says so per fact instead of shipping biased comparisons.
  • Wired where source-faithful: PAY, JSA/IS legs, the structurally-expressible incapacity leg; OSSBEN and SRP as explicitly-named subsets (ossben_identifiable_subset, srp_regular_code5), never presented as the full SPI concepts.

Staging build

populace_uk_2023_hmrc_staging.h5 builds through the seam with the gate green; the committed national_staging_build_record.json pins every input artifact by sha256 (FRS tables, HMRC surface = the pinned ODS, replay report). No row-level donor data in any tracked path.

Verification

63 UK/HMRC tests pass; ruff (CI version) clean; manifest-regeneration check green; gate report committed at 145/0 passing.

Conductor adjudications recorded in UK_COVERAGE_PROGRESS.md: the Q1 deterministic-TI rule, the Q2 identical-crosswalk rule and its two fail-closed stops, per-constituent verdicts, and the exclusion promotions.

🤖 Generated with Claude Code

MaxGhenis and others added 26 commits July 11, 2026 06:59
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CI lacks policyengine-uk and (in the wheels job) pytables: the new HMRC
calibration/SPI tests now importorskip per the incumbent pattern. The
HMRC source contract module names the archived data repository only as
reviewed provenance for the licensed input identities, so it joins the
frozen-incumbent allowlist; uk_runtime/ scratch is excluded from the
reference sweep as non-shipped run scaffolding, same class as out/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit e726abd into main Jul 13, 2026
4 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