Repository navigation
Description
Evidence
On the certified US release (populace-us-2024 Build P, read through policyengine.py 5.0.1), immigration_status carries variation but no records in the categories H.R.1 removes from program eligibility:
| status | records |
|---|---|
| CITIZEN | 153,491 |
| UNDOCUMENTED | 6,682 |
| LEGAL_PERMANENT_RESIDENT | 5,702 |
| CUBAN_HAITIAN_ENTRANT | 226 |
| DACA | 220 |
| REFUGEE / ASYLEE / DEPORTATION_WITHHELD / CONDITIONAL_ENTRANT / PAROLED_ONE_YEAR / TPS | 0 |
years_since_us_entry is populated (100% nonzero).
Why it matters
Three enacted H.R.1 eligibility channels key off exactly these categories and therefore compute ≈$0 on this file:
- Medicaid — §71109 narrows qualified immigrants to LPR + Cuban/Haitian entrants + COFA, effective 2026-10-01. Encoded in policyengine-us (
gov/hhs/medicaid/eligibility/eligible_immigration_statuses, 2026-10-01 value). - CHIP — same §71109, same date (KFF summary of the law). Not yet encoded in policyengine-us (filed separately), but the data gap binds regardless.
- ACA PTC — §71302: below-FPL lawfully-present exception repealed from 2026;
ineligible_immigration_statusesadds TPS/REFUGEE/ASYLEE/DEPORTATION_WITHHELD/PAROLED_ONE_YEAR from 2027-01-01. Encoded in policyengine-us.
CBO scores §71109 alone at −$6B federal Medicaid over 10 years and +100k uninsured by 2034. Any distributional analysis of the law on this file silently zeroes all three channels. Context: the IARIW OBBBA paper (PolicyEngine/obbba-paper) discloses this as a data boundary in its methods; the multi-year extension needs it fixed.
Ask
Carry humanitarian/temporary-protection statuses in the imputation so eligibility rules can see them. Design options, not mutually exclusive:
- Impute the missing categories onto the CPS base — reassign a calibrated share of current LPR/citizen records (or model directly from ACS/SIPP citizenship + entry-year + origin) to REFUGEE / ASYLEE / DEPORTATION_WITHHELD / PAROLED_ONE_YEAR / TPS / CONDITIONAL_ENTRANT, targeted to external stocks (DHS/ORR admissions, KFF/ASPE coverage counts of refugees-asylees on Medicaid/CHIP).
- A stored eligibility-check surface: alongside
takes_up_*_if_eligible, a data-level flag family (e.g.,passes_immigration_eligibility_check_{program}) that rules engines respect — so eligibility shocks flow to Medicaid, CHIP, and PTC coherently rather than being program-dollar overrides. This generalizes beyond immigration (verification/redetermination churn could use the same surface). - Interim (consumer-side, documented in the OBBBA repo): a seeded reform-level reassignment of statuses in the right proportions — acceptable for sensitivity work, not for certified estimates.
Acceptance criteria
immigration_statusdistribution on the release includes the humanitarian categories with weighted totals validated against a stated external source.- The three H.R.1 channels above produce nonzero, sign-correct effects when toggled on a certified release.
- Certification notes state the imputation source and target for each category.
Activity
MaxGhenis commentedon Aug 25, 2026
Design proposal (implementing now; PR to follow)
Mechanism claims verified against policyengine-us 1.819.0 (the workspace lock) and the microcosm build code; pool numbers computed on the raw 2024 ASEC person file; every target below was read directly from the cited source today.
Why the current stage refuses these labels, and why that reason no longer holds
The
immigration_statussource stage deliberately does not emit REFUGEE/TPS/etc. — its docstring reasons that blanket labels would mislabel millions "while LPR treatment gives near-identical means-tested eligibility for those populations." H.R.1 repealed exactly that equivalence: after §71109,LEGAL_PERMANENT_RESIDENTstays Medicaid/CHIP-qualified while REFUGEE / ASYLEE / DEPORTATION_WITHHELD / PAROLED_ONE_YEAR / CONDITIONAL_ENTRANT fall out ofgov/hhs/medicaid/eligibility/eligible_immigration_statuses(2026-10-01); §71301/71302 remove TPS / REFUGEE / ASYLEE / DEPORTATION_WITHHELD / PAROLED_ONE_YEAR from ACA lawful presence (2027-01-01) and repeal the below-FPL PTC exception (gov.aca.below_fpl_immigration_exception_in_effectflips false 2026-01-01). And SNAP §10108 already did the same thing (gov/usda/snap/eligibility/eligible_immigration_statusesnarrows 2025-07-01 in the model) — the data gap silently zeroes a fourth enacted channel beyond the three in the issue body.So the fix is not "loosen the old rationale" but "replace blanket labels with externally-targeted draws": assign each category only as much weighted mass as the published stock supports, from candidates whose survey signature (origin country × arrival window × legal-status indicators) is consistent with the status.
Chosen design: option 1, as an extension of the existing source stage
Raw-only compliant: the logic lives in the
immigration_statusstage kernel (us_runtime/immigration.py), parameterized by the source-stage manifest with one citation per number, running over raw ASEC columns the stage already requires (PENATVTY,PEINUSYR,PRCITSHP, the ASEC-UA indicators). No new raw columns, no new output columns, no post-hoc artifact edits; certified releases untouched — this lands in the next build lane.Phase order inside the kernel (all draws reuse the existing seeded blake2b threshold-selection machinery, keyed on stable source identity so support-channel clones stay consistent):
ssn_card_typeNONE →NON_CITIZEN_VALID_EAD(parole and TPS both confer employment authorization), preserving the gate invariantNONE ⇔ UNDOCUMENTED— and fixing a pre-existing mislabel: TPS holders are ACA-lawfully-present but were being emitted as UNDOCUMENTED (ACA-ineligible) or LPR (Medicaid-qualified), each wrong in a different direction post-H.R.1.Targets and sources (data year 2024)
Reconciliation against the table total (1,297,635 as of 2025-03-31; 1,095,115 as of 2024-09-30 per the Dec 2024 CRS update): the emitted TPS sum is 857,650 because Ukraine TPS (101,150) and Afghanistan TPS (8,105) are carried by the parole draw (those registrants are overwhelmingly the same U4U/OAW parolees, whose benefits flow through parole under the Ukraine supplemental and Afghan Allies acts), and Haiti TPS (330,735) is carried by the existing CUBAN_HAITIAN_ENTRANT label, which is the statutorily favorable class H.R.1 preserves — conservative for §71109 loss estimates. Origin PENATVTY codes were verified against Census CPS technical documentation Appendix I (Cuba 327 / Haiti 332 match the existing module constants); arrival bins against the 2024 ASEC data dictionary (PEINUSYR 27 = 2020–21, 28 = 2022–24; bin-boundary slop at the Venezuela 2023 cutoff is documented).
The parole targets are gross program admissions: a cohort member who later won asylum (large for Afghans: Afghanistan was 38% of FY2024 asylum grants) stays labeled PAROLED_ONE_YEAR. This is deliberately not corrected — both classes are qualified aliens pre-§71109 and lose Medicaid/SNAP/PTC on identical dates, so the split is channel-irrelevant in the current engine; noted in the stage docs.
Empirical feasibility (raw 2024 ASEC, weighted, verified by running the current stage): candidate pools carry 832k (parole origins 2020+, documented+residual: AFG 94k, UKR 118k, NIC 144k, VEN 476k), 567k (refugee origins 2020+, documented), 2.36M (asylee origins 2016+, documented), 3.9M (TPS origins). The Ukraine parole target (158k) exceeds its ASEC pool (~118k) — the 2022–24 inflow is undercovered by the survey — so the draw will saturate and the gate records achieved-vs-target per category (band-checked, coarse). Reconciling levels in weights is the calibration lane's job, same division of labor as the undocumented total today. Pew's 2025 report (2023 estimates) independently validates the extraction design: its 14.0M "unauthorized" total explicitly includes ~6.0M with temporary protections (parole ~700k, TPS ~650k, DACA ~600k, pending asylum), so pulling TPS/parolees out of the residual pool is consistent with the residual-method concept the stage already uses; the emergent undocumented total stays well inside the existing gate band around the Pew anchor.
Option 2 (the flag surface): what I'm doing and why
The issue proposes stored
passes_immigration_eligibility_check_{program}flags. Verdict after reading the engine: for immigration eligibility, the coherent flow surface already exists —immigration_status_str+ the engine's parameter lists + thetakes_up_*_if_eligiblepropensities. The engine recomputesis_medicaid_immigration_status_eligible/is_aca_ptc_immigration_status_eligible/is_snap_immigration_status_eligiblefrom stored inputs under whatever law vintage or reform is simulated, and the medicaid take-up stage already keeps off-domain persons at a draw-based propensity precisely so an eligibility shock enrolls newly-eligible people "at a plausible propensity instead of a silent zero" (its own docstring). A stored pass/fail verdict would freeze one law vintage into the artifact and stop reforms from recomputing eligibility — the opposite of "flows to other policies."Where a stored flag family is the right mechanism is verification/documentation churn (whether a person can document status at redetermination — a person attribute the law can't derive), which needs engine-side consumer variables first, exactly like
takes_up_*. I'll file that as a linked follow-up (microcosm + policyengine-us) rather than shipping a dead column now. If you want thepasses_*family anyway, it layers on top of this design without rework — say so here.Validation: gates and release probes
medicaidmust rise; (2) restore the below-FPL PTC exception in 2026 →aca_ptcmust rise; (3) restore the pre-§71301 ACA lawful-presence list at 2027 →aca_ptcmust rise; (4) restore the pre-§10108 SNAP status list at 2026 →snapmust rise. Each binds only throughimmigration_status_str, so a release where the imputation regresses fails before publication — acceptance criterion 2, enforced permanently rather than checked once.~UNDOCUMENTED, so no reform toggle can bind — that's CHIP immigration eligibility does not encode H.R.1 §71109 narrowing (Medicaid side is encoded; CHIP check is only ~undocumented) policyengine-us#9346. The data-side precondition (humanitarian-status children present in CHIP-age range; USCIS reports 8.9% of TPS beneficiaries under 18) is gated now; the CHIP probe gets added with the engine bump that lands #9346.years_since_us_entrystays at its engine default (5) in this PR. It is not stored on the release (the ABI lock declares it an absent engine input — the issue body's "fully populated" was the engine default, not data). Storing true entry years from PEINUSYR is the natural companion but flips recent-arrival LPRs out of baseline federal Medicaid — statutorily right for the five-year bar, wrong for reported-receipt children in the ~half of states using the CHIPRA-214/ICHIA lawfully-residing option, which the engine does not yet model. Filing as its own issue with that prerequisite. Consequence documented: PAROLED_ONE_YEAR is treated as past the bar at baseline, which matches the statutory position of the two biggest Medicaid-using parole cohorts (OAW Afghans and U4U Ukrainians hold refugee-equivalent benefits access by statute; the CHNV FR notice itself records that two-year paroles made CHNV parolees "generally … considered qualified aliens").CONDITIONAL_ENTRANTis not emitted: the INA §203(a)(7) class closed in 1980; survivors are indistinguishable from LPRs at this granularity. Documented in the stage notes.Targets land in
source_stages.json→ regeneratedus/spec/sources.yaml(schema extended; spec digests re-pinned as the attestation machinery requires); new seed-protocol sites per draw; tests cover assignment logic, manifest validation, determinism/clone-consistency, gate behavior, and the probe definitions.Format the touched tooling and fix the stale site-count docstring
Re-pin the country envelope digests on the merged tree
Re-pin the seed-site, field-count, and claim attestations for the new…
Integrate humanitarian statuses with the US stacked pipeline
Merge main and re-pin the attested identities the merge moved
MaxGhenis commentedon Sep 4, 2026
Addendum: spill controls re-founded on Pew's 2023 universe (Aug 29 change, reviewed Sep 4)
One part of the design above is superseded in #779. The proposal said the EAD worker/student spill would still bind the remaining residual pool to Pew's 8.3M workers after the humanitarian draws. On the 2024 ASEC that left the residual worker count below the control with no spill (8.14M), because Pew's own count already includes the TPS/parole people the draws extract. The Aug 29 commit (
405f9c2d) fixes the concept rather than the number:A_LFSR, age 16+), restored from the pinned Census ASEC archives by exact PERIDNUM join (checkpoint schema v4), instead of a prior-year-earnings proxy.(CUBAN_HAITIAN_ENTRANT, NON_CITIZEN_VALID_EAD)pair — exactly the set the spill counts.Fresh-eyes check on the raw 2024 ASEC after merging current main: Pew labor force lands at 9.698M against the 9.7M control (binds), the broad universe at 14.71M (1.05× anchor), humanitarian categories PAROLED 372k / REFUGEE 129k / ASYLEE 156k / TPS 865k (all in band; parole and refugee saturate on survey undercoverage of 2022–24 arrivals plus the tighter U4U/CHNV arrival windows),
NONE ⇔ UNDOCUMENTEDintact. The four H.R.1 probe channels still move sign-correctly. Everything else in the proposal stands; #776/#777/#778 remain the filed follow-ups.Give the failed-gate pool fixture the canonical terminal gate set
Pin the Armenian bundle digest alongside BE/UK on the merged tree
Re-pin the merged tree's attested identities for the third main sync
Forward legacy worker authentication through the transfer replay
MaxGhenis commentedon Sep 18, 2026
Ready for review — #779 re-synced to current main (Sep 18)
Status since the addendum: the PR went fully green on Sep 4 but the session died before it was marked ready, and it then drifted 552 commits behind main. The third and final re-sync is pushed and green.
What the re-sync had to reconcile beyond pins: main landed the portable authenticated primary-QRF worker identity on the same seams this branch's immigration receipt evidence touched. Both now coexist — the shared identity versions land as stacked authority 12 / outer materializer 13 / pool-stage materializer 8 / manifest schema 10 with both bindings documented, and the transition-authority validation threads worker authentication and replays the branch's post-PUF transfer evidence (legacy schema-9 pools take the frozen legacy authority path, as main's attestation tests require). Every closed-world census is recomputed on the merged bundle (42,540 configuration fields, seven pointer claims, the full inventory digest vector, coverage evidence, goldens, and the schedule/payload receipt shas the ordering doc quotes).
Behavior is unchanged by the merges: re-running the stage on the raw 2024 ASEC at the final head gives PAROLED_ONE_YEAR 372k / REFUGEE 129k / ASYLEE 156k / TPS 865k / DACA 371k / UNDOCUMENTED 12.90M, Pew broad universe 14.71M (1.05× anchor), Pew labor force 9.698M against the 9.7M control,
NONE ⇔ UNDOCUMENTEDintact — identical to the Sep 4 figures. The four H.R.1 probe channels are unchanged.Follow-ups remain #776 (
years_since_us_entry), #777 (churn flag surface), #778 (CHIP probe on pe-us#9346), #872 (zero-target draw-condition declaration). The PR will keep drifting while it waits — each re-sync has been a ~1-day pin cascade — so review soon is cheaper than review later.Exhaust non-overlapping spill rows before touching the other margin
Keep attested schema-9 pools authenticable: freeze their sealed schedule
Pin the contract attested schema-9 pools sealed
Declare the frozen schedule in the US package closure; historical tes…
Carry main's SPM cofailure line and the H.R.1 baseline keys in two me…
Gate immigration composition at the build's period; close spill tiers…
Merge remote-tracking branch 'origin/main' into us-humanitarian-immig…
Add default-pool stage receipts for the immigration statuses
Re-pin stacked authority after the tenth merge; document the OAW window
Regenerate the stage receipts with recorded draw keys; split the row …
Score the Medicaid probe in people; let short stacked draws take ever…
Regenerate the #767 stage receipts at 4f94e48; add the stacked-supply…
State which stacked draws may run short in the #767 evidence README
Project each stacked draw's expected share; count TPS Venezuela as short
Place the expected share between the worst case and the projection
Bound the refugee and asylee caveat by the crossing tie group