Skip to content

Add Arkansas LIHEAP regular heating assistance - #9973

Open
hua7450 wants to merge 11 commits into
mainfrom
ar-liheap
Open

hua7450 wants to merge 11 commits into
mainfrom
ar-liheap

Conversation

@hua7450

@hua7450 hua7450 commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Adds a partial Arkansas LIHEAP regular heating model using FY2025 and FY2026 schedules. The model counts qualified members for household size and every member's countable income, applies the 20% earned-income disregard, tests monthly income against limits built from state median income and the poverty guidelines, and reads the five published fuel matrices by monthly income band and household-size group. In FY2026, a five-person household heating with fuel oil receives $570 with no income and $497 with $286 a month of TEA cash assistance.

Fixes #9964

The state application, in both the FY2025 form and the current form, requests work income only from members aged 18 or older who are not full-time students. The formula now follows that complete instruction: all minors and all full-time students have earnings excluded, while unearned income still counts. The narrower manual age/dependency rules and two unused parameters were removed. Final-award tests cover ages 17/18 and independent students aged 22/23/24.

Policy verification remains partial. The interest allowance’s assessment unit remains unconfirmed, and the minor and full-time-student rule follows the application forms where both manual versions are narrower. The FY2025 form (AEO 9495 R 01/FY2025) carries the same work-income sentence as the current form (R 11/2025), so that rule has an application source in both years.

Regulatory authority

Manual page numbers in this PR refer to the 167-page FY2025 draft. The 190-page FFY 2025 manual is not marked draft and lists its changes from the October 24, 2024 near-final draft (pages 12–13). Every draft passage quoted in TheAxiomFoundation/rulespec-us#1538 appears in it, mostly on later pages (interest "amount over $200.00" moves from draft page 137 to page 162), except the draft's section 4.7.3 sentence exempting adult full-time students from the Zero Income Form, which its section 4.7.3 (page 59) omits. Like the draft, it excludes a child's earnings only during at least half-time school attendance (page 158), an 18-year-old high-school student's earnings unless the student works full time or is an emancipated head of household (page 56), and a full-time college student's income only for a dependent up to age 23 (pages 141 and 159).

Eligibility

Requirement Source How modeled
Arkansas residence — defined_for = StateCode.AR
Household size counts citizens and qualified noncitizens Draft manual sections 4.4–4.4.1, pages 36–37; applicant rights statement, item 9 Counts members with is_citizen_or_legal_immigrant, with no SNAP-specific waiting periods or bars. A household with no qualified member is ineligible. Every member's countable income counts in full.
Monthly income limit FY2025 plan section 2.1, page 8; FY2026 plan section 2.1, page 9; FY2025 and FY2026 income charts FY2025: 60% of state median income for sizes 1–6 and 150% of the 2024 guideline for sizes 7–20. FY2026: 60% of state median income for sizes 1–7 and 150% of the 2025 guideline for sizes 8–20. Each chart adds a printed amount per member above 20: $672 a month in FY2025, $688 in FY2026. Half-up monthly rounding reproduces all 40 printed rows; the rounding is a reconciled pattern, not an express rule. One person: $2,251 a month in FY2025, $2,347 in FY2026. The limit is inclusive. In periods 2025 to 2027, every limit is at least 32% above 110% of the poverty guideline at every household size, so the federal floor in 42 U.S.C. 8624(b)(2)(B) never binds and the model applies no separate floor.
Heating responsibility FY2026 plan sections 2.1–2.3, pages 9–10 A direct heating obligation qualifies through has_heating_expense, which defaults to a positive primary-fuel bill with heat not in rent; an explicit false (for example, a bill fully reimbursed through an allowance, plan item 2.3, page 10) is respected. Heat included in unsubsidized rent qualifies with no separate bill. A household with housing assistance or in public housing whose rent includes heat needs a positive reported excess charge. heating_type NONE is ineligible.
No categorical eligibility and no asset test FY2026 plan question 1.4, page 5 SSI receipt does not waive the income limit; assets are not tested.

Countable income

Item Source How modeled
Earned income FY2026 plan section 1.8, page 5; draft manual Appendix F, pages 133, 134, 141 Counts wages, net business income (self-employment, SSTB, farm operations, partnership/S-corporation) and rental and farm rent income, which the manual treats as self-employment. Floors each source at zero, then subtracts the 20% earned-income disregard. Adds no further business or work-expense deduction.
Minor and student earnings Application section III, page 2, in the FY2025 form (R 01/FY2025) and the current form (R 11/2025); draft manual section 4.7.3, page 43; accepted plans, section 1.9 Excludes earnings of every member under 18 and every full-time student, without an adult age or dependency restriction. Earned income from other adults counts after the 20% disregard. Unearned income remains countable for all members. In FY2026, a 35-year-old full-time graduate student living alone with $40,000 of wages has $0 countable income and receives $308 with gas heat; the same person not in school has monthly countable income of $2,667, above the $2,347 limit, and receives $0.
Unearned income FY2026 plan section 1.9, pages 6–7; draft manual Appendices E–F, pages 130–144 Counts unemployment compensation (total_unemployment_compensation: the reported amount, or modeled state unemployment insurance when none is reported; Arkansas UI is not modeled), strike benefits, SSI, pensions, military retirement pay, survivor benefits, alimony, child support, dividends, veterans benefits, cash gifts from outside the household (financial_assistance), workers' compensation, gambling winnings and capital gains for every member. Floors each source at zero, so a loss in one source offsets nothing.
Social Security and Railroad Retirement FY2026 plan section 1.9, page 6 ("Excluding MediCare deduction"); draft manual section 4.7.2, page 43 Adds each person's Social Security and railroad benefits, subtracts medicare_part_b_premium and floors the result at zero.
Interest Draft manual Appendix F, page 137 ("amount over $200.00") Counts each person's interest above $200 a month ($2,400 a year).
TEA cash assistance Current application, section III, page 2; draft manual Appendix E, page 130 Counts the take-up-gated tanf aggregate, which includes ar_tea. The current application explicitly requests TEA despite the plan’s unchecked TANF box.
Monthly rounding Draft manual section 4.7, page 42 Rounds monthly countable income half up to the whole dollar before the limit and band tests.

Benefit

Fuel schedule Fuels mapped to it $0–$69 monthly income: sizes 1–2 / 3–4 / 5+
Electric Electricity $242 / $288 / $344
Natural gas Natural gas $308 / $366 / $437
Propane Propane $397 / $472 / $563
Fuel oil Fuel oil, kerosene $402 / $478 / $570
Other Wood, coal, other $289 / $344 / $410
  • Each schedule declines across 39 monthly income bands for three household-size groups (1–2, 3–4, 5 and up), with the fuel mapping from the application's fuel groups (page 3). Amounts in the first band are the same in both years.
  • The top five band lower bounds changed: $2,250, $2,945, $4,330, $5,022 and $5,140 in FY2025; $2,348, $3,071, $3,793, $4,515 and $5,237 in FY2026. 63 cells differ between the years (electric 11, natural gas 25, propane 12, fuel oil 11, other 4).
  • FY2025 cells follow AEO's FY2025 matrices, headed "HOUSEHOLD SIZE BENEFIT PAYMENT (20% OVER BASE)" and dated October 7, 2024. The FY2025 electric file is byte-identical to a December 6, 2024 Wayback capture, so AEO posted it before the January 6, 2025 opening. FY2025 plan item 2.6 (page 9) estimates a $50 minimum and a $475 maximum, and the Clearinghouse "2025" Arkansas matrix repeats the FY2024 base amounts (electric $202 / $240 / $287 at $0–$69). Multiplying those base amounts by 1.2 and rounding gives the FY2025 cells in all 35 rows from $0 through $2,250 for every fuel; the top income rows differ.
  • Where a matrix prints $0.00 for a band and size group, the model pays $0.
  • Eligible households with solar or unspecified fuel receive $0. The application (page 3) has no solar box, and a solar home could answer "all electric" (electric matrix) or write in OTHER (other-fuels matrix), so the source fixes no single schedule. heating_type is a required input; Default heating_type to electricity and remove the UNSPECIFIED-gated state heating adapters #9754 tracks the unspecified default.
  • The reported bill does not cap the grant.

Years covered

Model year Program year Income limit basis One-person limit
2025 FY2025, from October 1, 2024 SMI for sizes 1–6; 2024 guideline for 7–20 $27,012
2026 FY2026, from October 1, 2025 SMI for sizes 1–7; 2025 guideline for 8–20 $28,164

A calendar-year period reads the parameters in force on January 1. Formulas are undated, and the registry entry lists no verified_years. Matrix and limit checks do not establish complete verified policy years. Other years are unverified backfilled estimates:

  • Periods before 2025 read the FY2025 "20% OVER BASE" matrices. In 2024, a one-person household heating with gas and no income receives $308, where the FY2024 Clearinghouse matrix pays $257.
  • Period 2027 carries the FY2026 matrices forward with the FY2027 state median income, for a one-person limit of $29,520 ($2,460 a month). The proposed FY2027 plan estimates a $70 minimum and a $665 maximum benefit (item 2.6), and AEO's responses to comments give $66 and $627. AEO has posted no FY2027 chart or matrix, so FY2027 is not encoded.

Not modeled and source conflicts

Item Source Model treatment
Loans, jury duty pay, royalties and foster care receipts Draft manual Appendices E–F No sufficiently specific inputs; not counted.
Medical deductions other than the Part B premium, and the manual's Medicaid condition on that deduction Draft manual section 4.7.2, page 43 Not modeled. medicare_part_b_premium is zero when a person is not enrolled and excludes the share a Medicare Savings Program pays.
Business gross receipts and expenses FY2026 plan section 1.9; draft manual Appendices E–F Uses existing net business and rental inputs; the manual's 10% operating-cost allowance on gross receipts is not applied.
Manual version FY2025 draft (167 pages) and FFY 2025 manual (190 pages) Page citations follow the draft; the quoted rules read the same in the 190-page manual except section 4.7.3 (see Regulatory authority). Application section III, in the FY2025 and current forms, governs minor and full-time-student earnings.
Interest allowance assessment unit Draft manual Appendix F, page 137 The $200 monthly allowance remains per recipient under the draft’s money-paid-to-one definition. An explicit assessment unit and adopted current authority were not established; a household allowance would count more income for multiple recipients.
Income in the month before application — Annual inputs approximate it.
Utility allowances on direct bills FY2026 plan sections 2.1–2.3 A direct bill counts through has_heating_expense (default: a positive primary-fuel bill with heat not in rent); a caller sets it false when an allowance fully reimburses the bill. Verification of allowances is not modeled.
Qualified noncitizens absent from immigration_status (for example, COFA or battered-noncitizen cases) Draft manual section 4.4.1 Require an override of is_citizen_or_legal_immigrant.
Solar and unspecified fuel Application page 3 fuel groups Pay $0 as a coverage gap (#9754 for unspecified fuel).
Crisis, cooling, weatherization and equipment assistance — Out of scope.

Application section III, in the FY2025 and current forms, governs minor and full-time-student earnings. Other source differences remain qualified as follows:

Topic FY2026 plan or application Source treatment and model
Workers' compensation Section 1.9 leaves "Insurance payments made directly to the insured" unchecked Appendix E (page 130), Appendix F (page 144) and application page 2 count it; the model counts workers_compensation.
TEA Section 1.9 leaves TANF unchecked The current R11/2025 application explicitly requests TEA, corroborating draft Appendix E; the model counts take-up-gated tanf.
Gambling winnings Section 1.9 (page 7) counts lottery winnings as the only one-time lump sum Manual page 138 excludes nonrecurring lump sums. Appendix F (page 135) counts all gaming and gambling winnings; the model follows the Appendix F row and counts gambling_winnings.
Capital gains Section 1.9 (page 7) counts no one-time lump sum other than lottery winnings Manual page 138 excludes nonrecurring lump sums, including the sale of personal property. Appendix F (page 132) counts capital gains and excludes losses; the model follows the Appendix F row and counts capital_gains floored at zero.
Interest Section 1.9 counts "Interest, dividends, or royalties" with no threshold Appendix F (page 137) counts the "amount over $200.00". The model reads the $200 as monthly, because unearned income is the month's receipts (page 41; Appendix E, pages 129–130), and as each person's, a chosen reading: a household-wide $200 would count more (two spouses with $2,400 each and a $12,000 pension: 14,400 instead of 12,000).
Rental income Section 1.8 takes 20% off work income only; section 1.9 lists rental income separately Appendix F (page 141): "Ownership of rental property will be considered a self-employment enterprise." The model moves rental_income and farm_rent_income (landlord rent) to the earned sources, which take the 20% disregard.
Minors’ earnings The accepted plans leave minors’ earnings unchecked; both application forms (R 01/FY2025 and R 11/2025) request work income only from members 18 and older The model excludes every minor’s earnings, regardless of school attendance, following the application forms over the narrower rule in both manual versions (draft page 133; 190-page manual page 158), which excludes a child's earnings only during at least half-time school attendance.
Full-time students Both application forms exclude every full-time student from work-income reporting The model excludes earnings of all full-time students, including independent students and those aged 24 or older; unearned income still counts. Both manual versions exclude a full-time college student's income only for a dependent up to age 23 (draft page 134; 190-page manual pages 141 and 159). The draft's section 4.7.3 (page 43) also exempts adult full-time students from the Zero Income Form; the 190-page manual's section 4.7.3 (page 59) omits that sentence.

Microsimulation: the microsimulation datasets carry no heating inputs, so population totals are about $0 until #9754 lands. Callers must send heating_type with the matching fuel bill.

Test plan

72 YAML cases in 6 files cover:

  • every FY2026 matrix row and size column at each band's lower bound for all five fuels, plus FY2025 top bands and changed cells for each fuel;
  • all FY2026 income limits for sizes 1–21 and FY2025 limits for sizes 1–9, 20 and 21, including the printed $672 and $688 additional-member amounts;
  • inclusive limits and half-up rounding at the limit and at a band edge;
  • heat in rent with and without a subsidy, a direct obligation with no bill, an explicit has_heating_expense false with a $1,200 gas bill (ineligible, $0), no heat and no qualified member (household size 0 and a $0 income limit);
  • the 20% disregard, rental and farm rent as self-employment, interest above $200 a month per person, minors in and out of school, an 18-year-old in and out of high school, dependent college students aged 22 to 24 and an independent one, Social Security and railroad retirement net of the Part B premium, a premium larger than the benefit, military retirement, workers' compensation, gambling winnings, capital gains, unemployment compensation (reported, read through total_unemployment_compensation), strike pay, dividends, veterans' benefits and regular cash gifts, TEA with and without take-up, and loss floors in earned and unearned sources;
  • kerosene, wood and coal mapping, and $0 for solar, unspecified fuel and an empty household;
  • final grants in both years, including an FY2025 seven-person household between the SMI and poverty-guideline limits, a five-person family whose TEA moves it into a lower band, a landlord made eligible by the disregard and a pensioner whose interest above $200 a month lowers the grant.

Every case that tests eligibility or a grant specifies heating_type; income-only cases do not need it. A mixed-state case pays only the Arkansas household. Expected values are hand computations from the sources; CI runs the cases. Registry YAML parsing, git diff --check and make format passed. Tests that encode the documented assumptions do not resolve the remaining source gaps.

  • YAML tests whose expected values come from an external source (statute, official form or worksheet, official calculator)
  • make format
  • Changelog fragment in changelog.d/

axiom: TheAxiomFoundation/rulespec-us#1538 queued

🤖 Generated with Claude Code

hua7450 and others added 4 commits October 3, 2026 19:49
- Encode the FY2025 matrices, income bands and eligibility chart (size 7 on
  150% FPG, $672 extra-person amount) alongside FY2026.
- Count Social Security and railroad retirement net of the Medicare Part B
  premium; count military retirement pay.
- Follow the draft manual where it conflicts with the plan: count workers'
  compensation, TEA (through take-up-gated tanf), gambling winnings and
  capital gains, each with the conflict noted.
- Also follow the draft manual on: interest counted only above $200 a month
  (p137); rental and farm rent as self-employment with the 20% deduction
  (p141); a minor's earnings excluded only while in school (p133); the
  student exclusion only for dependent college students up to 23 (p134).
- Round monthly countable income to the nearest dollar; floor each income
  source at zero.
- Shorten the registry note and fix reference locators.
- Add period-2025, income-source, rounding and fuel cases; tidy tests.

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

codecov Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (909176a) to head (1206c14).
⚠️ Report is 495 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9973   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         6    +2     
  Lines           76       118   +42     
  Branches         2         2           
=========================================
+ Hits            76       118   +42     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 5 commits October 7, 2026 22:56
…nings

Draft manual 4.7 (page 41) excludes the earnings of members aged 18 enrolled in high school; identified with is_in_k12_school. The full-time-work and emancipation exceptions are not modeled.

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
One reference entry per source; single-page citations keep the page only in the href; multi-page titles end with a quoted #page list and the href opens the first cited page; variable references use '# PDF pages ...' comments above multi-page hrefs (CLAUDE.md, PolicyEngine/policyengine-us PR 10009). Reference lines only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 marked this pull request as ready for review October 12, 2026 05:54
@DTrim99

DTrim99 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Arkansas LIHEAP regular heating assistance

PR #9973: Add Arkansas LIHEAP regular heating assistance (author: hua7450, head 7e42062309)

Scope: the winter Regular (rate-reduction) Assistance benefit of Arkansas LIHEAP for federal fiscal years 2025 and 2026. The Arkansas Energy Office (AEO) in the Department of Energy and Environment runs the program through community-based organizations; DHS does not. The PR covers:

  • household size, which counts citizens and qualified noncitizens (is_citizen_or_legal_immigrant) while every member's income counts;
  • monthly countable income (MCI):
    • 80% of the gross work income (wages, net business income, rental and farm rent) of members 18 or older who are not full-time students;
    • plus the unearned income of all members from 14 listed sources, each floored at zero;
    • interest above $200 a month per member, Social Security and railroad retirement net of the Part B premium, and take-up-gated TEA;
    • the total rounded half up to the dollar;
  • the income limit from the eligibility charts:
    • 60% of state median income for sizes 1-6 (FY2025) or 1-7 (FY2026), and 150% of the prior year's poverty guideline above that, rounded half up;
    • the printed $672 or $688 per member above size 20;
  • five fuel matrices (electric; natural gas; propane; fuel oil with kerosene; other with wood and coal), each with 39 MCI rows by three size columns (1-2, 3-4, 5 and up) for each year;
  • heating responsibility: a direct bill or reported obligation, heat in unsubsidized rent, or heat in subsidized rent with a positive excess charge. There is no categorical eligibility and no asset test.

Crisis, summer (cooling) Regular Assistance on the electric matrix, weatherization, Assurance 16, split benefits and FY2027 are out of scope. The PR changes 33 files: 19 parameters, 6 variables, 6 test files (70 cases), programs.yaml and a changelog fragment. Parameters start at 2024-10-01. The matrices (63 cells), the top five band bounds, smi_max_size and additional_member_amount change at 2025-10-01. The tests use periods 2025 and 2026, and the registry lists Arkansas partial with no verified_years.

Overall: the FY2025 and FY2026 tables and limits are right where the sources print them, and the income rules follow the accepted plans and the operating application.

  • All 1,170 matrix cells (5 fuels × 39 rows × 3 columns × 2 years) and all 78 row lower bounds match the AEO PDFs. I compared them row by row, using the coordinates of the PDF text layer.
    • The FY2026 set is identical to the Clearinghouse copy.
    • The FY2025 electric file is byte-identical to a Wayback capture of December 6, 2024, so it was posted before the January 6, 2025 opening.
  • All 40 printed limits (sizes 1-20, both years) reproduce, and the printed per-member amounts are stored.
    • They come from the repo's medians ($86,577 and $90,280) and the 2024 and 2025 guidelines with half-up monthly rounding.
    • Every limit is at least 32% above 110% of poverty, so the federal floor never binds.
  • The income definition follows plan item 1.8 ("For work income, we collect data for gross income and subtract 20%. For non-work income, we use gross amount") and the checked 1.9 boxes, including "Excluding MediCare deduction".
    • The minor and full-time-student rule follows application Section III. The FY2025 form (R 01/FY2025) uses the same words (G2).
    • The PR resolves several conflicts toward the draft manual or the application: TEA, workers' compensation, gambling, capital gains, interest and rental. Each is documented.
  • The tests are strong. The hand checks reproduce, the band edges and the limit edge are tested to the cent, and three control mutations fail as expected. Five unearned sources and two small pieces of logic are not pinned (S3).

There are no critical findings. The four should-address items:

  • S1: a merge blocker from main's Integrate modeled state unemployment insurance into income flows #9558. The unearned list reads the raw unemployment_compensation, so main's guard fails on the merged tree. Arkansas UI is not modeled on main, so no value changes today.
  • S2: six parameter descriptions use verbs outside the house template.
  • S3: five listed unearned sources are never positive in a test. Two small pieces of logic also have no test that would fail without them: the bill term in the direct-responsibility branch and the size-0 mask on the income limit.
  • S4: three plan references lack page lists, and the manual reference's page list omits four of the pages the list relies on.

All 70 cases pass locally at the head and on the merged tree. The model outputs quoted below were reproduced by running the head code, or the merged tree for S1. Values that a proposed fix or another reading would produce are hand computations and are labelled as such. The S3 claims and the control mutations come from mutating the code and rerunning the PR's tests.

Path prefixes used below:

  • P/ = policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/
  • V/ = policyengine_us/variables/gov/states/ar/ee/aeo/liheap/
  • T/ = policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/
  • M = the FY2025 Arkansas LIHEAP Policy and Procedures Manual. It is watermarked DRAFT, runs to 167 pages and has the cover line "Effective October 1, 2024 – September 30, 2025". PDF page = printed page.

Line numbers refer to head 7e42062309.

Source Documents

# Document Link Use
1 FY2026 Arkansas LIHEAP Detailed Model Plan (55 pp, Revision #1, "Submission Accepted by CO"). The SF-424 names "Arkansas Energy Office (AEO)" in the "Arkansas Department of Energy and Environment" p. 9 1.1: heating "is offered the first Monday after the New Year holiday", and Regular households "end the last business day of March" (p4). 1.4 No and 1.8 (p5). 1.9 with "Excluding MediCare deduction" (p6), foster care and the "Other" lottery note (p7). 2.1: 60% of SMI for sizes 1-7 and 150% of the HHS guidelines for 8-15; 2.2-2.3 (p9). Energy burden (p10). 2.6: $60 / $570 (p11). Checkbox states were read from rendered pages
2 FY2025 plan (51 pp, "Submission Accepted by CO") p. 8 Heating 01/06/2025-03/31/2025 (p4). 1.4 No, 1.8 and the start of 1.9 (p5); the rest of 1.9 (p6); the lottery note (p7). 2.1: SMI for sizes 1-6 and the guidelines for 7-15; 2.3 (p8). 2.6: $50 / $475 (p9)
3 Proposed FY2027 plan (55 pp, status "Saved") and AEO's responses to comments (8 pp, comments received through Aug. 12, 2026) plan, p. 11, responses, p. 5 The same 1.8, 1.9 and 2.1 (p5-6, p9). 2.6: $70 / $665 (p11). The responses say "The 10% increase to heating assistance benefits sets the heating minimum at $66 and the maximum at $627" (p5)
4 FFY 2026 and FFY 2025 eligibility charts (1 p each) FY2026, FY2025 Maximum MCI for sizes 1-20; "ADD $688" and "ADD $672 FOR EACH ADDITIONAL HOUSEHOLD MEMBER"
5 FFY 2026 and FFY 2025 benefit matrices (5 fuels × 2 pp each) and the Clearinghouse FY2026 copy (10 pp) FY2026 electric, p. 1, FY2025 electric, p. 1, Clearinghouse FY2026 All cells. The four non-electric fuels are headed "(WINTER ONLY)", and the FY2025 electric header reads "(20% OVER BASE)". The FY2025 electric file's SHA-1 equals the Dec. 6, 2024 Wayback capture
6 Clearinghouse "2025" and "2024" Arkansas matrices ("REGULAR ASSISTANCE") 2025, 2024 Not cited in the PR. Both carry the same base amounts (electric $202 / $240 / $287 at $0-69), and 1.2 times them gives the FY2025 AEO cells (G1)
7 Application AEO-9495, R 11/2025 (current) and R 01/FY2025 R 11/2025, p. 2; R 01/FY2025, p. 2 (a subgrantee's copy; also the Jan. 4, 2025 Wayback capture) Both versions have the Section III line "WORK INCOME: List anyone in your household (18 and older & not a full-time student) who has work income" and a non-work list that includes TEA and workers' compensation. Fuel groups (p3)
8 M p. 41 4.4 household size (p36-37). 4.7: the income period and the 18-year-old high-school rule (p41). 80% of gross "before any pre-tax deductions" and MCI rounding (p42). 4.7.2 Part B (p43). 4.7.4 loss floor (p47). 4.8 energy burden (p47-48). "no longer considers eligibility using other means-tested programs" (p49). 6.1 matrices (p62). Appendices E-F (p129-144)
9 HHS state median income and poverty guidelines repo gov.hhs.smi.amount (AR: $86,577 for FY2025, $90,280 for FY2026, $94,627 for FY2027) and gov.hhs.fpg Limit derivations. The 2025 and 2026 guidelines are used for the floor check
10 42 USC 8624(b)(2)(B) LII The 110%-of-poverty floor

Critical (Must Fix)

None.

Should Address

S1. Merge blocker: after merging main, the unearned list reads the reported-only unemployment_compensation, so main's guard fails

  • Where: P/income/sources/unearned.yaml:11 (- unemployment_compensation).
  • What changed on main: Integrate modeled state unemployment insurance into income flows #9558, merged on 2026-10-13, the day after this PR's last push.
    • It added total_unemployment_compensation, which uses the reported amount when present and otherwise the modeled state unemployment insurance programs.
    • It moved every income-source list under parameters/ to the total.
    • It added policyengine_us/tests/code_health/test_unemployment_compensation_readers.py, which fails on any raw list entry.
  • Reproduced on the git merge-tree result of main 8ae01aa3cb and this head:
    • test_parameter_source_lists_do_not_read_raw_unemployment_compensation fails with one violation, parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml:11.
    • The file's other three tests pass, and the PR's 70 cases still pass on that tree.
  • Source: none of these separates reported from modeled amounts.
    • Plan item 1.9 checks "Unemployment insurance" (FY2026, p. 6; FY2025, p5).
    • M Appendix F counts "Unemployment" as "YES" (p. 144).
    • The application lists "Unemployment Benefits" as non-work income.
  • Impact: main models UI only for AL, NJ, NY, OK, PA and UT (gov.states.household.modeled_state_unemployment_compensation).
    • For Arkansas households the total equals the reported amount, so no value changes today. Reproduced at head: a reported $6,000 counts in full, giving MCI $500 and $216 with gas heat.
    • The guard still blocks the merge, and the raw entry would silently drop Arkansas UI once it is modeled.
  • Why should, not critical: the head is correct against its base and CI is green. The conflict comes from a main commit merged after the last push, and git merge-tree shows a clean textual merge, but this has to change before merge. The same finding was Add Alabama LIHEAP regular heating assistance #9967 S1, Add Rhode Island LIHEAP regular heating assistance #9972 S1, Add Georgia LIHEAP regular heating assistance #9968 S1, Add Ohio HEAP regular heating assistance #9975 S1, Add South Dakota LIEAP regular heating assistance #9974 S1 and Add Oklahoma LIHEAP regular heating assistance #9970 S1. As in Ohio (Add Ohio HEAP regular heating assistance #9975), no values change.
  • Fix:
    • Replace the entry with total_unemployment_compensation.
    • Add a case with positive UI; none exists today (S3).
    • Update rulespec-us#1538: its countable-income output and its inputs list both name unemployment_compensation.

S2. Six parameter descriptions use verbs outside the house template

All 19 descriptions end with "under the Low Income Home Energy Assistance Program." with nothing after it. The template's verbs are limits, provides, sets, excludes, deducts and uses.

File:line Current Suggested
P/income/limit/max_table_size.yaml:1 "publishes income limits up to this household size before adding a separate amount per additional member" "Arkansas sets income limits through this household size and adds a per-member amount above it under the ..."
P/income/limit/rounding_increment.yaml:1 "publishes monthly income limits in increments of this amount" "Arkansas uses this increment to round monthly income limits under the ..."
P/income/sources/earned.yaml:1 "counts these earned income sources" "Arkansas uses these sources as earned income under the ..."
P/income/sources/unearned.yaml:1 "counts these unearned income sources" "Arkansas uses these sources as unearned income under the ..."
P/payment/household_size_group.yaml:1 "assigns this payment group by household size" "Arkansas uses this household-size group for the regular heating payment under the ..."
P/payment/income_band.yaml:1 "assigns this payment band by monthly countable income" "Arkansas uses this monthly countable income band for the regular heating payment under the ..."

S3. Five listed income sources and two small pieces of logic have no test that would fail if they broke

Each mutation below, applied to the head on its own, still passes all 70 cases.

  1. Five unearned sources are never positive in any test.
    • The sources: unemployment_compensation (P/income/sources/unearned.yaml:11), strike_benefits (:12), ordinary_dividend_income (:23), veterans_benefits (:24) and financial_assistance (:26).
    • Removing any one of them passes every case (reproduced for each).
    • Each maps to a checked 1.9 box: unemployment insurance, strike pay, "Interest, dividends, or royalties", VA benefits and cash gifts.
    • Fix: add a column for each to countable-income Case 11 (T/income/ar_liheap_countable_income.yaml:312), which already checks four sources in a vector, or add them to an existing household.
  2. The bill term in the direct-responsibility branch (V/eligibility/ar_liheap_eligible.py:33, (expense > 0) | has_expense).
    • has_heating_expense already defaults to "bill above zero and heat not in rent". So the term matters only when a caller sets has_heating_expense to false while reporting a bill.
    • Reproduced: one adult with $12,000 of wages, gas heat, a $1,200 gas bill and has_heating_expense: false is eligible for $182 at head. Without the term the household is ineligible and gets $0.
    • The input's documentation tells callers to set it directly when the bill is not the heating cost. That argues for respecting an explicit false and dropping the term. Otherwise, pin the current result with that case (as Add Florida LIHEAP regular heating assistance #9969 S3.2 asked for Florida).
  3. The size-0 mask on the income limit (V/income/ar_liheap_income_limit.py:39, where(size > 0, ..., 0)).
    • Without it, a unit with no qualified member gets the one-person limit, because smi_size_factor clips size 0 to the 52% share.
    • Reproduced: one undocumented adult has a limit of $0 at head and $28,164 under the mutation.
    • Eligibility still gates on size > 0, which T/eligibility/ar_liheap_eligible.yaml Case 4 pins, so only the limit variable changes.
    • Fix: add ar_liheap_income_limit: 0 to T/ar_liheap_household_size.yaml Case 2, as Add Georgia LIHEAP regular heating assistance #9968 S2.3 and Add Florida LIHEAP regular heating assistance #9969 S3.1 asked.

Three control mutations confirm the method:

  • Dropping size > 0 from eligibility fails T/eligibility/ar_liheap_eligible.yaml.
  • Dropping the NONE check fails the same file.
  • Dropping the surcharge term for subsidized heat in rent fails that file and T/ar_liheap.yaml.

By inspection, the rest is pinned:

  • the seven earned sources: countable-income Case 5 breaks if any of its five business and wage sources is dropped, and rental and farm rent are positive in Cases 7, 16 and 18;
  • the other nine unearned sources, the per-source loss floors, the interest disregard, and the Part B netting with its floor;
  • TEA with and without take-up, the minor and full-time-student exclusions at ages 17 and 18, and MCI rounding at the limit and at a band edge;
  • the SMI/FPG switch in both years, each limit rounding and the per-member amount above size 20;
  • every band edge tested, each fuel table and the kerosene, wood, coal and other mapping, the size-group edges, and the matrix size-0 mask;
  • heat in rent with both subsidy routes, the obligation flag without a bill, the NONE check and the Arkansas gate.

Consistency: #9967 S3, #9972 S3, #9968 S2, #9975 S4, #9969 S3 and #9970 S6 rated untested logic and sources SHOULD (checklist item 13).

S4. References: three plan citations lack page lists, and the manual's page list omits four cited pages

File:line Problem Fix
P/income/sources/unearned.yaml:45-46 FY2025 plan item 1.9 opens on p5, which shows only "Unemployment insurance". Strike pay, Social Security, SSI, pensions, cash gifts, alimony, child support, "Interest, dividends, or royalties" and VA benefits are on p6, and the lottery note is on p7 Keep #page=5 and end the title with "#page 5-7"
P/income/sources/unearned.yaml:43-44 FY2026 item 1.9 opens on p6, but the lottery-only note that the gambling_winnings comment cites (:31-32) is on p7 End the title with "#page 6-7"
P/income/sources/earned.yaml:27-28 FY2025 item 1.9 opens on p5 (wages, self-employment), but "Rental income" is on p6 End the title with "#page 5-6"
P/income/sources/unearned.yaml:47-48 The manual title ends #page 130,132,135,141,144, but the list also relies on Appendix F rows for alimony (p131), dividends (p133), pensions (p140), and strike pay and SSI (p143) End it with "#page 130-133,135,140-141,143-144"

The other plan, chart, manual and matrix anchors show their values (see Verified correct). Consistency: #9972 S5, #9975 S6, #9974 S3 and #9970 S5 rated missing page lists SHOULD.

Suggestions

G1. FY2025 benefit levels: say why the "20% OVER BASE" matrices win over plan item 2.6 and the Clearinghouse file

  • FY2025 plan item 2.6 estimates a $50 minimum and a $475 maximum (p. 9). The AEO FY2025 matrices print $60 to $570, and the electric header reads "HOUSEHOLD SIZE BENEFIT PAYMENT (20% OVER BASE)".
  • The Clearinghouse's AR_BenefitMatrix_2025.pdf is titled "2025 ELECTRICITY FUEL BENEFIT MATRIX REGULAR ASSISTANCE". It nonetheless carries the base amounts, identical to its 2024 file:
    • first-row (income $0-69) base amounts: electric $202 / $240 / $287, natural gas $257 / $305 / $364, propane $331 / $393 / $469 and other $241 / $287 / $342;
    • 1.2 times these, rounded, gives every first-row AEO FY2025 cell: $242 / $288 / $344; $308 / $366 / $437; $397 / $472 / $563; $289 / $344 / $410;
    • fuel oil's $570 is 1.2 times the plan's $475.
  • The AEO matrices were on the AEO site before the season. Their file dates are October 7, 2024, and the FY2025 electric file is byte-identical to the December 6, 2024 Wayback capture; the same digest appears in captures from June and July 2025. So the PR's FY2025 cells are the ones in force from January 6, 2025.
  • rulespec-us#1538 records the plan conflict (interpretation 10), but the PR body and the matrix comments do not. Add a sentence and the capture link, and note that the Clearinghouse "2025" file repeats the FY2024 matrix.

G2. Minors and full-time students: the FY2025 form supports the backfill, and the reach is worth stating

  • The PR calls applying the current application's rule to FY2025 "a backfilled assumption without a confirmed change date". But the FY2025 form, AEO 9495 R 01/FY2025, has the same Section III sentence (source 7). Cite it in the comment at V/income/ar_liheap_countable_income.py:29-33, in the PR body and in Resolve US discrepancies against TAXSIM35 for 2021 #1538 interpretation 3(c).
  • M 4.7.3 also exempts full-time students from the Zero Income Form (p. 43: "Each adult (aged 18 or older) who declares zero or inadequate income and who is not a full-time student"). That fits the form's broad reading better than Appendix F's rule for dependent students up to age 23 (p134).
  • Reach: the rule excludes all earnings of a full-time student of any age. Reproduced at head (2026, gas heat):
    • a 35-year-old full-time graduate student living alone with $40,000 of wages has countable income of $0 and gets $308;
    • the same person, not in school, has MCI of $2,667, above the $2,347 limit, and gets $0.
  • That follows the form literally. If AEO confirms the draft manual's narrower rule instead, revert to it. Either way, mention the reach in the registry notes.

G3. Solar and unknown-fuel households are eligible but paid $0

G4. Unclaimed years: FY2027 and the pre-FY2025 backfill

  • FY2027. The proposed plan gives $70 / $665 (item 2.6, p11), while AEO's responses give $66 / $627 (p5). No FY2027 chart or matrix is posted.
    • Period 2027 carries the FY2026 matrices with the FY2027 median ($94,627) and the 2026 guideline.
    • Reproduced: one person has a limit of $29,520 ($2,460 a month) and gets $308 with no income and gas heat.
    • The PR documents this.
  • Before FY2025. Periods up to 2024 read FY2025's 20%-higher matrices.
    • FY2024's plan gives $50 / $475 (item 2.6, p. 9), and the Clearinghouse FY2024 matrix has the base amounts and different top rows.
    • Reproduced: in 2024, a one-person gas household with no income gets $308; the FY2024 matrix pays $257.
    • The years are unclaimed and documented as unverified. Record this in the registry notes (checklist item 3).
  • No plan from FY2025 to FY2027 calls the increase an IIJA supplement (checklist item 12).
    • FY2026 keeps the same first-row amounts without the "over base" label.
    • The FY2027 proposal raises them a further 10%.

G5. Two documented conflicts to state more precisely

  • Capital gains and gambling.
    • The PR body says "Section 1.9 has no capital gains item". But both plans add "The only one-time lump sum payment counted towards income is lottery winnings" (FY2026 and FY2025, p7).
    • M p138 also excludes "nonrecurring lump-sum payments, including but not limited to the sale of personal property".
    • Those point against counting a one-time capital gain or a non-lottery gambling win, while M p132 and p135 count them.
    • The choice is documented; describe the lump-sum conflict accurately in the PR body and Resolve US discrepancies against TAXSIM35 for 2021 #1538 interpretation 2.
  • Interest. "amount over $200.00" (M p137) gives no period and no unit. The monthly per-member reading is the most generous one. Reproduced at head:
    • two spouses with $2,400 of interest each and a $12,000 pension count $12,000 and get $161;
    • if one spouse held all $4,800, they count $14,400 and get $139.
    • The PR already documents this; no change is needed.
  • TEA is reasonable as encoded.
    • Plan 1.9 leaves TANF unchecked in both years.
    • Both application versions list "TEA" as non-work income, and M p130 says "Do not count sources such as SSA, SSI, and TEA more than once monthly per individual".
    • Reproduced: a family of three with $204 a month of TEA gets $324 rather than $366.

G6. Code, test and PR hygiene

  • P/income/student_exclusion/child_age_limit.yaml: since 92153a43cb the parameter excludes every minor's earnings, whether or not the minor is in school. Full-time students are excluded in the formula, without a parameter. The folder name student_exclusion no longer describes it; consider, for example, income/earned/minimum_age.
  • MCI rounding uses a literal (np.floor(annual_income / MONTHS_IN_YEAR + 0.5), V/income/ar_liheap_countable_income.py:86), while the limit uses rounding_increment. Optional: read a parameter.
  • Reference titles:
    • The fpg_year_lag titles describe the charts as "using the 2025 federal poverty guidelines", which the charts do not print. "Reproduced by" would be accurate.
    • The matrix and size-group titles call the electric file a "Winter Benefits Matrix", but its heading is "FFY 2026 BENEFITS MATRIX" and M p62 uses it for both seasons.
  • Many test comments lost the spaces around their numbers, for example:
    • T/ar_liheap.yaml:1 ("monthly370-429 gives227 ... zero income gives308");
    • T/payment/ar_liheap_matrix_amount.yaml:3 ("matrix:39lower bounds×3size columns=117literal cell checks");
    • T/income/ar_liheap_income_limit.yaml:3 ("Official2026income chart sizes1–20 plus explicit688monthly");
    • T/income/ar_liheap_countable_income.yaml:94 ("Exactly18 ... after20%disregard").
  • Several comments refer to internal material (see Add Rhode Island LIHEAP regular heating assistance #9972 G7, Add Ohio HEAP regular heating assistance #9975 G6 and Add Oklahoma LIHEAP regular heating assistance #9970 G4):
    • "Contract specifies nonnegative earned sources" (T/income/ar_liheap_countable_income.yaml:154);
    • "Draft status is disclosed in the research report" (T/ar_liheap_household_size.yaml:1);
    • "qualified composition source hierarchy in the research report" (T/eligibility/ar_liheap_eligible.yaml:1).
  • PR body and issue:
    • "the PR remains draft": the PR is not a draft.
    • rulespec-us#1538 also says "open as a draft" and that the tests were "Not run in this session". All 70 pass locally at this head.

Verified correct

  • Matrices (source 5):

    • All 1,170 cells and 78 row bounds, including the $20 row "1990-2009" and the $120 rows "1750-1869" and "1870-1989".
    • The FY2025 top rows "2,250-2,944" to "5,140-Max" and the FY2026 top rows "2348-3070" to "5237-Max".
    • The columns "1&2", "3&4" and "5 & UP".
    • The 63 changed cells match the PR body's count (electric 11, natural gas 25, propane 12, fuel oil 11, other 4).
    • Fuel groups follow the application (p3): "FUEL OIL/ KEROSENE", and wood and other on "OTHER (WOOD, PELLETS, ETC.)".
    • Plan item 2.6's $60 / $570 matches the FY2026 extremes.
    • There is no bill cap. M 2.1 says "The benefit is designed to assist households with their energy burden, not to cover total costs" (p15), and 6.1 uses MCI, household size and fuel type (p62).
  • Limits (source 4):

    • FY2026: 0.6 × $90,280 × the 45 CFR 96.85(b) factor ÷ 12, rounded half up, for sizes 1-7 ($2,347 ... $6,094). Above that, 1.5 × the 2025 guideline ÷ 12 ($6,769 ... $15,019), plus the printed $688.
    • FY2025: the $86,577 median for sizes 1-6 ($2,251 ... $5,714), the 2024 guideline from size 7 ($5,918 ... $14,660), and the printed $672. Half-up rounding at the exact half-dollars ($5,917.50, $7,262.50, $8,607.50 and others) matches every printed row.
    • The limit is inclusive (M 3.2: "at or below", p31) and is compared with rounded MCI.
  • Federal floor (42 USC 8624(b)(2)(B)). FY2026 monthly limit against 110% of the higher (2026) guideline:

    Size 1 2 3 4 5 6 7 8 20 Each additional
    Limit $2,347 $3,070 $3,792 $4,514 $5,236 $5,958 $6,094 $6,769 $15,019 $688
    110% $1,463.00 $1,983.67 $2,504.33 $3,025.00 $3,545.67 $4,066.33 $4,587.00 $5,107.67 $11,355.67 $520.67
    • FY2025's limits clear 110% of the 2025 guideline at every size: $1,434.58 for one person, $4,459.58 for seven and $11,013.75 for twenty, plus $504.17 per member.
    • The narrowest margin is 32%, so the floor cannot bind.
  • Timing:

    • FY2025 regular heating ran from 01/06/2025 to 03/31/2025 (plan p4).
    • FY2026 Regular Assistance runs from the first Monday after New Year's to the last business day of March. Priority intake may start up to 30 days earlier; AEO's responses say December 8, 2025.
    • Period N reads FY N on January 1.
  • Income:

    • Plan 1.8 and the checked 1.9 boxes.
    • Social Security and railroad retirement net of Part B: 1.9 "Excluding MediCare deduction"; M 4.7.2 ("must not count medical deductions as income ... This includes the Medicare Part B Buy-in premium", p43); and M Appendix F ("Medicare insurance premiums" No, p138).
    • Per-source loss floors (M 4.7.4: "Negative self-employment income will not be subtracted from other household income but will be counted as zero", p47; capital losses No, p132).
    • Rental property as a self-employment enterprise (p141).
    • 80% of gross wages "before any pre-tax deductions" (p42).
    • Minors' earnings excluded: 1.9 leaves "Earned income of a child under the age of 18" unchecked, and the application agrees.
    • Undocumented members' income counted (M 4.4, p36; p136).
    • MCI rounding to the nearest dollar (p42).
    • TEA counted once through the take-up-gated tanf.
  • Household and eligibility:

    • Size counts citizens and qualified noncitizens (M 4.4-4.4.1). The enum covers the 8 USC 1641(b) statuses except COFA and battered noncitizens, which the PR documents. A unit with no qualified member is ineligible.
    • No categorical eligibility (plan 1.4 No; M p49) and no asset test (plan 2.3).
    • Energy burden (plan 2.3, p9; M 4.8.3, p48): a direct bill or obligation qualifies; unsubsidized heat in rent qualifies with a lease; subsidized heat in rent needs "a utility surcharge or other extra cost". NONE is ineligible.
  • Code patterns:

    • No hard-coded policy values (apart from the rounding literal in G6). defined_for = StateCode.AR is on five variables, and ar_liheap is gated by ar_liheap_eligible. All 19 parameters are read, the formulas are vectorized, and the shared smi() and fpg() helpers are reused.
    • The matrix keys come from bracket lookups that always return 1-39 and 1-3.
  • Tests:

    • 70 of 70 pass locally at head (policyengine-core 3.32.29) and on the merged tree. Periods are plain (2025, 2026).
    • Hand-checked against the charts, matrices, plans, manual and application:
      • T/ar_liheap.yaml Cases 1, 3, 6-12 and 14-19;
      • limit Cases 1-3 (all 32 values);
      • countable-income Cases 5, 7, 9, 14, 24 and 25;
      • eligibility Case 5;
      • matrix Cases 6 and 10.
  • Changelog: changelog.d/ar-liheap.added.md is top level and typed added.

Checklist results (LIHEAP wave 2a)

  1. State plan and manual first: pass. I read the following and verified every encoded cell, limit and branch:
    • the accepted FY2025 and FY2026 plans (rendered checkboxes), the proposed FY2027 plan and AEO's comment responses;
    • both charts, all ten matrices, the Clearinghouse FY2024-FY2026 matrices, both application versions and M.
    • Arkansas LIHEAP is run by AEO, not DHS, so gov.states.ar.ee.aeo is the right path. No adopted FY2025 or FY2026 manual was found; the PR discloses its reliance on the draft.
  2. Income definition: pass.
    • Gross work income less 20%, and gross non-work income (plan 1.8). Social Security net of Part B, per the plan box and M 4.7.2. Loss floors per source, and annual inputs standing in for the prior month.
    • The minor and student rule follows both application versions (G2). The lump-sum wording is in G5. UI needs the total after rebase (S1).
  3. Backdating: FY2025 and FY2026 are represented and correct.
    • FY2025 uses the "20% OVER BASE" matrices posted before the season (G1).
    • Earlier years and 2027 are unclaimed, documented estimates (G4). No FY2027 chart or matrix is published.
  4. Household and arrangement rules: pass. Subsidized and public housing, heat in rent with and without a surcharge, a direct obligation without a bill, no categorical eligibility, the $60-$570 range and NONE are handled and tested. Priority affects intake timing only. Solar and unknown fuel get $0 (G3).
  5. Tests: 70 cases, more than 8 hand-checked.
    • Covered: FY2026 limits for sizes 1-21 and FY2025 limits for sizes 1-9, 20 and 21; the limit edge (to the cent and at the half dollar); band edges; the size-group edges; ages 17 and 18; plain periods.
    • Gaps: S3.
  6. Parameter descriptions: six are off-template (S2). None has a trailing clause.
  7. References: three missing page lists and one incomplete page list (S4). Polish is in G6.
  8. Wiring: pass.
    • The programs.yaml entry and the coverage line are well formed, and the registry test passes on the merged tree (655 passed).
    • There is no aggregate wiring, which matches OR, NY, NJ and MD on main.
    • defined_for gating is on every variable, and the state-gating checks pass on the merged tree.
    • Take-up applies only through tanf, as in the siblings.
  9. Axiom: valid queued line. rulespec-us#1538 is open, labelled pe-parity, dispatch-ready and current to 7e42062309. It needs updates for S1 and S3 and the G1, G2 and G5 notes (see below).
  10. Branch and CI: all checks are green at head. The branch is 9 ahead and 82 behind main. There are no textual conflicts, but main's UI guard fails on the merged tree (S1).
  11. Integrate modeled state unemployment insurance into income flows #9558: S1. Arkansas UI is not modeled, so the guard fails but no value changes.
  12. IIJA and FY2027: no plan from FY2025 to FY2027 mentions an IIJA supplement.
    • The FY2025 20% increase persists in FY2026, and FY2027 proposes a further 10%, so it is not a temporary supplement.
    • FY2027 is proposed only ($70 / $665, or $66 / $627 in AEO's responses) and has no matrix. It is unencoded and documented (G4).
  13. Mutation check: S3. Three control mutations fail as expected.
  14. Health premiums after Document disjoint health premium inputs and correct consumer treatment #10046: not applicable.
    • Arkansas counts 80% of gross wages "before any pre-tax deductions" (M p42) and deducts no health premiums from them.
    • The only medical item is the Part B netting from Social Security and railroad retirement, which reads medicare_part_b_premium.
  15. State-gated index defaults: pass.
    • ar_liheap_household_size (int, default 0) feeds only bracket lookups (max_(size, 1)), smi() and clip(size, 1, 20), and the matrix keys are always 1-39 and 1-3.
    • T/ar_liheap.yaml Case 5 runs AR and GA households in one simulation without error.

CI status

28 of 28 checks pass at 7e42062309 (gh pr checks 9973, run of 2026-10-12). The three "skipping" entries belong to a superseded run on the same SHA.

Branch status

Axiom line

axiom: TheAxiomFoundation/rulespec-us#1538 queued: valid format, and the issue meets the bar.

  • rulespec-us#1538 is open and labelled pe-parity (plus enhancement), with no comments. It was last updated 2026-10-12.
  • It is dispatch-ready under the Add AMT parameters for 2020-2023 #1467 standard. It has:
    • proposed us-ar/ module paths with corpus status;
    • verbatim plan, chart, matrix, manual, application, guideline and median-income text;
    • required outputs for all six variables;
    • 14 companion tests derived from the sources ("None is taken from policyengine-us output").
  • It describes head 7e42062309 correctly, including:
    • the FY2025 plan-matrix conflict (interpretation 10);
    • the student rule (3(c)), the interest reading (3(a)) and the Part B netting (6).
  • Updates needed when the fixes land:
    • total_unemployment_compensation in the countable-income output and the inputs list (S1);
    • the new cases (S3);
    • the FY2025 form (G2), the Clearinghouse "2025" note (G1) and the lump-sum wording (G5);
    • the stale "open as a draft" and "Not run in this session".

Next steps

  1. S1: rebase onto main, switch P/income/sources/unearned.yaml:11 to total_unemployment_compensation, and add a case with reported UI.
  2. S2: align the six descriptions.
  3. S3: give the five unearned sources positive test values, pin or drop the bill term in the direct-responsibility branch, and assert the size-0 limit.
  4. S4: add the page lists.
  5. Optionally address G1-G6, then refresh the PR body and rulespec-us#1538 and re-request review.

0 critical and 4 should-address findings, plus 6 suggestions.

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes for 4 should items; details in the full report above. Verified: all 1,170 matrix cells and 78 row bounds (5 fuels, FY2025 and FY2026) and all 40 income-limit chart values. The 110% floor never binds. Income treatment follows plan 1.8/1.9 and the application, all 70 tests pass, and CI is green. (1) Merge blocker from main's #9558: unearned.yaml:11 reads the raw unemployment_compensation, so the guard fails on the merged tree. (2) Six parameter descriptions are off the house template. (3) Logic that passes every test even when broken on purpose: five income sources are never set to a nonzero value (unemployment, strike benefits, ordinary dividends, veterans' benefits, financial assistance), along with the bill term in direct responsibility and the size-0 income-limit mask. (4) Incomplete page anchors and lists on the plan 1.9, earned-income and manual references.

hua7450 and others added 2 commits October 15, 2026 15:13
- S1: Merge blocker: the unearned list reads raw unemployment_compensation (main PR 9558 guard)
- S2: Six parameter descriptions are off the house template (plus optional interest wording)
- S3: Untested logic: five unearned sources, the bill term in direct responsibility, and the size-0 limit mask
- S4: References: three plan citations lack page lists, and the manual list omits cited pages

Also applies the in-scope suggestions. Tests not run locally; CI validates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450

hua7450 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for the review. Fixes pushed in 1206c14.

This head also merges upstream/main (PRs 9558 and 10046). Arkansas deducts no payroll health premiums (its only premium netting is Part B against Social Security and railroad retirement), so 10046 changes nothing here. As you found, every Arkansas limit clears 110% of poverty (42 U.S.C. 8624(b)(2)(B)) by at least 32% in 2025-2027, so this PR does not add the shared gov.hhs.liheap.fpg_floor parameter; the PR body now states the margin.

  • S1: income/sources/unearned.yaml now lists total_unemployment_compensation, so main's guard passes. No value changes, because Arkansas UI is not modeled. Countable-income Case 26 pins a reported $5,412 (the $451 maximum weekly benefit for 12 weeks, DOL July 2025 table) at $5,412.
  • S2: the six descriptions now use the template verbs: "sets" for max_table_size, and "uses" for rounding_increment, both source lists, household_size_group and income_band, worded as in the merged NJ and MD files where they have the same parameter. interest_disregard takes your optional wording ("this monthly amount of each member's interest").
  • S3: (1) Countable-income Case 26 gives each of the five sources its own household: UI $5,412, strike pay $3,000 (6 weeks at $500), dividends $1,200 (through qualified_dividend_income), 2026 VA compensation at 30% for a veteran alone ($552.47 a month, so MCI $552 and $6,624) and regular cash gifts $1,800. (2) I took your first option: the direct branch now reads has_heating_expense alone, so an explicit false is respected. Eligibility Case 7 pins one adult with $11,440 of wages and a $1,200 gas bill at eligible and $190 with the flag true, and ineligible and $0 with it false; no existing case relied on the bill term. (3) Household-size Case 2 asserts ar_liheap_income_limit: 0. The PR now has 72 cases.
  • S4: applied as proposed, plus page 138 in the manual title because the revised gambling and capital-gains comments cite it: unearned FY2026 #page 6-7 and FY2025 #page 5-7, earned FY2025 #page 5-6, and manual #page 130-133,135,138,140-141,143-144.
  • G1: a comment above the matrix select and a new PR-body bullet explain the FY2025 cells: AEO's "(20% OVER BASE)" matrices, dated October 7, 2024 and posted before the season (the December 6, 2024 capture), take precedence over plan item 2.6's $50-$475 estimate, and the Clearinghouse "2025" file repeats the FY2024 base. Multiplying that base by 1.2 and rounding reproduces only the 35 shared rows from $0 through $2,250 for every fuel; the top rows differ, so the text limits the claim to those rows.
  • G2: the FY2025 form (R 01/FY2025, January 4, 2025 capture) is now cited in the countable-income comment and references, the earned-age parameter, the PR body and the issue, and the reach (your $40,000 graduate student: $308 in school, $0 out of school) is in the PR body. The comment also cites manual 4.7.3 (p. 43) on the Zero Income Form, but that sentence is only in the 167-page draft: the 190-page FFY 2025 manual on the Clearinghouse (AR_Manual_2025.pdf, created November 18, 2024) omits it from 4.7.3 (p. 59) and keeps the dependent-student rule up to age 23 (pp. 141 and 159), and the PR body now says so. By repo convention registry notes stay one or two short sentences, so the reach is not in programs.yaml.
  • G3: declined. A fuel the source does not map to one priced column stays eligible with $0 as a documented limitation. The application has no solar box, and a solar home could answer all-electric (electric matrix) or write in OTHER (other-fuels matrix), so the source does not fix a column. The same decision keeps these households eligible, so the $0 stays a payment result rather than an ineligibility, and Default heating_type to electricity and remove the UNSPECIFIED-gated state heating adapters #9754 tracks the unspecified default.
  • G4: history is out of scope for this PR; earlier periods and 2027 stay unverified backfilled estimates. The registry note now says other years are unverified, and the PR body records the 2024 contrast ($308 against the FY2024 matrix's $257) and the FY2027 proposal ($70-$665, or $66-$627 in AEO's responses). No FY2025-FY2027 plan mentions an IIJA supplement, so no end date applies.
  • G5: the gambling and capital-gains comments, the PR body's conflict rows and the issue now cite the plans' lottery-only lump-sum sentence (p. 7) and the manual's nonrecurring lump-sum exclusion (p. 138). The model still follows the Appendix F rows (pp. 132 and 135). As you noted, interest and TEA need no change.
  • G6: income/student_exclusion/child_age_limit is now income/earned_minimum_age (still 18). The fpg_year_lag titles say "reproduced by", and the FY2026 electric, size-group and income-band titles drop "Winter"; the four WINTER ONLY files keep it. I also fixed the glued numbers in the test comments and the Case 19 name. The three comments that cited internal material now cite the manual and plan, and the PR body and the issue no longer call the PR a draft. The MCI rounding literal stays: the manual sets MCI at the nearest whole dollar (p. 42), so np.floor(x + 0.5) is the repo's half-up idiom and there is no policy lever to parameterize. The limit has a parameter only because its rounding is an inferred pattern.
  • LIHEAP wave 2a: encode Arkansas LIHEAP regular heating assistance TheAxiomFoundation/rulespec-us#1538 is refreshed to this head.

@hua7450
hua7450 requested a review from DTrim99 October 15, 2026 21:08

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Arkansas LIHEAP regular heating assistance

2 participants