Repository navigation
Conversation
- 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 Report✅ All modified and coverable lines are covered by tests. 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
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:
|
…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>
PR Review: Add Arkansas LIHEAP regular heating assistancePR #9973: Add Arkansas LIHEAP regular heating assistance (author: hua7450, head 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:
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), 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.
There are no critical findings. The four should-address items:
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:
Line numbers refer to head Source Documents
Critical (Must Fix)None. Should AddressS1. Merge blocker: after merging main, the unearned list reads the reported-only
|
| 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 ..." |
P/income/interest_disregard.yaml:1fits the template. But "this amount of interest" leaves out that the amount is monthly and per member, which the comment and the formula apply. Optional wording: "Arkansas excludes this monthly amount of each member's interest from countable income under the ...".- The other twelve fit:
- excludes:
earned_disregard,interest_disregardandstudent_exclusion/child_age_limit; - limits:
fpg_rateandsmi_rate; - sets:
additional_member_amount; - uses:
fpg_year_lagandsmi_max_size; - provides: the five matrix files.
- excludes:
- Consistency: Add Alabama LIHEAP regular heating assistance #9967 S4, Add Rhode Island LIHEAP regular heating assistance #9972 S4, Add Georgia LIHEAP regular heating assistance #9968 S3, Add Ohio HEAP regular heating assistance #9975 S5, Add Florida LIHEAP regular heating assistance #9969 S2, Add South Dakota LIEAP regular heating assistance #9974 S2, Add Oklahoma LIHEAP regular heating assistance #9970 S4 and Add New Jersey LIHEAP regular heating assistance #9745 S6.
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.
- 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) andfinancial_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.
- The sources:
- The bill term in the direct-responsibility branch (
V/eligibility/ar_liheap_eligible.py:33,(expense > 0) | has_expense).has_heating_expensealready defaults to "bill above zero and heat not in rent". So the term matters only when a caller setshas_heating_expenseto false while reporting a bill.- Reproduced: one adult with $12,000 of wages, gas heat, a $1,200 gas bill and
has_heating_expense: falseis 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).
- 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_factorclips 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, whichT/eligibility/ar_liheap_eligible.yamlCase 4 pins, so only the limit variable changes. - Fix: add
ar_liheap_income_limit: 0toT/ar_liheap_household_size.yamlCase 2, as Add Georgia LIHEAP regular heating assistance #9968 S2.3 and Add Florida LIHEAP regular heating assistance #9969 S3.1 asked.
- Without it, a unit with no qualified member gets the one-person limit, because
Three control mutations confirm the method:
- Dropping
size > 0from eligibility failsT/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
- Reproduced (2026, one adult, no income):
- SOLAR with a $1,200 electric bill is
ar_liheap_eligible: truewithar_liheap: 0; the same household on ELECTRICITY gets $242. - UNSPECIFIED fuel with heat in unsubsidized rent is also eligible with $0.
- SOLAR with a $1,200 electric bill is
- The application leaves no household without a matrix:
- It requires every applicant's electricity source and asks "Is your home all electric?", taking heating-source details only if not (p3).
- For heat in rent it asks "WHICH UTILITIES ARE INCLUDED IN YOUR RENT?" (p2).
- So AEO always uses one of its five matrices, and a grid-tied solar home would read the electric one.
- Options: map SOLAR to the electric matrix (
heating_expensealready reads its electric bill), or make the $0 explicit in eligibility. Keep the Default heating_type to electricity and remove the UNSPECIFIED-gated state heating adapters #9754 note for UNSPECIFIED. - Consistency: Add Alabama LIHEAP regular heating assistance #9967 G2, Add Georgia LIHEAP regular heating assistance #9968 G2, Add Ohio HEAP regular heating assistance #9975 G3 and Add Oklahoma LIHEAP regular heating assistance #9970 G1.
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: since92153a43cbthe 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 namestudent_exclusionno 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 usesrounding_increment. Optional: read a parameter. - Reference titles:
- The
fpg_year_lagtitles 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.
- The
- 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).
- "Contract specifies nonnegative earned sources" (
- 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.ARis on five variables, andar_liheapis gated byar_liheap_eligible. All 19 parameters are read, the formulas are vectorized, and the sharedsmi()andfpg()helpers are reused. - The matrix keys come from bracket lookups that always return 1-39 and 1-3.
- No hard-coded policy values (apart from the rounding literal in G6).
-
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.yamlCases 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.mdis top level and typedadded.
Checklist results (LIHEAP wave 2a)
- 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.aeois the right path. No adopted FY2025 or FY2026 manual was found; the PR discloses its reliance on the draft.
- 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).
- 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.
- 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).
- 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.
- Parameter descriptions: six are off-template (S2). None has a trailing clause.
- References: three missing page lists and one incomplete page list (S4). Polish is in G6.
- Wiring: pass.
- The
programs.yamlentry 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_forgating is on every variable, and the state-gating checks pass on the merged tree.- Take-up applies only through
tanf, as in the siblings.
- The
- Axiom: valid
queuedline. rulespec-us#1538 is open, labelledpe-parity, dispatch-ready and current to7e42062309. It needs updates for S1 and S3 and the G1, G2 and G5 notes (see below). - 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).
- Integrate modeled state unemployment insurance into income flows #9558: S1. Arkansas UI is not modeled, so the guard fails but no value changes.
- 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).
- Mutation check: S3. Three control mutations fail as expected.
- 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.
- State-gated index defaults: pass.
ar_liheap_household_size(int, default 0) feeds only bracket lookups (max_(size, 1)),smi()andclip(size, 1, 20), and the matrix keys are always 1-39 and 1-3.T/ar_liheap.yamlCase 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
- 9 commits ahead of
mainand 82 behind. The merge base is1d699fec2d(Share one HHS SMI helper for LIHEAP income limits #10019); main is at8ae01aa3cb. git merge-tree --write-tree PolicyEngine/main 7e42062309exits 0 with no textual conflicts.programs.yamlmerges tocoverage: AR, DC, Riverside County, MA, IL, IN, KS, KY, MD, MS, NC, NE, NJ, NY, OR, TX.- Semantic conflict: main's Integrate modeled state unemployment insurance into income flows #9558 guard fails on the merged tree (S1). Document disjoint health premium inputs and correct consumer treatment #10046 does not apply (checklist 14).
- On the merged tree, the PR's 70 cases, the registry test and the state-gating checks pass.
- The wave 2a siblings (Add Alabama LIHEAP regular heating assistance #9967-Add Ohio HEAP regular heating assistance #9975) touch the same LIHEAP coverage line, which is a branch note, not a finding.
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(plusenhancement), 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").
- proposed
- It describes head
7e42062309correctly, 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_compensationin 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
- S1: rebase onto main, switch
P/income/sources/unearned.yaml:11tototal_unemployment_compensation, and add a case with reported UI. - S2: align the six descriptions.
- 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.
- S4: add the page lists.
- 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
left a comment
There was a problem hiding this comment.
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.
- 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>
|
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
|
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
defined_for = StateCode.ARis_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.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_typeNONE is ineligible.Countable income
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.medicare_part_b_premiumand floors the result at zero.tanfaggregate, which includesar_tea. The current application explicitly requests TEA despite the plan’s unchecked TANF box.Benefit
heating_typeis a required input; Default heating_type to electricity and remove the UNSPECIFIED-gated state heating adapters #9754 tracks the unspecified default.Years covered
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:Not modeled and source conflicts
medicare_part_b_premiumis zero when a person is not enrolled and excludes the share a Medicare Savings Program pays.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.immigration_status(for example, COFA or battered-noncitizen cases)is_citizen_or_legal_immigrant.Application section III, in the FY2025 and current forms, governs minor and full-time-student earnings. Other source differences remain qualified as follows:
workers_compensation.tanf.gambling_winnings.capital_gainsfloored at zero.rental_incomeandfarm_rent_income(landlord rent) to the earned sources, which take the 20% disregard.Microsimulation: the microsimulation datasets carry no heating inputs, so population totals are about $0 until #9754 lands. Callers must send
heating_typewith the matching fuel bill.Test plan
72 YAML cases in 6 files cover:
has_heating_expensefalse with a $1,200 gas bill (ineligible, $0), no heat and no qualified member (household size 0 and a $0 income limit);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;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 --checkandmake formatpassed. Tests that encode the documented assumptions do not resolve the remaining source gaps.make formatchangelog.d/axiom: TheAxiomFoundation/rulespec-us#1538 queued
🤖 Generated with Claude Code