Skip to content

Build J re-certification: eCPS parity −5, coverage +5 required, 24-cell zero-support + run scaffolding#389

Merged
MaxGhenis merged 18 commits into
mainfrom
build-j-recert
Jul 10, 2026
Merged

Build J re-certification: eCPS parity −5, coverage +5 required, 24-cell zero-support + run scaffolding#389
MaxGhenis merged 18 commits into
mainfrom
build-j-recert

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Lands the register edits and run scaffolding produced during the Build J re-certification of the sparse 57k default (populace#368). The certified artifact — populace-us-2024-buildj-sparse-rmloss100-75d5add-20260710T094201Z — passed every gate with the SSI reform-coverage smoke green at +$5,153,370,118; full verdict and cache-key in populace#368 (verdict comment).

This PR is the register/scaffolding side of that run. It does not rebuild or publish anything; publication and the default flip are handled separately.

What lands here

The four-register night

Build J was the first release-scale run of most of this week's merges, and four anti-rot registers failed closed in sequence — one root cause (the week's coverage growth), four catches. Two land in this PR; the other two landed separately:

  1. Materialize Medicaid take-up via anchored count-calibration to CMS state snapshots #334 Medicaid take-up — RI had no CMS December-2024 enrollment target (a genuine source hole; filed Medicaid take-up gate fails closed on Rhode Island: CMS December 2024 state snapshot unreported at source (blocks Build J) #386). Fixed by the reviewed CMS substitution register in Reviewed CMS Medicaid enrollment substitution register for the take-up gate (#386) #387 (RI anchored at the ledger-verified November 2024 count 273,400), already on main.
  2. Fail the eCPS parity gate on stale exemptions; remove six rotted entries #337 eCPS parity — five rotted exemptions removed (this PR).
  3. Zero-support — five TANF state cells lost support under live take-up seeding (this PR's 24-cell list).
  4. Full eCPS input-column coverage as a HARD release gate + reform-coverage smoke (#368 Deliverable 1) #369 input-coverage — the coverage manifest still excluded the same five columns; regenerated (this PR).

A one-pass sweep of every remaining register (degenerate, documented-absent, take-up contract, substitutions, probes) found no other entry carrying the five columns or the pre-#384 TANF assumptions.

Verification

  • Register-consistency tests green locally: test_release_input_coverage.py, test_us_parity_reference.py, test_validation_input_coverage.py, test_gates.py, test_us_source_coverage.py, and the populace-data release/contract suites. The coverage manifest matches a fresh regeneration (assert_release_input_coverage_manifest_current).
  • ruff check . clean.

Refs populace#368; the run also touches #337 / #369 / #384 / #386 / #387 as above.

🤖 Generated with Claude Code

claude and others added 18 commits July 9, 2026 21:48
…#368)

Setup on origin/main 561c198 (all of #369/#373/#384/#385 + SNAP train). Findings:
F1 base pool unchanged (assets/SNAP are release-time source stages, not base-builder
changes) -> base sha expected 18833fb6; F2 target registry byte-identical to Build H
(v8 facts reusable, 5533/5514 surface = clean Build I comparison); F3 SSI probe ref
+$9.66B SCF-only overlay, re-solved rebuild should land lower.

Runtime scripts snapshot for durability; live copies in _buildj-runtime (absolute paths).
STAGING/LOCAL ONLY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
All arm launchers verified against origin/main APIs: release-tool internals
(_load_frame, _read_target_frame_checkpoint, compile_us_fiscal_target_registry,
load_ledger_consumer_artifact, calibrate) signatures match the Build H direct-solve
call exactly; base_selection_mask(frozen_support) is the built-in >0-miss STOP.
Dense/sparse add --scf-summary-extract (sha-pinned rscfp2022.dta) + fresh checkpoint
roots; NO killing watchdogs (pressure-sample only). STAGING/LOCAL ONLY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…on arms (#368)

reform-VALIDATION tail (optional, post-H5, not a gate) skipped to avoid the
pre-existing selection-agnostic MD-UNKNOWN crash (populace#367 / policyengine-us#8975,
unfixed on pinned pe-us 1.764.6); reform-COVERAGE smoke GATE stays ON (separate flag).
Recorded PERIOD=2024 for the SSI probe, the #384 register-consistency preflight, TANF
exclusion removal, and per-gate verdict-data file locations. STAGING/LOCAL ONLY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… 18833fb6) (#368)

Base DATA identical to Build F (summary byte-identical except self-sha+path;
base_household_weight_total 134690323.34024483 exact; builder 0-diff build-f vs main).
h5 sha 0b50660a != 18833fb6 = HDF5 serialization non-determinism, benign (all arms read
sha dynamically; Build I comparison stays like-for-like; rmloss100 join keys on data cols).
F1 corrected. STAGING/LOCAL ONLY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
rmloss100 (152baca3) joins onto base-j with n_unmapped=0 n_ambiguous=0 — confirms F1
(base data identical, identity cols preserved). Sparse arm runs first (certification +
SSI probe) then dense diagnostic; independent + serialized. STAGING/LOCAL ONLY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y-benign) (#368)

Sparse release running detached (rmloss100 dense-polish, scf_wealth ON, all gates,
no bypass): past ACA + into Medicaid eligibility materialization on the reduced 57k,
RSS ~15GB, free% 85 — no jetsam risk. Extractor reads calibration_diagnostics/
input_mass_parity/reform_coverage_smoke/input_coverage for the #368 table.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…2412 unreported at source) (#368)

First release-scale run of #334: RI's December 2024 CMS snapshot is footnoted 0
('Unable to Provide Data due to System Limitations') in the pinned PI dataset —
ledger package + v8 feed faithful; registry compiles 50/51 state medicaid targets
(FIPS 44 absent); gate unconditionally hard, runs pre-calibration in both arms.
scf_wealth signal gate PASSED before the block (assets flow). STOP per protocol —
no synthesis; filed populace#386 with the option space. Registry re-verified
d71c59514e3a/5533 (F2 double-confirmed under #334).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ce hole) (#368)

Report: #368 (comment)
Finding issue: #386
Verdict: NOT CERTIFIABLE this run — blocked at the #334 gate pending the #386
decision; not an artifact-quality failure. Asset stage (#373) confirmed working
at release scale en route. Resume is mechanical post-decision.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… RI->2024-11) into build-j-recert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… relaunch sparse (#368)

Registry grows 5533->5534 (injected RI spec 273,400, issue-linked #386, cannot-rot);
Build I comparison caveat: like-for-like plus the substituted RI target. Run
populace-us-2024-buildj-sparse-rmloss100-a7ad0c8-20260710T053754Z detached.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e layers now (#368)

The #337 staleness check caught these on Build J's first full-release pass —
coverage growth digesting into the debt ledger, verified per-layer on the actual
rmloss100 57,240 candidate frame with the gate's own us_nonzero_shares:

  block_geoid / tract_geoid / county_fips: candidate 1.0 == reference 1.0
    (the #277/#289 geography-ladder spine, carried by the base pool)
  spm_unit_pre_subsidy_childcare_expenses: candidate 0.0755 vs reference 0.1022
    (raw CPS childcare signal now carried; depth still tracked in #32)
  health_savings_account_ald: candidate 0.00936 vs reference 0.0962
    (populated but thin, ~10% of the incumbent share; depth tracked in #32)

All five are genuine population (not spurious writes), so removal is the
mechanism's prescribed path: parity now checks them as ordinary layers
(reference-populated -> candidate-populated = pass). The register shrinks
93 -> 88 entries. Parity register tests green (13 passed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…relaunched (#368)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…der live take-up seeding (#368)

Third register digesting the week's coverage growth (coordinator-confirmed same
root cause, not systemic): #384 made TANF take-up seeding live (13,205/59,900
spm_units True vs the old constant-True), and fl/ia/mo/ne/nj lose their few
sparse-selection TANF carriers under the seeded draw. Verified on the
identity-matched buildj-sparse checkpoint (registry 2496460ad8c3, 5,515 specs):
exactly those five cells at 0 nonzero records; all other states 1-14 (national
156); AL = the pre-existing Build-I exclusion. New 24-cell exclusion list
(19 Build-I verbatim + 5 TANF, measured justifications, sha 0be0c200); sparse
now compiles 5,533-24+1 = 5,510 specs (Build I: 5,514). Selection-side remedy
tracked as #346/#355-class work.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nifest (#368)

Fourth stale-register catch, same root cause as the previous three (coverage
growth digesting): the #369 input-coverage gate flagged its reviewed exclusions
for the identical five columns from the parity catch. Regenerated via
tools/build_us_release_input_coverage_manifest.py (derives from the fixed
parity register): exactly five reviewed_exclusion -> required promotions
(65->70 required / 93->88 exclusions, total 158, SSI probe intact), nothing else.

ONE-PASS REGISTER SWEEP (to end the serial discovery): grepped every register
for the five columns + takes_up_tanf-era assumptions — parity known-gaps (fixed),
coverage manifest (fixed here), US_DEGENERATE_INPUT_REVIEWED_EXCLUSIONS (clean),
US_DOCUMENTED_ABSENT_INPUTS (clean), take-up contract (#384-aligned, declares
TANF treatment), zero-support (Build-J 24-cell, passed in-run), medicaid
substitutions (RI applied), pinned parity reference + source_stages (correct
non-register mentions). takes_up_tanf_if_eligible already 'required'.
test_release_input_coverage 14 passed (incl. manifest==regeneration);
the release's exact #384 register-consistency preflight passes with the
promotions (no signal-side/excused-side collision).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… logged (#368)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SSI probe +$5,153,370,118 @2024 GREEN (below the +$9.66B overlay, above the
~$1.60B dense-native class; SIPP blend #374 open). final_loss 0.030843 /
within-10% 0.8900 (beats Build I) / export-mass 0/35 / zero-support 0 /
release_gates True. Registry 091ace02f962 (5,510 = 5,533-24+1). H5 sha
9d1e460ddbc4…; manifest 3d292c2231d9…. Verdict:
#368 (comment)
Dense diagnostic arm materializing (D2 direct-solve script updated for the
5,534-spec dense registry). STAGING/LOCAL ONLY — publication is Max's call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ment)

CI runs `ruff check .`; the staged run scaffolding tripped F401 (unused
`os` in detach.py) and F841 (unused `pg` in extract_gates_buildj.py).
Remove both — no behavior change. (#368)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test_no_incumbent_data_package_references_in_live_tree flagged the Build J
base-rebuild summary (experiments/build_j_recert/base_j.summary.json), which
records the incumbent us-data checkout in local-path provenance. experiments/
is run scaffolding / staged run outputs, not shipped source (nothing there is
packaged under packages/), so it belongs in the same non-shipped class as the
already-skipped `out` tree — the shipped tree under packages/ is still swept.
Extends the populace#363 precedent (.claude worktrees skipped). No gate on
shipped-source purity is relaxed. (#368)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis merged commit 64a373e into main Jul 10, 2026
4 checks passed
MaxGhenis added a commit that referenced this pull request Jul 10, 2026
…rrent (#392)

* Decouple the live latest-pointer loader test from which release is current

Main has been red since #389: the Build J re-certification moved the
Hub's latest.json from Build I to Build J, and
test_existing_certified_release_metadata_resolves_through_latest_pointer
pinned the Build I release id and artifact digest. The loader is
follow-the-pointer by design (there is no API to request a specific
release id), so this was a stale pin of live remote state, not a
resolution bug — and any pin here reds main again on the next re-cert.

- Rewrite the live test as release-agnostic structural checks: the
  currently published chain must resolve coherently (id prefix, repo,
  filename, revision pinned to the release id, sha shape, engine
  certification) without asserting which release is current.
- Pin exact release-metadata equalities against the FakeHubDownload
  fixture instead, where the suite controls the pointer.
- Add a fixture test for the re-certification semantics themselves:
  publishing a successor moves the pointer and resolution follows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Tighten the live release-id shape check to the registry year

Assert populace-{country}-{spec.year}-* rather than just the country
prefix, and note in the docstring that release-identity pinning belongs
to policyengine.py's certification fixtures (updated atomically with
each certification PR), not to this repo's live tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants