Statewide ABAWD waiver map (FNS FY2025 Q1) + Sec. 10102 discretionary-cut parameter - #9030
Conversation
|
Second commit lands the partial-state county map: 436 county FIPS across 16 states at full-county grain, each state's list read from its FNS approval letter (references on the parameter; five research passes over the approval PDFs, verified area-by-area). Sub-county waivers (ME's 213 towns, CT's 68, RI/NH towns, MT's reservation-only waiver) are deliberately omitted and documented as an understatement — county-grain inclusion would overstate them. Release-scale validation (Build K artifact × #8961, 2026, repeal counterfactual restoring the pre-HR1 waiver map by reading the parameters' own 2025-01 vintages):
Largest state effects: NY $1.04B, CA $764M, PA $297M, FL $286M, OR $145M, MI $119M, WA $112M. Dataset county coverage verified (e.g., KY records span 106 distinct counties), so the map binds geographically; the moderate partial-state increment reflects the model's remaining exemption shields (annual-hours proxy, discretionary seeds at the pre-HR1 8% cap), tracked separately. 🤖 Generated with Claude Code |
9a04fd6 to
4abbeea
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9030 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 12 1 -11
Lines 192 17 -175
Branches 0 1 +1
==========================================
- Hits 192 17 -175
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
I pushed a formatting-only cleanup to Codex spotted the following issues, which require further investigation:
These findings were not changed by the formatting commit and should be verified against the underlying FNS approvals before making policy-data updates. Validation: |
hua7450
left a comment
There was a problem hiding this comment.
Requesting changes based on the policy-data issues summarized in this comment. In particular, items 1–4 require further investigation and verification against the underlying statute and FNS approvals before this PR is ready to merge. Item 5 should be documented as a known county-level modeling limitation.
PR #9030 — Statewide ABAWD waiver map (FNS FY2025 Q1) + Sec. 10102 discretionary-cut parameterProgram Review — via /review-program (multi-agent audit)PR: #9030 ( This review has an unusual shape, and the findings organize around three pillars:
Sources
Branch Status
Critical (Must Fix)C1. The 8%→1% discretionary-exemption cut was NOT enacted — remove
|
| PR hunk | Class | Disposition |
|---|---|---|
is_in_snap_abawd_waived_area.py county-OR-state formula |
SUPERSEDED | Main has the identical in_waived_county | in_waived_state formula plus a richer docstring (litigation citation). Drop. (Code audit confirms the PR's entity/period handling was itself correct: Person/MONTH reading Household YEAR state_code_str/county_fips via period.this_year.) |
waived_states.yaml — CA/IL/NV/NY/DC entries |
SUPERSEDED | Main dates them more precisely (CA/IL/NV/NY 2024-11-01; DC 2024-12-01; NY drops 2025-03-01). Drop. |
waived_states.yaml — 2025-07-04: [] |
CONTRADICTORY | Main deliberately runs waivers into 2026 per the USDA Feb 26 2026 memo (RI Council of Churches v. Rollins): DC → 2025-12-31; CA/IL/NV → 2026-01-31; empty 2026-02-01. See C2. Drop. |
waived_states.yaml — DE/NM/GU/VI statewide |
CONTRADICTORY (mostly deliberate omissions on main) | Main encodes only letter-verified statewide waivers; GU/VI are explicitly "not modeled by PolicyEngine US" (and can never match national microdata — inert); main classifies NM as PARTIAL (29 counties + 18 reservations). DE is the one possible genuine gap — verify DE's FNS response letter before adding it to main's file; never NM/GU/VI. |
waived_county_fips.yaml — AK block reformat + 2025-07-04 AK-only key |
SUPERSEDED / CONTRADICTORY | The rewrite strips main's per-county comments and drops main's 2025-11-01 AK+CA-7 block and CDSS ACL 25-79/26-15 references — a regression if applied as-is. The AK-only termination key embeds the C2 premise. Rebase must retain main's 2025-11-01 and 2026-11-01 blocks verbatim. |
tests/is_in_snap_abawd_waived_area.yaml full rewrite |
SUPERSEDED | Main's 26-case suite covers the PR's 4 cases and far more (AK county matrix incl. non-waived Anchorage, empty-county fallback, CA counties, litigation window, NY partial). The PR's "CA not waived 2026-01" expectation directly contradicts main (CA waived through 2026-01-31). Deleting main's cases would regress coverage — the code audit's CRITICAL findings (lost county-boundary matrix, no AK-persistence assertion, no non-waived-county guard) are exactly this regression. Drop the rewrite. |
tests/meets_snap_abawd_work_requirements.yaml — state_code: TX on 2 cases |
SUPERSEDED | Main already has TX + the same rationale comment on those exact cases. (The substitution itself was the right fix; it's just already done.) Drop. |
changelog.d/hr1-statewide-waiver-map.added.md |
SUPERSEDED | The statewide map shipped in #8872. Drop. |
Not superseded (novel): the 436-county FY2025 partial-waiver map in waived_county_fips.yaml (nothing on main covers AZ/CO/HI/KY/MA/MD/MI/MN/ND/NJ/OR/PA/SD/VA/WA/WI counties), its per-approval reference links, and changelog.d/hr1-partial-waiver-counties.added.md (rewrite to the salvaged scope). Date-key safety note: list parameters are full-replacement snapshots, so an added 2024-11-01 list does not clobber main's 2025-11-01 block — but only if the rebase preserves main's later blocks.
Should Address
All items below apply to the salvageable county map (the reworked PR's core).
- MI: 82 → 80 counties from 2025-03. MI's FY2024 waiver (82 counties) expired 2025-02-28; the FY2025 renewal (mi-abawd-response-fy2025.pdf, verified on fns.usda.gov) runs 2025-03-01 to 2026-02-28 with only 80 counties — Kent (26081) and Livingston (26093) were dropped (3 cities + 10 reservations added are sub-county, per the PR's own omission policy). The PR keeps all 82 through Jul 2025, overstating 2 counties for Mar–Jul 2025. Add a 2025-03-01 key.
- HI: waiver expired 2025-06-30; no FY2025 renewal exists (hi-abawd-response-fy2025.pdf → 404). Ending HI at 2025-07-04 leaves July 2025 resolving as waived under monthly semantics — ~1 month overstatement. Drop HI at 2025-07-01.
- Effective-date compression at 2024-11-01. KY is effective 2024-12-01, OR 2025-01-01, NJ and WA 2025-02-01 — dates the PR's own reference titles state correctly — yet all 436 counties are keyed at 2024-11-01, overstating those states' coverage by 1–3 months (Nov 2024–Jan 2025). Key each state at its actual effective month.
- Month-key convention + untested mid-month semantics. On MONTH-period parameters a
2025-07-04key first bites in August (period2025-07resolves at2025-07-01) — the PR's most load-bearing semantic, asserted nowhere in tests. Main avoids the issue entirely with month-start keys; follow that convention in the rework, and add boundary tests pinning the before/after months for at least one statewide and one non-AK county case. - AK persistence guard. Any post-termination key must re-list the 29 AK FIPS byte-identically (full-replacement list semantics — the PR did this correctly), and a test should assert an AK county remains waived after the non-AK drop (e.g. at 2026-01); without it, a future edit that forgets to re-list AK would pass CI.
- Wrong
#page=81anchor on the PLAW PDF. Sec. 10102 begins at 139 STAT. 81 = PDF page 10; PDF page 81 is 139 STAT. 151 (Sec. 50303, renewable energy revenue sharing). The anchor confuses Statutes-at-Large pagination with PDF pagination. Pre-existing on main inwaived_county_fips.yaml, but newly replicated intowaived_states.yaml. Fix to#page=10wherever kept. - 13 of 16 partial states' county lists not individually cross-checked. Only KY/MI/HI letters were audited line-by-line (all matched, including the exact 3 KY counties excluded); AZ/CO/MA/MD/MN/ND/NJ/OR/PA/SD/VA/WA/WI totals match the PR's own claimed counts but were not verified against their approval letters. Spot-check at least the largest (PA 60, WA 38, OR 30) before merge.
discretionary_exemption_ratemetadata (only if the parameter file is touched for other reasons after C1's deletion): the parameter is consumed by no variable (grep-confirmed); aneconomy: falseor explicit "data-construction only" metadata note would prevent it being misread as an active lever in the web app.
Suggestions
- Host hygiene —
www.fna.usda.govis legitimate, not a typo. FNS was renamed: "As of June 1, 2026 the Food and Nutrition Service (FNS) is now the Food and Nutrition Administration (FNA)." All 13 diff occurrences resolve (302 → *.azurefd.us → 200, application/pdf, correct content). No change required. fns-prod.azureedge.us(5 occurrences: Q1 status ×2, MN, ND, PA) still resolves (Q1 status: 200, byte-identical to the fns.usda.gov copy) but is non-canonical; the same paths onwww.fns.usda.govall return 200. A mechanical host swap is safe and preferable.- Rewrite
changelog.d/hr1-partial-waiver-counties.added.mdto describe only the salvaged scope (county map + corrected timeline); the fragments themselves are well-formed (correct location,.added.mdtype). - Reference titles embedding approval dates ("KY approval 2024-11-27 (effective 2024-12-01)") are slightly non-standard but useful and compliant (no page numbers in titles) — keep.
- Consumer-side positive case: consider one test asserting a waived-state/county person is actually routed through the waiver in
meets_snap_abawd_work_requirements(main's TX substitutions only suppress the waiver path).
Source Audit Summary
| # | Claim / value | Source | Result |
|---|---|---|---|
| 1 | 9 statewide jurisdictions (CA, DE, DC, GU, IL, NV, NM, NY, VI) as of 2024-10-01 | FNS FY25 Q1 status PDF | MATCH |
| 2 | Partial-waiver state set (16 county-grain + AK; ME/CT/RI/NH/MT sub-county omitted) | FNS FY25 Q1 status PDF (22 partial states) | MATCH |
| 3 | Internal FIPS counts: 465 total, no duplicates; per-state counts (KY 117 … HI 2); 2025-07-04 block = exactly 29 AK | PR diff self-consistency | MATCH |
| 4 | KY 117 counties (excludes Fayette, Oldham, Scott) | KY FY2025 letter | MATCH |
| 5 | MI 82 counties (Oakland omitted per sub-county policy) | MI FY2024 letter | MATCH (FY2024 only — see mismatch 3) |
| 6 | HI = Kauai (15007) + Maui (15009) | HI FY2024 letter | MATCH |
| 7 | Waiver-criteria comment (>10% unemployment for lower 48) | Sec. 10102(b) | MATCH (fair summary) |
| 8 | AK persistence to 2026-11-01 | Sec. 10102(c) (good-faith exemption to Dec 31 2028) | MATCH (unchanged from main) |
| 9 | fna.usda.gov hosts resolve to correct PDFs | Live fetch | MATCH (agency renamed June 2026) |
| 10 | 8%→1% exemption cut (2025-07-04: 0.01) |
Full P.L. 119-21 text; 7 U.S.C. 2015(o)(6); OLRC notes; adversarial re-verification | MISMATCH (MAJOR) — not enacted; House-bill provision; cap remains 8% |
| 11 | All waivers terminate at enactment (2025-07-04) | Sec. 10102(b) + FNS Oct 3 2025 memo | MISMATCH — administrative termination ~2025-11-02; Aug–Oct 2025 waived in reality |
| 12 | MI 82 counties through Jul 2025 | MI FY2025 renewal (80 counties from 2025-03-01) | MISMATCH (Kent, Livingston dropped) |
| 13 | HI waived through Jul 2025 | HI expiry 2025-06-30; FY2025 letter 404 | MISMATCH (~1 month over) |
| 14 | All 436 counties effective 2024-11-01 | KY 2024-12-01, OR 2025-01-01, NJ/WA 2025-02-01 (per the PR's own reference titles) | MISMATCH (1–3 month compression) |
| 15 | PLAW #page=81 anchor |
Sec. 10102 at PDF page 10 | MISMATCH (wrong page) |
| — | FNS memo live page (stub since 2026-02-25); 13 states' county lists; AK health.alaska.gov reference | — | UNVERIFIABLE / out of sampling scope |
Validation Summary
| Check | Result | Notes |
|---|---|---|
| CI (33 checks) | PASS | On the stale base (54 behind main); proves nothing about post-#8872 merge |
| Merge vs main | FAIL | Conflicts in every file except changelog fragments and discretionary_exemption_rate.yaml |
| Statute verification (Sec. 10102 / 2015(o)(6)) | FAIL | C1: 1% cut not enacted (double-confirmed) |
| Termination timeline vs FNS memo | FAIL | C2: wrong direction, ~4 months |
| Parameter YAML structure, reference format, changelog fragments | PASS | Well-formed; reference list format compliant |
| Formula entity/period handling | PASS | Person/MONTH ← Household YEAR via period.this_year; state_code_str over state_fips correctly reasoned |
| Full-replacement list semantics (AK re-list) | PASS | Correct pattern, but unguarded by tests |
| Test coverage | FAIL | Rewrite regresses main's 26-case suite; mid-month semantics and AK persistence asserted nowhere |
| Internal FIPS consistency | PASS | 465/436/29 counts all reconcile, no duplicates |
Review Severity: REQUEST_CHANGES
Recommendation & Next Steps
Rework rather than merge. As written, the PR would regress main (dropping #8872's CA county block, litigation timeline, and richer tests), encodes an un-enacted statutory provision, and models the waiver wind-down in the wrong direction. But its core contribution — the FY2025 partial-state county map — is real, mostly verified, and fills a limitation main explicitly documents.
- Rebase onto
main(post-Model California county and litigation-reinstated statewide SNAP ABAWD waivers #8872) and drop everything superseded or contradicted: thewaived_states.yamlfile, the formula change, both test-file changes, the statewide changelog fragment, and the2025-07-04termination keys. - Drop the
2025-07-04: 0.01discretionary-exemption entry entirely (C1). No fiscal-year re-key can save it — the provision does not exist in enacted law. - Keep only the corrected FY2025 county map: per-state effective-date keys (KY 2024-12-01, OR 2025-01-01, NJ/WA 2025-02-01, others 2024-11-01), MI 82→80 at 2025-03-01, HI out at 2025-07-01, and terminations per the FNS memo timeline — each waiver's expiration or ~2025-11, with reinstated partial-waiver states (KY/MI/MN/NJ/OR/WA/ND) carried to their Appendix A dates via month-start keys. Preserve main's 2025-11-01 and 2026-11-01 blocks verbatim; fix the
#page=81→#page=10anchor; add month-boundary and AK-persistence tests. - Optionally verify DE's FNS letter — the one statewide jurisdiction main may genuinely be missing.
- Alternative: close Statewide ABAWD waiver map (FNS FY2025 Q1) + Sec. 10102 discretionary-cut parameter #9030 and cherry-pick the county map into a fresh PR from current main — likely less work than untangling the whole-file conflicts, and equivalent in outcome.
🤖 Generated by /review-program (Claude Code multi-agent review)
Salvages the novel content of the original branch onto main's waived_counties.yaml schema (county enum names, month-start keys): - 434 county-equivalents across AZ/CO/HI/KY/MA/MD/MI/MN/ND/NJ/OR/PA/SD/VA/WA/WI with per-state FNS effective dates (KY 2024-12-01, WA/NJ 2025-02-01, ...) and litigation-aware Appendix A terminations - MI corrected to 80 counties (Kent and Livingston removed per the FNS letter) - PA balance-of-county caveat documented (Cumberland/Butler modeled whole) - PLAW Sec. 10102 anchor corrected to #page=11; FNS FY2025 Q1 report cited - main's existing AK/CA blocks preserved verbatim; superseded content from the original branch (waived_states edits, 2025-07-04 keys, un-enacted 0.01 discretionary entry) dropped per review consensus - 6 new test cases (FY2025 window, post-termination, staggered start, AK persistence, control); 38/38 passing Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Branch reworked per review consensus (rebase & salvage)Both reviews (@hua7450's requested changes and the /review-program report) converged on the same verdict: keep the novel FY2025 Q1 partial-state waiver map, drop everything superseded by merged #8872. Since those reviews, What was salvaged
Review corrections applied while porting
Dropped (superseded by merged #8872 / current main)
Verification
🤖 Generated with Claude Code |
…into local-pr9030-refactor
|
Updated this PR with the reviewed local fix and merged the latest What changed:
Validation after merging current
Updated branch head: |
…olicyEngine#8972 review) Addresses @hua7450's review: the 2026-11-01 date is the correct END of Alaska's good-faith exemption window, but flipping the statewide hr1_in_effect toggle to it wrongly put all of Alaska (incl. Anchorage) on the complete pre-HR1 rule set during the window and suppressed HR1's new Alaska Native/Indian exception. - Keep Alaska's HR1 effective date at 2025-11-01 (statewide, same as HI), so the new Alaska Native/Indian exception is in effect throughout. - Add a separate AK good-faith-exemption-window parameter (false / 2025-11-01 true / 2026-11-01 false) and an is_snap_abawd_in_good_faith_exemption_window resolver. - During the window, layer ONLY the approved temporary retained categories on top of the post-HR1 exception set: ages 56-64 (verified against Alaska DOH - NOT the pre-HR1 55+ threshold), households with children aged 14-17 (pre-HR1 dependent threshold restored to 18), veterans, homeless individuals, and former foster youth aged 18-24. is_snap_abawd_indian_exempt stays active independently as the new permanent HR1 exception. - Rework the regression tests to Anchorage-specific cases (county_fips "02020"), since without county input Alaska falls back to the waived Aleutians East Borough and bypasses the date logic. Add window boundary cases (2026-10 vs 2026-11), age 55 vs 56, a healthy adult, each retained category, and an Alaska Native/Indian person (exempt both in and after the window). The geographic waiver (waived_counties, PR PolicyEngine#9030) is unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Standalone on
main— previously stacked on #8961, but rebased off it after main merged the SNAP ineligible-member income proration (snap-ineligible-member-income). This PR now contains only the three ABAWD waiver-map commits and none of #8961's SNAP work-requirement income changes. On the income-counting question that separated the two: 7 CFR 273.11(c)(2) (and the explicit cross-reference in 273.24) prorates the income of an ABAWD-time-limit-ineligible member, which is exactly what main now implements — so this PR adopts main's proration rather than #8961's full-count.The in-model ABAWD waiver surface was 29 Alaska county FIPS — but the FNS FY2025 Q1 status report shows nine statewide waivers as of October 1, 2024 (CA, DE, DC, GU, IL, NV, NM, NY, VI) plus 22 partial-waiver states. CA+NY+IL alone are roughly a third of the national caseload, fully shielded pre-HR1. With no waiver map, HR1's waiver terminations — the largest single driver in CBO/CBPP loss estimates — scored near zero in release-scale reform runs (#8961 discussion).
waived_statesparameter (postal-code-keyed;state_fipsis an input defaulting to 6 and cannot key policy), FY25-Q1-sourced, ending at P.L. 119-21 Sec. 10102 enactment with the ran-to-expiration simplification documented.is_in_snap_abawd_waived_arearesolves statewide OR county waivers.discretionary_exemption_rate, with a NOTE that runtime consumption requires a persisted seed quantile on the dataset (populace-side follow-up).Caveat: the partial-state county map rides on imputed county geography
Populace datasets impute each household's county via the geography ladder (CPS does not identify counties for most households). County assignment is validated for presence and state-consistency, but has not been validated against county-level benchmarks (populace#241/#292). The exposure decomposes cleanly in release-scale runs (Build K × #8961, 2026 HR1 repeal):
Any published use of the partial-state increment should carry this caveat until county assignment gets a benchmark (populace#292).
Tests: 286 passed across the SNAP work-requirements/income suites rebased on
main(main's proration tests and the new waiver tests pass together); newis_in_snap_abawd_waived_area.yamlcovers statewide, never-waived, post-HR1, and county cases.🤖 Generated with Claude Code