Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Add Vermont Seasonal Fuel AssistancePR #10436 (author: hua7450), head Path prefixes:
Sources read for this review:
SummaryWhat is right. The published 2025-26 rules are encoded faithfully, and the PR is unusually careful:
There are no critical findings and three should-address items:
There are also five suggestions:
Status.
Critical (must fix)None. Should addressS1. Railroad Retirement annuities are not counted as income
S2. 22 of the 26 income-source entries, the unearned per-source floor and the monthly
|
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes: 0 critical, 3 should (railroad benefits missing from countable income; untested income sources; 2027 benefit rate and verified-years claim). Full report in the comment above.
Apply DTrim99's round 1 review: tests that pin every income source, the rule and documentation fixes, and source-conflict candidates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…into vt-liheap-wave1d # Conflicts: # policyengine_us/parameters/gov/hhs/liheap/fpg_limit.yaml # policyengine_us/programs.yaml # source_conflicts/candidates.yaml
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10436 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 9 +5
Lines 76 166 +90
Branches 2 3 +1
=========================================
+ Hits 76 166 +90
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Thanks, David. Round 1 is in
The PR body and TheAxiomFoundation/rulespec-us#1897 now describe this head. I did not run the tests locally; CI passed every check at |
PR Review (round 2): Add Vermont Seasonal Fuel AssistancePR #10436 (author: hua7450), head Path prefixes:
SummaryAll three should items are fixed, and so are four of the five suggestions; the author declined G1, which follows the wave convention.
Merge resolutions. All three hand-resolved blocks are correct:
Axiom, CI and branch.
New findings: 0 critical, 0 should and 2 suggestions.
Prior findings
New findingsCriticalNone. Should addressNone. SuggestionsG-N1. Nothing tracks the 2026-27 payment rate once this merges.
G-N2. Housekeeping.
VerifiedHand-checks of every new expectation (the fix commit changed no existing expectation):
Fix-commit checks:
Merge resolutions (all three blocks):
Other checks:
AxiomValid:
CI35 pass, 0 fail, 0 pending. Run 40792588889 (
Branch
0 critical, 0 should and 2 suggestions are open at this head. Verdict: APPROVE |
…p-wave1d # Conflicts: # policyengine_us/programs.yaml
Adds Vermont Seasonal Fuel Assistance, the state's LIHEAP regular heating benefit administered by the Department for Children and Families (DCF) Economic Services Division. Verification covers the 2025-26 heating season (model year 2026). Model year 2027 applies the published 2026-27 income limits and cost tables with the 2025-26 payment rate carried forward, so it is an unverified estimate. The model counts citizens and qualified noncitizens in household size (all members' income still counts), tests monthly gross income against the lowest of the printed 185% monthly limit, exactly 185% of the poverty guideline and the LIHEAP maximum, and pays the heat cost percentage for the household's percentage of poverty (read from the monthly dollar bands of the procedures table) times the standard heating cost for its fuel, dwelling type and bedrooms, times the payment rate, adjusted for subsidized housing and heat included in rent, rounded down to whole dollars.
Fixes #10426
The payment rate is an estimate. DCF sets it by procedure each season and does not publish it; 51% is inferred from the FFY2026 plan's $2,089 maximum (floor(4,552 x 0.90 x 0.51), the only whole percent that reproduces it). P-2914D's 29% is a training figure. For 2026-27, DCF asked the Emergency Board on October 23, 2026 for $12.7 million to raise the seasonal benefit for oil and kerosene households to "approximately 62 percent purchasing power", against about 45% of estimated heating need in 2025-26; VTDigger reported that the board passed the proposal that day. DCF has not published the resulting rate, so the model carries 51% forward, and model year 2027 understates the benefit for oil and kerosene households.
programs.yamltherefore listsverified_years: "2026".Regulatory authority
Eligibility
defined_for = StateCode.VTvt_liheap_household_sizesumsis_citizen_or_legal_immigrant; size 0 is ineligiblevt_liheap_income_limit= min(12 x the P-2913 monthly 185% amount, 185% of the annual guideline, greater of 150% FPG and 60% SMI); one person in 2026: $2,412 a month ($28,944 a year, the printed amount); two people: $39,127.50 a year (the statute's 185%, below the printed $3,262 a month); the LIHEAP maximum binds from size 10 in FFY2026 (see source conflicts)SOLARuses the electricity row (grid-tied home with electric heat);NONEis ineligible;OTHERandUNSPECIFIEDpay nothing except the $21 subsidized heat-in-rent benefit, which needs no fuelCountable income
vt_aabd), General Assistance, Reach Up (tanf, once), pensions, Railroad Retirement benefits (annuities and retirement benefits, rule 2911.2(b)(2)-(4)), military retirement and survivor annuities, retirement distributions, veterans, disability, workers' and unemployment compensation, Social Security (gross), other survivor benefits, strike benefits, rental income, child support, alimony, interest, dividends, trust income and other direct money payments (miscellaneous_income)Benefit
vt_liheap_dwelling_type, defaulting to single-family or mobile home.Not modeled
UNSPECIFIEDfuelheating_typeis a required input andUNSPECIFIEDpays $0 (#9754); a subsidized tenant with heat in rent keeps the $21 nominal benefit, which needs no fuelMonthly tables from the guideline
P-2913 and P-2914A print monthly dollars for sizes 1-15 but do not state how they are derived. The model builds them from the federal guideline instead of storing the tables (
vt_liheap_fpg, new parameterfpg_table_size):The construction is a numerical inference from the printed tables, not a stated rule. Rounding each size's own guideline instead would miss 53 of the 55 band tops for sizes 11-15 by $1-$4, and some limits for sizes 9-15.
Source conflicts
All three entries in
source_conflicts/candidates.yamlfollow the statute and list this PR inprs.us-vt:liheap-income-maximum-rounding: P-2913 prints 185% of the monthly guideline rounded half up to the dollar, which is above 185% of the guideline for some sizes. 33 V.S.A. 2604(a) requires income "no greater than 185 percent of the federal poverty level", so the model applies the exact 185% where it is lower (two people in 2026: $39,127.50 a year rather than $3,262 x 12 = $39,144) and the printed amount elsewhere (one person: $2,412 a month against $2,412.71).us-vt:liheap-income-maximum-large-households: P-2913 prints 185% limits for sizes 10-15 that exceed the LIHEAP maximum in 33 V.S.A. 2604(a) and rule 2913(b); the model follows the statute (size 10 in FFY2026: $113,748 a year rather than $120,528).us-vt:liheap-plan-income-items: plan item 1.9 leaves Strike Pay unchecked and plan item 2.1 reports 60% of state median income for all household sizes. Rule 2911.2(b)(10) counts strike benefits, and 33 V.S.A. 2604(a) and rule 2913(b) cap income at 185% of the guideline, so the model counts strike benefits and does not apply the plan's 60% SMI limit on its own. One person in 2026 with $24,000 of wages and $6,000 of strike benefits has $30,000 of income, above the $28,944 limit, and is ineligible; under the plan, the $24,000 of wages alone is within its $41,075 limit.Shared parameter
The model reads
gov.hhs.liheap.fpg_limit(150%, 42 U.S.C. 8624(b)(2)(B)(i)), which #10342 (North Dakota LIHEAP) added tomainwith the same path, value and 1981-10-01 start. Mergingmaintook that file, so this PR adds no shared parameter.Test plan
48 YAML cases in 9 files:
vt_liheap.yaml5,vt_liheap_fpg.yaml2,vt_liheap_household_size.yaml1,vt_liheap_income.yaml8,integration.yaml4,eligibility/vt_liheap_eligible.yaml7,eligibility/vt_liheap_income_limit.yaml4,payment/vt_liheap_heat_cost_percentage.yaml6,payment/vt_liheap_heating_cost.yaml11. They cover household size with a mixed-status member; every earned and unearned income source with a distinct amount, including a self-employment profit, monthly SSI and AABD, Railroad Retirement, reported unemployment and a military survivor annuity; the per-source floor for a self-employment loss and for a rental loss against wages; the child-student exclusion and a 16-year-old student who is not a tax dependent and whose earnings count; the monthly guideline (a half-dollar rounding and an eleven-person household); the income limit at sizes 1, 10 and 13 in 2026 and size 10 in 2027; the printed monthly limit and $1 a month above it; a two-person income under the printed limit but above the statute's 185%; a printed band top and $1 a month above it; the 66% to 33% drop; every fuel row and both dwelling types; the bedroom bounds; all four housing treatments with the $50 minimum; rounding down; and four end-to-end households. Expected values are hand-computed from the printed rule and procedure tables.The first 45 cases passed locally on 2026-10-23 (
policyengine-core teston the program folder, after mergingmainand addingvt_aabd) and in CI run 40032612243 on headd1c6ff4ffe. Review round 1 added income Cases 6-8 (every earned source, every unearned source and a rental loss); they were hand-derived and not run locally. CI validates them.changelog.d/axiom: TheAxiomFoundation/rulespec-us#1897 queued
🤖 Generated with Claude Code