Repository navigation
Add Alaska LIHEAP regular heating assistance - #10341
Conversation
One added changelog fragment for the new program and a one- or two-sentence programs.yaml note; limitations stay in code comments and the PR body. 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>
# Conflicts: # policyengine_us/programs.yaml
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10341 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 6 +2
Lines 76 141 +65
Branches 2 3 +1
=========================================
+ Hits 76 141 +65
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:
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Add Alaska LIHEAP regular heating assistancePR #10341 (author: hua7450), head
The PR has no reviews and no comments apart from Codecov. It touches no partner test file. Path prefixes:
Sources read for this review:
SummaryWhat is right. The benefit mechanics follow the manual closely:
There are two critical findings:
There are five should-address items:
There are also nine suggestions: G1 heat in rent with Status.
Critical (must fix)C1. CI fails on this PR's own file: the source-conflict ratchet flags
|
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes: 2 critical (CI fails on this PR's own file in the source-conflict ratchet; a $20/month cash gift is counted against 7 AAC 44.042(16)), 5 should. Full report in the comment above.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
|
Thanks for the review, David. The fixes are in 4d4c959, and b75fcb2 merges current main.
The PR body and TheAxiomFoundation/rulespec-us#1901 are updated for b75fcb2. Tests now number 157 ( |
PR Review (round 2): Add Alaska LIHEAP regular heating assistancePR #10341 (author: hua7450), head
The author answered every item in a PR comment, updated the body and refreshed rulespec-us#1901. The PR still touches no partner test file. Path prefixes:
SummaryMost of round 1 is fixed, and each fix has a test that would fail without it:
Two should-address items are open:
There are three suggestions:
Status.
Prior findings
S1, the part that is still open. Four choices follow the manual, Addendum A or E, or the plan over 7 AAC 44. All four are in
Why it is still open. The file's own legend defines Fix, item by item:
New findingsCriticalNone. Should addressN1. A heat-in-rent household sharing a dwelling with a household that reports a heating bill gets a zero share and $0. This is new in the fix, and no test covers it.
SuggestionsG-a. Military-base CDPs (G6, continued).
G-b. Precision of the nearest-community crosswalk.
G-c. Leftover wording.
VerifiedHand-checked expectations. Every new or changed expectation matches the head (FY2027, $175 a point; one-person monthly ceilings $415 / $831 / $1,246 / $1,662 / $2,077 / $2,493):
The household-size and income-factor files changed only comments. Case counts are 16 + 85 + 30 + 4 + 22 = 157, as the body says. 25. Geography spot checks (Addendum A rows from the FY2027 listing):
Mutation checks on the fix's new logic (each would fail a test if removed or inverted):
The Merged tree and guards:
Descriptions and references. The changed parameters follow the house template. The references cite 7 AAC 44.080(h) and (l), 44.042(16), manual 3003-5 B.1.a and 24 CFR 965.502 and 982.517. Axiom
CI
Branch
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes, round 2: 0 critical, 2 should. Both criticals and S2-S5 are fixed and pinned, and the sharing/utility-allowance order now follows 7 AAC 44.080. Open: (S1 remainder) four manual-over-regulation choices are recorded as follows: conflicting-source / state: open, so they still need to follow 7 AAC 44 or be ruled with a reason; (N1, new) a heat-in-rent household sharing a dwelling with a bill-paying household now gets a zero share and $0, with no test. Full report in the comment above.
Follow 7 AAC 44 where the manual differs: Appendix A oil points for Loring and Tetlin, exact poverty-guideline percentages for the income limits, General Relief Assistance exempt, and only wages exempt for full-time students under 18 who do not head the household. Give a heat-in-rent household sharing a dwelling with bill payers the equal share, exclude residents of military-base places, assign four places by Addendum A ZIP code, and restate test comments as source readings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
PR Review (round 3): Add Alaska LIHEAP regular heating assistancePR #10341 (author: hua7450), head
Review has been re-requested, but no author reply has been posted yet, and the PR body and rulespec-us#1901 are unchanged since round 2. The PR still touches no partner test file. Path prefixes:
SummaryBoth round-2 should items are fixed in the code, and a test pins each fix:
Three should items are new:
There are three suggestions: Eareckson Station CDP, a minor-only tax unit having no inferred head, and wording. Status:
Prior findings
New findingsCriticalNone. Should addressN2. Two terms that the fixes add are unpinned.
N3. The merge drops AK from the LIHEAP coverage line.
N4. The PR body and rulespec-us#1901 describe the round-2 head.
SuggestionsR3-G1. Eareckson Station CDP (
R3-G2. A tax unit of minors has no inferred head.
R3-G3. Wording.
VerifiedRegulation text (7 AAC 44, fetched today):
Hand checks. Every new or changed expectation matches the head. These use the 2026 Alaska guideline: one person $19,950, plus $7,100 for each extra person, and $175 a point.
Case counts are 17 + 87 + 33 + 4 + 23 = 164, which matches the Quick Feedback job's per-file pass counts. Mutation checks on this round's logic:
The two unpinned terms are listed in N2. Merge block. The single hand-resolved hunk in Guards (the merged tree is the head's own tree):
Axiom
CI
Branch
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes, round 3: 0 critical, 3 should. Both round-2 items are fixed and pinned: all four choices now follow 7 AAC 44, and the heat-in-rent sharer gets the equal share. New: (N2) the heating_expense == 0 guard in the sharing rule and military_basic_pay in the student exemption have no test; (N3) the merge dropped AK from the programs.yaml LIHEAP coverage line; (N4) the PR body and rulespec-us#1901 still describe the round-2 head. Full report in the comment above.
Pin the bill guard in the shared-dwelling rule and military basic pay in the student wage exemption with tests, move the exempt wage sources to a parameter list, treat a minor in a unit without an adult as its head, exclude Eareckson Station residents as living on a military base, and correct the ZIP-code and leftover test wording. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, David. Rounds 3 and 4 are in Round 2 items (
Round 3 items (
I did not run the tests locally, so CI will check them. |
PR Review (round 4): Add Alaska LIHEAP regular heating assistancePR #10341 (author: hua7450), head
The author replied item by item on 2026-10-28, and the PR body and rulespec-us#1901 were both rewritten for this head. The PR still touches no partner test file. Path prefixes:
SummaryAll three round-3 should items are fixed:
All three suggestions are adopted:
New findings: no critical or should items, and one housekeeping suggestion. Status:
Prior findings
New findingsCriticalNone. Should addressNone. SuggestionsR4-G1. Stale CI wording (housekeeping).
VerifiedHand checks of every new or changed expectation. These use the 2026 Alaska guideline (one person $19,950) and $175 a point.
Guards and checks:
Axiom
What the issue now matches:
The issue is dispatch-ready. R4-G1 covers its one stale CI sentence. CI
Branch
Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
Approving round 4: 0 critical, 0 should. All three round-3 items are fixed and pinned, and the coverage line keeps AK plus every sibling. CI is 34/34. Full report in the comment above.
Adds Alaska's Heating Assistance Program (HAP) regular heating benefit, the state-administered federal LIHEAP component, for FY2027. The model counts citizens and qualified immigrants for household size, counts the income of every member, including members left out of household size, and follows the grant computation of 7 AAC 44.080 and manual 3004-5: Addendum A community oil or natural gas points, times a dwelling factor, times an income factor that falls from 100% to 50% of points across six bands up to 150% of the Alaska poverty guideline, plus one point for a household with a member aged 60 or older, under 6 or disabled. A household that shares its dwelling has its points reduced to its share of the dwelling's heating expenses before the income factor, and a subsidized household that pays heat directly has its points halved for its utility allowance after the vulnerable point. A household needs at least 2.0 points after both reductions; points then round half up, cap at 35 and pay $175 each. In FY2027, a 40-year-old living alone in a two-bedroom house in Juneau who pays $1,000 a year for fuel oil and earns $18,000 receives $700: $18,000 / 12 = $1,500 a month is above 75% ($1,246.875) and at or below 100% ($1,662.50) of the monthly guideline, so the household keeps 70% of Juneau's 5 oil points, 5 x 1.0 x 0.7 = 3.5 points round half up to 4, and 4 x $175 = $700.
Fixes #10335
Regulatory authority
The manual is served only over http, and DPA overwrites Addendum A, Addendum E and 3004-5 each season. The Wayback Machine holds only January 2, 2021 captures of those three pages (FY2021 content) and none from 2022 on, so no capture is linked.
Eligibility
defined_for = StateCode.AKak_hap_household_sizeaddsis_citizen_or_legal_immigrant; a household with no counted member gets no income factor and no award. No five-year waiting rule applies.ak_hap_income_factoris zero above the 150% band. It reads the Alaska poverty guideline with a one-year lag (the 2026 guideline for FY2027) and compares income with the exact percentage of the guideline, as 7 AAC 44.040(a)(4) and 44.080(i) state, without Addendum E's whole-dollar floors (see Not modeled and source conflicts). The manual's 225% household limit belongs to the state-funded AAHP, which this PR does not model.heating_expensefor the primary fuel must exceed $200. Whenheat_expense_included_in_rentis true, annualpre_subsidy_rentis the heating cost.receives_housing_assistanceor the household'sis_in_public_housingis true0(other than0/USAbases), including Clark's Point, Lower Kalskag, Upper Kalskag, Nunam Iqua, Pitkas Point and St. Mary's after spelling fixes, and 11 unlisted places whose nearest listed community is marked that way (see Not modeled and source conflicts). Native-only tribal service is not inferred.military_base_places.yaml): Eielson AFB CDP and Fort Greely CDP, which Census draws from the installations themselves and Addendum A marks0/USA("Service members living on base do not qualify"); Kodiak Station CDP, the housing area of Coast Guard Base Kodiak ("If Guard members live on base, in provided housing, they do not qualify"); and Eareckson Station CDP, which Census draws on Shemya Island around Eareckson Air Station, an Air Force installation that Addendum A does not list.heating_typeNONE and UNSPECIFIED pay nothing; callers must sendheating_type(#9754). SOLAR and OTHER use oil points (see Benefit).Countable income
earned_sources.yaml), each floored at zero, so a business loss does not offset other income.military_basic_payis its own input outsideemployment_incomeand counts once. The net business inputs stand in for gross receipts less allowable costs. Manual 3003-4 B deducts 50% of gross self-employment income unless the household's actual costs are higher, so the net inputs overstate countable income when a business's actual costs are under half of its gross.student_wage_sources.yaml(employment_incomeandmilitary_basic_pay) of a member under 18 who is a full-time student (is_full_time_student) and not the tax-unit head (is_tax_unit_head, standing in for the head of household), when the SPM unit has a member 18 or older; that member's business and unearned income still count. A tax unit infers a head only among adults, so a minor in an SPM unit with no adult is treated as its head: a 17-year-old student who lives alone keeps $12,000 of wages in income.is_full_time_studenttreats any K-12 attendance as full time, because half-time enrollment is not observed. Manual 3003-2 A(15) instead covers students who live with a parent or adult household member and are enrolled at least half time in elementary or secondary school (candidateus-ak:hap-student-earnings-exemption,follows: statute).ak_ssp), pensions, military retirement pay and military survivor annuities (military_retirement_income), retirement distributions, railroad retirement, survivor, veterans and disability benefits, total unemployment compensation, workers' compensation, strike benefits, alimony, child support received, interest, ordinary dividends, estate income, capital gains and gambling winnings. Rental and farm rental income are each floored at zero. ATAP counts once per SPM unit throughtanf, so only received amounts count.general_assistanceis not counted: it stands for State General Relief Assistance (7 AAC 38.030), which 7 AAC 44.042(18) exempts. BIA General Assistance paid to the household, which plan item 1.9 and manual 3003-1 B.6.o count, has no separate input.financial_assistance(cash from friends or relatives outside the household) stands in for gifts: a person's amount at or under $20 a month, measured as the annual amount divided by 12, is excluded; more than $20 counts in full. A single adult with $14,800 of wages and $20 a month of gifts keeps the 0.8 factor ($1,233.33 a month) and receives $1,400 in Fairbanks.Benefit
heating_expensereads a solar household's bill as grid electricity. OTHER uses oil points as the stand-in for steam, hot water and gasoline for a vehicle used as a home, which have noheating_typevalue. Natural gas uses gas points; wood and coal use 0.8 times oil points. Points attach toplace_fips, and both tables cover all 355 Census places in the 2025 gazetteer. Oil: 279 direct matches, including the Anchorage municipality at Anchorage's 8 points and 16 spelling variants (for example Adak city for Adak (Station), St. Paul city for Saint Paul and Tenakee Springs city for Tenakee), 4 places that take the main community Addendum A lists for their ZIP code (Chena Ridge and Goldstream take College's 10 for ZIP 99709; Covenant Life and Mosquito Lake take Haines's 6 for ZIP 99827, under which Addendum A also lists Excursion Inlet and Klukwan), and 72 places that take the points of the nearest listed oil community (Meadow Lakes takes Wasilla's 7). Oil points follow FY2027 Addendum A except Loring (5) and Tetlin (16), which follow Appendix A to 7 AAC 44 under 7 AAC 44.080(a); Addendum A lists them at 4 and 12. Natural gas: 25 direct matches and 330 nearest-gas-community approximations. A place code outside the gazetteer, or no place code, pays nothing.ak_hap_dwelling_typeinput to the first matching category: mobile home or boat with 980 or more heated square feet 1.4; RV, tent or pickup camper 0.4; studio, hotel or boarding room 0.15; boat under 980 heated square feet 0.35; one-bedroom dwelling 0.55; house with three or more bedrooms 1.3; two-bedroom unit in a building of four or more units, or a mobile home under 980 heated square feet, 0.7; two-bedroom house 1.0, the default.is_disabled); several vulnerable members still add one point.receives_housing_assistanceoris_in_public_housing) whose heat is not included in rent has its points halved after the vulnerable point and before the 2.0 minimum and rounding, whatever the allowance amount. Public housing agencies set allowances for utilities that tenants buy directly (24 CFR 965.502(a) and 982.517(a)(1)), so the model infers the allowance and does not readhud_utility_allowance. A Juneau household with 3.0 points falls to 1.5 and receives nothing; a Fairbanks household with 7 points falls to 3.5, rounded to 4 ($700).ak_hap_base_benefitholds the sole-household award, without the dwelling share or the utility-allowance reduction.Years covered
The registry entry records
verified_years: "2027". Earlier model years reuse the FY2027 parameters with the earlier guideline and are unverified historical estimates. The PR adds AK to the LIHEAPcoverageline inprograms.yaml.Not modeled and source conflicts
ak_hap.yamlCase 2 would pay $962.50 and $525 and Case 7 $262.50. 7 AAC 44.035(c) gives a second regulatory reading of sharing: each household receives the percentage of its sole-household dollar award equal to its share of the heating cost, $481.25 and $787.50 in Case 2.source_conflicts/candidates.yamlrecords both choices asus-ak:hap-shared-household-allocationandus-ak:hap-utility-allowance-order, withfollows: statute. Draft Register Alaska HAP sharing conflict and unshipped proposals TheAxiomFoundation/rulespec-us#1846 proposed a register entry under the first id with the manual's reading; this PR does not depend on it.source_conflicts/candidates.yamlrecords the cell asus-ak:hap-one-person-lowest-income-limit, withfollows: statute.follows: statute): Loring's oil points, 5 in Appendix A to 7 AAC 44.080(a) and 4 in Addendum A, so a Loring adult with no income, a two-bedroom house and an oil bill receives $875 rather than $700 (us-ak:hap-loring-oil-points; Tetlin, 16 against 12, is routed to its tribe either way); exact income limits rather than Addendum E's whole-dollar floors, which put 23 of its 108 LIHEAP-band limits $1 below the exact percentage, so a four-person household with $5,156 a month is within 150% ($5,156.25) rather than over Addendum E's $5,155 (us-ak:hap-income-limit-rounding);general_assistance, left out of income as General Relief Assistance under 7 AAC 44.042(18), although plan item 1.9 counts General Assistance paid directly to the household (us-ak:hap-general-relief-assistance); and the student earnings test above (us-ak:hap-student-earnings-exemption).is_disabledstands in for the manual's legal disability categories andis_citizen_or_legal_immigrantfor qualified-alien categories. Annual income stands in for prior-month receipts. Generic dividends include Alaska Native corporation (ANCSA) dividends, which the manual exempts; the inputs cannot separate them.military_basic_payholds base pay only; the subsistence and housing allowances that manual 3003-5 B.1.a counts when paid to the household have no input.heating_typecannot identify self-harvested fuel (0.5) or wood pellets (0.9); households using those fuels can receive different amounts. Kerosene uses oil points, an inference from the guide that describes kerosene as Grade 1 heating oil; the manual lists kerosene as a fuel without assigning points. OTHER covers any fuelheating_typedoes not name, so a household under OTHER with a fuel the rules do not put on oil points also receives oil points.*/THRHA, Alaska Natives only), so they are state-served. Approximated places inherit the all-resident tribal routing of the community whose points they take; Lutak, 16.6 km from Klukwan (all residents) and 18.1 km from Haines (Alaska Natives only), is the closest call, and Deltana, nearest Fort Greely (0/USA), stays state-served. Addendum A lists English Bay at 19 oil points and Nanwalek, the same village, at 8; the table keeps Nanwalek CDP's 8.0/USA, lie inside the Anchorage municipality with no separate Census place, so their residents cannot be identified.heating_type; UNSPECIFIED pays nothing.Test plan
policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/(ak_hap.yaml18,ak_hap_base_benefit.yaml87,ak_hap_countable_income.yaml33,ak_hap_household_size.yaml4,ak_hap_income_factor.yaml23); expected values are hand computed from 7 AAC 44.080, the manual's grant steps and Addendums A and E in case comments.ak_hap.yamlCases 2 to 5 and 8 to 10 pin the dwelling share and the equal-split gap-fill (Case 2 pays $700 and $875; Case 9 shares 49 points before the cap, $4,375 and $2,100), and Cases 6, 7, 13, 15 and 16 pin the inferred utility allowance: 10 points halve to 5 ($875), 3.0 to 1.5 ($0), 7 to 3.5 ($700) and 4 to exactly 2.0 ($350). Case 6 also pins the sole-household fallback: a lone heat-in-rent household keeps its full $1,750. Case 17 pins a mixed dwelling: a $1,200 oil-bill payer and a heat-in-rent 65-year-old each take half, $875 and $1,050. Case 18 pins the bill test for heat-in-rent units: a heat-in-rent unit that also reports a $600 oil bill shares by its bill with a $1,200 bill payer, $525 and $1,225 (as an equal-share heat-in-rent unit it would get $875 and the payer $525).ak_hap_base_benefit.yamlCase 65 pays Anchorage fuel oil $1,400, Case 81 an elderly Anchorage household with electric heat $700, Case 84 Meadow Lakes $1,225 and Case 85 Mertarvik $0 through its inherited tribal routing; Case 22 pays Loring's 5 Appendix A points ($875); Cases 58 and 86 pay Fort Greely CDP, Eielson AFB CDP, Kodiak Station CDP and Eareckson Station CDP $0; Case 87 pays Covenant Life CDP Haines's 6 points ($1,050) and Chena Ridge CDP College's 10 ($1,750); Cases 68 and 69 pay OTHER and SOLAR $1,750; Case 82 keeps a $20 monthly gift out of income ($1,400) and Case 83 counts $40,000 of military basic pay ($0). Base Cases 42 to 47 and income factor Cases 6 to 21 pin the exact limits for one, two and 18 people, each at the limit and $0.12 a year above it, and income factor Case 23 keeps a four-person household with $5,156 a month in the 150% band (factor 0.5).ak_hap_countable_income.yamlCase 25 excludes $20 monthly gifts, and Cases 16 and 18 add railroad benefits ($5,400) and gambling winnings ($1,080). Case 10 excludes a 17-year-old full-time college student's $12,000 of wages and $1,200 of National Guard drill pay (military_basic_pay) but counts $2,000 of self-employment income ($26,000), and Case 13 counts the $12,000 of wages of a 17-year-old student who lives alone with no supplied tax-unit role ($12,000). Cases 31 and 32 exclude a 16-year-old full-time student's $6,000 of wages when a parent heads the tax unit ($24,000) and count them when the student heads a tax unit ($30,000), and Case 33 leaves $1,200 ofgeneral_assistanceout of income ($10,000). Atd0643d4578, CI ran the five Alaska test files and they passed; this round's fixes were not run locally, and CI runs the full suite.# Source conflict <jurisdiction>:<id>marker: pending.source_conflicts/candidates.yamlrecords seven backlog items, allfollows: statuteand unreviewed:us-ak:hap-shared-household-allocation,us-ak:hap-utility-allowance-order,us-ak:hap-one-person-lowest-income-limit,us-ak:hap-loring-oil-points,us-ak:hap-income-limit-rounding,us-ak:hap-general-relief-assistanceandus-ak:hap-student-earnings-exemption. This PR adds no rulespec-us register entry and no marker yet.make formatchangelog.d/axiom: TheAxiomFoundation/rulespec-us#1901 queued
🤖 Generated with Claude Code