Repository navigation
Conversation
…tion tests - Encode the published FY2025 benefit chart (from 2024-11-04) in all six matrix files alongside FY2026 and FY2027. - Count Social Security and railroad retirement net of the Medicare Part B premium, taken once and floored at zero (handbook 650.6(10), followed over 55 Pa. Code 601.84(10)); count military retirement; floor each income source at zero (601.82(2)(ii)); read take-up-gated tanf. - Count interest and dividends only above $25 a month (handbook 650.3(9), followed over the plan). - Pay SOLAR heat from the electricity row. - Pay the $100 vulnerable-household supplement for the 2024-2025 season in 2025 (Operations Memorandum 25-08-01, issued August 15, 2025). - Shorten the registry note, add PA to the LIHEAP coverage line, and set verified_years to 2025-2027. - Add integration and period-2025 cases; tidy test conventions. 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 #9971 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 1 9 +8
Lines 15 156 +141
Branches 0 1 +1
==========================================
+ Hits 15 156 +141
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:
|
The printed tables follow multiplier x (fuel base + $5 per extra member), rounded half up and held to the $200-$1,000 Cash range. Income multipliers, regional and county fuel bases, the member amount and the limits reproduce all 355,971 printed cells for FY2025, FY2026 and the current lookup. Sizes 12-20 now continue the per-member amount (handbook 638.3 range). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
Use the repository's page-range title style for multi-page references, add PDF page comments to multi-page variable references, and say how the FY2027 plan and handbook reach the benefit lookup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
- Add pa_ssp to the LIHEAP unearned income sources (state plan section 601.82(4)); integration Case 3 now pays 349 + 100. - Pin pa_ssp to 0 in tests whose households do not receive SSI. - Start eligibility, income and region parameters on 2024-11-04 with the FY2025 state plan and the October 2024 handbook edition as references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Case 3 described an SSI recipient with a disability but set only is_disabled, which SSI's disability test does not read. Without meets_ssi_disability_criteria the person was not SSI-eligible, so pa_ssp paid $0 and the case failed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
PR Review: Add Pennsylvania LIHEAP regular heating assistancePR #9971 (author: hua7450), head Path prefixes:
SummaryThe payment model is very good. Pennsylvania prints only the resulting tables, and the PR recovers them as fuel bases × income multipliers + $5 a member, rounded half up and held between $200 and $1,000. I checked it against the printed FY2025 and FY2026 county charts and the live DHS lookup, and every cell I tried matched, including the cells that show half-up rounding (Allegheny coal $339; Adams electric size 7, $763). The rest of the model also matches the sources:
The tests are thorough (84 cases), and every income source is nonzero in at least one test. Critical (1):
Should address (5):
Suggestions (3): the documented midseason guideline update, re-capturing the live lookup after the season opens, and housekeeping. Status:
CriticalC1. CI fails because the PR's unearned list names two raw inputs that main's guards reject.
Should addressS1. Military basic pay is not counted as wages.
S2. The handbook is followed over the state plan and 55 Pa. Code without a reviewed record.
S3. The FY2026 state plan URL that 24 references cite now returns 404.
S4. Three parameter descriptions are off the house template.
S5. rulespec-us#1536 describes an older head.
SuggestionsG1. Midseason guideline update.
G2. The live lookup.
G3. Housekeeping.
Verified correctPayment cells (formula vs. printed source):
Hand-checked expectations (all match the head):
Checklist (one line each):
Other guards and checks:
Axiom line assessment
CI status
Branch status
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes: 1 critical (CI fails on the #10317 and #9558 guards: the unearned list uses raw military_retirement_pay and unemployment_compensation; use military_retirement_income and total_unemployment_compensation), 5 should. The payment formula reproduces every chart cell checked. Full report in the comment above.
# Conflicts: # policyengine_us/programs.yaml
- Count military_retirement_income and total_unemployment_compensation, so Survivor Benefit Plan annuities and modeled state unemployment compensation count; Case 7 enters its annuity as a survivor payment. - Count military basic pay as wages (section 601.82(1)). - Follow 55 Pa. Code and the state plan over the handbook: count interest and dividends from the first dollar and net the Medicare premium from Social Security only, with railroad retirement counted in full. Mark the three Pennsylvania conflict candidates ruled. - Point FY2026 state plan references at the Wayback capture, since the pa.gov copy returns 404. - Align supplement descriptions with the template, document the size of the midseason guideline gap and cite Operations Memorandum 25-08-01. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, David. All five should-fix items and the critical are addressed at C1. The unearned list now names S1. S2. We follow 55 Pa. Code and the plan.
S3. All 24 references and the body now cite the S4. The three supplement descriptions end with "under the Low Income Home Energy Assistance Program."; the issuance-year note moved to a comment. S5. rulespec-us 1536 is refreshed for Suggestions. G1: |
PR Review (round 2): Add Pennsylvania LIHEAP regular heating assistancePR #9971 (author: hua7450), head Path prefixes:
SummaryAll round-1 findings are fixed: the critical, the five shoulds and suggestion G1. For each critical and should fix, at least one test would fail if the fix were reverted.
The hand-resolved Open: 0 critical, 0 should, 3 suggestions. All three are optional:
Status:
Prior findings
New findingsCritical: none. Should address: none. Suggestions:
VerifiedHand-checked expectations (every new or changed one matches the head):
Mutation check of the fix commit. Every new term or branch fails at least one test if it is removed:
No removed test pinned logic that still exists. Merge resolution (
Other checks:
Axiom
CI
Branch
Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
Approving round 2: 0 critical, 0 should. The guard failure (C1) and all five shoulds are fixed and pinned; CI is 36/36. Full report in the comment above. Branch note: more LIHEAP states merged, so re-resolve the coverage line (main's line plus PA) before landing.
# Conflicts: # policyengine_us/programs.yaml
42 CFR 408.42 has the Railroad Retirement Board deduct the Part B premium from railroad benefits for an enrollee entitled to them, so section 601.84(10)'s exclusion of premiums deducted from Social Security does not apply. For other enrollees, 42 CFR 408.43 withholds the whole benefit when it is smaller than the premium, so the exclusion stays capped at Social Security. Income Case 19 now expects 11,200. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, David. Main is merged at On G3, the federal rules split the case in two, so I made one change in
The PR body and rulespec-us 1536 describe |
# Conflicts: # policyengine_us/programs.yaml
Adds Pennsylvania's LIHEAP regular heating assistance for FY2025 through FY2027. The model tests income against 150% of the federal poverty guideline, computes the heating payment from a fuel base for the county or heating region, a multiplier for each $1,000 bracket of benefit income and $5 for each added member, and adds the $100 vulnerable-household supplements that Pennsylvania issued in August 2025 and July 2026. The payment formula reproduces every printed cell for the fuels it prices in the FY2025 and FY2026 benefit charts and the current benefit lookup. In 2026, a Philadelphia family of three with $4,836 of TANF and natural gas heat receives the $664 printed in the FY2026 chart plus the $100 supplement, $764.
Fixes #9962
Regulatory authority
Eligibility
defined_for = StateCode.PAis_citizen_or_legal_immigrant. A household with no qualified member is ineligible. Nonqualified members' income counts in full.has_heating_expense), or with heat included in unsubsidized rent. A household with housing assistance or in public housing whose rent includes heat needs its own primary heating obligation; a secondary-fuel bill does not establish it.heating_typeNONE is ineligible.Countable income
employment_incomeandmilitary_basic_pay, since 601.82(1) counts wages for services on behalf of an employer. Excludes wages of children under 18 who are tax dependents, the model's proxy for dependency; their business and unearned income still count.pa_ssp), pensions, military retirement income (retiree pay and Survivor Benefit Plan annuities), railroad retirement annuities, survivor benefits, unemployment compensation (the reported amount, or modeled state unemployment compensation when none is reported), strike benefits, workers' compensation, disability benefits, veterans benefits, General Assistance, cash help from relatives (financial_assistance), child support, alimony, rental income, farm rental income, retirement distributions, interest and dividends. Floors each source at zero, so a rental or farm-rent loss offsets nothing.tanfaggregate, which includespa_tanf.Benefit
Handbook 638.3 describes the calculation. Benefit income falls in $1,000 brackets: "Each bracket is associated with a different benefit multiplier." Lower-income brackets carry higher multipliers. Each fuel's value depends "on the cost of the fuel in the household's county of residence." Household sizes run from 1 to 20. The model computes
payment = min(max(round_half_up(multiplier × (fuel base + $5 × (min(size, 20) − 1))), $200), $1,000)DHS prints neither the multipliers nor the fuel bases. The model reads them from the printed tables, and the parameter comments say so.
gov.states.pa.dhs.liheap.paymentincome_multiplierbase/electricitybase/wood_otherbase/natural_gas,base/fuel_oil,base/coal,base/keroseneadditional_member_amountmaximum_household_sizeminimum,maximumThe six base files set 834 season values: 5 regions × 2 fuels and 67 counties × 4 fuels, for 3 seasons. Centre and Fayette coal keep one base for two seasons, so the files hold 832 dated entries. For the Philadelphia family above, benefit income of $4,836 takes the 1.25 multiplier and the FY2026 Philadelphia natural gas base is $521.05, so the payment is 1.25 × (521.05 + 5 × 2) = 663.81, which rounds to the printed $664.
The formula and these parameters reproduce all 355,971 printed cells for the seven priced fuel rows (67 counties × 7 rows × 23 income bands × 11 sizes × 3 seasons) with 0 mismatches. The tables round half up: the current lookup prints 763 for Adams County electricity, size 7, $4,000–$4,999, where 1.25 × (580 + 5 × 6) = 762.50. With the same parameters, rounding half to even would change 600 cells (125 in FY2025, 92 in FY2026 and 383 in the lookup). The eighth printed row, Blended Fuel, has no model input.
heating_expenseassigns it. Propane uses the electricity base because the printed Propane row equals the Electric row in every county, band and season.disability_benefits, or SSI with a disability or blindness flag). Operations Memorandum 25-08-01 paid the 2024–2025 season's households on August 15, 2025, and Operations Memorandum 26-07-01 paid the 2025–2026 season's households on July 16, 2026; each payment is recorded in its year of issuance (pages 1–2 of each memo). It is $0 in 2027 because no 2026–2027 directive exists as of October 6, 2026.Years covered
A calendar-year period reads the season open on January 1. The lookup prints no season label; the FY2027 plan (page 39) points to it through the DHS LIHEAP page, and the current handbook links to it, which supports dating its amounts to FY2027. Formulas are undated,
verified_yearsis"2025-2027", and earlier years are unverified backfilled estimates.Not modeled and source conflicts
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
84 YAML cases in 10 files cover:
Every case specifies
heating_type; mixed-state arrays include New Jersey and Ohio households. The tests were not run locally; CI validates them.source_conflicts/candidates.yamlare ruled. Forus-pa:liheap-interest-dividend-thresholdandus-pa:liheap-railroad-retirement-medicare-premium, the model follows 55 Pa. Code and the state plan over the handbook. Forus-pa:liheap-supplement-child-age, no regulation sets the age, and the model follows the operations memoranda. No statute is on either side, so no register entry or# Source conflictmarker applies.make formatchangelog.d/axiom: TheAxiomFoundation/rulespec-us#1536 queued
🤖 Generated with Claude Code