Reconstruct informed-L0 / warm-start selection as committed machinery (#328)#330
Merged
Conversation
Forensics (docs/informed-l0-warm-start-forensics.md): the certified default's frozen 57,240-record support is recoverable from the published H5's stable source identity (source_year, source_household_id, support_channel, clone_index) and joins 100% cleanly onto the Build F rebuilt base (57,240/57,240, 0 unmapped, 0 ambiguous). The selected base rows are scattered, so the existing positional warm-start seams cannot recover the support across a rebuild — identity join is mandatory. Design (docs/informed-l0-warm-start-design.md): a spec/CLI-declared selection source (source H5 or committed identity manifest) + whitelisted join key, frozen-support reduction before target materialization, manifest provenance, and a refusal contract forbidding fabricated selections. Frozen-support mode first (join is exact today); informed-init mode specified for a future drifting base. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New us_runtime module (spec-only build/us tree untouched) recovers a frozen support onto a rebuilt base by stable source identity, not the order-dependent row id. Public API: - SelectionSource: a named identity set + a whitelisted join key + provenance, with an order-independent identities_sha256 integrity binding. The whitelist rejects assigned row ids (household_id/person_id) as order-dependent. - select_frozen_support: identity join -> household mask -> Frame.select, the certified reduce-then-calibrate pattern. - load_selection_source_from_h5 / _from_manifest / write_selection_source_manifest and build_selection_source_manifest_from_h5 + a CLI main(): distill a selection from a source H5 and freeze it to a committed JSON so the sparse default is reproducible on a laptop without the 354 MB source H5. Refusal contract (no fabricated selections): non-unique join key, any unmapped source identity (frozen mode), and ambiguous matches all raise. informed_init mode drops-and-records unmapped records for a future drifting rebuild. 8 synthetic-fixture tests: clone-aware join, id-reassignment order-independence, all three refusals, manifest round-trip + integrity, informed-init tolerance. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CLI: --selection-source-h5 / --selection-source-manifest (mutually exclusive), --selection-join-key (default source_year,source_household_id, household_support_channel,household_support_clone_index), --selection-mode. - Reduce the base pool to the frozen support right after _load_frame and BEFORE the population mass repair — matching the certified sequence, where the 340.1M frozen support is rescaled to the 334.2M Census benchmark (not the full pool), and materializing PolicyEngine over ~57k rows instead of ~338k. - Record a selection_source provenance block (mode, join_key, source sha/repo/ revision, n_source/n_selected/n_unmapped/n_ambiguous) in build_manifest.json, release_manifest.json, and calibration_diagnostics.json — the provenance #328 requires so the informed-L0 step is reproducible from main. - New thin CLI tools/build_us_selection_source_manifest.py. - 2 builder tests: selection_source recorded in both manifests; disabled sentinel when absent. informed_init mode is rejected at the CLI until its calibrate-library parameter lands; frozen_support is the implemented path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 7, 2026
MaxGhenis
added a commit
that referenced
this pull request
Jul 8, 2026
…pport exclusions, SOI income-target wiring (#299) (#357) * Build G run: PROGRESS + design (step-1 ref-frame fix, step-2 per-artifact exclusions) Fresh worktree off origin/main 2bf603b (#330 merge). Design for the two Build G certification candidates: sparse frozen-57k headline + dense parent. Prereqs verified (base-F 18833fb6, selection manifest 57,240, live-default 57k on disk, v7 feed 735f326a). 39 zero-support diagnosed (20 M-CHIP derivation + 18 SOI tail + 1 AL TANF). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Skip M-CHIP states in the derived-CHIP fallback (populace#321): the derivation re-created the 20 unmaterializable targets whenever direct rows were removed (cherry picked from commit 03cc3d9e3ca84af052aa0e440bd3b540ca6fd381) * Fix derivation tests for the M-CHIP skip: TX fixture for the general case, CA asserts no derived target (#321) (cherry picked from commit 9e25d5484b516b7086a4a530b7b1d5edb15ef359) * Thread reference-frame into _export_input_mass_gate (#327) Per #327's reference-decision comment: _export_input_mass_gate now accepts an optional reference_frame (defaulting to the raw base_frame, preserving current behaviour) plus reference_name and reviewed_exclusions. The release tool wires it from --input-mass-reference-h5 (the live-default 57k per #327), so calibration-driven upward alignment of under-reported PUF income is in-band against a certified reference while a genuine #278 zeroing still fails. 3 unit tests: gate defaults to raw-base comparison (fails on the calibration gain, current behaviour); passes when export~=reference despite export>>raw-base (the #327 case, 11/14 columns vindicated); still fails on genuine zeroing/drift vs the reference (the #278 loss arm stays strict). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Per-artifact zero-support exclusions for the sparse feed reconciliation (#299 Build G) Step 2 of the Build G feed reconciliation for the 39 zero-support targets: - M-CHIP (20, global): the #321 derivation-skip is cherry-picked (prior commits); diagnosed as the derivation fallback re-deriving CHIP=(combined-medicaid) for M-CHIP states on main (v7 feed correctly carries 0 direct M-CHIP rows but both control rows). Structural #170 class, un-expressible on ANY support. - SOI/TANF (18 SOI under_1.taxable_interest + 1 AL TANF, per-artifact): new --zero-support-exclusions <json> threads extra_support_exclusions through compile_us_fiscal_target_registry -> _dynamic_us_fiscal_target_references -> _reference_from_ledger_fact, recorded in us_source_coverage.json as fiscal_target_support_exclusions_per_run. The module constant is never mutated. Design resolved empirically: Build F attempt-5 DENSE (337k, same v7 feed, with M-CHIP skip) had 0 zero-support targets, so the dense parent expresses all 39 cells; only the 57,240 sparse frozen support cannot. Per-artifact split (dense keeps the full v7 registry; sparse declares the 19-cell exclusion) is the correct ledgered supersession. Full populace-build suite green (rc=0). 2 new threading tests + the #321 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Pin policyengine-us 1.752.2 -> 1.764.6 for Build G (#324 GO) Per the #324 pin-bump validation pass GO: pin to the latest 1.764.x (1.764.6), which includes 1.764.1's NY IT-196 §68 overall-limitation wiring (the expected NY state-tax +28.5% re-seat). uv lock --upgrade-package policyengine-us==1.764.6; core stays 3.26.11. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Separate export-mass reference from base-mass reference flag (#327 scope fix) RUN 1 dense failed early on _input_mass_reference_gate: --input-mass-reference-h5 armed BOTH the base-vs-reference gate (the #278 base-LOSS guard, comparing the RAW pre-calibration base) and the #327 export gate. The live-default 57k reference is calibrated, so the raw 337k base undershoots it by -50..-117% on PUF-imputed income (exactly what calibration fixes) → the base-vs-reference gate over-fires. This is the Build F attempt-6 pre-flight finding. Fix: dedicated --export-input-mass-reference-h5 for the export gate (the #327 case); --input-mass-reference-h5 stays for the base-vs-reference gate, left off for these runs since a raw base legitimately undershoots a calibrated reference. Caught in ~3 min before any calibration ran. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * PROGRESS: run 2 launched, dense-export outcome pre-validated (11/14 in-band, 3 #328 residuals) * Refresh stale degenerate-input reviewed-exclusion register (build-f b5980d2 port) Both Build G artifacts failed the #286 degenerate-input gate on the stale register that #330 only applied on a throwaway branch: retire the now-#315-seeded takes_up_eitc/takes_up_tanf_if_eligible exclusions; add the un-imputed second_home_mortgage_{balance,interest,origination_year} trio (populace#38). Exact build-f edit. 8 degenerate/take-up/export tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * PROGRESS: run 3 launched (all prereqs ported+verified); predicted per-artifact outcomes * Run 3 results: both artifacts calibrate to certified-or-better, rc=1 on 4 export-mass residuals Dense loss 0.04139 (beats f0af251), sparse loss 0.02964 (beats certified 0.044 and #330 prior). Both pass all structural gates + 0 zero-support. Both rc=1 only on the export-mass gate vs the corrected live-default 57k reference: mortgage/estate/misc/ non_sch_d — untargeted PUF-imputed inputs whose mass floats with reweighting (#328 class). Sparse mortgage tighter than dense (confirms #330). Neither certifiable as-is; sparse is the stronger candidate. Adding cold-L0-2026 arm 3 (Max directive). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Run 3 critical-target fits: sparse frozen income tax +0.5%, SS -0.1% (vs cold-L0 +19.9%/+5.3%) * Identification analysis of the 4 export-mass residuals (mortgage partially identified via JCT target; estate/misc unidentified; non_sch_d = component split) Frames the #299 verdict per the coordinator addendum: the export gate is an incidental-reproduction check on unidentified columns. Mortgage's JCT deduction target IS binding (+44.5% real miss); non_sch_d is a within-aggregate component split; estate_income and miscellaneous_income are purely unidentified. Three gap-closing options: (a) informed-init inheritance, (b) add SOI targets [recommended, Build H], (c) reviewed exclusions [weakest]. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Usage-budget hold: defer step-6 (table/verdicts/posts) to after 12:30am ET; ready-state staged * Arm 3 cold-L0-2026 complete (rc=1, critical-target gate); three-way head-to-head table Cold-L0-2026: loss 0.104, income tax +17.8%, SS +6.2% -> FAILS the critical-target gate before export. Frozen-57k: loss 0.0296, income tax +0.5%, SS -0.1%. The environment change (1.752->1.764.6) did NOT make cold L0 competitive -> the frozen selection's value is confirmed under 2026 conditions; informed-init remains the path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Step 6 complete: #299/#324 reports posted; Build G run closed Final verdict: no artifact certifiable tonight. Frozen-57k is the clear best candidate (loss 0.0296, income tax +0.5%), blocked only by the export-mass gate on 4 unidentified PUF-input dims. Cold-L0-2026 head-to-head confirms the frozen selection's edge is the selection, not the environment. Recommend (b) add SOI targets = Build H. NY re-seat calibrates cleanly (+0.18%), discharging #324 #1. #299: issuecomment-4902533514 #324: issuecomment-4902539459 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 0: setup + sourcing log; exact export-mass residuals + ref bands recorded (#299) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 1: SOI values verified from source; reconciliation vs export-mass ref bands (#299) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 2: registry wiring (Table 1.4 signed income/loss legs, E01100 concept) + 2-column export-mass reviewed exclusions w/ band math (#299) SOI Table 1.4 estate/other-income/capgain-distribution measures mapped to signed model columns (income leg = positive part, loss leg = negative-part magnitude); capital_gain_distributions == PUF E01100 == pe-us non_sch_d_capital_gains, concept-confirmed. Export-mass exclusions limited to estate_income + non_sch_d_capital_gains, where the SOI-true level provably cannot sit inside the live-default reference band; miscellaneous_income and both mortgage columns stay live for the run to adjudicate. Salvaged by conductor from agent segment ending without commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 3: close mortgage-target + reviewed-exclusions wiring gaps; registry d71c59514e3a/5533; tests green (#299) Two wiring gaps left by the conductor-salvaged step-2 commit (d8800fa): GAP 1 — mortgage target inert. d8800fa claimed an 'itemizer-masked Table 2.1 target (~$186.3B aged)' but wired no mortgage measure; v8 compile confirmed 0 mortgage targets. Map home_mortgage_interest_amount/_returns (CW/CX Total, $171,364,787,000 / 11,644,348 TY2023) -> concept home_mortgage_interest -> gross person-level pe-us home_mortgage_interest (the export column itself). itemized_only=true is auto-stamped from the table_2_1.itemized_all_returns record set (same auto path as person-level real_estate_taxes). Only the CW/CX Total is mapped; the two leg measures stay unmapped to avoid double-counting. Pivotal definitional Q resolved (independent + empirical): gross vs deductible mortgage interest for itemizers = $174.45B vs $174.31B (0.9992); base_variable = home_mortgage_interest is the exact tracked export-mass-gate column so the gate responds losslessly. GAP 2 — US_EXPORT_INPUT_MASS_REVIEWED_EXCLUSIONS was defined but never passed to _export_input_mass_gate; wire it into the call so estate_income and non_sch_d_capital_gains exclusions actually apply. Registry: d71c59514e3a / 5533 specs (was inert 8e1b83852751 / 5531). Mortgage amount target $186,310,104,604 (CBO-aged), itemized_only=true. Tests: 269 unit + builder/L0 heavy suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 4 + zero-support refresh: dense launched; sparse 19-cell set revalidated vs registry d71c59514e3a (#299) Dense run launched detached (buildh_dense.sh, mirrors buildg dense arm, only --ledger-facts -> v8). Sparse zero-support set recomputed against the new registry: the 19 Build-G cells (AL TANF + under-$1-AGI taxable-interest tails) are unchanged old targets on the identical 57,240 selection; the 12 new national T1.4/T2.1 targets all have material frozen-selection support (mortgage 13,914 / estate 449+87 / misc 1,346+799 / capgain-distrib 2,318 nonzero person-records) so add no new zero-support cells. Refreshed 19-cell file staged (df61c770); sparse launch script pre-staged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 5-6: diagnose monolith jetsam death; launch chunked direct solve (#299) Pressure trace (pressure_dense_20260708T015517Z.log) shows the monolithic dense release dies rc=137 from SUSTAINED ~55-88GB footprint x 76min crossing the macOS jetsam band, not an OOM spike (death at RSS 55GB / free 57%, ~39min after the 88GB peak). Pivot to the proven <30-min chunked path. - experiments/.../direct_replay_dense_weights_buildh.py: direct CSR solve from the buildh-dense frame checkpoint (registry d71c59514e3a verified HIT, 5533 targets, 337,704 households). Bypasses ACA + JCT-reform materialisation. Emits recovered dense weights + warm-start populace_us_2024_calibration.npz for the Step 2 rerun. - --verify-only PASSED; full solve launched detached (pidfile + real rc + sampler). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 7: direct solve DONE rc=0 — dense final_loss 0.0425793792 (#299) ESS 79,991; n_nonzero 337,704; ~18.7 min; RSS steady ~20GB (vs monolith 88GB). Canonical Build H dense loss = 0.04258 (Build G 0.04139, same order). Warm-start populace_us_2024_calibration.npz written for the Step-2 release rebuild. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 8: dense-ws release in-flight; disarmed watchdog on progress (#299) Machine degraded ~7x: ACA on 337k ran ~44min (peak RSS ~86GB/free 81 at 36min), then the peak PASSED — ACA freed intermediates (RSS 86->42GB) and the run entered the checkpoint-hit + solve phase at ~50GB/free 77 (half the monolith's sustained 88GB). Disarmed only the 40-min watchdog subshell to avoid killing a progressing run per conductor guidance; sampler+release+launcher preserved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 9: DENSE CERTIFIED — final_loss 0.04018, export-mass gate PASS (#299) Core artifacts complete (h5+diagnostics+parity+npz); reform-validation tail SIGTERM'd (rc=143, non-essential, heavy on degraded machine). DENSE beats Build G dense: loss 0.04018<0.04139, within-10% 86.95%>86.16%. Export-mass parity PASSED (0/35 failures): home_mtg +23.6%, first_home_mtg +23.7%, misc -42.0% all in-band; estate + non_sch_d reviewed-excluded. Mortgage JCT shrank +59.7%->+46.16%. All structural gates pass. #340: 7/8 families absent (out-of-scope). VERDICT: CERTIFIABLE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 10: SPARSE run — export-mass FAILS on misc (-79.9%); NOT CERTIFIABLE (#299) Sparse frozen-57k: final_loss 0.03092, within-10% 89.01%, ESS 13,184; all structural gates PASS; mortgage JCT shrank +44.5%->+35.48% and both mortgage export columns in-band (+26.9%/+27.0%). But export-mass gate FAILS(1) on miscellaneous_income (-79.9%, beyond +/-50%): the thin frozen-57k support can't hold misc's national SOI target in the parity band (dense meets it at -42.0% in -band). rc=1, no h5 (correct hard-gate abort). Not a reviewed-exclusion case (misc ref ~SOI, achievable). VERDICT: NOT CERTIFIABLE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Build H step 11: gates extracted; #299 comment posted; final verdicts (#299) DENSE CERTIFIABLE (0.04018, export-mass PASS, 4 dims resolved, mortgage JCT +59.7%->+46.16%). FROZEN-57k NOT CERTIFIABLE (export-mass FAILS on misc -79.9%; mortgage fix carried over +44.5%->+35.48% but thin frozen support can't hold misc in band). One comment posted to #299 (issuecomment-4914302628). Staging/local only; publication is Max's call. UK adjudication agent holds for conductor GO. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Make Build H direct-solve script ruff-clean (#299) The test job runs `uv run ruff check .` before pytest; the merged build-h-run tree failed lint (not tests) on the Build H direct-solve experiment script: - E401: split `import argparse, sys, time` onto separate lines - I001: sort the two import blocks - N812: rename `import build_us_fiscal_refresh_release as R` to `as release`, matching the repo's existing convention in tools/score_us_fiscal_targets.py and tools/score_us_state_files.py Behaviour is unchanged (experiments/ is not collected by pytest; testpaths=["packages"]). Full suite: 1559 passed, 35 skipped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude (Build G) <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.
What this is
Reconstructs the informed-L0 / warm-start selection behind the certified US default as committed, spec-declared machinery (closes #328, the headline Build G blocker). The certified live default is a 1,500-epoch dense polish of a frozen 57,240-record support warm-started from an uncommitted run-dir artifact (
a7a77c4_reconstructed_warm_start.npz). That selection was never in the repo, so the sparse default cannot be rebuilt frommain(cold L0 gives federal income tax +19.9%), and the dense parent overshoots the JCT mortgage tax-expenditure +59.7% — both the same cold-vs-informed-selection gap.Do not merge — the lead gates this. Nothing here touches prod HF write paths or
latest.json.Phase 1 — forensics (recoverable?)
Read-only HF inspection of
policyengine/populace-us+ the Build F rebuilt base (18833fb6):.npzis not on HF, and the build manifest records no base sha — the lineage gap Build G: reconstruct the informed-L0 / warm-start selection as committed machinery (blocks both sparse and dense defaults) #328 describes.source_year,source_household_id,source_person_id,household_support_channel,household_support_clone_index) already used for seeded draws inus_runtime/take_up.py. So the selected record set is recoverable from it.(source_year, source_household_id, household_support_channel, household_support_clone_index)is unique in both the certified support (57,240) and the rebuilt pool (337,704), and the join is exact: 57,240 / 57,240 matched, 0 unmapped, 0 ambiguous.--warm-start-calibration-npz,load_l0_refit_npz) cannot recover the support across a rebuild. An identity join is mandatory.Full write-up:
docs/informed-l0-warm-start-forensics.md.Phase 2 — design
docs/informed-l0-warm-start-design.md. A spec/CLI-declared selection source (a source H5 or a committed identity manifest) + a whitelisted join key, applied as a frozen-support reduction before target materialization, with provenance recorded in the manifest and a refusal contract that forbids fabricated selections. Two modes designed; frozen-support mode implemented first because the join is exact today (no calibrate-library change); informed-init mode is specified for a future drifting base and rejected at the CLI until its calibrate parameter lands.Phase 3 — implementation
Runtime module
packages/populace-build/src/populace/build/us_runtime/warm_start_selection.py(the spec-onlybuild/us/tree is untouched — CI-enforced):SelectionSource(named identity set + join key + provenance +identities_sha256integrity binding),select_frozen_support(identity join → household mask →Frame.select), H5/manifest loaders,write_selection_source_manifest,build_selection_source_manifest_from_h5, and a CLImain().Release-tool wiring
tools/build_us_fiscal_refresh_release.py:--selection-source-h5/--selection-source-manifest(mutually exclusive),--selection-join-key(defaulting to the verified key),--selection-mode._load_frameand before the population mass repair — matching the certified sequence (the 340.1M frozen support is rescaled to the 334.2M Census benchmark, not the full pool) and materializing PolicyEngine over ~57k rows instead of ~338k.selection_sourceprovenance block (mode, join key, source sha/repo/revision,n_source/n_selected/n_unmapped/n_ambiguous) inbuild_manifest.json,release_manifest.json, andcalibration_diagnostics.json.New tool
tools/build_us_selection_source_manifest.py— distills a source H5 into a committed selection-source manifest so the sparse default is reproducible on a laptop without the 354 MB H5.Tests (all synthetic fixtures / no network):
test_us_warm_start_selection.py(8): clone-aware join, id-reassignment order-independence, the three refusals (unmapped / non-unique key / ambiguous), manifest round-trip + integrity, informed-init tolerance.test_us_fiscal_refresh_builder.py(2 added):selection_sourcerecorded in both manifests; disabled sentinel when absent.ruff format+ruff checkclean; fullpackages/populace-buildsuite green (real exit code 0).Phase 4 — validation
The committed selection manifest distilled from the certified H5 (
build_us_selection_source_manifest.py;identities_sha256, source sha, and HF repo/revision recorded) reduces the Build F base (18833fb6) to exactly 57,240 households / 166,302 persons, 0 unmapped, 0 ambiguous — the certified support, recovered from committed inputs. A frozen-support + dense-polish release run against that base (the certified default's construction:method=dense_no_l0, 1500 epochs) then reproduces certified-grade calibration:dense_no_l0dense_no_l0l0_refitThe reconstruction reproduces certified-grade calibration — loss 0.0315 (better than certified 0.044) — and fixes the two critical targets cold-L0 blew: income tax +19.9% → −4.1% and SS +5.3% → −0.1%. The mortgage tax-expenditure comes in tighter than cold dense (+43.1% vs +59.7%), confirming #328's prediction that the informed selection fits that surface better. The run cold-starts on the base's initial weights (no positional warm-start artifact exists for the rebuilt row order) — i.e. the selection is the load-bearing ingredient, not the warm-start weights. The
selection_sourceprovenance block is fully recorded in the manifest.Why the run exits rc=1 (not a seam issue): calibration completes and diagnostics are written before the release gate; the gate then fails on 39 zero-support targets — 20 M-CHIP
total_chip_enrollment(the #321/#170 derived-CHIP class), 18 SOI stateunder_1.taxable_interestsparse cells, 1 TANF cell. These are a v7-feed-vs-57k-support coverage mismatch (the certified build used a differently-curated feed — a "SELECTED surface" per Build F), i.e. separate feed/#321 work, not the #328 seam, which recovered the support exactly and materialized all five JCT reforms. A fully-clean release export needs the Build F CHIP fix + feed curation on top; the calibration quality the seam delivers is already proven.Reproduce (sweep-proof; target-frame checkpoint cached, ~1–2 min to calibration):
The register refresh the run needs (retire the now-seeded
takes_up_eitc/takes_up_tanf_if_eligible; exclude the un-imputedsecond_home_mortgage_*trio) is the un-merged Build F register edit — applied only on the throwawaybuild-g-328-validatebranch, not in this PR (a separate feed/register matter, #38 / #315).What Build G still needs
mainusing this seam (the lead's call; interim certified 57k remains the shippable laptop artifact).n_unmapped > 0).solver_config_sha256(Calibration-stage cache/checkpoint identity omits solver config (no solver_config_sha256) #326); the export mass-parity reference fix (Export input-mass-parity gate references the raw base, flagging correct calibration gains on PUF-imputed columns #327) — whose mortgage residual this work resolves (the frozen support fits the mortgage tax-expenditure tighter than cold dense).🤖 Generated with Claude Code