Skip to content

Add Vermont state supplementation for 2026 - #10171

Merged
hua7450 merged 10 commits into
mainfrom
vt-ssp-2026
Oct 22, 2026
Merged

hua7450 merged 10 commits into
mainfrom
vt-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

Vermont's Aid to the Aged, Blind or Disabled (AABD) was missing from PolicyEngine-US. Add vt_aabd for 2026 (33 V.S.A. ch. 13). It has two parts.

The federally administered optional supplement (vt_aabd_federal; POMS SI 01415.058 M; AABD rules 2760–2767).

  • The 2026 rates by OS code:

    Code Arrangement Individual Couple
    A / B Independent $55.68 $105.80
    E Household of another $42.05 $51.69
    C Level III residential care $51.77 $103.54
    G Level IV residential care $239.62 $601.40
    H Custodial care $105.60 $356.12
    I Title XIX facility $49.93 $99.85
  • The payment is the rate less countable income above the FBR (rule 2760), with SSA rounding and the $1 minimum. Spouse deeming follows POMS SI 01320.430 D, through the shared state supplement helper.

  • Care settings come from the vt_aabd_care_setting input, and vt_aabd_living_arrangement derives the code in this order: Title XIX facility, care setting, household of another, independent.

The state-administered Essential Person grant (vt_aabd_ep; rules 2780–2786; ESD Procedure P2740B).

  • The standard is the maximum SSI/AABD payment plus the certified share (100, 67 or 34 percent) of the difference to the Essential Person maximum, less the group's countable income, with cents dropped.
  • An eligible couple gets one grant, at the higher certified level, split between the spouses.
  • The group counts only household members (rule 2782), both for its income and for the SSI/AABD receipt that passes its resource test (rule 2785). SSI and AABD count in full.
  • Earnings count before payroll deductions, including pre-tax health premiums (Reach Up rule 2251(a), through rule 2786). SSI and the federally administered supplement still exclude those premiums (POMS SI 00820.102 C.2); a code NOTE records the reading.
  • The plain inputs vt_aabd_ep_level, vt_aabd_ep_nonspouse_essential_person and vt_aabd_ep_passes_state_resource_test default to off, so entering one for one person leaves other household members unchanged.

AABD is added to the household and SPM benefit totals and to SNAP and HUD unearned income.

References

Additional section and page citations are included alongside the parameters and formulas.

Coverage limits

The registry marks Vermont as partial, verified for 2026.

Not modeled:

  • mandatory grandfathered payments;
  • the state-administered Level III home with limited nursing care (rule 2764.2), and OS code Y (supplement waived).

A spouse who declines SSI still makes a joint federal claim (#10243).

Earlier years use parameter backfilling and are unverified historical estimates; no historical coverage is claimed.

Related:

Test plan

  • 54 Vermont AABD YAML cases (16 in vt_aabd.yaml, 26 in vt_aabd_ep.yaml, 12 in integration.yaml) pass locally on this branch merged with main at 1f678c7. They cover:
    • each OS code, the income reduction, rounding and the $1 minimum;
    • couples, one spouse in a facility, and two people with an input on one only;
    • every Essential Person level and arrangement, couples with one or two certified levels, and state-only resource determinations;
    • Essential Person earnings with pre-tax health premiums, for an ineligible spouse and for an aged recipient, and a spouse in a facility at the resource test;
    • SNAP, HUD, household and SPM benefit wiring.
  • The aggregate list integrity and program registry tests pass locally (728 passed, 10 skipped).
  • ruff format and git diff --check.
  • Changelog fragment in changelog.d/.

axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#1786 queued

hua7450 and others added 3 commits October 12, 2026 14:35
…ima and tests

- Count the AABD payment, including the Essential Person grant, as HUD income; drop the HUD helper and shared metadata edit
- Derive Essential Person maxima from the SSI and AABD rates plus one increment parameter
- Name the unmodeled limited-nursing Level III arrangement; clarify the Level III label and POMS citation
- Essential Person gates: receives_ssi auto-pass, no unsourced immigration gate, take-up period, eligible-member couple count
- Spouse flag defaults from the marital unit; drop the application-month proration input
- Registry placement and comments, SNAP reference title, programs.yaml note, page anchors
- Realistic state-only cases; exercise the living-arrangement mapping and HUD counting

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

DTrim99 commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Vermont state supplementation for 2026

PR #10171 (author: hua7450, head 6842ff568d, merge-base 2e9eea7e6e). 25 files (+1161/−4), 3 commits.

Summary

The PR adds Vermont's Aid to the Aged, Blind or Disabled (AABD) program. It has two parts: the federally administered optional state supplement, and the state-administered Essential Person (AABD-EP) grant.

  • Parameters (gov.states.vt.dcf.aabd, dated 2026-01-01 unless noted):
    • amount.individual and amount.couple, broken down by vt_aabd_living_arrangement:

      OS code Enum Individual Couple
      A / B INDEPENDENT 55.68 105.80
      E HOUSEHOLD_OF_ANOTHER 42.05 51.69
      C RESIDENTIAL_CARE_LEVEL_III 51.77 103.54
      G RESIDENTIAL_CARE_LEVEL_IV 239.62 601.40
      H CUSTODIAL_CARE 105.60 356.12
      I MEDICAID_INSTITUTION 49.93 99.85
      Y NONE 0 0
    • ep.couple_increment of $183.84 (dated 2025-01-01 and 2026-01-01), ep.employment_expense of $90, and ep.rate by care level (1, 0.67, 0.34, 0).

    • The shared federal gov.ssa.ssi.state_supplement.minimum_payment of $1.

  • Variables (all Person, MONTH):
    • vt_aabd_living_arrangement (defined_for = StateCode.VT) maps a federal medical treatment facility to I and a federal another person's household to E, and everything else to A/B. Residential and custodial care are input-only.
    • vt_aabd_federal calls the shared helper variables/gov/ssa/ssi/_ssi_state_supplement.py. The helper handles the income reduction, couple halving, SI 01320.430 deeming, SSA rounding and the $1 minimum.
    • vt_aabd_ep, the Essential Person grant. It uses five supporting variables:
      • vt_aabd_ep_level: certified care level, input only
      • vt_aabd_ep_is_spouse: defaults from the marital unit
      • vt_aabd_ep_resources_eligible: passes automatically on SSI/AABD receipt; otherwise an input
      • vt_aabd_ep_countable_income: the rule 2786 group income
      • vt_aabd_ep_additional_countable_income: nonspouse and parental income, input only
    • vt_aabd adds vt_aabd_federal and vt_aabd_ep.
  • Aggregates and registry. household_state_benefits (all four year blocks), spm_unit_benefits, SNAP unearned income, HUD unearned income, and a programs.yaml entry (partial, verified_years: "2026").
  • Tests: 42 YAML cases: 14 in vt_aabd.yaml, 17 in vt_aabd_ep.yaml and 11 in integration.yaml.

The 2026 policy content is right:

  • Amounts. All twelve nonzero rate cells match POMS SI 01415.058 M.2, January 2026. The Vermont DVHA 2026 standards table repeats them.
  • Codes. The mapping matches the M.1 code definitions and Vermont AABD rules 2761–2767.
  • Formula. It follows rule 2760: SSI eligibility tests except the income test, and the benefit is the combined level minus countable income.
  • Administration. Federal administration, so SSA rounding and the $1 floor apply (rules 2700 and 2761; 20 CFR 416.2020(c)).
  • Essential Person. The design reproduces all nine published 2026 P2740B maximums from rule 2784, and the income test follows rule 2786.
  • Tests and branch. All 42 expectations check by hand and pass at the head. The branch merges cleanly with main.
  • CI. The one red check is an infrastructure timeout: the job was cancelled at the 1h30m limit with no failed test. It should simply be re-run.

One should-fix item remains: the axiom: needed line isn't valid for a staff PR that adds a program.

Critical (must fix)

None.

Should address

1. axiom: needed isn't valid here, and this PR adds a program.

  • Where: the last line of the PR body, axiom: needed.
  • The rule. main's CLAUDE.md, "Axiom Parity (required for policy changes)":
    • "Put one line in the PR body: axiom: <legal id> encoded-correct | <rulespec PR> encoded | <rulespec issue> queued | n/a: <reason>."
    • "If you are an external contributor and cannot complete the Axiom work, use axiom: needed; a maintainer will follow up." The author is PolicyEngine staff.
    • CONTRIBUTING.md#axiom-parity: "That covers a new program, a parameter or threshold update, an eligibility rule and a bug fix." None of the n/a grounds applies.
  • Nothing to point to yet.
  • Precedent:
  • Fix: file a dispatch-ready pe-parity issue on the Add AMT parameters for 2020-2023 #1467 / DC CDCC #1708 model. Then add a line such as axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, mirroring the Delaware modules:

      • us-vt/policies/ssa/poms/si-01415-058/2026/vt-ssp-living-arrangement-variations.yaml
      • us-vt/policies/ssa/poms/si-01415-058/2026/vt-ssp-individual-state-supplement-levels.yaml
      • us-vt/policies/ssa/poms/si-01415-058/2026/vt-ssp-couple-state-supplement-levels.yaml
      • us-vt/regulations/dcf/aabd/2760.yaml for eligibility and benefit, and 2761.yaml for the individual and couple definitions
      • us-vt/regulations/dcf/aabd/2784.yaml and 2786.yaml for the Essential Person payment levels and income
      • us-vt/policies/dcf/esd-procedures/p2740b/2026/aabd-ep-payment-maximums.yaml
    • Corpus citations, plus the blocker if a source isn't in the corpus yet. main's CLAUDE.md: "Use queued only when the signed encoder is blocked; record the blocker in the issue."

    • Verbatim law: the M.1 definitions, the M.2.a and M.2.b rows, rules 2760, 2761, 2784 and 2786, and the 2786 memo, all quoted under Verified correct.

    • Required outputs (Person, monthly):

      • the rate table by OS code
      • Money: max(0, rate − max(0, countable − FBR)), with SSA rounding and the $1 floor
      • the SI 01320.430 deeming step: the lesser of the individual computation and couple rate − excess over the couple FBR
      • the Essential Person standard: max SSI/AABD + share × (EP maximum − max SSI/AABD), minus countable income, with cents dropped
    • Companion tests from POMS M.2 and P2740B, not from PolicyEngine output:

      Case Expected
      A individual, no income SSP 55.68 (total 1,049.68)
      E individual, no income SSP 42.05 (total 704.72)
      G individual, no income SSP 239.62 (total 1,233.62)
      I individual, Title XIX facility SSP 49.93 (total 79.93)
      A couple, no income SSP 105.80 (total 1,596.80)
      H couple, no income SSP 356.12 (total 1,847.12)
      Essential Person maximum, individual, 100% 1,596.80
      Essential Person maximum, couple, 67% 1,719.97
      Essential Person maximum, another's household, 34% 822.00
      Essential Person grant, spouse of an SSI/AABD recipient with no income 1,596.80 − 1,049.68 = 547.12, so 547

Suggestions

  1. Amounts before 2024 (deferral documented in the PR body and Vermont SSP 2017, 2018, 2019 #8346).

    • The deferral. The PR body says "Parameter backfilling does not establish verified historical coverage" and "historical backdating remains separate". programs.yaml claims only verified_years: "2026", and Vermont SSP 2017, 2018, 2019 #8346 ("Vermont SSP 2017, 2018, 2019") is open.

    • The leak. Every rate is dated only 2026-01-01, so each one carries back to 2015. The probe at the head gives each arrangement its 2026 rate for 2015-01, 2019-01, 2020-01 and 2023-01: 55.68, 42.05, 51.77, 239.62, 105.60 and 49.93.

    • What SSA paid. The POMS January charts show:

      Code Jan 2015–Jan 2023 (individual / couple) Jan 2024–Jan 2026 Model, every year
      A / B 52.04 / 98.88 55.68 / 105.80 55.68 / 105.80
      C 48.38 / 96.77 51.77 / 103.54 51.77 / 103.54
      E 39.30 / 48.31 42.05 / 51.69 42.05 / 51.69
      G 223.94 / 562.06 239.62 / 601.40 239.62 / 601.40
      H 98.69 / 332.82 105.60 / 356.12 105.60 / 356.12
      I 17.66 / 35.33 (to Jan 2019); 42.66 / 85.32 (Jan 2020–Jan 2023) 49.93 / 99.85 49.93 / 99.85
      • The sources are SI 01415.047 (Jan 2015), .051 (Jan 2019), .052 (Jan 2020), .055 (Jan 2023), .056 (Jan 2024) and .057 (Jan 2025).
      • Bulletin 23-38, P-2740A (PDF p. 10) dates the step: the new amounts are "Effective 1/1/24", next to an "Effective 1/1/23 – 12/31/23" column with the old ones.
      • The January charts don't show the exact month of the 2019–2020 code I change.
    • The Essential Person couple increment.

      • Bulletin 23-38, P-2740B (PDF p. 11) gives the 2024 couple maximum as "$1,696.25" against $1,520.80, an increment of 175.45. The 2023 figures, $1,641.69 against $1,469.88, give 171.81.
      • The 2025-01-01 value of 183.84 carries back to 2024 and earlier. It overstates the 2024 couple maximum by $8.39 a month.
      • The individual and another's-household Essential Person maximums for 2024–2025 are right, because they derive from the FBR and the (unchanged) AABD share. For example, the model's 2024 individual maximum is 1,415 + 105.80 = 1,520.80, which matches the bulletin.
    • Size of the error. For 2015–2023, the model overstates the supplement per person per month by:

      • $3.64 (A/B), $3.39 (C), $2.75 (E), $15.68 (G) and $6.91 (H)
      • $32.27 for code I to January 2019, and $7.27 for code I from January 2020 to 2023
    • Fix: widen Vermont SSP 2017, 2018, 2019 #8346 to 2015–2023, with a 2024-01-01 step for every row and a 2019–2020 step for code I. Add ep.couple_increment values of 171.81 (2023) and 175.45 (2024).

  2. The Texas rebate reform's copy of spm_unit_benefits now omits vt_aabd.

    • Where: policyengine_us/reforms/states/tx/rebate/tx_rebate.py:53-127 redefines spm_unit_benefits nationwide with a hard-coded list. It lacks vt_aabd, and it already lacks ca_state_supplement.
    • Probe at the head: a Vermont aged SSI-only single in 2027.
      • spm_unit_benefits is 15,901.42 at baseline and 15,233.26 under the reform, a drop of exactly the $668.16 of vt_aabd.
      • spm_unit_net_income falls by the same amount.
      • household_net_income is unchanged at 16,552.42.
    • Fix: insert "vt_aabd", # Vermont benefits after "fl_oss", at line 65, as spm_unit_benefits.py does. Add ca_state_supplement while there, consistent with Add Wyoming state supplementation for 2026 #10174.
  3. Vermont's renter-credit household income omits SSI and the new supplement. The gap is pre-existing and reaches only the TAXSIM aggregate.

    • Where: variables/gov/states/vt/tax/income/credits/renter/vt_renter_credit_income.py:16-20 adds only adjusted_gross_income, vt_renter_credit_countable_tax_exempt_ss and tax_exempt_interest_income.
    • The law counts both.
      • 32 V.S.A. § 6061(5)(B) adds to modified AGI "cash public assistance and relief (not including relief granted under this subchapter)" and "payments received under the federal Social Security Act".
      • The 2025 instructions for Schedule HI-144 (Income Booklet, PDF p. 43) say, for line a: "Enter all payments from the State of Vermont Agency of Human Services except for foster care payments, difficulty of care payments, food stamps, and fuel assistance."
      • For line b: "Social Security benefits also include SSI and SSDI payments."
    • Probe at the head: an aged SSI-only single in 2026 has vt_renter_credit_income of 0. The law gives 11,928 + 668.16 = 12,596.16.
    • Why it is only a suggestion.
      • The SSI omission predates this PR.
      • vt_renter_credit feeds only taxsim_state_property_tax_credit (through state_property_tax_credits.yaml), not net income.
      • An SSI-only renter stays below the lowest one-person 30% AMI limit in the parameter ($21,800, Caledonia County), so the credit doesn't change. Only households near a band edge move.
      • The model has no Vermont homestead property tax credit, so nothing else reads this income.
    • Fix: open a follow-up issue to add ssi and vt_aabd (and other Agency of Human Services cash payments) to vt_renter_credit_income. rulespec-us#1678 treats the § 6061 definitions as leaf inputs, so the change is PolicyEngine-side.
    • Other Vermont programs are already consistent.
      • CCFAP Regulations II B 2 exclude "Public assistance income" (item 5) and "Supplemental Security Income (SSI)" (item 10). Leaving vt_aabd out of vt/dcf/ccfap/income/sources.yaml is right.
      • Reach Up counts tanf_gross_unearned_income, which lists neither SSI nor any supplement.
  4. Write down and pin the couple, deeming and Essential Person readings.

    • Deeming where the couple computation binds. This is correct but untested.
      • Probe at the head: an aged recipient with a 40-year-old spouse earning $3,250 a month.
      • Deemed countable income is (3,250 − 20 − 65) / 2 = 1,582.50. The excess over 1,491 is 91.50, so SSI is 0.
      • vt_aabd is 14.30, which is min(55.68, 105.80 − 91.50).
      • At $3,150 a month, the result is SSI 0 and vt_aabd 55.68.
      • This follows SI 01320.430 D.3.b: "The State supplement amount is the lesser of" the two computations. No case exercises the couple branch; integration Case 10 pins only the individual branch, indirectly.
    • One spouse in a Medicaid facility. Probe: SSI [30, 994] and vt_aabd [49.93, 55.68]. That is right under 20 CFR 416.414(b)(3) but unpinned.
    • An aged, blind or disabled spouse who declines SSI.
      • Probe: two people aged 70, where the spouse has takes_up_ssi_if_eligible: false, get SSI [745.50, 0] and vt_aabd [52.90, 0].
      • SSA would compute the claimant as an individual with an ineligible spouse: 994 + 55.68.
      • Rule 2761 defines a couple as "a husband and wife who are both aged, blind, or disabled". That supports the couple rate at the state level, but SSA computes the combined payment from federal couple status.
      • The cause is the federal ssi_claim_is_joint. Add New Jersey state supplementation for 2026 #10157 documents the same limitation in a NOTE; add one to vt_aabd_federal.py.
    • An Essential Person couple where only one spouse is flagged.
      • vt_aabd_ep.py:33-34 counts the members whose own vt_aabd_ep_level is set.
      • Probe: two SSI recipients aged 70 with only one flagged FULL get vt_aabd_ep [0, 0]. Countable income is 1,596.80, against an individual maximum of 1,596.80.
      • The rule 2784(C) couple maximum of 1,780.64 gives 183, or 91.50 each (integration Case 9).
      • The variable's documentation says "Set both eligible spouses to the same level", but nothing enforces it.
      • Fix: detect the couple from both members being aged, blind or disabled in an Essential Person household (for example marital_unit.any(level != NONE) with both ABD), or add a test pinning the documented behavior.
  5. Assert the spm_unit_benefits wiring.

    • Integration Cases 7, 8 and 11 assert household_state_benefits, SNAP and HUD income, but not spm_unit_benefits. Removing vt_aabd from spm_unit_benefits.py would pass every test.
    • Probe at the head: an aged SSI-only single in 2026 has spm_unit_benefits of 15,608.16.
    • Fix: assert vt_aabd inside a spm_unit_benefits difference, or add a spm_unit_benefits expectation to Case 7.
  6. Polish.

    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml (line 412) and in hud/annual_income/sources/unearned.yaml (line 33). Neither relates to Vermont.
    • Anchors.
      • amount/individual.yaml:11 and amount/couple.yaml:11 title the reference "M.2" but link #m, which opens the M.1 definitions.
      • Point them at #m2a (individual) and #m2b (couple), which both exist, as suggested on Add New Jersey state supplementation for 2026 #10157.
    • Redundant value. ep/couple_increment.yaml repeats 183.84 at 2026-01-01. Drop it, or replace it with the 2023/2024 history in Suggestion 1.
    • Statutory basis. vt_aabd.py cites POMS and the AABD rules but no statute. SSA gives "Statutory basis for payment: Vermont Statutes Annotated, title 33, chapter 13, Aid to Aged, Blind, and Disabled". Add 33 V.S.A. ch. 13: § 1301(3) "Be a recipient of federal Supplemental Security Income, if eligible", and § 1309(a) on federal administration.

Verified correct

  • Rates. POMS SI 01415.058 M.2, "effective January 1, 2026":
    • M.2.a, individual:
      • "A | A | All (Except Chittenden County) | 994.00 | 55.68 | 1049.68"
      • "B | All (Restricted to Chittenden County) | 994.00 | 55.68 | 1049.68"
      • "C | All | 994.00 | 51.77 | 1045.77"
      • "G | All | 994.00 | 239.62 | 1233.62"
      • "H | All | 994.00 | 105.60 | 1099.60"
      • "B | E | All | 662.67 | 42.05 | 704.72"
      • "C | A | ... | 994.00 | 55.68 | 1049.68"
      • "D | I | All | 30.00 | 49.93 | 79.93"
    • M.2.b, couple:
      • "A | A | ... | 1491.00 | 105.80 | 1596.80"
      • "C | All | 1491.00 | 103.54 | 1594.54"
      • "G | All | 1491.00 | 601.40 | 2092.40"
      • "H | All | 1491.00 | 356.12 | 1847.12"
      • "B | E | All | 944.00 | 51.69 | 1045.69". Footnote: "Not the FBR; the amount represents the FBR less VTR". The 944.00 is SSA's misprint for 994.00, as the 1,045.69 total shows.
      • "D | I | All | 60.00 | 99.85 | 159.85"
    • Corroboration.
      • The Vermont DVHA "Standards Change for Healthcare 2026", SSI/AABD Payment Maximums (2700) (PDF p. 7), gives the same AABD shares.
      • ESD Procedure P2740A (Bulletin 25-26) points to that table.
      • Chittenden County and the rest of the state share one rate in 2026, as the vt_aabd_living_arrangement documentation says.
  • Codes (M.1):
    • A: recipients who "are not living in the household of another; are not in a residential or custodial care situation; are under age 18 and live with a parent; reside in a private Title XIX facility where Medicaid is not paying more than 50 percent of the cost of care; reside throughout a month in a publicly operated emergency shelter."
      • The default branch covers these.
      • Probes: a disabled 10-year-old with parents gets 55.68.
      • A facility resident with Medicaid not paying the majority maps to A, with SSI 994 and vt_aabd 55.68. ssi_federal_living_arrangement requires ssi_medicaid_pays_majority_of_care for the medical facility code.
    • E: "recipients who live in the household of another and receive support and maintenance from them (subject to the Federal one-third reduction provisions)". That is the federal another person's household branch.
    • I: "an optional State supplementary payment to residents in Title XIX facilities". Rule 2767 (PDF p. 34) adds "with Medicaid paying 50 percent or more of the cost of care".
    • C, G and H need state certification ("identified by the State"; custodial care to "two persons or less"), so input-only is right.
    • Y: "Optional supplementation waived" maps to NONE.
    • Privately insured children. SI BOS01415.970 says "Effective 12/1/96 Vermont State OS Codes A and B apply to children under the age of 18 who are in Federal living arrangement D because of private health insurance payments." That supports the documentation's note.
    • The state-administered limited-nursing Level III home.
      • SI BOS01415.013: "All of the homes that were in this category when SSA administered the State supplement have converted their license so that their residents are eligible for Federally-administered State L/A category C."
      • Rule 2764.2 (PDF p. 31): "This is the only state-administered living arrangement."
      • Leaving it unmodeled (documented in programs.yaml) is reasonable.
  • Eligibility and formula.
    • Rule 2760 (PDF p. 27):
      • "a person must be a Vermont resident and pass all the eligibility tests for federal SSI benefits except for the SSI income test."
      • "The amount of the benefit is the difference between the combined SSI/AABD payment level for the applicable living arrangement and the recipient's countable income."
    • The helper's is_ssi_eligible (no income test) and max_(standard − max_(countable − federal_amount, 0), 0) implement this. That includes the supplement-only case (Case 9: 39.68 with SSI 0).
  • Individuals and couples. Rule 2761 (PDF p. 28):
    • "Individual. A single person or a person living with a spouse. The spouse of such a person is not aged, blind, or disabled".
    • "Couple. A husband and wife who are both aged, blind, or disabled and live in the same household or facility."
    • Both match the helper's joint and deeming branches.
  • Administration.
    • Rule 2700 (PDF p. 2): "For persons in federally administered living arrangements, SSA also determines eligibility for the AABD state supplement to SSI and issues a combined SSI/AABD benefit".
    • Rule 2761: "All living arrangements are federally administered except for a residential care home with limited nursing care, level III".
    • SSA, State Assistance Programs for SSI Recipients, January 2011, Vermont (read via the Internet Archive; ssa.gov returned 403):
      • "Administration: Social Security Administration. Effective date: January 1, 1974."
      • "Countable income is deducted first from the federal payment. Any income that remains to be counted after the federal payment has been reduced to zero is then deducted from the state supplementary payment."
    • POMS SI 01415.058 A lists Vermont among the federally administered states.
  • Rounding and the minimum.
    • 20 CFR 416.2020(c): "optional supplementary payment amounts of less than $1 will be raised to a dollar." Case 11 pins it at 0.01 raised to 1.
    • SI 02001.005: "When the computation yields a total benefit ... that is more than $0 but less than $1, we pay $1.00."
    • Couple halves round up to the cent (25.845 → 25.85; 49.925 → 49.93), as the helper does for every sibling.
  • The shared helper. _ssi_state_supplement.py is byte-identical to Add New Jersey state supplementation for 2026 #10157, Add New York state supplementation for 2026 #10158, Add Pennsylvania state supplementation for 2026 #10167 and Add Rhode Island state supplementation for 2026 #10168. minimum_payment.yaml is also identical to Add Nevada optional state supplementation for 2026 #10001.
  • Essential Person.
    • Structure. Rules 2780–2783 (PDF pp. 36–43). The grant goes to an aged, blind or disabled person who "has a needy essential person ... living in his or her (or their) home" and is either ineligible for SSI/AABD or has "net income, including his or her (or their) SSI/AABD payment, below the applicable State AABD-EP payment level".
    • Another's household. Rule 2783.2: "Non-spouse essential persons are not included in this living arrangement for either eligible individuals or eligible couples." That is independent | (other & spouse) plus independent | ~couple (Cases 9, 11 and 12).
    • Levels. Rule 2784(A) (PDF p. 44):
      • 67 percent is "the maximum SSI/AABD payment in addition to 67 percent of the difference between the maximum AABD-EP payment and the maximum SSI/AABD payment".
      • 34 percent applies only "when the essential person is not the spouse". That is the spouse & PARTIAL_34 exclusion (Case 5).
    • Maximums. Rule 2784(B)(1) sets the individual maximum "equal to the current maximum combined SSI/AABD payment for a couple". (B)(3) sets another's household "for an individual living independently". (C) adds "an increment for the essential person's needs" for a couple.
    • All nine P2740B cells (Bulletin 25-26, PDF pp. 12–13) match the formula:
      • 100%: 1,491 + 105.80 = "$1,596.80"; 1,596.80 + 183.84 = "$1,780.64"; 994 + 55.68 = "$1,049.68"
      • 67%:
        • 1,049.68 + 0.67 × 547.12 = "$1,416.25"
        • 1,596.80 + 0.67 × 183.84 = "$1,719.97"
        • 704.7167 + 0.67 × 344.9633 = "$935.84"
      • 34%:
        • 1,049.68 + 0.34 × 547.12 = "$1,235.70"
        • 1,596.80 + 0.34 × 183.84 = "$1,659.31"
        • 704.7167 + 0.34 × 344.9633 = "$822.00"
      • 2025. The 1/1/25 column (1,555.80 and 1,739.64) also gives the 183.84 increment.
    • Income. Rule 2786 (PDF p. 49):
      • "Reach Up earned income exemptions (rule 2254) are not allowed; and SSI/AABD benefits, if received, are counted as unearned income".
      • "$20 of total monthly income received by all assistance group members as: unearned income only (other than VA pension or SSI/AABD benefits)".
      • "$65 plus one-half of the balance of any remaining earned income received by the aged, blind or disabled member(s) only."
      • The memo (PDF p. 50) adds "$ 264.25 (Drop cents to $264.00)" (the np.floor) and "an additional $90 (each) employment expense deduction if the individual and/or the EP is working".
      • The VA-pension NOTE is accurate: the model has no pension-specific veterans input.
    • Resources. Rule 2785 (PDF p. 47): "An individual (or couple) receiving SSI/AABD automatically passes the resources test." That is the formula in vt_aabd_ep_resources_eligible. State-only applicants need the input (Cases 13 and 14).
    • Probes:
      • an ineligible spouse at the 67% level: 1,416.25 − 1,049.68, so 366
      • a spouse with $1,200 of Social Security:
        • deeming gives SSI 311 and vt_aabd_federal 55.68
        • countable income is 1,180 + 311 + 55.68 = 1,546.68
        • the grant is 50
  • Kept out of SSI income. 20 CFR 416.1124(c)(2) excludes "Assistance based on need which is wholly funded by a State ... includes State supplementation of Federal SSI benefits". Neither AABD variable is in the SSI income sources, so there is no circularity. vt_aabd holds only state money, so summing it with ssi doesn't double-count.
  • Counted for SNAP and HUD. 7 CFR 273.9(b)(2)(i) counts "other assistance programs based on need", which covers both the supplement and the state Essential Person grant. The SNAP reference consolidation and the HUD addition match the batch.
  • Code:
    • Vectorized. Enum breakdown indexing, select, where/max_/min_/np.floor, and no Python branching on arrays.
    • Periods. YEAR stocks use period.this_year (is_ssi_aged_blind_disabled, takes_up_ssi_if_eligible, is_ssi_spousal_deeming_applies). YEAR flows (ssi_earned_income, ssi_unearned_income, veterans_benefits) auto-divide.
    • No hard-coded policy values. The 2 in np.round(..., 2) is cent precision.
    • References.
      • One entry per document. The variable tuples carry # PDF pages comments with the href opening the first page, as main's CLAUDE.md requires.
      • couple_increment.yaml quotes its "#page 44-45" title.
      • All the AABD-rule anchors open the cited rule: 2760 on p. 27, 2761 on p. 28, 2780 on p. 36, 2781 on p. 38, 2784 on p. 44, the 2786 memo on p. 50, and Bulletin 25-26 P2740B on p. 12.
    • Descriptions follow the template, for example amount/individual.yaml: "Vermont provides this amount as the optional state supplement for an eligible individual under the Aid to the Aged, Blind or Disabled program."
    • Callers. vt_aabd appears only in the lists this PR edits. It is missing from tx_rebate.py (Suggestion 2). It is in all four household_state_benefits blocks (2023–2026), so the integrity guard passes.
  • Hand checks: all 42 expectations. The 2026 FBR is $994 for an individual and $1,491 for a couple.
    • vt_aabd.yaml:
      • Cases 1–4: 55.68, 51.77, 239.62 and 105.60.
      • Case 5: SSI is 662.67 and E pays 42.05.
      • Case 6: SSI is 30 and I pays 49.93.
      • Cases 7 and 8: NONE gives 0; the default gives 55.68.
      • Case 9: 12,360 / 12 = 1,030; 1,030 − 20 = 1,010; the excess of 16 leaves 39.68.
      • Case 10: 12,836.16 / 12 = 1,069.68; 1,069.68 − 20 = 1,049.68; the excess of 55.68 leaves 0.
      • Case 11: 12,836.04 / 12 = 1,069.67; 1,069.67 − 20 = 1,049.67; 0.01 is raised to 1.
      • Cases 12–14: resources of 2,001, age 30 and New Hampshire each give 0.
    • integration.yaml:
      • Cases 1–4: 105.80 / 2 = 52.90; 103.54 / 2 = 51.77; 601.40 / 2 = 300.70; 356.12 / 2 = 178.06.
      • Cases 5 and 6: 51.69 / 2 = 25.845, rounded up to 25.85; 99.85 / 2 = 49.925, rounded up to 49.93.
      • Case 7: 55.68 × 12 = 668.16; SNAP income is 11,928 + 668.16 = 12,596.16.
      • Cases 8 and 11: floor(1,596.80 − 1,049.68) = 547; 547 × 12 = 6,564; vt_aabd is 7,232.16; SNAP and HUD income are 19,160.16.
      • Case 9: floor(1,780.64 − 1,596.80) = 183, or 91.50 each; 52.90 + 91.50 = 144.40.
      • Case 10:
        • SSI is 994 and vt_aabd_federal 55.68
        • countable income is (500 − 90 − 20) + 994 + 55.68 = 1,439.68
        • floor(157.12) = 157
    • vt_aabd_ep.yaml:
      • Cases 1–3: 547; 1,416.25 − 1,049.68 gives 366; 1,235.70 − 1,049.68 gives 186.
      • Cases 4 and 5: NONE gives 0; a spouse at 34% gives 0.
      • Cases 6–8: 1,149.68 gives 447; 1,596.80 gives 0; 1,000 gives 596.
      • Cases 9 and 12: 1,049.68 − (662.67 + 42.05) = 344.96, so 344.
      • Cases 10 and 11: Level III gives 0; a nonspouse in another's household gives 0.
      • Case 13: 15,665 / 12 = 1,305.42; 1,305.42 − 20 = 1,285.42 is above 994; the excess of 291.42 is above 55.68; no resources, so 0.
      • Case 14: floor(1,596.80 − 1,285.42) = 311.
      • Case 15:
        • earnings are 29,993.60 / 12 = 2,499.47
        • SSI: (2,499.47 − 85) × 0.5 = 1,207.23, above 994, so 0
        • Essential Person: (2,499.47 − 90 − 85) × 0.5 = 1,162.23, so 434
      • Case 16: 17,441 / 12 = 1,453.42 with no $20, so 143.
      • Case 17: New Hampshire gives 0.
  • Changelog: changelog.d/vt-ssp-2026.added.md is top-level, typed added, and accurate.
  • Registry:
    • The programs.yaml entry sits under ssi_state_supplement.state_implementations with the WA/MO fields.
    • partial fits the unmodeled grandfathered and limited-nursing paths. parameter_prefix resolves.
  • PR body. The body's description matches the code, and its "42 source-based YAML cases" is right (14 + 17 + 11).

Batch checks

  1. Axiom line: SHOULD (Should 1). axiom: needed is invalid for a staff PR. rulespec-us has no Vermont AABD module or issue, so a dispatch-ready pe-parity issue and a queued line are needed.
  2. Parameter descriptions: pass. All five Vermont files follow the "[State] [verb] ... under the Aid to the Aged, Blind or Disabled program" template, and the federal minimum_payment.yaml matches the siblings.
  3. Backdating: SUGGESTION (Suggestion 1). 2024–2026 are right. 2015–2023 leak the 2024 AABD shares (A/B +3.64, G +15.68, I +7.27 to +32.27) and the 183.84 couple increment (175.45 in 2024). The PR documents the deferral, and Vermont SSP 2017, 2018, 2019 #8346 is open.
  4. tx_rebate.py copy: SUGGESTION (Suggestion 2). It omits vt_aabd, cutting spm_unit_benefits by $668.16 in 2027. ca_state_supplement is still missing too.
  5. Aggregate wiring: pass. spm_unit_benefits, all four household_state_benefits blocks, HUD, SNAP and programs.yaml are present, with no double count with ssi. Vermont's renter-credit income omits SSI and AABD, but that predates the PR and reaches only the TAXSIM aggregate (Suggestion 3); CCFAP and Reach Up correctly exclude it.
  6. Income attribution: pass, with suggestions. Pinned: joint couples halved and rounded up, VTR and facility rates, the supplement-only reduction, Essential Person group income and the individual deeming branch. Unpinned: the couple deeming branch (14.30), one spouse in a facility, the declining-spouse federal limitation, and the one-flag Essential Person couple (Suggestion 4).
  7. Sibling conflicts (branch note): trial merges with Add New Jersey state supplementation for 2026 #10157 and Add Wyoming state supplementation for 2026 #10174 conflict in HUD unearned, programs.yaml and spm_unit_benefits.py. The helper and minimum_payment.yaml are byte-identical across the siblings.
  8. CI: infrastructure, not PR-caused; re-run it. "Python tests / Full Suite - Rest (Python + variables)" was cancelled at "The job has exceeded the maximum execution time of 1h30m0s", with 0 failed tests and the last test at 97%. The other 25 checks pass.
  9. State law first: done. Read 33 V.S.A. §§ 1301–1309, AABD rules 2700–2786, P2740A/B (Bulletins 25-26 and 23-38), DVHA 2026 standards, POMS SI 01415.058 M and the 2015–2025 January charts, SI BOS01415.013/.970 and SSA's 2011 Vermont description. Every 2026 amount, federal administration and the January 2026 effective date check out, and all 42 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

25 of 26 checks pass. The one failure is an infrastructure timeout, and the job should simply be re-run (gh pr checks 10171). Three "skipping" entries belong to the superseded run 38359688491.

  • The failing job. "Python tests / Full Suite - Rest (Python + variables)" (job 115199178017, run 38367938384 on head 6842ff568d).
    • It ran from 09:45:20 to 11:15:38 UTC and ended cancelled.
    • The check annotation reads "The job has exceeded the maximum execution time of 1h30m0s", and the log ends "##[error]The operation was canceled."
    • The log shows 4,207 PASSED lines and no FAILED or ERROR line.
    • The last batch ("rest-python-remaining") was at 97% when the limit hit. The following "Run tests/variables YAML tests" step was skipped.
    • test_aggregate_list_integrity.py, test_programs_registry.py and the reference-URL tests had already passed.
  • Not PR-caused.
  • Fix: re-run the failed job. If it times out again, the cause is the job's wall-clock budget, not this PR.
  • Main since then. In the files this PR touches or reads, main has changed only:
    • the unemployment_compensation → total_unemployment_compensation rename in the shared income lists and tx_rebate.py
    • three programs.yaml lines (the California entry)
    • Vermont renter-credit FMR/AMI updates
    • None of it touches the lines this PR adds.
  • Local run. The three new test files at the head with policyengine-core 3.33.3: 42 passed.
  • Partner tests. The PR touches no partner test files, and the Household API Partners job passes.

Branch status

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.

The 2026 policy is correct: all 12 rate cells match POMS SI 01415.058 M.2 and the DVHA 2026 schedule, the code mapping and formula follow rules 2760-2767, the Essential Person design reproduces all 9 P2740B 2026 maximums, and all 42 cases check by hand. One should item (see the comment above): 'axiom: needed' isn't valid for staff, and rulespec-us has no Vermont AABD module, so file a dispatch-ready pe-parity issue and add a queued line. The one red CI check is the Rest job hitting its 1h30m limit with 0 failures; I've re-run it.

hua7450 and others added 2 commits October 15, 2026 18:50
- Enter residential and custodial care through a new vt_aabd_care_setting
  input, and the nonspouse essential person and state resource test through
  plain inputs, so formulas no longer reset other household members.
- Give an eligible couple one Essential Person grant at the highest level
  certified for either spouse, and leave a spouse in a facility out of the
  group income (rule 2782).
- Note that a spouse who declines SSI still makes a joint claim (issue
  10243), cite 33 V.S.A. ch. 13 and the POMS M.1/M.2 anchors, drop a
  duplicate parameter value, and add tests.

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

hua7450 commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. The changes are in 61b5d44, followed by a merge of main (0693646). The shared helper and minimum_payment.yaml are unchanged.

Should 1 (Axiom line): filed TheAxiomFoundation/rulespec-us#1786 (pe-parity). It has:

  • your module paths, alongside the existing Delaware POMS modules;
  • the verbatim POMS M, AABD rule and P2740B text;
  • the required outputs;
  • your companion cases mapped to the PE cases.

The source conflicts are in a separate comment, and the axiom line now points to it. They include POMS M.2.b's "944.00" E couple FBR, which its own total shows should be 994.

Suggestion 1 (history): out of scope, and I didn't widen #8346. I did drop ep/couple_increment.yaml's repeated 2026-01-01 value.

Suggestion 2 (Texas rebate copy): #10226 tracks one spm_unit_benefits list that reforms append to, so this PR leaves tx_rebate.py unchanged.

Suggestion 3 (renter credit): I didn't file the follow-up, because the renter credit doesn't use the income you quote.

  • § 6066(b)(1) tests the claimant's "income" under § 6061(18). Its Social Security add-back follows 26 U.S.C. § 86(d), which doesn't cover SSI.
  • The HI-144 lines (all Agency of Human Services payments; "Social Security benefits also include SSI") belong to the § 6061(4)–(5) household income of the homestead Property Tax Credit, which PE doesn't model.
  • One source does conflict: the RCC-146 Line 11 instruction for people who don't file a federal return counts 75% of SSI. The model follows the statute.
  • An SSI-only renter's credit is the same either way ($1,091), since a one-person filer can't reach the lowest income band from SSI alone.

Suggestion 4 (readings):

  • Couple deeming branch: not added here. Its band of spouse earnings is about $111 a month wide, and we avoid incomes set inside a narrow band. The branch lives in the shared helper and is pinned by Rhode Island integration Case 6 (243 = min(332, 332 − 89)).
  • One spouse in a Medicaid facility: new integration Case 12: SSI [30, 994], vt_aabd [49.93, 55.68].
  • A spouse who declines SSI: a NOTE in vt_aabd_federal.py points to Fix SSI spousal deeming for in-kind support and for aged, blind or disabled spouses who are not eligible #10243. That issue covers the federal couple classification, which ignores take-up.
  • One-flag Essential Person couple: fixed.
    • An eligible couple now gets one grant at the highest level certified for either spouse (rules 2780(A), 2783.1, 2784(C)), split equally.
    • vt_aabd_ep.yaml Case 21 pins your one-flag couple at [91.50, 91.50], and Case 22 pins a 67%/34% couple at [61.50, 61.50].
    • The rules don't say which level applies when the spouses' levels differ, so "highest" is a modeling choice; the conflict comment says so.

Suggestion 5 (wiring): integration Case 7 now asserts spm_unit_benefits: 12_596.16 with SNAP take-up off, so it doesn't depend on projected SNAP amounts. Removing vt_aabd from the list fails the case.

Suggestion 6 (polish):

  • I kept the blank lines before metadata:; they come from our formatting pass and are harmless.
  • The rate files point at #m2a and #m2b, the arrangement at #m1 and vt_aabd at #m2.
  • vt_aabd.py cites 33 V.S.A. ch. 13 (§§ 1301(3), 1309(a)).

Other fixes I found:

  • Input-reset trap. Three variables were formulas that users had to set as inputs:

    • vt_aabd_living_arrangement, the only way to enter a care setting;
    • vt_aabd_ep_is_spouse, overridden for a nonspouse essential person;
    • vt_aabd_ep_resources_eligible, overridden for state-only applicants.

    Entering a care setting for one person set everyone else to NONE. In one probe, a second recipient got 0 instead of 55.68.

    • They now read new plain inputs: vt_aabd_care_setting, vt_aabd_ep_nonspouse_essential_person and vt_aabd_ep_passes_state_resource_test.
    • New cases pin two people with an input on one only.
  • A spouse in a facility in the group's income. The Essential Person group counted a spouse in a Medicaid facility. Rule 2782 limits the group to members "living in the same household", and the facility spouse's income cost the at-home spouse the grant. vt_aabd_ep.yaml Case 23 pins [0, 547].

On the merged head, these pass locally: all 1,031 Vermont cases, and the aggregate list integrity and program registry tests (677 passed, 10 skipped).

@hua7450
hua7450 requested a review from DTrim99 October 15, 2026 22:54
@DTrim99 DTrim99 mentioned this pull request Oct 20, 2026
4 of 5 tasks
@DTrim99

DTrim99 commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator

PR Review (round 2): Add Vermont state supplementation for 2026

PR #10171 (author: hua7450). This round reviews head 0693646254; round 1 reviewed 6842ff568d. Two commits landed in between:

  • 61b5d44280, "Address review: Vermont AABD care setting and Essential Person inputs" (17 files, +500/−85). It does the following:
    • adds a vt_aabd_care_setting input and derives vt_aabd_living_arrangement in the order Title XIX facility, care setting, household of another, independent;
    • replaces the formula overrides with two plain inputs, vt_aabd_ep_nonspouse_essential_person and vt_aabd_ep_passes_state_resource_test;
    • gives an eligible couple one Essential Person grant at the highest level certified for either spouse, split equally;
    • leaves a spouse outside the household (a facility or care setting) out of the group income (rule 2782);
    • adds a NOTE for a spouse who declines SSI (Fix SSI spousal deeming for in-kind support and for aged, blind or disabled spouses who are not eligible #10243), cites 33 V.S.A. ch. 13 and the M.1/M.2 anchors, and drops the duplicate 2026 couple increment;
    • adds vt_aabd.yaml Cases 15–16, vt_aabd_ep.yaml Cases 18–23 and integration.yaml Case 12, and rewrites vt_aabd.yaml Cases 7–8 and vt_aabd_ep.yaml Cases 5, 7, 8, 10–12 to use inputs in place of overrides.
  • 0693646254, a merge of main at 9560e7f183 with no hand-resolved conflicts. It leaves the Vermont AABD files untouched. Among other things, it brought in:

Summary

Ziming fixed the round-1 should item and most of the suggestions:

He gave reasons for the rest, and I accept them:

  • He is right about Suggestion 3, and I withdraw it. The renter credit tests § 6061(18) "income", not household income.
  • The couple deeming branch is already pinned on main, by New Jersey integration Case 4.
  • The history and the Texas rebate copy are documented deferrals.

He went further in two places:

  • The input-reset trap. Entering a care setting for one person reset everyone else to NONE.
  • Rule 2782. A spouse in a facility no longer counts in the at-home spouse's group income.

I checked the new logic against rules 2780–2786. The couple rule, the facility exclusion, the nonspouse flag and the arrangement order all hold. Every new or changed expectation (21 cases) checks by hand.

One should item is new. It comes from the batch's wage lesson, through the main merge.

  • The rule. The Essential Person grant is state-administered. Rule 2786 counts income "according to income rules for the Reach Up program". Reach Up rule 2251(a) defines earned income "prior to any voluntary or involuntary deductions including any applicable taxes, ... or insurance".
  • The code. vt_aabd_ep_countable_income reads ssi_earned_income. Since Document disjoint health premium inputs and correct consumer treatment #10046 arrived with the merge, that variable nets out pre-tax health premiums.
  • The effect. A probe adds $100 a month of pre-tax premiums to integration Case 10's working spouse. The grant becomes 257 where the rule gives 157. For an aged worker, the grant is $50 a month too high (592 against 542). The federally administered supplement correctly follows SSI income.

The NH #10156 check finds nothing. vt_aabd_living_arrangement is a gated breakdown key, and its NONE default is a key in both rate tables. A two-state probe gives a Massachusetts resident NONE and 0, with no error.

Three optional suggestions:

CI is 27/27 green on the head. The branch is 56 commits behind main and conflicts with it in three shared lists, where sibling SSP lines landed at the same spots (branch note).

Prior findings status

Finding Status Evidence
Should 1: axiom: needed isn't valid for a staff PR that adds a program Fixed The line now reads axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#1786 queued. #1786 is open and labelled pe-parity; Ziming filed it on 2026-10-15. It has: the module paths I proposed, with corpus status; verbatim M.1, M.2.a/b, § 1301(3), rules 2760–2786, the memo and P2740B; eight required outputs; and companion tests A–K mapped to PE cases. Its source-conflicts comment covers three conflicts and two appendix items (see Axiom).
Suggestion 1: amounts before 2024 leak the 2026 rates Declined (accepted); duplicate value dropped The deferral. The body says "Earlier years use parameter backfilling and are unverified historical estimates; no historical coverage is claimed", and programs.yaml claims only verified_years: "2026". #8346 is open (2017–2019); Ziming didn't widen it. #1786 lists history as out of scope. The duplicate. ep/couple_increment.yaml now holds only 2025-01-01: 183.84.
Suggestion 2: the Texas rebate's copy of spm_unit_benefits omits vt_aabd Deferred to #10226 (accepted) #10226 ("Keep one spm_unit_benefits list so reforms that add a benefit stop dropping baseline programs") is open. The South Dakota and other sibling PRs defer it the same way.
Suggestion 3: the renter-credit income omits SSI and AABD Withdrawn (the author is right) 32 V.S.A. § 6061(18): "Notwithstanding subdivisions (4) and (5) of this section, for the purposes of the renter credit, 'income' means federal adjusted gross income increased by" items (A)–(D). Item (C) is "75 percent of the portion of Social Security benefits as defined under 26 U.S.C. § 86(d)", which doesn't cover SSI. § 6066(b)(1) tests "the claimant's income". The § 6061(5)(B) text and the HI-144 lines I quoted define household income for the homestead credit, which PE doesn't model. vt_renter_credit_income follows (18).
Suggestion 4(a): the couple deeming branch is unpinned Declined (accepted) Main already pins it. The branch lives in the shared helper, which is byte-identical to main's (blob 5e0c84da3f). On main, nj/njdhs/ssp/integration.yaml Case 4 pins the deemed computation binding: "max(25.35, 152.99) - (1_630 - 1_491) = 152.99 - 139 = 13.99". The case he cited. Ziming pointed to Rhode Island Case 6, but #10168 is still open.
Suggestion 4(b): one spouse in a Medicaid facility Fixed Integration Case 12: vt_aabd_living_arrangement [MEDICAID_INSTITUTION, INDEPENDENT], ssi_couple_computation_applies [false, false], SSI [30, 994], vt_aabd [49.93, 55.68]. This is my round-1 probe.
Suggestion 4(c): a spouse who declines SSI Fixed (documented) The code. vt_aabd_federal.py:19 has "NOTE: A spouse who declines SSI still makes a joint claim (issue 10243)". The issue. #10243 ("Fix SSI spousal deeming for in-kind support and for aged, blind or disabled spouses who are not eligible") is open. Elsewhere. The body's coverage limits repeat it, and #1786's conflict 2 sets out both readings with the 994 + 55.68 SSA result.
Suggestion 4(d): a one-flag Essential Person couple got [0, 0] Fixed The code. vt_aabd_ep.py:37-41: certified = abd_eligible & valid_level; both spouses are eligible if either is certified; rate is the marital unit's maximum certified rate; count > 1 selects the couple maximum. Tests. Case 21 pins my probe household at [91.50, 91.50]. Case 22 pins a 67%/34% couple at [61.50, 61.50]. Documentation. vt_aabd_ep_level now says to set the level on the recipient, and that a couple uses the higher level. #1786's conflict 3 records "highest level" as a modeling choice (see Verified).
Suggestion 5: spm_unit_benefits wiring was unasserted Fixed Integration Case 7 asserts spm_unit_benefits: 12_596.16 (11,928 + 668.16) with takes_up_snap_if_eligible: false, so it doesn't depend on projected SNAP.
Suggestion 6: polish Mostly fixed; blank lines kept (accepted) Anchors. The rate files point at #m2a and #m2b, the arrangement at #m1, and vt_aabd and vt_aabd_federal at #m2. Statute. vt_aabd.py cites 33 V.S.A. ch. 13 (§§ 1301(3), 1309(a)). Duplicate value. Dropped (Suggestion 1). Blank lines. The two before metadata: stay; they are harmless.

New findings

Critical (must fix)

None.

Should address

1. The Essential Person grant counts wages net of pre-tax health premiums, but rule 2786 counts them before insurance deductions.

  • Where: vt_aabd_ep_countable_income.py:30-32, earned = in_household * max_(person("ssi_earned_income", period) - p.employment_expense, 0).

  • What changed. The main merge brought in Document disjoint health premium inputs and correct consumer treatment #10046. Since then, ssi_earned_income returns earned_income - min_(wages, pretax_premiums), following POMS SI 00820.102 C.2: "Amounts used to purchase qualified benefits under a cafeteria-plan with a salary-reduction agreement are not the employee's wages and are not considered income for SSI purposes."

  • The state rule.

    • The grant is state money. Rule 2780(A): "State AABD-EP payments are made to any aged, blind or disabled person (or couple)". Rule 2743: the payments "are issued monthly through the regular monthly payment system also used for Reach Up payments".
    • Rule 2786 imports Reach Up's income rules. Rule 2786: "All income to all assistance group members must be counted together according to income rules for the Reach Up program (see rules 2250–2259)". Its only exceptions are the 2254 exemptions and counting SSI/AABD as unearned income. Its exemptions are the $20, the $65 plus one-half, and the memo's $90 employment expense. There is no premium deduction.
    • Reach Up counts wages before insurance deductions. Reach Up Eligibility Rule 2251(a) (08/01/2024): "Earned income is defined as income prior to any voluntary or involuntary deductions including any applicable taxes, contributions under the Federal Insurance Contributions Act (FICA), or insurance." Rule 2253 (excluded income) has no cafeteria-plan or salary-reduction exclusion.
  • This is the batch's wage pattern (NH Add New Hampshire state supplementation for 2026 #10156 round 3, OK Add Oklahoma state supplementation for 2026 #10165, OR Add Oregon state supplementation for 2026 #10166 round 2). A state-administered payment reads ssi_earned_income where the state rule counts wages before payroll deductions. Unlike South Dakota (Add South Dakota state supplementation for 2026 #10169), Vermont has no premium deduction to offset the netting.

  • Probe at the head (2026-01; one simulation, Vermont).

    Household Model Under rule 2786
    Integration Case 10 as is: aged recipient at FULL; spouse aged 40 earns $500 a month countable 1,439.68, grant 157 157
    The same, plus $100 a month of pre-tax premiums for the spouse ssi_earned_income 4,800 a year; SSI 994; countable 1,339.68; grant 257 (500 − 90 − 20) + 994 + 55.68 = 1,439.68, so 157
    Aged worker at FULL: $1,000 a month of wages, $100 a month of pre-tax premiums, spouse aged 60 SSI 586.50; countable 1,004.68; grant 592 (1,000 − 90 − 20 − 65) / 2 = 412.50; 412.50 + 586.50 + 55.68 = 1,054.68, so 542
    • A non-aged earner gets no half-earnings exclusion, so the grant rises by the whole premium. For an aged, blind or disabled earner, it rises by half the premium.
    • household_state_benefits for the first household is 3,752.16 for 2026, against 2,552.16 without premiums, a gap of 12 × 100.
    • SSI is right in both cases; SSA nets the premium. The error is only in the state grant's own wage count.
  • Fix:

    • Count gross wages in vt_aabd_ep_countable_income, for example gross_earned = add(person, period, parameters(period).gov.ssa.ssi.income.sources.earned), then earned = in_household * max_(gross_earned - p.employment_expense, 0).
    • Cite Reach Up rule 2251 next to the rule 2786 reference.
    • Add a case: integration Case 10 plus pre_tax_health_insurance_premiums: 1_200 on person2. The expected values are ssi [994, 0], vt_aabd_ep_countable_income [1,439.68, 1,439.68] and vt_aabd_ep [157, 0].
    • Leave vt_aabd_federal alone. It is SSA-administered and correctly follows SSI countable income.

Suggestions

1. A spouse outside the household still passes the at-home spouse's resource test.

  • Where: vt_aabd_ep_resources_eligible.py:19-21, person.marital_unit.any(receives | passes_state_test).
  • Why it matters.
    • The new commit leaves a spouse in a facility out of the group income, because rule 2782 limits the group to "persons living in the same household".
    • The resource test still looks at the whole marital unit. So a facility spouse's $30 SSI satisfies rule 2785 ("An individual (or couple) receiving SSI/AABD automatically passes the resources test") for an at-home spouse who doesn't receive SSI.
  • Probe at the head (2026-01). One spouse is in a Medicaid facility with no income: SSI 30, vt_aabd 49.93. The at-home spouse is at FULL with $1,305.42 a month of Social Security and no state resource input.
    • vt_aabd_ep_resources_eligible is true for both, and the at-home spouse's grant is 311.
    • Without the facility spouse, the same person is vt_aabd_ep.yaml Case 13, which gives 0 until vt_aabd_ep_passes_state_resource_test is set.
  • Fix: apply the same in_household mask, as in marital_unit.any((receives | passes_state_test) & in_household). Or document that SSI receipt by any spouse passes the test.

2. Bring #1786 in line with the head.

  • The case count. The summary says vt_aabd_ep.yaml has 21 cases. The head has 23, and CI ran 23.
  • The income row.
    • "EP income" reads "Rule 2786 over the marital unit". Add "household members only (rule 2782)"; the rule already appears under interpretations.
    • After Should 1, add "earned income before payroll deductions, including pre-tax insurance (Reach Up rule 2251(a))". Add the new case to the companion tests.
  • The resource row. If Suggestion 1 changes the code, update the "EP eligible" judgment, which reads "resources (2785)", to match.

3. Polish: cite rule 2782's page.

vt_aabd_ep_countable_income.py now applies rule 2782 (comment at lines 25–26). Its reference comment still reads # PDF pages 48-51; rule 2782 is on page 42, so # PDF pages 42, 48-51 would cover it.

Verified

  • Administration.
    • The supplement. Rule 2761 (PDF p. 28): "All living arrangements are federally administered except for a residential care home with limited nursing care, level III, which is state-administered (rule 2764.2)." POMS SI 01415.058 A lists Vermont. So SSA rounding, the $1 floor and SSI countable income are right for vt_aabd_federal.
    • The Essential Person grant. It is state-administered (rules 2780(A) and 2743 above). The wage lesson applies to it alone (Should 1).
  • The wage count (NH Add New Hampshire state supplementation for 2026 #10156 r3, OK Add Oklahoma state supplementation for 2026 #10165, OR Add Oregon state supplementation for 2026 #10166 r2).
  • State-gated keys (NH Add New Hampshire state supplementation for 2026 #10156 check).
    • vt_aabd_living_arrangement (defined_for = StateCode.VT, default NONE) is the breakdown key of amount.individual and amount.couple. Both files define NONE: 0, so a non-resident's default is a valid key.
    • The new vt_aabd_care_setting (gated, default NONE) is compared with possible_values only.
    • vt_aabd_ep_level is ungated, with default NONE. It keys ep.rate, which defines NONE: 0.
    • The new boolean inputs (vt_aabd_ep_nonspouse_essential_person, vt_aabd_ep_passes_state_resource_test) are gated and used only in boolean logic.
    • The two-state probe ran without error. The simulation that ran the Should 1 households also held an aged SSI-only Massachusetts resident with vt_aabd_ep_level FULL:
      • vt_aabd_living_arrangement and vt_aabd_care_setting were NONE;
      • vt_aabd and vt_aabd_ep were 0;
      • household_state_benefits was 1,545.84 (Massachusetts' own supplement), SNAP unearned income 13,473.84, HUD unearned income 11,928 and spm_unit_benefits 15,429.84.
  • The new logic, against the rules.
    • The arrangement order (facility, then care setting, then household of another, then independent).
      • POMS M.2.a pairs codes C, G and H only with federal code A, and code I only with federal code D. So a Title XIX facility must win (Case 16).
      • The care-setting documentation tells users not to set the household-of-another inputs for care residents. That avoids pairing a care code with federal code B.
      • Federal code C (a child with parents) falls to the default, which matches the M.2.a row "C | A | ... | 55.68".
    • The care setting stays an input. M.1 codes C and G are facilities "identified by the State". The enum's rules (2764.1, 2764.3, 2766) are on PDF pp. 31–33, as the reference comment says.
    • One grant for a couple.
      • Rule 2780(A) pays "any aged, blind or disabled person (or couple)".
      • 2783.1: "A couple is a husband and wife (both aged, blind or disabled) with a non-spouse essential person living in the same household."
      • 2784(C) sets one maximum that "an eligible couple ... may receive to meet their needs plus those of an essential person".
      • The code computes the same standard and group income for both spouses, drops the cents once, and halves the result. That matches the memo's "Drop cents" and one couple grant.
    • The highest level is a reasonable choice. 2784(A) ties each level to the services the essential person gives "the applicant/recipient", and no rule addresses spouses certified at different levels. Taking the higher level fits a couple that applies jointly, and Removed "uncapped" from OR refundable credits #1786 records it as an interpretation.
    • The facility exclusion. Rule 2782: the group "whose resources and income must be counted together for the eligibility tests, includes any of the following persons living in the same household". The in_household mask (independent or household of another) leaves out facility and care-setting spouses. A non-aged spouse at home keeps the independent arrangement and is counted.
    • The nonspouse flag.
      • 2781(E)(2)(c) allows a nonspouse essential person.
      • 2782 lists "an ineligible ... spouse ... and/or a non-spouse essential person".
      • 2784(B)(1) sets one individual maximum "to meet his or her needs plus those of an ineligible spouse or other essential person".
      • So Case 18 is right in all three respects: the 34% level is valid, the maximum is 1,596.80, and the spouse's income counts.
      • The flag also blocks the another's-household path, which 2783.2 bars for a nonspouse essential person (Case 11).
    • Declining SSI. 33 V.S.A. § 1301(3): an individual shall "Be a recipient of federal Supplemental Security Income, if eligible." The helper gates on takes_up_ssi_if_eligible, so vt_aabd.yaml Case 7 gives 0.
    • The input-reset trap is gone.
      • vt_aabd_living_arrangement, vt_aabd_ep_is_spouse and vt_aabd_ep_resources_eligible are now formula-only.
      • The three new inputs default to NONE or false, so the default matches the formula's no-input result.
      • Cases 15 (a care setting), 8 (additional income), 19 (the state resource test) and 20 (the nonspouse flag) each pin two people with an input on one.
  • What the main merge changes for Vermont.
  • New and changed expectations, checked by hand. The 2026 FBRs are $994 and $1,491. The P2740B maximums are 1,596.80 (individual), 1,780.64 (couple) and 1,049.68 (another's household). The another's-household base is 704.7167.
    • vt_aabd.yaml:
      • Case 1: the arrangement is derived as INDEPENDENT, and the supplement is 55.68.
      • Cases 2–4: the inputs were renamed; 51.77, 239.62 and 105.60 are unchanged.
      • Case 7: a recipient who declines SSI gets SSI 0, so the supplement is 0 (§ 1301(3)).
      • Case 8: Chittenden County gives INDEPENDENT and 55.68; codes A and B both pay 55.68.
      • Case 15: [105.60, 55.68], individual rates with no income.
      • Case 16: the facility wins over Level III, giving MEDICAID_INSTITUTION and 49.93 − 0 = 49.93.
    • vt_aabd_ep.yaml:
      • Case 5: the spouse is 60, so 34% is barred (2784(A)(3)). SSI [994, 0], supplement [55.68, 0], grant [0, 0].
      • Case 7: 994 + 55.68 + 547.12 = 1,596.80, so 0.
      • Case 8: [1,149.68, 1,049.68], so floor(447.12) = 447 and floor(547.12) = 547.
      • Case 10: Level III gives a supplement of 51.77 and a grant of 0 (not independent).
      • Case 11: another's household: SSI 662.67, supplement 42.05, grant 0 (2783.2).
      • Case 12: 704.7167 + 0.67 × 344.9633 = 935.84; 935.84 − 704.72 = 231.12, so [231, 0].
      • Case 14: vt_aabd_ep_resources_eligible is true through the state test input.
      • Case 18: 1,049.68 + 0.34 × 547.12 = 1,235.70; 1,235.70 − 1,049.68 = 186.02, so 186. vt_aabd is 55.68 + 186 = 241.68.
      • Case 19: 1,305.42 − 20 = 1,285.42, so floor(311.38) = 311; and 547. vt_aabd is [311, 55.68 + 547 = 602.68].
      • Case 20: vt_aabd_ep_is_spouse is [false, true, false]. Person 2: floor(1,049.68 − 704.72) = 344, so vt_aabd is 42.05 + 344 = 386.05; person 1 gets 55.68.
      • Case 21: 1,780.64 − (2 × 745.50 + 2 × 52.90) = 183.84, so floor 183, halved to 91.50 each.
      • Case 22: 1,596.80 + 0.67 × 183.84 = 1,719.97; 1,719.97 − 1,596.80 = 123.17, so floor 123, halved to 61.50 each.
      • Case 23: the facility spouse is excluded, so the group income is 994 + 55.68 = 1,049.68 and the grant 547. The facility spouse isn't independent, so gets 0.
    • integration.yaml:
      • Case 7: spm_unit_benefits is 11,928 + 668.16 = 12,596.16.
      • Case 10: vt_aabd_ep_is_spouse [true, false] (the spouse is 40) and vt_aabd_ep_resources_eligible [true, true] (SSI receipt).
      • Case 12: SSI [30, 994] and vt_aabd [49.93, 55.68].
    • Unchanged derivations. Integration Cases 1, 5 and 6 now derive their arrangements, and Cases 1–6 keep their round-1 values.
  • Wiring at the head:
    • vt_aabd is in all four household_state_benefits blocks, in spm_unit_benefits.py, and on the SNAP and HUD unearned lists;
    • programs.yaml is partial, with verified_years: "2026";
    • neither AABD variable is an SSI income source.
  • The shared helper and minimum_payment.yaml are byte-identical to main's (blobs 5e0c84da3f and 1d3e6e2e6b, from Add New Jersey state supplementation for 2026 #10157).
  • Changelog. changelog.d/vt-ssp-2026.added.md is unchanged, top-level and typed added.
  • Tests.
    • In CI: Quick Feedback ran the three Vermont files at the head: 12, 16 and 23 passed. The PR body's 51 (16 + 23 + 12) is right.
    • Locally: one small probe, covering the wage path, the facility-spouse resource test and the two-state check.
  • Partner tests. The PR touches none, and Household API Partners passes.

Axiom line assessment

Valid: axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#1786 queued.

  • Issue state.
    • Removed "uncapped" from OR refundable credits #1786 is open and labelled pe-parity. It is the only rulespec-us issue for Vermont's AABD.
    • rulespec-us main (5796861e58, 2026-10-20) has no module for it: us-vt/ holds only policies/ (cms/, income_tax/). So queued is still the right form.
  • Dispatch-ready. It has:
    • module paths with corpus status: POMS SI 01415.058 is in the corpus, while the AABD rules, P2740B and 33 V.S.A. ch. 13 need ingest;
    • the verbatim law;
    • eight required outputs;
    • companion tests A–K from POMS M.2, P2740B, rule 2784 and the 2786 memo, mapped to PE cases;
    • the interpretations that change a result;
    • a source-conflicts comment covering:
      • the M.2.b "944.00" misprint;
      • rule 2761 against the federal spouse definitions;
      • the split and level of the couple grant;
      • the unreachable 34% another's-household cell;
      • rule 2767's "50 percent or more" against the federal "more than 50 percent".
  • Matches the head, except for the items in Suggestion 2 and, once Should 1 is fixed, the earned-income definition.

CI status

27 pass, 0 pending, 0 failed (run 38820011952 on head 0693646254, pull_request, 2026-10-15 22:53 UTC to 2026-10-16 00:46 UTC).

  • Passed:
    • PR validation, and Package and compatibility;
    • Quick Feedback;
    • Household API Partners;
    • Microsimulation and both Rest (Python) jobs;
    • all 11 Baseline shards and all 9 Contrib shards.
  • Round 1's timeout is gone. The Rest job that timed out in round 1 now passes in 1h10m13s. Shard-1 shows these passing:
    • test_members_are_state_gated[gov/household/household_state_benefits.yaml];
    • the test_programs_registry.py checks.

Branch status

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 1 new should item; details in the round-2 report above. The round-1 should item is fixed: rulespec-us#1786 is queued and ready for the encoder. Most suggestions are fixed or reasonably deferred, and I've withdrawn Suggestion 3, since you're right that the renter credit uses § 6061(18) income. The new commit's logic holds against rules 2780–2786, all 21 new or changed cases check by hand, the NH-sibling bug doesn't occur here, and CI is green. New Should 1, exposed by #10046 in this round's main merge: vt_aabd_ep_countable_income reads ssi_earned_income, which is net of pre-tax premiums. But rule 2786 imports Reach Up rule 2251(a), which counts earned income "prior to any voluntary or involuntary deductions including ... insurance". Example: Case 10 plus $100 a month of premiums gives a grant of 257 where the rule gives 157. Fix: count gross SSI earned sources, and add a test expecting 157. Branch note: conflicts with merged siblings in three shared lists; keep both lines.

hua7450 and others added 3 commits October 20, 2026 16:10
- Rule 2786 imports the Reach Up income rules, and 2251(a) counts earnings
  before payroll deductions, so the EP income no longer nets out pre-tax
  premiums; SSI and the federal supplement keep SSA's treatment.
- A spouse living in a facility is outside the household (rule 2782), so
  their SSI no longer passes the at-home spouse's resource test.
- Cite rule 2782's page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 requested a review from DTrim99 October 21, 2026 15:56
@hua7450

hua7450 commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks, David. This round's changes are in 71b3eec, with main merged. Each shared-list conflict keeps every state's line.

Should 1, pre-tax premiums in the Essential Person income: fixed.

  • vt_aabd_ep_countable_income now sums SSI's earned sources (gov.ssa.ssi.income.sources.earned) before the $90, instead of reading ssi_earned_income. That follows rule 2786 and Reach Up rule 2251(a): earned income is "income prior to any voluntary or involuntary deductions including ... insurance". Reach Up 2252.1(a) also says the $90 "is used in place of the amount of actual expenses for: ... 2. Insurance".
  • SSI and vt_aabd_federal still follow SSA's netting (POMS SI 00820.102 C.2). A code comment quotes 2251(a), and a NOTE cites POMS C.2. The documentation names 2251(a), and the reference tuple adds its page.
  • New vt_aabd_ep.yaml cases:
    • Case 24 is your integration Case 10 household plus $1,200 a year of premiums: SSI [994, 0], countable income 1,439.68 and grant [157, 0]. The old formula gave 257.
    • Case 25 is your aged worker: SSI 586.50, supplement 55.68, countable income 1,054.68 and grant [542, 0]. The old formula gave 592.
    • Every existing expectation is unchanged.
  • The 2786 memo lets workers take the grant as the EP maximum less the SSI/AABD maximum, because SSA "gives the same income exemptions". With premiums, SSA's wages and Reach Up's differ, and the shortcut gives 592 for Case 25. The conflicts comment on Encode Vermont's AABD (33 V.S.A. ch. 13; POMS SI 01415.058 M; AABD rules 2760-2786; ESD P2740B): 2026 supplement levels and the state Essential Person grant (PE-US PR 10171) TheAxiomFoundation/rulespec-us#1786 records this as entry 4.

Suggestion 1, a facility spouse's SSI at the resource test: fixed.

  • vt_aabd_ep_resources_eligible now applies the same household mask as the income (rule 2782, "living in the same household"). Only a household member's SSI/AABD receipt or state resource determination passes rule 2785.
  • New Case 26 is your probe household: resources [false, false] and grant [0, 0]. The old formula gave 311. In a probe, the at-home spouse's own state determination gives 311 again. Case 23 still gives [0, 547].

Suggestion 2, TheAxiomFoundation/rulespec-us#1786: updated.

  • The tests line says 26 cases in vt_aabd_ep.yaml.
  • The EP income row covers household members only (rule 2782) and earnings before payroll deductions (Reach Up 2251(a)). The EP eligible row limits the SSI/AABD pass-through to household members.
  • The source text adds rule 2782, the opening of rule 2786, 2251(a) and 2252.1(a). The module table has a co-cited Reach Up row.
  • Companion tests L-N map to Cases 24-26. Two interpretations are new: earnings before deductions, and rule 2786's 1992 Reach Up numbering. The conflicts comment has a new entry 4.

Suggestion 3, rule 2782's page: fixed. The reference comment reads # PDF pages 42, 48-51, and the AABD href opens at page 42. vt_aabd_ep_resources_eligible now cites page 42 too.

And thanks for withdrawing the renter-credit item.

CI: both red jobs come from one test, test_conflict_sounding_comments_do_not_grow, in the shard-1 Rest job; the other Rest job passes its own tests and fails only because shard-1 failed. The test flags main's Florida and South Dakota LIHEAP files, not this PR's. Main fixed it in #10334, so I'll merge main again after your review.

54 Vermont AABD cases pass locally (16 in vt_aabd.yaml, 26 in vt_aabd_ep.yaml, 12 in integration.yaml).

@DTrim99

DTrim99 commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

PR Review (round 3): Add Vermont state supplementation for 2026

PR #10171 (author: hua7450). This round reviews head 71b3eec024; round 2 reviewed 0693646254. The branch is 8 commits ahead of main and 4 behind. Three commits landed since round 2:

  • 3311331a4c, "Count gross wages for Vermont's Essential Person grant" (5 files, +126/−13). It does the following:
    • vt_aabd_ep_countable_income now sums SSI's earned sources (gov.ssa.ssi.income.sources.earned) before the $90, where it used to read ssi_earned_income. It adds a comment quoting Reach Up rule 2251(a) and a NOTE citing POMS SI 00820.102 C.2, and adds 2251(a)'s page to the reference tuple;
    • vt_aabd_ep_resources_eligible now applies the rule 2782 household mask, so only a household member's SSI/AABD receipt or state resource determination passes rule 2785;
    • it rewords the documentation of three variables and the comment in vt_aabd_ep.py, and cites rule 2782's page (42);
    • it adds vt_aabd_ep.yaml Cases 24-26.
  • a31c1a8c47, a merge of main at 07eba1aeea, with four hand-resolved blocks: HUD unearned, SNAP unearned, programs.yaml and spm_unit_benefits.py.
  • 71b3eec024, a clean merge of main at 1f678c72cd. It brings in Tie source-conflict markers to the register shared with Axiom #10287 (the source-conflict guard) and the LIHEAP wave.

Summary

Ziming fixed the round-2 should item as I proposed it, and all three suggestions.

  • Should 1 (the wage count). The Essential Person grant now counts wages before pre-tax health premiums.
    • It follows rule 2786, which imports the Reach Up income rules, and Reach Up rule 2251(a), which counts earned income "prior to any voluntary or involuntary deductions including ... insurance".
    • SSI and the federally administered supplement keep SSA's netting, which is right for an SSA-administered payment.
    • Case 24 is my round-2 household, integration Case 10 plus $100 a month of premiums. It gives 157, where the old head gave 257.
    • Case 25 is my aged worker. It gives 542, where the old head gave 592.
  • Suggestion 1 (resource test). A spouse in a facility no longer passes the resource test for the spouse at home. Case 26 gives [0, 0], where the old head paid the spouse at home 311.
  • Suggestion 2 (Removed "uncapped" from OR refundable credits #1786). The issue now matches the head. It has the case counts, both rows, companion tests L-N and a new conflict entry 4.
  • Suggestion 3 (the rule 2782 page). It is cited: # PDF pages 42, 48-51, with the href opening at page 42.

The wage lesson (NH #10156 round 3, OK #10165, OR #10166) is now resolved for Vermont, in the direction the rule requires.

  • The grant is state money (rules 2780(A), 2743). Its income rule counts wages gross: 2251(a). 2252.1(a) makes the $90 stand "in place of the amount of actual expenses for: ... 2. Insurance".
  • So this is the New Hampshire and Oklahoma pattern, not Oregon's: the fix is to stop reading SSI's net figure. The model now does that.
  • My hand traces of two workers with pre-tax premiums match the rule.

Merge resolutions. All four hand-resolved blocks keep both sides.

  • Against the merge base, each shared list gains only Vermont's line, once.
  • No sibling line is dropped. New Jersey, Pennsylvania, Wyoming, North Carolina, Nevada, Montana, Oklahoma, New York, Rhode Island, South Dakota and Virginia are all present, with the same counts as on main.

Other checks.

  • NH Add New Hampshire state supplementation for 2026 #10156: nothing found. This round adds no variable, and the one new enum read is compared with ==, not used as a key.
  • Microsimulation default: microsimulation pays only the independent-living supplement (codes A/B), through SSI's take-up. The Essential Person grant, the care settings and codes E and I all need inputs that default to off. One optional suggestion is to say so in the registry notes, as Oregon and Utah were asked today.

Every new expectation checks by hand (3 cases, 10 outputs, 20 values).

CI and branch.

Prior findings status

Finding Status Evidence
Should 1: the Essential Person grant counted wages net of pre-tax health premiums, but rule 2786 counts them before insurance deductions Fixed (as proposed) The code. vt_aabd_ep_countable_income.py:41-42: gross_earned = add(person, period, ssi_income.sources.earned) and earned = in_household * max_(gross_earned - p.employment_expense, 0). The sources are employment_income, self_employment_income and sstb_self_employment_income, the same list ssi_earned_income sums before it subtracts min_(wages, pretax_premiums). So the only change is that the premiums stay in. The comments. Lines 35-37 quote 2251(a). The NOTE at lines 38-40 cites POMS SI 00820.102 C.2 and says "the ssi term below keeps SSA's treatment". The reference tuple adds 2200-Reach-Up.pdf#page=70, and the documentation names 2251(a). The tests. Case 24 uses my exact expected values: ssi [994, 0], countable [1,439.68, 1,439.68], grant [157, 0]. Case 25 pins my aged worker at 542. Unchanged. vt_aabd_federal and the shared helper are untouched; the helper is byte-identical to main's. No test before Case 24 has premiums, so gross and SSI earnings agree, and the diff only appends cases. CI's Quick Feedback ran 26 green. #1786 has the rule text, the row and conflict entry 4 (see Axiom).
Suggestion 1: a spouse outside the household still passed the at-home spouse's resource test Fixed (the first remedy) vt_aabd_ep_resources_eligible.py:20-29 builds the same in_household mask as the income (independent or household of another) and returns person.marital_unit.any((receives | passes_state_test) & in_household). The documentation of both resource variables now says "a member of the assistance group living in the same household". Case 26 is my round-2 probe household: resources [false, false], grant [0, 0]. Case 23 still gives [0, 547], because the at-home spouse passes on their own SSI receipt.
Suggestion 2: bring #1786 in line with the head Fixed The tests line: vt_aabd.yaml (16 cases), vt_aabd_ep.yaml (26), integration.yaml (12), which matches the head and CI. "EP income" now reads "Rule 2786 over the marital unit's members living in the same household (2782): earnings before payroll deductions, including pre-tax insurance (Reach Up 2251(a))". "EP eligible" limits the pass-through to "SSI/AABD receipt by a group member living in the same household (2782)". Companion tests L, M and N map to Cases 24-26. Updated 2026-10-21 04:58 UTC, after the head.
Suggestion 3: cite rule 2782's page Fixed vt_aabd_ep_countable_income.py:11-12: # PDF pages 42, 48-51 above the AABD href, which opens at #page=42. vt_aabd_ep_resources_eligible.py:9-10 now reads # PDF pages 42, 46-47 with #page=42. Rule 2782 is on file page 42, and 2785 on pages 46-47 (its facing memo, then the rule).
Round-1 findings (one should item, six suggestions) Closed in round 2 Nothing in this round reopens them. The axiom line, the deferrals (#8346 for history, #10226 for the Texas rebate copy, #10243 for the declining spouse) and the couple-grant reading are unchanged, and the three issues are still open.

New findings

Critical (must fix)

None.

Should address

None.

Suggestions

1. Say in the registry notes what microsimulation pays (optional).

  • Why. Most of vt_aabd needs inputs that the microdata don't populate:

    • the Essential Person grant needs vt_aabd_ep_level, which defaults to NONE;
    • codes C, G and H need vt_aabd_care_setting, which defaults to NONE;
    • code I needs ssi_lives_in_medical_treatment_facility and ssi_medicaid_pays_majority_of_care, and code E needs ssi_lives_in_another_persons_household. All three are boolean inputs that default to false.

    So a population run pays only the code A/B supplement ($55.68, or $52.90 per spouse). It reaches SSI-eligible Vermonters who take up SSI (takes_up_ssi_if_eligible), so it follows SSI. The notes at programs.yaml:1267-1270 don't say this.

  • Precedent. Ohio (Add Ohio state supplementation for 2026 #10164) added "microsimulation pays no RSS" to its notes in round 2. Oregon (Add Oregon state supplementation for 2026 #10166 round 3) and Utah (Add Utah state supplementation for 2026 #10170 round 2) got the same optional suggestion today.

  • Fix (optional). Add one sentence, such as "Essential Person levels, care settings and facility residence are inputs, so microsimulation pays only the independent-living supplement." Mirror it in the body's coverage limits.

2. Give #1786's Reach Up row its corpus citation (optional).

  • Where. The module table's "Co-cited: Reach Up Eligibility Rules 2251(a), 2252.1(a)" row says "Not checked. The corpus holds ESD rules 2000-2500 ..., which would include 2200".
  • What I found. axiom-corpus main lists the 2200 series as us-vt/regulation/dcf/esd-rules/2200. It is in manifests/us-vt-tanf-state-policy-manual.yaml, source 2200-Reach-Up.pdf, with expression date 2026-06-30.
  • Fix (optional). Replace "Not checked" with that citation, with the same caveat as the other rows (axiom-corpus main, not the signed release).

Verified

  • The fix matches the rule text. I re-read each rule in the current PDFs.

    • Rule 2786 (p. 49, 07/01/1992): "All income to all assistance group members must be counted together according to income rules for the Reach Up program (see rules 2250–2259) with the following exceptions: Reach Up earned income exemptions (rule 2254) are not allowed; and SSI/AABD benefits, if received, are counted as unearned income." Its exemptions are the $20 and the "$65 plus one-half of the balance of any remaining earned income received by the aged, blind or disabled member(s) only". Neither exception reaches the wage definition.
    • Reach Up 2251(a) (file p. 70, 08/01/2024): "Earned income is defined as income prior to any voluntary or involuntary deductions including any applicable taxes, contributions under the Federal Insurance Contributions Act (FICA), or insurance." (a)(1) deducts business expenses first for self-employment, which matches the net self_employment_income input.
    • Reach Up 2252.1(a) (file p. 74): "The standard employment expense deduction of $90 is used in place of the amount of actual expenses for: 1. Taxes; 2. Insurance; 3. Retirement; ..." So premiums aren't deducted on top of the $90. (b) allows one deduction per participant, which matches the per-person $90.
    • Rule 2253 (excluded income) and the rest of the 2200 series have no cafeteria-plan, salary-reduction or pre-tax exclusion.
    • Rule 2782 (p. 42): the group "whose resources and income must be counted together for the eligibility tests, includes any of the following persons living in the same household". This supports the mask on both the income and the resources. Rule 2785 (p. 47): "Combined resources of the assistance group may not exceed ...", and "An individual (or couple) receiving SSI/AABD automatically passes the resources test."
    • The memo conflict (entry 4) is resolved correctly. The 2786 memo (05/08/1992) rests on the premise that "The Social Security Administration gives the same income exemptions". Once SSA nets the premiums, that premise no longer holds. The memo also stays effective only until superseded "by a contradictory rule with a later date", and 2251(a) is dated 08/01/2024. So the rule governs, and Removed "uncapped" from OR refundable credits #1786 records the memo's 592 as the other reading.
    • The 7/1/2026 memo facing 2785 (p. 46) says that, after Act 136 of 2026 ended Reach Up's asset test, "The Essential Person program will continue to evaluate resources in accordance with the Reach Up Eligibility resource rules adopted August 1, 2024." That matches vt_aabd_ep_passes_state_resource_test's "as of August 2024". It doesn't touch income.
  • Workers with pre-tax premiums, traced by hand. No local run was needed, because CI ran the new cases green at this head.

    • Case 24. An aged recipient at FULL; the spouse, 40, earns $6,000 a year with $1,200 of pre-tax premiums; 2026-01.
      • SSI: the spouse's SSI wages are (6,000 − 1,200) / 12 = 400, which doesn't exceed 1,491 − 994 = 497, so nothing is deemed and SSI is 994. The supplement is 55.68.
      • Essential Person income: gross_earned is 6,000 / 12 = 500, so earned is 410 for the non-aged spouse. There is no unearned income, so the $20 goes to non-aged earnings: 390. Then 390 + 994 + 55.68 = 1,439.68.
      • Grant: the individual maximum with an ineligible spouse is 1,491 + 105.80 = 1,596.80, and floor(157.12) = 157.
      • The old formula used 400 − 90 − 20 = 290, so 1,339.68 and 257: the whole premium leaked into the grant.
    • Case 25. An aged worker at FULL earns $12,000 a year with $1,200 of pre-tax premiums; the spouse is 60.
      • SSI: (900 − 20 − 65) / 2 = 407.50, so SSI is 994 − 407.50 = 586.50. Countable income is below the FBR, so the supplement is 55.68.
      • Essential Person income: (1,000 − 90 − 20 − 65) / 2 = 412.50, and 412.50 + 586.50 + 55.68 = 1,054.68.
      • Grant: floor(1,596.80 − 1,054.68) = floor(542.12) = 542.
      • The old formula used (900 − 90 − 85) / 2 = 362.50, so 1,004.68 and 592: half the premium leaked.
  • Every new expectation, checked by hand (2026-01; FBRs $994 and $1,491; supplement 55.68):

    • Case 24: ssi [994, 0], vt_aabd_ep_countable_income [1,439.68, 1,439.68], vt_aabd_ep [157, 0] (above). Person 2 isn't aged, blind or disabled, so gets no SSI and no grant.
    • Case 25: ssi [586.50, 0], vt_aabd_federal [55.68, 0], countable [1,054.68, 1,054.68], vt_aabd_ep [542, 0] (above). Person 2 (60) isn't aged.
    • Case 26:
      • ssi [30, 0]: person 1 is in a facility with Medicaid paying the majority, so gets the $30 rate with no income. Person 2's 1,305.42 − 20 = 1,285.42 is above 994. The couple is computed as two individuals, as in integration Case 12.
      • vt_aabd_ep_resources_eligible [false, false]: person 1 receives SSI but is MEDICAID_INSTITUTION, so is outside the household. Person 2 is in the household but has no SSI, no supplement (1,285.42 > 1,049.68) and no state determination.
      • vt_aabd_ep [0, 0].
  • Merge resolutions (a31c1a8c47). There are four hand-resolved blocks; each keeps both sides.

    • HUD annual_income/sources/unearned.yaml. Main's nj_ssp through va_ag are kept, and vt_aabd follows va_ag, once (line 33).
    • SNAP income/sources/unearned.yaml. Main's va_ag is kept, and vt_aabd sits between va_ag and wa_ssp, once, in alphabetical order.
    • programs.yaml. Main's New Jersey through Virginia entries are kept, and Vermont follows Virginia, once (lines 1260-1270), with unchanged notes. The registry tests pass in CI.
    • spm_unit_benefits.py. "nj_ssp" through "va_ag" are kept, and "vt_aabd" follows "va_ag", once (line 35).
    • Overall.
      • Against the merge base 1f678c72cd, all 26 changed files show additions only (+1,619/−0).
      • vt_aabd appears in all four household_state_benefits.yaml year blocks, between Texas and Virginia.
      • In each of the five shared files, every sibling's count matches main: nj_ssp, pa_ssp, wy_ssp, nc_sa, nv_oss, mt_ssp, ok_ssp, ny_ssp, ri_ssp, sd_ssp and va_ag, and each programs.yaml state entry.
      • The second merge, 71b3eec024, had no hand-resolved files (its remerge diff is empty).
  • The NH Add New Hampshire state supplementation for 2026 #10156 check: nothing found.

    • This round adds no variable. The new read in vt_aabd_ep_resources_eligible is vt_aabd_living_arrangement (gated, default NONE), compared with == only. A non-resident gets NONE, so the mask is false and the result is false, with no lookup. The new parameter read, gov.ssa.ssi.income.sources.earned, is a list read by attribute.
    • The existing keyed lookups are unchanged. amount.individual[arrangement] and amount.couple[arrangement] still define NONE: 0, and so does ep.rate[level] (ungated, default NONE). Round 2's two-state probe still applies.
  • Microsimulation (the default rule for population effects).

    • The fix doesn't change population results, because the grant is $0 there: vt_aabd_ep_level defaults to NONE. Likewise, the resource mask only matters for households with an Essential Person level.
    • The new add reads three cached inputs, so it adds no cost.
    • The documentation gap is Suggestion 1.
  • The source-conflict guard (Tie source-conflict markers to the register shared with Axiom #10287).

  • References. Both changed tuples follow CLAUDE.md: no titles, and a # PDF pages ... comment above each multi-page href. The new Reach Up href opens at file page 70, which shows 2251(a).

  • The PR body.

    • It describes the gross-wage reading, the household mask on income and resources, and the NOTE.
    • Its references add Reach Up 2251(a).
    • It claims "54 Vermont AABD YAML cases (16 ..., 26 ..., 12 ...)", which matches CI.
    • Its axiom line is unchanged.
  • Batch cross-cutting checks (one line each):

    # Check Verdict
    1 Axiom line Valid, rulespec-us#1786 queued; see below
    2 House-template descriptions Unchanged since round 1; all five follow it
    3 Backdating Documented deferral (round-1 Suggestion 1, accepted); Vermont SSP 2017, 2018, 2019 #8346 open
    4 tx_rebate.py copy Still deferred to Keep one spm_unit_benefits list so reforms that add a benefit stop dropping baseline programs #10226 (open), as for the siblings
    5 Aggregate wiring Complete, Vermont once in each list; no double count with ssi
    6 Income attribution The grant now counts gross wages and limits income and resources to household members; pinned by Cases 23-26
    7 Sibling conflicts Branch note only (see Branch status)
    8 CI Two known main-caused failures, no Vermont file (see CI status)
    9 State law The fix re-checked against 2782, 2785, 2786 and Reach Up 2251(a), 2252.1(a)
  • Unchanged since round 2 and still correct:

    • the rates and the P2740B maximums;
    • the arrangement order and the couple grant;
    • the nonspouse flag;
    • the shared helper (byte-identical to main's);
    • the changelog fragment changelog.d/vt-ssp-2026.added.md.

    The PR touches no partner test files, and Household API Partners passes.

Axiom line assessment

Valid: axiom: 33 V.S.A. ch. 13; POMS SI 01415.058 M; Vermont AABD rules 2760-2786; ESD Procedure P2740B TheAxiomFoundation/rulespec-us#1786 queued.

  • Issue state.
    • Removed "uncapped" from OR refundable credits #1786 is open and labelled pe-parity. It was last updated on 2026-10-21 at 04:58 UTC, after the head was committed (04:52 UTC).
    • rulespec-us main (5796861e58, 2026-10-20) still has no Vermont AABD module: us-vt/ holds only policies/ (cms/, income_tax/). A search finds no other Vermont AABD issue. So queued is still the right form.
  • Dispatch-ready.
    • Module paths. The table adds a co-cited Reach Up row for 2251(a) and 2252.1(a). Its corpus status is Suggestion 2.
    • Verbatim law. It adds rule 2782, the opening of rule 2786, 2251(a) (p. 70) and 2252.1(a) (p. 74). Each matches the PDFs.
    • Required outputs. "EP eligible" and "EP income" carry the household mask and the gross-wage definition.
    • Companion tests. L, M and N come from the rules, with derivations, and map to Cases 24-26.
    • Interpretations. Two are new: earnings before deductions, and rule 2786's 1992 Reach Up numbering. The second is right: in the 2024 rules, 2254 is Resources.
    • Conflicts. Entry 4 sets out both readings (542 and 592) with the memo text.
  • Matches the head, including the 16 / 26 / 12 case counts and the Case 24-26 values.

CI status

25 pass, 2 fail, 0 pending (gh pr checks 10171, rechecked at the end of the review). The run is 39546378247 (pull_request) on head 71b3eec024; it started 2026-10-21 04:52 UTC and finished 08:44 UTC.

  • The two failures are the known main-caused ratchet failure, not a finding.
    • "Full Suite - Rest (Python, shard-1 + variables)" fails one test: test_source_conflicts.py::test_conflict_sounding_comments_do_not_grow (1 failed, 2,499 passed, 11 skipped).
    • Its grown set lists only Florida and South Dakota LIHEAP files: fl_liheap_eligible.py, fl_liheap_income_limit.py, fl_liheap.py, fl/.../payment/base_amount.yaml and sd/.../limits/table/in_effect.yaml. No Vermont file is among them.
    • "Full Suite - Rest (Python + variables)" passes all its own tests (60, 55, 1,767 and 980). It fails only because it aggregates the shards: "Rest shards did not all succeed: shard-1=failure, shard-2=success".
    • Count the FL and SD LIHEAP comments in the source-conflict ratchet baseline #10334 (fec98b87c8) fixed the baseline on main at 13:24 UTC, after this run began. Merge main and re-run. Ziming says he will do that after this review.
  • Passed.
    • Quick Feedback ran all three Vermont files: integration.yaml 12, vt_aabd.yaml 16 and vt_aabd_ep.yaml 26, all passed.
    • The rest. All 11 Baseline shards, all 9 Contrib shards, Microsimulation, Household API Partners, Package and compatibility, and PR validation pass.
    • Vermont-relevant tests in the shard-1 log pass: the program registry, the aggregate-list integrity tests (including household_state_benefits.yaml) and the unemployment-reader guard.
  • Local runs: none. CI covers every touched file, and the traces above are by hand.

Branch status

Verdict: APPROVE

@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.

Round 3: the wage-count item is fixed. vt_aabd_ep_countable_income now sums SSI's gross earned sources before the $90, per rule 2786 -> Reach Up 2251(a)/2252.1(a), and Cases 24-25 hand-check. All three round-2 suggestions are fixed too, including the resource pass-through masked to household members (rule 2782). The four hand-resolved merge blocks keep every sibling's line. The two red checks are the known FL/SD LIHEAP ratchet failure from before #10334, so merge main and re-run. Two optional suggestions. Full report in the comment above.

hua7450 and others added 2 commits October 21, 2026 21:18
Each sibling SSP PR adds its line to the same unsorted lists, so the
entries now sit at different anchors and the PRs merge without conflicts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 merged commit ae58781 into main Oct 22, 2026
27 checks passed
@hua7450
hua7450 deleted the vt-ssp-2026 branch October 22, 2026 04:52
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.

2 participants