Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
PR Review: Add Maine HEAP Fuel AssistancePR #10437 (author: hua7450), head
The PR has no comments or reviews yet, and it touches no partner test file. Path prefixes:
Sources read for this review:
SummaryWhat is right. The published values and most rules are encoded correctly:
There are no critical findings and four should-address items:
There are also six suggestions:
Status.
Critical (must fix)None. Should addressS1. Railroad retirement and non-Social Security survivor annuities are not counted, although rule 3(C)(1)(i) counts regular annuity payments
S2. TANF is left out on the plan's authority, although the rule's all-sources definition reaches it, while long-term disability is counted in 2025-26 on the rule's authority against the plan; neither choice is recorded
S3. Eligibility requires a fuel listed in the points matrix, which the rule does not, so OTHER-fuel households with their own bill get $0
S4. Nineteen income and expense entries, and one benefit branch, have no test that would fail if they were dropped
SuggestionsG1. Unsubsidized heat-in-rent renters with an UNSPECIFIED fuel get $0.
G2. The 2026-27 dollar value per point is an uncorroborated carry-forward.
G3. Count
G4. Record the plan-versus-rule and plan-versus-chart readings in the body and the backlog.
G5. Add Wayback captures for three URLs that MaineHousing or the Secretary of State overwrite.
G6. Reconsider the stick-built default for
Verified correctValues against sources:
Hand-checked expectations (24). All are 2026 unless noted:
Batch checks:
Wiring and housekeeping:
Checklist results (LIHEAP batch):
Axiom line assessmentValid:
CI status27 pass, 0 failed, 3 skipping, none pending. I re-checked
Branch status
0 critical, 4 should and 6 suggestions are open at this head. Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Every points-matrix cell matches its edition, the income limit reproduces all 20 published chart rows, $22 a point and the $21 subsidized amount check out, Social Security correctly counts including Medicare deductions (rule 3(C)(1)(c)), and 24 expectations hand-check. Four should-address items: (1) railroad and survivor annuities aren't counted, though rule 3(C)(1)(i) counts regular annuities ($748 vs $462 for a $20k railroad retiree); (2) TANF follows the plan over the rule while long-term disability follows the rule over the plan, unrecorded; (3) eligibility requires a listed fuel, which the rule doesn't, so OTHER-fuel households get $0; (4) 19 income and expense entries and the public-housing branch are untested. Six suggestions. Full report in the comment above.
Apply DTrim99's round 1 review: tests that pin every income source, the rule and documentation fixes, and source-conflict candidates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…into me-liheap-wave1d # Conflicts: # policyengine_us/parameters/gov/hhs/liheap/fpg_limit.yaml # policyengine_us/programs.yaml
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10437 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 1 9 +8
Lines 15 169 +154
Branches 0 2 +2
==========================================
+ Hits 15 169 +154
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:
|
|
Thanks, David. Round 1 is in
The PR body and TheAxiomFoundation/rulespec-us#1898 now describe this head. I did not run the tests locally; CI passed every check at |
PR Review (round 2): Add Maine HEAP Fuel AssistancePR #10437 (author: hua7450), head
Path prefixes:
SummaryAll four round-1 should-address items are fixed, and each fix is pinned by a test that would fail without it.
Suggestions.
One new should-address item, introduced by the S3 fix.
Status.
0 critical, 1 should and 1 suggestion are open. Prior findings
New findingsCriticalNone. Should addressN1. The S3 fix's 0-point OTHER row makes 2025-edition points negative or zero for subsidized households that pay their own heat
SuggestionsG5 (narrowed). Make dated captures of the two rule documents.
VerifiedHand-checked new and changed expectations (all period 2026):
Mutation check of the fix commit's new terms. Each would fail a test if removed:
On Merge resolutions (both blocks correct):
Main-side guards:
Sources re-read this round:
Main's 8 newer commits touch none of Maine HEAP's dependencies. They are AK HAP, the Maine childless EITC, the self-employed health insurance deduction, the AxiomValid at this head:
CI35 pass, 0 failed, 0 pending. I re-checked
Branch
0 critical, 1 should and 1 suggestion are open at this head. Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes, round 2: 0 critical, 1 should. All four round-1 shoulds are fixed and pinned. New (from the S3 fix): OTHER scores 0 fuel points, so under the 2025 edition a subsidized apartment tenant paying a pellet bill in Kennebec is paid -$22 (the rule's pellet row gives $110). Score OTHER at the lowest unlisted-fuel row (5 in 2025, 3 in 2026), or floor at zero with a pinning case. Full report in the comment above.
Apply DTrim99's round 2 review: OTHER fuel scores the lowest row of the fuels it stands for, tests for it, and candidate code paths. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…p-wave1d # Conflicts: # policyengine_us/programs.yaml # source_conflicts/candidates.yaml
Adds Maine HEAP Fuel Assistance, the state's LIHEAP regular heating benefit administered by the Maine State Housing Authority (MaineHousing) under 99-346 CMR ch. 24, for the 2025-26 and 2026-27 heating seasons (model years 2026 and 2027). The model counts citizens, nationals and qualified aliens in household size (all members' income still counts), tests income against the greater of 150% of the poverty guideline and 60% of state median income (or SNAP or TANF receipt), requires a heating bill or heat included in the rent, and scores points for dwelling type, county, fuel, at-risk members and subsidized housing. It adjusts the points by the household's poverty-level multiplier, prorates them for ineligible members, rounds up and multiplies by the dollar value per point. Subsidized tenants with heat included in rent receive $21.
Fixes #10427
The two seasons use different rule editions: the 2025 edition (SOS filing 2025-135, the same matrix as the 2024 edition) for 2025-26, and the replacement rule effective June 29, 2026 (SOS filing 2026-134) for 2026-27, which adds 8 base points and changes every points table and the multipliers.
The dollar value per point is an estimate. MaineHousing announces it after each federal award and has published none for FFY2025-FFY2027. $22 is inferred from the FFY2025 and FFY2026 plans' $1,012 maximum (the 2025-edition maximum of 35 points x 130% = 45.5, rounded up to 46, x $22), which also fits their $88 minimum (4 x $22). The draft FFY2027 plan in MaineHousing's April 2026 board packet (section 2.6) repeats $88 and $1,012 beside a reviewer note to obtain the figures, so it supplies no new value; at $22 the June 29, 2026 matrix pays from $154 (10 points x 0.7 = 7) to $1,188 (30 points x 1.8 = 54). MaineHousing's October 2026 board packet expects the FFY2027 Notice of Award by the end of October, and rule 4(A) promises the value within 15 days of the award. The model reuses $22 for 2026-27 until MaineHousing announces a value.
Regulatory authority
Eligibility
defined_for = StateCode.MEme_heap_household_sizesumsis_citizen_or_legal_immigrant; size 0 is ineligibleme_heap_income_limit, prior-year guideline; reproduces the 2025-26 chart for sizes 1-10 and the 2026-27 chart. For 10 people in FFY2026 the rule's 70% row and the chart give $102,008 (60% SMI), while plan 2.1 assigns 150% FPG ($97,725); the model follows the rule and the chart (candidateus-me:liheap-size-ten-income-limit)has_heating_expense) or an Indirect Determinable Energy Cost (heat included in rent,heat_expense_included_in_rent); a household with no bill and heat outside the rent is ineligible.OTHER(wood pellets, corn, bio-fuel, biobricks) qualifies with its bill, and rule 5(A)(5) pays households heating with these fuels by direct check.SOLARuses the electricity row (grid-tied home with electric heat), and an off-grid solar-only home has no electricity bill, so it has no energy cost and is ineligible.NONEfails the functioning-heating-system test.UNSPECIFIEDis ineligible unless subsidized with heat in rent (#9754)Countable income
me_ssp), unemployment, workers' compensation, strike benefits, alimony, child support, VA benefits, cash gifts (financial_assistance), pensions and annuities, military retirement, Railroad Retirement and non-Social Security survivor annuities (3(C)(1)(i) "regular annuity payments"), long-term disability, Maine paid family and medical leave benefits (pfml_benefits, payable from May 1, 2026), interest, dividends, estate and trust income, rental income, and the household's TANF grant, counted once from the take-up-gatedtanfus-me:liheap-tanf-and-disability-income): a TANF family of three heating with oil in Penobscot counts $13,140 and receives $704, against $748 with TANF excludedBenefit
OTHER(inferred)OTHERstands for wood pellets, corn, bio-fuel and biobricks, which have noheating_typevalue, so its points are an inferred mapping: the lowest row of those fuels. That is 5 in the 2025 edition (wood pellets 5, corn 5, bio-fuel including bio-bricks 6) and 3 under the June 29, 2026 rule (wood pellet 4, biobrick 3). The 2026 rule has no corn row, although rule 5(A)(5) and MaineHousing's HEAP page still list corn, so a corn household gets the biobrick row's 3. Every otherOTHERhousehold scores at or below its own fuel's row: a pellet household gets 3 against its row's 4 in 2026-27, and a bio-fuel household gets 5 against 6 in 2025-26.me_heap_dwelling_type, defaulting to stick-built or modular, the all-state LIHEAP dwelling default.Not modeled
heating_typevalue; these households reportOTHER, which is eligible with its bill and takes the lowest of those rows (see Benefit).WOODuses the cordwood rowShared parameter
The income limit reads
gov.hhs.liheap.fpg_limit(150%, 42 U.S.C. 8624(b)(2)(B)(i)), which main gained with #10342 (North Dakota LIHEAP). This branch takes main's file and adds no federal parameter.Source conflict candidates
Two
source_conflicts/candidates.yamlentries record where the model follows the rule over the FY2026 plan (follows: statute,state: ruled), each listing the files that implement its reading:us-me:liheap-size-ten-income-limit(FFY2026): the 2025 edition's 4(A) 70% row and the chart ($102,008) against plan 2.1 (150% FPG, $97,725). Code:eligibility/me_heap_income_limit.py.us-me:liheap-tanf-and-disability-income(FFY2026-2027): rule 1(EE) and 3(C)(1) against plan 1.9's unchecked TANF and insurance boxes. Code:income/sources/unearned.yamlandme_heap_income.py.Review round 1
Commit 7d4e456 addresses DTrim99's round 1 review; cc78d48 merged main at c55b806.
OTHERwith a bill became eligible; the eligibility test no longer requires a fuel listed in the points matrix.other_medical_expenses, the public housing branch of the $21 benefit and anOTHERhomeowner./charts/page to the October 15, 2026 capture of the HEAP page.Declined:
UNSPECIFIEDfuel.heating_typeis a required input, andUNSPECIFIEDpays $0 except for subsidized heat in rent; Default heating_type to electricity and remove the UNSPECIFIED-gated state heating adapters #9754 tracks the default.Review round 2
Commit 64e3aeb addresses DTrim99's round 2 review; the head, 143d9b8, merges main at a24c9cb, keeping AK, NM and ME on the LIHEAP coverage line and the Maine candidates in id order.
OTHERtakes the lowest row of the fuels it stands for (see Benefit). At 0 fuel points, a voucher tenant in a Kennebec apartment who paid their own pellet bill scored 6 + 2 + 0 - 9 = -1 point and received -$22 under the 2025 edition. Newme_heap.yamlCase 7 pays that tenant $110: wages of $11,427 are 73% of the guideline (multiplier 1.1), and 6 + 2 + 5 - 9 = 4; 4 x 1.1 = 4.4, rounded up to 5 points.me_heap.yamlCase 6, anOTHERhomeowner, goes from $176 to $264 (9 + 2 + 5 = 16; 16 x 0.7 = 11.2, rounded up to 12).payment/me_heap_points.yamlCases 3 and 4 add anOTHERhousehold: 16 points in 2026 and 15 in 2027.OTHERscored, an eligible household that pays for heat has at least 1 raw point under the 2025 edition (apartment 6 + unlisted county 0 + wood 4 - 9) and 9 under the 2026 rule. The multiplier is at least 0.7 and the eligible share is above zero, so every points-based benefit rounds up to at least one point ($22).code: [].value_per_point.yamlcomment gives the 2026-27 minimum as $154.Declined:
Test plan
49 YAML cases in 9 files:
me_heap.yaml7,me_heap_household_size.yaml1,me_heap_income.yaml12,integration.yaml4,eligibility/me_heap_categorically_eligible.yaml2,eligibility/me_heap_eligible.yaml4,eligibility/me_heap_income_limit.yaml3,payment/me_heap_income_multiplier.yaml4,payment/me_heap_points.yaml12. They cover the income limit against both published charts and a size where 150% FPG exceeds 60% SMI; counted members, every earned and unearned source with a distinct amount, TANF, the per-source floor, the high-school student rule and both sides of the medical-expense adjustment (premiums and other medical expenses); categorical SNAP and TANF receipt; fuel and housing eligibility, includingOTHERwith a pellet bill; the multiplier band edges and rounding in both editions; every dwelling type and fuel, includingOTHER's inferred row in both editions, high, low and unlisted counties, priority points, the subsidized adjustment (including a voucher tenant paying for pellets, $110), base points, proration and the round-up guard; the plan maximum ($1,012), the $21 benefit for voucher and public housing tenants, and four end-to-end households, one of which heats with oil, has no bill and no heat in the rent, and is ineligible. Each paying case with heat outside the rent carries a heating bill for its fuel, taken from EIA's October 2026 Short-Term Energy Outlook winter fuels table and the Maine Department of Energy Resources price survey of January 5, 2026 (cordwood and pellets); the coal entry uses the heating-oil amount because neither source publishes a residential coal price. Expected values are hand-computed from the rule tables. CI passed at cc78d48 (35 of 35 checks, covering the 48 cases then in the folder). The round 2 cases (me_heap.yamlCase 6 re-pinned to $264, Case 7, and theOTHERhousehold inpayment/me_heap_points.yamlCases 3 and 4) were hand-derived and not run locally, and CI has not yet run at 143d9b8.changelog.d/axiom: TheAxiomFoundation/rulespec-us#1898 queued
🤖 Generated with Claude Code