Repository navigation
Store the ACS local donor's retired inputs under the live ones - #1309
Conversation
The ACS local-area release's package stage refused the rebuilt artifact: it stores would_claim_wic and medicare_part_b_premiums, engine input names policyengine-us 2.2.1 no longer defines, inherited from the donor populace-us-2024-spm-receipts-20260923. The stored-inputs register (d271) leaves both out on purpose and names the remedy; the consumer export now applies it (microcosm#1263): - would_claim_wic becomes takes_up_wic_if_eligible. Donor decisions are kept; people without one take WIC up when eligible, the engine's default and the assumption policyengine.py applies to the same cells today. The rule reads no provenance: the release tool passes the ACS spine as the people who may lack a decision, and a missing decision on anyone else is refused. - medicare_part_b_premiums is no longer stored. Finalize discloses the WIC assumption as acs_wic_takeup_assumed_interim until the staging generates ACS participation (microcosm#1154, #1156). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merge audit, head
|
Part of #1263. Unblocks the ACS-local rebuild's package stage.
Why
The rebuilt ACS-local release (
acs-release-1263-d61bce076) completed materialize, calibrate, qa and finalize on Modal. Package then refused it at the stored-inputs gate (#1026, d271):Both come from the donor
populace-us-2024-spm-receipts-20260923. The 2026-09-23 ACS-local release predates the gate.US_STORED_NON_VARIABLE_COLUMNSleaves both out on purpose, as retired engine inputs, and its text names the remedy. Nothing in the ACS chain applied it.Measured on the calibrated artifact (counts only):
would_claim_wicis stored for all 166,321 donor people (ASEC 66,001; PUF 100,320) and missing for all 3,420,942 ACS people.medicare_part_b_premiumshas the same split.Change
microcosm.build.us_runtime.retired_stored_inputs.with_live_stored_inputs, applied in the calibrate stage's consumer export (_write_calibrated_artifact), after the reviewed-null fill:would_claim_wic→takes_up_wic_if_eligible. Every stored decision is kept. A person without one takes WIC up when eligible (True). That is the engine's default, and the assumption policyengine.py applies to exactly these cells today (legacy_inputs._temporary_acs_wic_values). So simulation results through policyengine.py are unchanged, and a plain policyengine-us consumer now reads the donor decisions it used to ignore.person_spine == acs_2024_1yr) as the people who may lack a decision, and a missing decision on anyone else is refused.medicare_part_b_premiumsis no longer stored. The register says no engine version from 1.690.7 to 2.15.1 reads it or its successor.consumer_export.jsonrecordslive_stored_inputs(counts only). Finalize adds the reviewed limitationacs_wic_takeup_assumed_interim, whose flip condition is microcosm#1154 and its generator Generate complete ACS WIC participation and reject missing release inputs #1156.The materialize checkpoint is reused. Only calibrate, qa, finalize and package rerun, about 35 minutes on Modal. The run identity pins the staging and ladder hashes, not the code commit, and materialize code is unchanged here.
Invariants (property-tested)
For every person table where only allowed people lack a decision:
Tests
test_us_retired_stored_inputs.py: 20 tests, including Hypothesis.stored_inputtest in microcosm-data and microcosm-build engine-free (180, 1 skipped).Follow-up, not here: once the d1386 national build publishes, the donor stores the live name itself. Its ACS rows would then need the #1156 generator, or a reviewed-null decision, at materialize.
🤖 Generated with Claude Code