Build J re-certification: eCPS parity −5, coverage +5 required, 24-cell zero-support + run scaffolding#389
Merged
Merged
Conversation
…#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>
This was referenced Jul 10, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
ecps_parity_known_gaps.json): remove five stale exemptions —block_geoid,tract_geoid,county_fips,spm_unit_pre_subsidy_childcare_expenses,health_savings_account_ald. The candidate now populates these layers (the Carry the block-anchored US geography ladder as spine columns #277/Carry the geography ladder by default; gate releases on it #289 geography ladder + the restored SPM/HSA surface), so the exemptions rotted; Fail the eCPS parity gate on stale exemptions; remove six rotted entries #337's parity gate fails closed on stale entries, which is how they were caught.release_input_coverage_manifest.json): regenerated withtools/build_us_release_input_coverage_manifest.py; the diff is exactly the same fivereviewed_exclusion→requiredpromotions (counts 65 → 70 required / 93 → 88 reviewed_exclusion, total 158 unchanged). The three SSI countable-resource assets stayrequiredwith no exclusion, per Build J: full eCPS-exported-column coverage as a HARD release gate + asset-column restoration (SSI reforms score $0) #368's red-by-design guarantee.experiments/build_j_recert/sparse_zero_support_exclusions_buildj.json): Build I's 19 (1 AL TANF + 18 under-$1 state-AGI taxable-interest tail cells) plus 5 new Build J TANF cells (fl/ia/mo/ne/njbasic assistance). The five are new because Remove the stale TANF degenerate-exclusion (P0) + cross-register and take-up preflights #384 made TANF take-up seeding live (13,205/59,900 spm_units True vs the old constant-True); each is verified at 0 nonzero records on the identity-matched staged frame while every other state carries 1–14. Per-artifact support-expressibility exclusions; the dense 337,704 parent expresses these cells. Selection-side remedy is Informed-init L0 selection: warm-start reselection for pool changes (ACS/ASEC ingest forcing function) #346/UK small national default: L0-selected ~50k-household file from the 535k pool #355-class work.experiments/build_j_recert/,PROGRESS_BUILDJ.md): staged launchers, the selection carry-over verifier, the gate/verdict extractors, and the working log.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:
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
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