Repository navigation
Conversation
Sum each state's regular LIHEAP payment in a new liheap variable, add an Illinois regular heating payment without crisis assistance, add a Michigan Home Heating Credit registry entry, and record each state's cooling treatment in its registry note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add regular_payments.yaml to the aggregate-list integrity test, which checks that each member exists, is state-gated and is not dropped between year blocks. Say that Rhode Island plans no regular cooling payment, since its FY2027 plan still allows a leftover-funds cooling grant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Points the eligibility reference at its first cited page, adds the DHHS energy assistance page, describes the guideline lag by federal fiscal year, and checks the national liheap total. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The national `liheap` total evaluates every state's formula over a mixed-state population, which no household test does. Two patterns on main raised errors there: - 26 formula files passed options=[ADD] to an entity call. Core's Microsimulation.calculate_add rejects the keyword an entity call passes. The option is redundant: a plain read already sums a monthly variable over the year through the same Core function. - The DC and Illinois payment formulas look up a matrix by an income level that is 0 for households outside the state. Add the floor Maryland and Kansas already use. Also: - Reword the North Dakota registry note: the state reserves an optional direct cooling payment, so its cooling component is not only equipment. - Add a `liheap` case with Texas, DC and Illinois households in one simulation. - Add a code-health check against options=[ADD] and options=[DIVIDE]. - Check that every state payment in the LIHEAP registry entry is in the list `liheap` sums. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
PolicyEngine/policyengine-core#647 fixes the cause in Core: it lets a Microsimulation accept the keyword an entity call passes with options=[ADD] or options=[DIVIDE]. Once that is released the option works again, so a check that bans it here would be wrong. The 26 formula files stay without the option, which was redundant and lets `liheap` run on today's Core. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ogram prefix Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Add Nebraska LIHEAP regular cooling assistanceSummaryThis PR adds Nebraska's Cooling Assistance payment (
Three things need changing before approval:
CI is green (36 of 36). The branch merges cleanly with main and with each of the eight siblings. Critical (must fix)None. Should address1. The UNSPECIFIED-fuel gate excludes households that Nebraska's heating formula pays, and "as in every state LIHEAP program" is not accurate for Nebraska Where: The cooling payment does not depend on heating fuel:
Nebraska's own heating formula pays an unspecified fuel when the home is multi-family:
The body's sentence " Household:
Fix: drop 2. Renters with cooling in the rent get $0, the opposite of the heating variable's reading of the same plan sentence, and the choice isn't recorded Where: The two plan sentences are the same:
That reading carries over to cooling:
The PR instead requires The line 40 comment says "Cooling paid only through rent has no existing input". The facts the heating test uses for this case do exist: The body says "Source-conflict register: not applicable". The rulespec-us issue calls this $0 "a settled modeling decision", but nothing in the PR records who settled it. Household:
Fix, either:
3. Mutation gap: the citizenship term on the young-child route has no test Where:
476 NAC 2-002.02, p. 1 says: "A person who does not meet the citizenship and residency requirements must be excluded from a household for purposes of determining eligibility." Household:
Fix: add this case to Suggestions
Verified correctA separate regular cooling benefit exists in both claimed years.
Heating and cooling in one year: both are paid, so there is no double count. Nothing limits cooling to households without heating help. The supporting text:
Amounts and tiers.
Periods. The parameters are dated 2025-10-01 and are read on 1 January. So period 2026 is FY2026, whose cooling season is summer 2026, with the 2025 guidelines. Period 2027 uses the 2026 guidelines ( Income test. Plan item 3.1 sets 150% of the HHS guidelines, the same as heating item 2.1 and 476 NAC 2-002.01. Qualifying routes.
Citizenship. Qualifying members must pass 476 NAC 2-002.02 through the same SNAP status variable used for household size (Case 5). Fuel type. 476 NAC 3-003.01 lists fuel type among the payment factors, and FY2027 plan item 3.5 checks it, but neither cooling table varies by fuel. The PR follows the tables, and a home with no heating ( Refactor.
National total and registry.
Mixed-state lookups. There are no state-gated int or enum keys. The dwelling type is compared, not used as a key, and the brackets read a float ratio. Mutation coverage, apart from Should 3. Each term has a case that fails without it:
Hygiene. Descriptions follow the template. Labels, units, periods and Hand checks (2025 guideline $15,650 for one person and $21,150 for two; FY2027 $15,960):
Axiom line assessment
Two things to refresh:
CI statusAll 36 checks pass at Branch statusThe head is 12 commits behind main ( Pairwise test merges with all eight siblings are clean: AR #10744, GA #10746, OK #10748, LA #10750, KY #10752, SC #10754, AL #10756 and VA #10760. This PR edits Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting three changes; none is critical, and the core is right. The cooling table matches both Guidance Documents cell by cell, the tiers, the 20% disregard, the guideline lag and the program-year dating match the sources, the heating refactor returns exactly what main returns, and Nebraska pays heating and cooling to the same household in one program year, so the national total doesn't double count.
- The UNSPECIFIED gate. Nebraska's own heating formula pays a multifamily home whatever the fuel (
integration.yamlCase 7 pays $300 withheating_type: UNSPECIFIED), and the cooling amount never depends on fuel. The description's "as in every state LIHEAP program" isn't accurate here. Drop the term, or let it pass wherever heating pays and label it a convention. - Renters with cooling in the rent get $0. Plan item 3.3's cooling sentence is word for word the heating sentence in item 2.3, which
ne_liheap_eligiblereads as met by a market-rate renter with heat in the rent, and 476 NAC 3-002.02 covers cooling payments too. Mirror heating, or record the choice instead of "Source-conflict register: not applicable". - The citizenship term on the young-child route has no test, by my reading. A case is sketched in the report.
Details and households are in the report above. CI is green at a3d04b54c5.
Addresses DTrim99's round-1 review; upstream main merged first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, David. This push (head Should address
Suggestions
Axiom issue. TheAxiomFoundation/rulespec-us#2189 now points at this head. Updated: the review and CI sentences, the scope, the Tests were not run locally. CI is running at |
Adds Nebraska's Cooling Assistance payment from the 2026 cooling table, by income tier and dwelling type, for households with a qualifying member.
Fixes #10757
Builds on the national LIHEAP total from #10730, merged on 2026-11-12: this PR adds
ne_liheap_coolingtogov.hhs.liheap.regular_payments.What and why
476 NAC 2-003 requires a qualifying member: someone 70 or older, a child under 6 in a household receiving ADC, someone with a medical condition heat aggravates, or someone who got a state air conditioner in the last four years. The 2026 cooling table pays single-family homes $700, $595, $525 or $478 and multifamily homes $385, $335, $300 or $273, by income tier (tops 70%, 100%, 130% and 150% of the guideline); "between two income levels, use the row with the higher amount". Income uses heating's test and 20% earned-income disregard (Guidance Document, pp. 2-3). The season runs June 1 through August 31 (476 NAC 1-004.04), and DHHS pays "one time per cooling season" (Energy Assistance page).
ne_liheap_payment_fpg_ratioholds heating's income-ratio calculation, now shared. Every existing heating boundary lands in the same tier.ne_liheap_cooling_eligible: heating's income test;has_cooling_expense, or utilities in the rent of an unsubsidized renter (tenant_pays_utilitiesfalse with positiverent, and neitherreceives_housing_assistancenoris_in_public_housing); and a member 70 or older, or a child under 6 in a unit with positivetanf. The qualifying member must pass the SNAP citizenship rule (476 NAC 2-002.02).ne_liheap_cooling: the single-family or multifamily table, chosen byne_liheap_dwelling_type. New parameters undercooling/.verified_yearsis "2026-2027". FY2027 plan item 3.5 (p. 12) makes the table subject to update closer to the cooling season based on funding.heating_type, including NONE and UNSPECIFIED, can be paid (Nebraska heating likewise pays a multi-family home whatever its fuel).ne_liheap_eligiblereads item 2.3, with the same subsidy test: an unsubsidized renter with utilities in the rent qualifies, and a household with housing assistance or in public housing needs its own cooling cost. The project lead set this on 2026-11-13, replacing the 2026-11-09 $0 treatment.Test plan
Tests were not run locally. This PR now targets
main, so CI runs them.liheaptotal.make format(ruff)changelog.d/Not modeled
has_cooling_expenseis a PolicyEngine convention of the all-state cooling work. 476 NAC 2-003 names no air conditioner or separate cooling cost, and plan item 8.3 (p. 22) describes a cooling mass run for current cases, so a household with no reported cooling cost and no utilities in the rent can be paid by Nebraska but gets $0 here.axiom: TheAxiomFoundation/rulespec-us#2189 queued
🤖 Generated with Claude Code