Repository navigation
Add Mississippi LIHEAP regular heating assistance - #9727
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9727 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 5 +1
Lines 76 96 +20
Branches 2 1 -1
=========================================
+ Hits 76 96 +20
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:
|
…nd tests - Count farm_operations_income with self-employment income (Rule 6.11 C, I) - Remove the terminal zero bracket that duplicated the income limit in 17 income-band tables; keep it where it encodes a published gap - Disclose that the countable unearned list follows the manual where the state plan checklist differs - Add metadata.period to parameters - Add farm income, band-table and end-to-end tests Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Replace the deprecated dividend_income alias. Results are unchanged because the alias only adds ordinary_dividend_income. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Program ReviewPR #9727: Add Mississippi LIHEAP regular heating assistance (author: hua7450, head Scope: MS LIHEAP regular heating assistance (MDHS Division of Community Services), FY2026 values dated 2025-10-01. Crisis, cooling and weatherization are out of scope. The PR adds 29 parameters, 5 variables, 5 test files (25 cases), a changelog fragment and a Path abbreviations used below:
Source Documents
The MDHS-hosted manual copy ( Branch Status
Critical (Must Fix)1. Rule 7.8 D: the Electric column is never paid to households whose main heat is not electric
2. Rule 6.3 B: when the head is undocumented, only members 18 and older contribute income
3. Railroad Retirement benefits are omitted from the countable unearned income list
Should Address1. Invalid multi-page anchors, a skipped operative page, and a missing governing rule
2. Reference titles name no rule, 2025-10-01 values cite only a later edition, and the FY2026 plan is not cited in metadata
3. Non-standard test periods
|
| Item | Source | Checked | Match | Notes |
|---|---|---|---|---|
income_bands/1-20 thresholds |
Matrix pp.1-6; manual PDF pp.59-64 | 78 finite thresholds + 5 deliberate zero brackets | 78/78 | Anomalies (31,313; 35,325; 17,633/17,664; 68,488/69,489; size-10/18/20 tops) re-verified at 600 dpi |
maximum_payment (band-1 caps) |
Matrix p.1 | 8 sourced entries | 8/8 | Propane 800, Natural Gas 700, Wood/Other 400 (x5), Total Electric 1,500. SOLAR/NONE/UNSPECIFIED = 0 has no source (Suggestion 9) |
payment_reduction |
Matrix pp.1-6 | 8 sourced entries | 8/8 | 50 / 50 / 40 / 100 |
| Matrix cells reproduced by the formula | Matrix pp.1-6 | 93 rows x 4 encoded columns = 372 | 372/372 | Electric and Maximum Benefit columns (2 x 93 cells) not encoded (Critical 1) |
propane_exception_* (3 files) |
Manual PDF p.63; matrix p.5 | 3 | 3/3 | Size 16, band 4, propane $350 |
income_limit |
Manual PDF p.22 (Rule 6.1 C); plan p.8 | 1 (0.6) | 1/1 | |
| 60% SMI limits (test) | Manual PDF p.58; ACF FY2026 SMI table | 20 sizes | 20/20 | floor(0.6 x 85,708) = 51,424 x size share, floored |
adult_age |
Manual PDF pp.22, 30, 33 | 1 (18) | 1/1 | Rule 6.1 D, 6.11 D(3), J(1) |
maximum_table_size |
Manual PDF pp.58, 64 | 1 (20) | 1/1 | |
unearned_income_sources |
Manual PDF pp.29-33 | 13 entries | 13/13 traceable | railroad_benefits omitted (Critical 3) |
| Test expected values (hand-computed spot checks) | Matrix pp.1, 5-6; manual PDF pp.23, 58 | 8 | 8/8 | Includes the 2022 backfilled case and the farm-loss case |
| Value mismatches surviving code-path trace and 600-dpi re-render | 0 | Logic gaps are Critical 1-3 |
Validation Summary
| Check | Result |
|---|---|
| CI | 37/37 pass on b7885ff92a |
| Head moved since review | No |
| Branch freshness | 7 ahead, 12 behind main; no overlap with PR files |
| Changelog | changelog.d/ms-liheap.added.md present; type added matches a new program |
| Hard-coded values | None (only 0 and 1 literals) |
| Duplicate variables | None; one parameter duplicates gov.hhs.liheap.smi_limit (Suggestion 7) |
| Vectorization | Correct (where, enum/string parameter indexing, no Python if on arrays) |
defined_for and entities |
Correct; AL row in T/integration.yaml:1-12 confirms state gating |
| Parameter values vs. sources | 0 mismatches; 2 matrix columns not encoded (Critical 1) |
| Regulatory logic | 3 verified mismatches: Rule 7.8 D, Rule 6.3 B, Rule 6.11 F(3) |
| References | 9 in-file multi-page anchors plus 3 in the PR body; 1 skipped operative page; 6 titles without a rule; FY2026 plan absent from metadata |
| Tests | 25 cases; 8/8 spot checks match; 1 test asserts a value contrary to Rule 6.3 B; 1 test asserts the Rule 7.8 D omission; 3 band tables without in-band tests |
| Test period format | 14 cases use 2_026 / 2_022 |
| Microsim / aggregates | ms_liheap not in any benefit aggregate (consistent with IL/MA/DC LIHEAP); UNSPECIFIED default biases ms_liheap downward |
| SNAP immigration (#9661) | Not used; immigration enters via is_citizen_or_legal_immigrant only |
programs.yaml |
Entry present (verified_years: "2026", status partial); conflicts expected with 5 sibling PRs |
| Axiom line | Present, but n/a for a new program (Should 7) |
Review Severity: REQUEST_CHANGES
3 critical and 7 should-address findings. All parameter values reproduce the published FY2026 matrix and manual, and CI is green; the critical items are benefit and income logic that departs from Rules 7.8 D, 6.3 B and 6.11 F(3).
Next Steps
- Critical 1: encode the Electric and Maximum Benefit columns, pay the main-fuel cap plus the electric cap (within the Maximum Benefit) for non-total-electric households, broaden the energy-responsibility test, and update
T/ms_liheap.yaml:12-22. - Critical 2: restrict income to members 18 and older when the head is undocumented, and correct
T/ms_liheap_income.yaml:55to 12,000. - Critical 3: add
railroad_benefitstoP/unearned_income_sources.yaml. - Should 1-2: split multi-page anchors into one reference per page, add PDF p.31 and the Rule 6.1 D page, put rule numbers in titles, and add the FY2026 matrix and plan references.
- Should 3-5: change test periods to
2026/2022, convertms_liheap_household_sizetoadds, and rewrite parameter descriptions and labels. - Should 6: add band-threshold tests for sizes 10, 18 and 20 (including 35,325 / 35,326), propane-exception negative controls, and the untested branches.
- Should 7: open a dispatch-ready
pe-parityissue in rulespec-us and update the axiom line toqueued. - Before merge, agree on
programs.yamlordering with the five sibling LIHEAP PRs, rebase onmain, and confirm CI.
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes per the program review above (#9727 (comment)): 1 critical (Rule 7.8 D: non-total-electric households receive the Electric column plus their main-fuel column, capped at the Maximum Benefit; the PR pays the main fuel only, understating awards by up to $700), plus the should-address items in the report. All 78 income-band thresholds, 372 matrix cells and 20 income limits match the sources. Run /fix-pr 9727 or address the list.
Pay the electric column to households not heated by electricity, in addition to the main heating fuel column (Rule 7.8 D), and accept any energy bill as responsibility (Rule 6.1 A). Count Railroad Retirement benefits. Compute the income limit without a division round trip. Use single-page references that name the rule, add FY2026 plan and matrix references, fix test periods and names, make household size a plain sum, rewrite descriptions and labels, and add boundary tests for the remaining band tables, the propane exception and the housing branches. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Thanks for the review. Fixes are in Critical
Should-address
Suggestions
|
Program Review — Round 2PR #9727: Add Mississippi LIHEAP regular heating assistance (author: hua7450). Round 1 reviewed head Path abbreviations:
Manual page numbers below are PDF pages of the January 2026 Title 18 Part 24 PDF (printed page + 1). Matrix page numbers refer to the FY2026 benefit matrix. Status of round-1 findingsThe posted round-1 report listed 3 critical and 7 should-address items. The formal review summary named only Critical 1, but all three critical items are assessed here.
Tracked deferral: the Round-1 suggestions the author reports as taken, all verified:
Rule 7.8 D logic vs. the matrix and the Rule 7.8 C example
New and changed test expectations, hand-checked against the matrix page images: Critical (Must Fix)None. Should Address (remaining)None. Suggestions
CI Status34 of 37 checks pass on
Concurrent runs for other PRs (in-eap, or-liheap) fail the same shards (states-shard-3 and ssa-usda), and PR #9758 ("Reduce USDA and state CI memory pressure without adding runners") is open. A re-run of the three jobs is still needed before merge. Branch: 9 commits ahead of Review Severity: APPROVE0 critical and 0 remaining should-address findings. Critical 1 and 3 and all 7 should-address items are fixed. Critical 2 is resolved by a documented reading of Rules 6.3 B and 6.11 J(2) that reconciles both rules. The new Rule 7.8 D logic reproduces the Electric column in all 93 rows, never exceeds the Maximum Benefit, and matches the manual's Rule 7.8 C example ($1,100 for a natural-gas household at $14,500). The three CI failures are runner kills and a batch timeout outside the PR's files, with no assertion failures. The suggestions are optional. |
DTrim99
left a comment
There was a problem hiding this comment.
Round 2 (#9727 (comment)): the critical Rule 7.8 D item and all should-address items are resolved; rulespec-us#1467 is dispatch-ready. Remaining suggestions are optional.
…into ms-liheap # Conflicts: # policyengine_us/programs.yaml
Adds Mississippi LIHEAP regular assistance using FY2026 rules, with existing inputs only. Mississippi pays energy bills up to a cap per energy type. For a one-person household with $10,000 of countable annual income, the caps are $1,300 for an all-electric home, or $700 for propane, $600 for natural gas and $320 for wood or another fuel, plus up to $600 toward the electric bill of a home that does not heat with electricity.
Year convention: undated formulas follow the model's existing parameter backfilling. Earlier years use the earliest available state schedule with period-specific federal median income; these are unverified historical estimates. The registry records
verified_years: "2026".Household and immigration basis
Household size is the number of documented members. Rule 6.3 B lets documented members receive assistance when the head is undocumented, and under Rule 6.3 C an undocumented member's income "must be included in determining the household's total income" while "this individual will not be counted in determining the household size". Rule 6.11 J(2) says a minor's Social Security or SSI "must be included and is listed under the parent or legal guardian in the household", so a minor's unearned income is counted in every household, including one whose head is undocumented. Minors' earnings are excluded (Rule 6.11 D(3) and J(1)). The existing status input approximates the required documentation; boarder and attendant arrangements under Rules 6.5-6.6 are not modeled.
Why the published income bands are kept
Rule 7.8 A (manual PDF page 39) and FY2026 plan section 2.5 (page 9) direct use of the attached benefit matrix. Neither defines 25-percentage-point poverty bands or a rounding rule. The matrix prints $31,313 for size 3 where that pattern yields $33,313, and $35,325 for size 10 where it yields $32,575. It also extends size 8's fifth band to $70,965 and size 12's fourth band to $77,136. The tables are encoded as published.
Limitations
heating_typemust be sent. An unspecified fuel receives no payment unless heat is included in rent.Crisis assistance and energy equipment are out of scope.
Sources:
Validation: 39 Mississippi YAML cases cover the published band boundaries and anomalies for every table, the electric column, the propane exception and its neighbours, income limits, bill caps, household treatment, and business profits and losses. All 93 matrix rows and all 20 published income limits were reconciled against the source. CI runs the test suite.
axiom: TheAxiomFoundation/rulespec-us#1467 queued