Repository navigation
Conversation
CalFresh Modified Categorical Eligibility has no net income test. CDSS ACL 12-62 (examples 4-5), ACL 13-32, ACL 14-56 and ACL 15-42 direct that an MCE household of three or more gets the issuance-table allotment even when net income exceeds the net standard, and that one of one or two gets the minimum allotment. ACL 13-32 applies this to elderly or disabled households at or below 200% of poverty. MPP 63-409.1 and 7 CFR 273.9(a) exempt categorically eligible households from the income standards. Set CA to false in both net_applies parameters, cite the CDSS sources, move the net-standard rounding cases to Rhode Island, and add California cases with FY 2026 values from CDSS ACIN I-46-25. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CARE countable income counts SNAP. The Case 8 household is an MCE household above the net standard in November and December 2024, so with the BBCE net test gone it receives the $23 FY 2025 minimum allotment in those two months (CDSS ACL 12-62, example 4), and its countable income is 30,046, not 30,000. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
US + core hub: taking this draft forward (2026-10-10). The review of #10033 (SNAP heat-and-eat) found that #10033 had picked up a narrower version of this fix, exempting only one- and two-person California households. It recommended that the all-size waiver here carry the California correction. This PR's owner session isn't running, so the hub is doing the reconciliation:
Commits to this branch are additive: no rebase and no force-push. If the owner session resumes, the hub's work is recorded under |
|
@hua7450, this PR changes one partner contract case, and partner cases are your call. It needs your go before it can land. The case.
The file is unchanged here; the case fails at this head with Why it moves. The case's own comment calls it a deliberate pin of California's net-income test: net income of $2,324/month is above the net limit, so the household is ineligible on
The hub's independent review recomputed these numbers and reproduced the failure. The three questions from CLAUDE.md:
If you say yes, the hub will update the case with the arithmetic above in its comment. The PR stays a draft until then. |
hua7450
left a comment
There was a problem hiding this comment.
Review: policy verified; partner request needs updating before merge
The policy holds up against the sources. California's MCE has no net income test for any household size, with or without an elderly or disabled member (ACL 12-62 examples 4–5, ACL 13-32). California denies zero-benefit households of three or more (ACL 14-63). SNAP isn't CARE or FERA income (7 U.S.C. 2017(b)). The test arithmetic matches the FY2026 CDSS figures.
Blocking
- Partner request: this PR changes more partner cases than the request names. Besides the CA edge case, 12 signature cases (6 CA, 6 federal) move from ineligible to eligible. Now that 10033 is merged, the 11 households it pinned as ineligible would also become eligible again. Please update from
main, run the partner suite and list every changed case with old and new values, so I can approve them together. - Merge conflict:
snap_child_support_integration.yamlconflicts with 10033. Keep this PR's version (eligible, $24). Thesnap_utility_allowance: 0input is no longer needed, because the model now gives $0 for that household.
Please fix
- Remove
changelog.d/hub-ca-care-excludes-snap-1010.fixed.md. 10065 already merged with that entry. - In
ca_snap_meets_allotment_requirement.py, drop the hard-codedsize < 3. One- and two-person units always get the positive minimum, soallotment > 0alone gives the same result. - Replace
test_ca_snap_eligibility.pywith YAML cases. It adds about 143 seconds, and YAML covers the same behavior.
Optional
- The
in_cacheck inis_snap_eligible.pyis redundant, because the CA variable already defaults to true outside California. - Add
#page=1to the ACL 11-11 reference. - Some new fixtures have unneeded
2026:input keys.
California Modified Categorical Eligibility (MCE) households lost SNAP when their net income exceeded the regular 100% poverty standard. MCE waives that eligibility standard for every household size. This sets California's elderly/disabled and other BBCE
net_appliesflags tofalse; net income continues to determine the benefit amount, and the MCE gross-income limit still applies. A separate California participation screen denies a zero calculated allotment, preserving the positive minimum for one- and two-person households.#10065 and #10033 are now merged into
main. This branch retains its earlier additive merges and merges currentmainthrough a plain merge commit; it does not duplicate #10065's changelog entry or change #10033's federal heat-and-eat policy. Case 8 (calendar 2024) has $30,000 wages and three $23 SNAP minimum payments in October, November, and December ($69 annually). California's poverty-guideline cutover is October: the monthly MCE gross ceiling rises to $2,510 against $2,500 wages. The working-person fixture explicitly supplies 30 weekly hours because the core YAML runner does not copy suppliedemployment_incometoemployment_income_before_lsr, which SNAP's earnings exemption reads. SNAP adds $0 to CARE/FERA income, so countable income remains $30,000.Comparison baseline:
mainat 8ae01aa; final PR head: 8f3369b. This continuation starts from pushed head55899ea8e97f432d5e863679df09ea9ffe94f2d7. Current-head validation and partner verification are reported below; historical results are labeled separately.Sources and effective date
Regression cases and arithmetic
mainalso computes a $0 automatic utility allowance for this household after Apply federal SNAP heat-and-eat SUA restriction in all states #10033; the zero-allowance input remains a controlled fixture assumption, with the same result as the default.snap_utility_allowance: 0input is removed; the current model derives $0. Gross ($36,275.59 − $5,200)/12 = $2,589.63 < $2,610; the earned deduction uses full wages, $36,275.59/12 × 20% = $604.59. Net before shelter is $1,776.04; rent $880 < half-net $888.02, so shelter deduction is $0. Rounded net $1,776 gives $298 − ceil($532.80) = −$235, raised to $24. 7 CFR 273.9(d)(2) supports the full-wage earned deduction.policyengine_us/tests/policy/baseline/gov/states/ca/cdss/snap/ca_snap_meets_allotment_requirement.yamlcontains 9 deterministic cases: eight CA pairs and a Washington control. Sizes 1/2 use net $0/$2,608 and $0/$3,525, giving $298/$24 and $546/$24. Sizes 3–8 use $1/$0 boundaries at nets $2,613/$2,614, $3,310/$3,311, $3,940/$3,941, $4,733/$4,734, $5,233/$5,234 and $5,960/$5,961. The Washington pair retains eligibility at both $1 and $0. Gross inputs floor the model's exact 200%-FPG limits rather than impose chart rounding. The YAML replacement is committed; final validation is listed below. Existing wage-based regressions retain the $1/$0 boundaries and one/two-person minimum cases below; the former Python test is removed at Ziming's request.Methodology
The original branch used zero-utility fixtures to isolate the MCE correction before #10033's heat-and-eat correction landed. Current
mainincorporates #10033, so the four-person January 2026 renter and the child-support household both derive a $0 allowance by default. Their net income and resulting MCE changes are now the same with default versus explicit zero utility inputs. The child-support pin is removed as requested. The earlier comparison with a $663 default SUA and $198 renter benefit is historical and does not describe currentmain.The net waiver and California zero-allotment screen use the existing 2015-10-01 modeled MCE baseline. Relative to current
main, the net-test flags become false and the participation screen is added from that date. This PR preserves #10033's default utility policy and does not extend modeled coverage to the legal February 2011 expansion. The existing $48,000-wages, no-rent four-person case gets $100 in January after the waiver, and above-200% gross-limit guards remain. These previously accepted fixture and baseline choices are unchanged; METHODOLOGY_CHOICE: no.SNAP → CARE → FERA regression
The June 2026 fixture has three people: a parent earning $40,000, a 16-year-old K–12 student earning $20,000, and a 14-year-old sibling. CARE counts both earners under the PG&E application income footnote: $60,000 > $54,640, the CPUC CARE ceiling for June 2026–May 2027; income remains below FERA's $68,300 ceiling. Medicaid, WIC, SSI, TANF and reported program receipt are explicitly excluded so that calculated SNAP alone supplies CARE categorical eligibility. CARE/FERA countable income is exactly $60,000 because #10065, now merged into
main, excludes SNAP from income.7 USC 2014(d)(7) excludes the schoolchild's wages from SNAP. Using the FY2026 CDSS table, attachment I: SNAP gross $40,000 / 12 = $3,333.33 is below the published $4,442 MCE ceiling. With no rent or utility allowance, net $3,333.33 − $666.67 earned deduction − $209 standard deduction = $2,457.67 rounds to $2,458 > $2,221. MCE waives that net test; $785 − ceil(0.30 × $2,458) = $785 − $738 = $47 monthly.
The fixture asserts SNAP eligible, CARE income eligibility false, CARE categorical and overall eligibility true, and FERA false. Current
mainretains the MCE net test, so the same household is denied SNAP; CARE categorical/overall eligibility are false and FERA is true (static reasoning, not a current executed comparison). No rent or utilities prevents a different month's annual SNAP calculation from conferring CARE onmain. The previous $45,000 renter's nondiscriminating FERA assertion remains replaced by this case; its SNAP arithmetic remains covered.Invariants and validation
The waiver applies to all California MCE household sizes, with or without an elderly/disabled member. Gross screening remains; net income still sets the allotment. The California participation screen uses only
allotment > 0: one- and two-person units already receive the positive minimum from the shared allotment calculation. The redundantin_cacheck is removed fromis_snap_eligible, because the California gate defaults to true outside California. Other states retain their existing behavior, including Rhode Island controls retaining the net test. CARE/FERA countable income remains invariant to a SNAP-only change through merged #10065.Final changed-file validation at
8f3369be39447c6a918328ca1e94d6b858106279:policyengine_us/tests/policy/baseline/)gov/states/ca/cdss/snap/ca_snap_meets_allotment_requirement.yamlgov/hhs/tanf/non_cash/meets_tanf_non_cash_net_income_test.yamlgov/states/ca/cpuc/integration.yamlgov/usda/snap/eligibility/is_snap_eligible.yamlgov/usda/snap/snap_child_support_integration.yamlpartners/analytics_coverage/edge_cases/federal/nutrition/snap/ca.yamlpartners/analytics_coverage/signatures/ca.yamlpartners/analytics_coverage/signatures/federal.yamlPassed at final head:
uvx ruff@0.15.5 format .(6,953 files unchanged),uvx ruff@0.15.5 check ., andgit diff --check.make formatalso passed before the partner-review commit. The working tree is clean.Current CI: Pull request run 38683845899 at the final head skipped all seven test/validation jobs because the PR is a draft, including Household API Partners. It provides no executed test validation.
Every current test runs one file per foreground process with the prescribed interpreter and these thread caps:
OMP_NUM_THREADS=4 OPENBLAS_NUM_THREADS=4 MKL_NUM_THREADS=4 VECLIB_MAXIMUM_THREADS=4 NUMEXPR_NUM_THREADS=4 OMP_WAIT_POLICY=PASSIVE. Standard retests use the unchanged Core CLI. The pre-edit audit used an untracked subclass of Core’s YAML test plugin to aggregate every failed assertion after checking all outputs in the same simulation, and to record monthly diagnostics. It preserved every original failure and returned nonzero for the old expectations. No installed runner or model source was modified; final-head retests use the standard CLI without that audit subclass. No microsimulation is run in this revision; the hub handles that separately. Commands, diagnostic captures, and logs stay in untracked evidence.Historical validation: earlier draft heads passed 23 and then 24 eligibility YAML cases, 15 utility-integration cases, and the former Python test with 40 generated and eight explicit Hypothesis examples. That Python test took 142.61 seconds of pytest time and is now replaced by deterministic YAML. Those historical Round 2 runs used an untracked shutdown plugin that skipped extra garbage collections and froze cyclic objects; shutdown-only finalizers or unraisable exceptions could be suppressed. Neither generated coverage nor those harness results are claimed for the replacement or final head. The original owner's 1,500-household seeded differential check predates the zero-allotment screen. GitHub run 38105600351 skipped all seven jobs and provides no executed validation.
The previous continuation's serial run passed the eligibility, CPUC integration, non-cash TANF, and child-support files. Its first paired-YAML run had eight passes and a one-person gross-threshold fixture failure; pushed continuation head
55899ea8e97f432d5e863679df09ea9ffe94f2d7contains the correction to the model's exact threshold. Its original partner expectations failed in the 24 predicted cases. These are historical results, separate from the final-head table above.Partner impact and landing blocker
The approval request expands to all changed cases observed in the three affected partner files after merging current
main, including the 12 original no-rent signature cases and the 11 rental households #10033 pinned as ineligible. The observed inventory below contains 24 cases: the California edge case, ten CA signatures, and thirteen federal signatures. It supersedes the earlier request that named only the edge case.The three affected files were audited at
55899ea8e97f432d5e863679df09ea9ffe94f2d7: 52 cases / 2,732 asserted outputs. Exactly 24 cases / 48 values failed the old expectations, and every failure was eithersnap($0 to the observed positive amount) oris_snap_eligible(false to true). The remaining 2,684 assertions met their existing expectations, including downstream program outputs.Partner inventory validation remains incomplete: 3 of 144 files have passing final-head process results, covering 52 cases in those passing processes. There are 141 files without a passing process result. The full inventory contains 623 cases. The 24-row table is the complete observed change set in the three audited files; an exhaustive runtime claim for all partner files is not made. Remaining filenames and individual counts stay in the untracked hub evidence. Final-head standard retests are distinguished from the pre-edit audit above.
Partner expectations are updated only for those 48 required output changes. The table below contains the complete observed set in these three files. Standard Core CLI retests of all three updated files passed; their per-file results are recorded in the validation table above.
All 24 rows below are observed model outputs from the complete three-file audit. Ziming Hua (@hua7450) decides approval for the complete observed set together. Partner approval and any required partner notification remain landing requirements. No PR comment or review reply is posted by this revision.
Partner cases changed (for Ziming's approval)
All cases are calendar 2026. File aliases denote these complete paths:
SNAP CA:policyengine_us/tests/policy/baseline/partners/analytics_coverage/edge_cases/federal/nutrition/snap/ca.yamlSignatures CA:policyengine_us/tests/policy/baseline/partners/analytics_coverage/signatures/ca.yamlSignatures federal:policyengine_us/tests/policy/baseline/partners/analytics_coverage/signatures/federal.yamlThe old columns are committed main expectations, read from the fixtures; main has not been separately rerun. The new columns are observed model outputs from the complete audit at
55899ea8e97f432d5e863679df09ea9ffe94f2d7. Every listed case changes both outputs; all other assertions in these three files meet their existing expectations.snap_ca_net_income_above_net_limit_all_year_38000 (ca)signature_22 (10 reqs)signature_28 (8 reqs)signature_44 (6 reqs)signature_58 (4 reqs)signature_60 (4 reqs)signature_61 (4 reqs)signature_63 (4 reqs)signature_78 (4 reqs)signature_79 (4 reqs)signature_80 (4 reqs)signature_8 (25 reqs, +2 dupes)signature_126 (2 reqs)signature_138 (1 reqs)signature_139 (1 reqs)signature_142 (1 reqs)signature_147 (1 reqs)signature_151 (1 reqs)signature_152 (1 reqs)signature_159 (1 reqs)signature_160 (1 reqs, +1 dupes)signature_161 (1 reqs, +1 dupes)signature_177 (1 reqs)signature_179 (1 reqs)Signature arithmetic: all annual totals use nine FY2026 months and three modeled FY2027 months. The complete audit confirms all five annual-amount groups shown here. Main already models both the FY2027 utility uprating and cents-then-whole-dollar net-income rounding used here. Correcting the earlier draft's flat-utility arithmetic changes neither methodology nor policy.
These cases retain the gross ceiling and positive-allotment screen. The eligibility correction does not restore #10033's heating/cooling SUA. The complete audit checked every asserted output in these files. Only the 48 SNAP/eligibility assertions required expectation changes; the other 2,684 assertions pass within their existing fixture tolerances.
Partner contract case (needs hua7450)
snap_ca_net_income_above_net_limit_all_year_38000 (ca)has old contract valuessnap: 0,is_snap_eligible: false. The observed new values are $1,122 annually and true. The zero-allotment screen does not deny this household because every monthly allotment is positive. Ziming's approval is requested for this case together with all signature cases above.January–September 2026: $38,000/12 = $3,166.67 gross, below the published three-person MCE ceiling $4,442. Subtract the $633.33 earned deduction and $209 standard deduction to get $2,324.33, rounded net $2,324. No utility or shelter deduction applies. $785 − ceil(0.30 × $2,324) = $87/month. October–December use modeled FY2027 maximum $808 and standard deduction $217: rounded net $2,316 gives $808 − ceil($694.80) = $113/month. Annual total is 9 × $87 + 3 × $113 = $1,122. The FY2026 source supports the first nine months; the last three use modeled FY2027 parameters.
The complete five-case edge-file audit observed exactly these two changed values; the other eight assertions met their existing expectations. Standard Core CLI retest results for the updated expectations are recorded in the final validation table above.
Historically, Round 2 at
a04cc81702f88092d360660551b3d885f97052f8passed the other four cases in this edge-case file and failed this case withsnap@2026: 1122.0 differs from 0.0; a separate eligibility-only run reproduced true versus false. Those historical runs do not establish complete merged-main partner impact.Known interactions
California's treatment is resolved and implemented. ACL 14-56, page 6 states that California chooses denial for CE/MCE households of three or more with zero benefits; counties discontinue ongoing cases after mandatory or verified-upon-receipt income/expense changes and deny zero-benefit recertifications. Its page 4 preserves the minimum for one/two-person MCE households and positive issuance-table allotments for larger households above the regular net standard, including ongoing allotments below $10. ACL 14-63, pages 1–2 confirms denial for three-or-more-person CE/MCE applicants, termination of ongoing zero-benefit cases, and denial at recertification; one/two-person CE households retain the minimum outside the initial month.
7 CFR 273.10(e)(2)(iii)(A)–(B) requires states either to deny or to certify and suspend an otherwise eligible household of three or more with no benefits. It excludes zeros caused by initial-month proration or the initial-month prohibition on issuing less than $10. Subparagraph (iv) requires certification beginning in the application month when those initial-month issuance restrictions prevent benefits but later months qualify. Subparagraph (ii)(C) provides the one/two-person minimum outside the initial month. The model does not represent application-month proration/issuance exceptions.
snap_allotment_before_eligibilityholds the existing maximum-minus-rounded-contribution calculation with the applicable minimum. Bothsnap_normal_allotmentandca_snap_meets_allotment_requirementuse it, avoiding an eligibility/allotment cycle or duplicate calculation. The California gate now requires only a positive calculated allotment; because one- and two-person units already receive the minimum, dropping the hard-coded size check preserves their treatment. The gate remains independent of the waived net-income standard and starts at the existing October 2015 modeled MCE baseline.Hand-worked January 2026 boundaries (CDSS FY2026 maximums $785 for three, $994 for four): three-person net $2,613 gives $785 − ceil($783.90) = $1, while $2,614 gives $785 − ceil($784.20) = $0; four-person net $3,310 gives $994 − $993 = $1, while $3,311 gives $994 − ceil($993.30) = $0. The existing YAML derives these nets from annual wages $42,330/$42,345 and $52,995/$53,010, respectively, with zero housing/utility allowance. One/two-person cases retain $24. The four-person $60,000-wages/no-rent case remains MCE but is denied participation: $5,000 − $1,000 − $223 = $3,777 net; max(0, $994 − ceil($1,133.10)) = $0.
Federal scope gap: other states currently can report categorical eligibility with a zero normal allotment (the existing Missouri three-person zero-benefit case in
gov/usda/snap/snap_categorical_eligibility_ceiling.yamlexpectsis_snap_eligible: true), and the model has no certified-but-suspended participation status or other-state denial-option screen. Federal law permits suspension as an alternative to denial, so a universalis_snap_eligible=falserule would be unjustified. This PR implements California's documented denial option only; other states retain their behavior. MCE exclusions for IPV-disqualified members and noncompliant household heads remain unmodeled. This revision files no public issues.Response to Ziming's review
main; the section “Partner cases changed (for Ziming's approval)” lists all 24 observed case changes and both old/new outputs. The three affected files were audited in full (52 cases / 2,732 assertions); only the 48 SNAP/eligibility values required updates. The remaining partner-suite status is reported above. Ziming's approval remains pending.gov/usda/snap/snap_child_support_integration.yamland removed the unnecessarysnap_utility_allowance: 0input. The model derives $0; final validation is in the table above.changelog.d/hub-ca-care-excludes-snap-1010.fixed.md, already merged through Exclude SNAP from California CARE and FERA countable income #10065.ca_snap_meets_allotment_requirement.pyreturns onlyallotment > 0; the shared one/two-person minimum supplies their positive allotment.gov/states/ca/cdss/snap/test_ca_snap_eligibility.pywith nine deterministic cases inca_snap_meets_allotment_requirement.yaml: paired California sizes 1–8 and a Washington control. Final validation is in the table above.in_cafromis_snap_eligible.py; the CA gate defaults to true elsewhere. The YAML replacement includes a Washington control.#page=1to ACL 11-11 in both BBCEnet_appliesparameter references and the source link above.2026:input wrappers fromgov/usda/snap/eligibility/is_snap_eligible.yaml; retained explicit periods where needed.The prior merge and cleanup commits remain intact. This continuation adds fast-forward commit
8f3369be39447c6a918328ca1e94d6b858106279(24 required partner outcomes and arithmetic comments), pushed tofix-ca-mce-net-income-test. No history was rewritten. All partner inputs and non-SNAP expectations are preserved.The previously accepted modeled effective date and utility-fixture methodology are retained: METHODOLOGY_CHOICE: no.
Hub microsimulation impact
Pending: the hub runs it. This PR remains a draft. Include at least
snap,is_snap_eligible,meets_snap_categorical_eligibility,ca_care,ca_fera, andhousehold_net_income; also inspectsnap_allotment_before_eligibilityandca_snap_meets_allotment_requirement. Use current-main baseline 8ae01aa and final head 8f3369b; supply population results and modeled years before landing.axiom: CDSS ACL 13-32 and ACL 15-42 (CalFresh MCE net income ceiling) encoded-correct (us-ca/policies/cdss/snap/fy-2026-benefit-calculation.yaml#calfresh_mce_net_income_eligibility_test_waived, companion test mce_waives_the_net_ceiling_but_net_income_still_computes_the_benefit)
The original owner checked that RuleSpec module, composition and companion test at rulespec-us main
16a667719; it expects a three-person MCE household above the net standard to be eligible for $97. Execution was blocked by the local engine'sauto_gate_outputscompleteness check. That historical MCE parity status is preserved; the CARE/FERA correction is already merged in #10065.axiom: TheAxiomFoundation/rulespec-us#1098 queued
Parity for California's zero-allotment participation screen (CDSS ACL 14-56, page 6; ACL 14-63, page 2) is separately queued in the linked issue; the net-waiver
encoded-correctevidence does not cover this screen. This revision preserves both existing axiom declarations.