Skip to content

Add Virginia state supplementation for 2026 - #10172

Open
hua7450 wants to merge 3 commits into
mainfrom
va-ssp-2026
Open

hua7450 wants to merge 3 commits into
mainfrom
va-ssp-2026

Conversation

@hua7450

@hua7450 hua7450 commented Oct 12, 2026

Copy link
Copy Markdown
Collaborator

What and why

Implements Virginia Auxiliary Grant for researched 2026 coverage, with state-specific eligibility, payment rules, and integration into benefit totals and SNAP/HUD income.

Models 2026 locality rates, approved adult care placements, SSI and non-SSI income budgets, resources, entry-month proration and whole-dollar payments. Placement certification and allowable state income exclusions require explicit inputs; institutional SSI claims must reflect separate cases after entry. Conditional resource benefits and historical grandfathering are not modeled.

Parameter backfilling does not establish verified historical coverage.

References

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

Test plan

  • 26 source-based YAML cases passed on this separate state branch.
  • Synthetic national simulation: 153 households, 204 people, all 50 states and DC; finite nonnegative benefit and income aggregates.
  • make format, reference/registry checks, and git diff --check.
  • State changelog fragment.

axiom: needed

hua7450 and others added 3 commits October 12, 2026 14:36
…s and tests

- Exclude interest and dividends from the non-SSI budget, per the AG manual
- Document how ongoing-care spouses are represented; one locality-maximum lookup
- Registry placement and comments, SNAP reference title, shorter programs.yaml note
- Manual page anchors and Planning District 8 sources; age-gate citation
- Corrected ongoing-care and interest cases; joint initial-month and realistic households

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hua7450
hua7450 marked this pull request as ready for review October 13, 2026 08:14
@hua7450
hua7450 requested a review from DTrim99 October 13, 2026 20:37
@DTrim99

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Virginia state supplementation for 2026

PR #10172 (author: hua7450, head 0e6fa7c292, merge-base 2e9eea7e6e). 23 files (+786/−4), 3 commits.

Summary

The PR adds Virginia's Auxiliary Grant (AG). This is the state-administered supplement for SSI recipients, and for people who would get SSI except for income, who live in an assisted living facility (ALF), an adult foster care home (AFCH) or supportive housing (SH).

  • Parameters (gov.states.va.dars.ag):
    • rate.standard is $2,130 and rate.northern_virginia is $2,450, both from 2026-01-01.
    • personal_needs_allowance is $87 from 2024-01-01.
    • northern_virginia_localities lists the nine Planning District 8 localities.
    • proration_days is 30.
    • excluded_unearned_sources lists dividends and interest.
  • Variables (all Person, MONTH):
    • va_ag_eligible (defined_for = StateCode.VA) requires all of: a certified placement, SSI aged/blind/disabled status, citizenship or SSI-qualified noncitizen status, SSI receipt or resources within $2,000 / $3,000, and no incarceration.
    • va_ag_maximum_care_rate picks the rate by county. va_ag_care_rate is an input that defaults to the maximum.
    • va_ag_countable_income:
      • For SSI recipients it is SSA's countable income plus the SSI payment.
      • For everyone else it applies the SSI exclusions to the person's own income. A couple's income is pooled only in the initial month (va_ag_is_joint_initial_month).
      • Both paths then subtract the state exclusions input.
    • va_ag rounds (prorated rate + personal needs allowance − countable income) to the nearest dollar.
  • 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: 28 YAML cases, 21 in va_ag.yaml and 7 in integration.yaml.

The 2026 policy content is right:

  • Amounts. $2,130, $2,450 and $87 match the DARS rate letter of November 10, 2025 and Item 332 A.1–A.2 of the 2026 Appropriation Act.
  • Formula. It matches 22VAC30-80-50 and AG Manual Chapter J:
    • The AG limit is the rate plus the allowance, minus countable income.
    • The result is rounded to the nearest dollar, and no payment is made on a deficiency of $.49 or less.
    • The entry month is prorated on a 30-day month.
  • Income and eligibility.
    • Countable income follows Chapter D (SSI recipients) and Chapter H (non-SSI).
    • The assistance-unit rule follows Chapter B § 6, and the resource limits follow Chapter E § 5.
    • The alien rules follow Chapter C § 9.4, which mirror SSI's.
  • Administration. Virginia administers the program itself. It is not on SSA's January 2026 list of federally administered supplements.
  • Tests and branch. All 28 expectations check by hand and pass at the head. The branch merges cleanly with main.

The one failing CI check is the Rest job, cancelled at its 90-minute limit after every test it ran had passed. That is infrastructure, not this PR.

Two should-fix items remain, the same two as in #10174, #10168 and #10167:

  • The PR body's axiom: needed isn't a valid form for a staff PR.
  • Four of the six new parameter descriptions don't follow the house template.

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>."
    • needed is reserved for external contributors who can't complete the Axiom work, and the author is PolicyEngine staff.
    • CONTRIBUTING.md#axiom-parity covers "a new program", and 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: Va. Code § 51.5-160; 22VAC30-80-50 TheAxiomFoundation/rulespec-us#NNNN queued. The issue needs:
    • Module paths, for example:
      • us-va/statutes/51.5/... for § 51.5-160 B and C, following the existing us-va/statutes/58.1/58/1-320.yaml layout
      • us-va/regulations/22vac30-80/22vac30-80-50.yaml for the rate, allowance and countable-income rule, on the us-al/regulations/660-4/ pattern
      • us-va/policies/dars/auxiliary-grant-manual/... for Chapter J (limit, proration, rounding), Chapter D § 5–6 (SSI-recipient income), Chapter H § 2–4 (non-SSI exclusions) and Chapter B § 6 (assistance unit)
      • us-va/policies/dss/appropriation-act/2026/item-332-a.yaml for $2,130, the 15% Planning District Eight differential and $87
    • Corpus citations, plus the blocker if a source isn't in the corpus yet.
    • Verbatim law: the passages quoted under Verified correct.
    • Required outputs (Person, monthly):
      • Money parameters: the maximum rate ($2,130; $2,450 in Planning District 8) and the allowance ($87).
      • A Judgment: an SSI recipient, or someone who meets every SSI requirement except income (Chapter C § 8). For non-SSI applicants, also resources within $2,000 / $3,000. Also resides in an approved ALF, AFCH or SH placement.
      • A Money output: the rate (prorated by rate ÷ 30 × days in the entry month) plus the allowance, minus countable income. Round to the nearest dollar, and pay nothing when the deficiency is $.49 or less.
      • Countable income: gross SSI plus SSA's net earned and unearned income, less the state exclusions (Chapter D § 5). Non-SSI applicants get the $20 and $65 + ½ exclusions on their own income. A couple forms one assistance unit only in the application month.
    • Companion tests from the same sources, not from PolicyEngine output:
      • Chapter J § 3.3, Example 1 (p. 522): $1,221 ÷ 30 × 12 = $488.40, plus $82, gives a limit of $570.40.
      • Example 2 (p. 523): 19 days gives $773.30, plus $82, for a limit of $855.30.
      • Chapter J § 6.1.2 (p. 526), with countable income of $700: $1,221 + $82 − $700 = $603, and in Planning District 8, $1,404 + $82 − $700 = $786.
      • Chapter J § 5.1 (p. 524): $64.45 pays $64, $64.56 pays $65, and $.45 pays $0.
      • Chapter D § 6.4.1.1 (p. 130): $623 of SSI less a $10 guardianship fee leaves $613.
      • 2026 letter and Item 332, an SSI-only resident: $2,130 + $87 − $994 = $1,223; in Planning District 8, $1,543.
  • The batch. The sibling SSP PRs all carry axiom: needed and need the same fix.

2. Four of the six new parameter descriptions don't follow the house template.

  • Where:
    • parameters/gov/states/va/dars/ag/rate/standard.yaml:1 and rate/northern_virginia.yaml:1 both read "Virginia provides this monthly approved Auxiliary Grant care rate in this locality group."
      • Neither has the "under the ... program" clause.
      • The two sentences are identical, so neither says which locality group it covers.
    • northern_virginia_localities.yaml:1: "Virginia applies the Planning District 8 care rate in these localities."
    • proration_days.yaml:1: "Virginia divides the monthly care rate by this number of days when prorating an initial partial month."
  • The template: "one sentence, spell the program out fully (no acronyms), [State] [verb] ... under the [Full Program Name] program."
    • excluded_unearned_sources.yaml and personal_needs_allowance.yaml in this PR already follow it.
    • So do the siblings on main. For example, ga/dhs/ssp/amount.yaml: "Georgia provides this amount as the monthly supplement under the State Supplementary Payment program." And Indiana's per diem: "Indiana provides this amount as the daily per diem rate for licensed residential care facilities under the Residential Care Assistance Program."
  • Fix:
    • rate/standard.yaml: "Virginia provides this amount as the maximum monthly care rate outside Planning District Eight under the Auxiliary Grant program."
    • rate/northern_virginia.yaml: "Virginia provides this amount as the maximum monthly care rate in Planning District Eight under the Auxiliary Grant program."
    • northern_virginia_localities.yaml: "Virginia applies the Planning District Eight care rate in these localities under the Auxiliary Grant program."
    • proration_days.yaml: "Virginia divides the monthly care rate by this number of days to prorate the entry month under the Auxiliary Grant program."

Suggestions

  1. Rates and allowance before 2026 (deferral documented in the PR body).

    • The leak. Both rates have only a 2026-01-01 value, so backdating carries $2,130 / $2,450 back to 2015. The allowance's first value, $87, also carries back before 2024. Probe at the head, an aged SSI-only resident:

      Month Model va_ag Law Gap
      2025-01 1,250 2,103 + 87 − 967 = 1,223 +27
      2025-01, Fairfax 1,570 2,418 + 87 − 967 = 1,538 +32
      2024-01 1,274 2,079 + 87 − 943 = 1,223 +51
      2022-01 1,376 1,609 + 82 − 841 = 850 +526
    • The sources:

      • The PR's own rate letter: "The Auxiliary Grant rate will increase by $27 dollars from $2,103 to $2,130 ... Rates in Planning District 8 (Northern VA) will increase from $2,418 to $2,450".
      • 2025 Act (Ch. 725) Item 328 A.1: "Effective January 1, 2025 ... not to exceed a maximum rate of $2,103 per month".
      • 2024 Act (Ch. 2) Item 328 A.1: "Effective January 1, 2024 ... $2,079".
      • 2023 Act (Ch. 1) Item 344 A.1–A.2: "Effective January 1, 2022 ... $1,609" and "Effective January 1, 2013, the monthly personal care allowance ... shall be $82 per month".
    • Fix:

    • Going forward (optional).

      • Since 2024 the rate has risen by exactly the SSI COLA: 2,079 − 943 = 2,103 − 967 = 2,130 − 994 = 1,136. The letter says "This includes the COLA increase of $27 from Social Security", and Item 332 A.3 allows the department to raise the rate "on January 1 of each year in which the federal government increases Supplemental Security Income".
      • With the rate frozen, the 2027 probe gives 14,340 (1,195 a month) instead of 1,223 a month.
      • Consider a note, or uprating the rate by the FBR increase.
  2. The Texas rebate reform's copy of spm_unit_benefits now omits va_ag.

    • Where: policyengine_us/reforms/states/tx/rebate/tx_rebate.py:45-127 redefines spm_unit_benefits nationwide with a hard-coded list. It already lacks ca_state_supplement, and after this PR it also lacks va_ag.
    • Probe at the head: an aged SSI-only certified resident in 2027.
      • spm_unit_benefits is 26,902.01 at baseline and 12,562.01 under the reform, a drop of exactly the 14,340 of va_ag.
      • spm_unit_net_income falls by the same amount, and household_net_income (27,553.01) is unchanged.
    • Fix: insert "va_ag", # Virginia 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. Write down and pin three income-attribution readings.

    • (a) A spouse at home is deemed by default on the SSI path.
      • What happens. Integration Case 3 sets is_ssi_spousal_deeming_applies: false. Remove that override and the probe gives deeming [true, false], SSI 11, ssi_countable_income 1,480 and va_ag 726, instead of SSI 994 and va_ag 1,223.
        • Because the grant fills income up to the limit, the resident's total falls by the full $1,480 of the spouse's income, which stays with the spouse.
        • The non-SSI path already ignores the spouse. With the resident's own Social Security at $2,000, the probe gives va_ag_countable_income 1,980 and va_ag 237 whether or not the spouse is deemed.
      • The law points to no deeming.
        • AG Manual Chapter B § 6 (p. 34): "The assistance unit consists of the AG applicant only", except in the application month.
        • 20 CFR 416.1160(a)(1) deems "If you live in the same household with your ineligible spouse".
      • The PR documents the workaround in va_ag_countable_income.py and va_ag_is_joint_initial_month.py.
      • Fix: either subtract ssi_income_deemed_from_ineligible_spouse from the SSI-branch countable income (va_ag_countable_income.py:52-53) outside the joint initial month, or keep the workaround and add the default case above as a pinned test.
    • (b) The grant replaces SSI when SSI isn't taken up.
      • What happens. With takes_up_ssi_if_eligible: false, the probe gives SSI 0, va_ag_countable_income 0 and va_ag 2,217. The grant covers the FBR too.
      • The law. AG Manual Chapter C § 8 (p. 93): "AG is limited to individuals who are SSI recipients and those who meet all of the SSI eligibility requirements except for income."
        • § 8.2.2 (p. 94): an applicant who "Appears To Meet SSI Income Standards ... must apply for SSI".
        • p. 95: if no application is filed within 15 days, "Deny the AG application".
      • Why it is only a suggestion. va_ag_certified's documentation already folds in "pursuit of other benefits", and take-up defaults to true.
      • Fix: gate the non-SSI path on SSI take-up, or say in va_ag_certified that certification implies an SSI application. Then pin the chosen behavior.
    • (c) Integration Case 2's joint flag does nothing.
      • Case 2 is titled "initial couple computation". The probe gives va_ag [1472, 1472] with and without va_ag_is_joint_initial_month, because the SSI branch never reads the flag. The 1,472 comes from the joint SSI claim (745.50 each).
      • Fix: rename it, for example "joint SSI couple claim". Case 7 already covers the pooled non-SSI budget.
  4. Untested branches.

    • Immigration gate. No case covers va_ag_eligible.py:15-16,29 (citizen or is_ssi_qualified_noncitizen). AG Manual Chapter C § 9.4 (p. 102): "Eligibility for aliens is limited to those that are determined qualified aliens".
    • Incarceration. No case covers the gate at va_ag_eligible.py:31.
    • Care-rate cap. No case covers va_ag.py:19 when va_ag_care_rate is above the maximum. Item 332 A.1 says "not to exceed a maximum rate of $2,130".
    • Asymmetric non-SSI couple. This shows the joint flag matters:
      • Social Security of $30,000 and $18,000, both aged.
      • Separate: [0, 737].
      • Joint: [227, 227], from (4,000 − 20) ÷ 2 = 1,990 against a limit of 2,217.
    • Fix: add these four cases to va_ag.yaml / integration.yaml.
  5. Polish.

    • Blank lines. The PR adds a stray blank line before metadata: in household_state_benefits.yaml (line 408) and in hud/annual_income/sources/unearned.yaml (line 33). Neither relates to Virginia.
    • Case count. The PR body says "26 source-based YAML cases". The PR has 28 (21 + 7).
    • The statute is never cited. Add Va. Code § 51.5-160 to va_ag.py and personal_needs_allowance.yaml. Its subsection C reads: "Auxiliary grant recipients shall be entitled to a personal needs allowance when computing the amount of the auxiliary grant. The amount of such personal needs allowance shall be set forth in the appropriation act."
    • Authority for January–June 2026. The 2026 Act (HB30, Ch. 1) appropriates for FY2027–FY2028, starting July 1, 2026. It restates the January 1, 2026 rate, so it corroborates the value. The authority for January–June 2026 is the 2025 Act (Ch. 725) Item 328 A.3 together with the rate letter. Consider adding that item as a reference.
    • Naming. Integration Case 1, "separate institutional SSI claims", concerns an ALF, which isn't an institution for SSI purposes. "Separate SSI claims" is clearer.

Verified correct

  • Statute. Va. Code § 51.5-160 B: the program assists people who "(i) are ineligible for benefits under Title XVI ... or for whom benefits provided under Title XVI ... are not sufficient to maintain the minimum standards of need ... and (ii) reside in supportive housing, an assisted living facility licensed by the Department of Social Services ..., or an adult foster care home approved by a local board of social services".
    • § 51.5-160 C has the appropriation act set the allowance.
  • Regulation.
    • 22VAC30-80-50: "The AG payment is determined by adding the rate plus the personal needs allowance minus the individual's countable income." That is va_ag.py:22-27.
    • 22VAC30-80-10 defines AG as a program "to supplement income of an individual receiving Supplemental Security Income (SSI) or adult who would be eligible for SSI except for excess income, who resides in an ALF, an AFC home, or a supportive housing setting with an established rate".
  • 2026 amounts.
    • DARS rate letter (November 10, 2025): "There will be an increase in the Auxiliary Grant rate effective January 1, 2026. The Auxiliary Grant rate will increase by $27 dollars from $2,103 to $2,130 ... Rates in Planning District 8 (Northern VA) will increase from $2,418 to $2,450 due to the 15 percent differential. The personal needs allowance will remain at $87."
    • 2026 Act Item 332:
      • A.1: "Effective January 1, 2026 ... not to exceed a maximum rate of $2,130 per month, which rate is also applied to approved adult foster care homes ... The department may add a 15 percent differential to the maximum amount for licensed assisted living facilities and adult foster care homes in Planning District Eight."
      • A.2: "Effective January 1, 2024, the monthly personal care allowance for auxiliary grant recipients ... shall be $87 per month". That matches the 2024-01-01: 87 date.
    • Rounding of the differential. 2,130 × 1.15 = 2,449.50, published as $2,450. 2,103 × 1.15 = 2,418.45, published as $2,418. Parameterizing the published amount is right.
  • Planning District 8. AG Manual SH chapter (p. 542): "Planning District 8 consists of the counties of Arlington, Fairfax, Loudoun, Prince William and the cities of Alexandria, Fairfax, Falls Church, Manassas and Manassas Park."
    • All nine names exist in the county enum.
    • Probe: each gives 2,450, and Richmond city and Stafford county give 2,130.
  • Computation, AG Manual Chapter J.
    • The steps (p. 519): "Step 2 Determine the individual's AG Limit by adding the appropriate rate for his/her locality to the Personal Needs Allowance ... Step 3 Subtract the individual's net countable income from the AG Limit. Step 4 Round the remainder to the nearest dollar."
    • Proration (p. 522): "Divide the full monthly rate by 30 ... 30 is the number of days used regardless of the actual number of days within the month of entry". Also: "The number of days includes the day of entry but not discharge" and "Add the result to the full personal needs allowance".
      • The note "The rate is not prorated for the month of discharge when the month of discharge is later than the month of entry" matches the va_ag_days_eligible documentation.
      • Probes: 30 days in January gives the full 1,223. In February, 28 days gives 1,223 (a full month) and 27 days gives 2,130 ÷ 30 × 27 + 87 − 994 = 1,010.
    • Rounding (p. 524): "Amounts ending in $.01 through $.49 are to be rounded down ...; from $.50 through $.99 to the next higher dollar. When the budgetary deficiency is $.49 or less, no payment is to be made."
      • np.floor(x + 0.5) does this.
      • Probes: a deficiency of 0.49 pays 0 and 0.50 pays 1. Case 6 (468.50 → 469) pins the half-dollar.
    • The approved facility rate. "ALF/AFCH Rate ... publishes the maximum rate" (p. 520), and Item 332 bases facility rates on 85% occupancy, "not to exceed" the maximum. That supports va_ag_care_rate capped at the maximum.
  • SSI recipients, Chapter D (p. 126): "The total countable monthly amount is calculated by adding the gross SSI payment amount to the net earned and net unearned income amounts as determined by SSI and subtracting the Virginia income exclusions."
    • That matches va_ag_countable_income.py:52-55.
    • Resources are "deemed to have met" for SSI recipients (p. 125). That supports (ssi > 0) | ... at va_ag_eligible.py:23.
    • The four state exclusions (community expenses, child at home, spouse at home, guardianship fee; pp. 127–132) are an input. Its documentation follows the Chapter D § 6.4.1.2.2 order.
  • Non-SSI applicants.
    • Exclusions, Chapter H:
      • "The first $20 per month of income ... is excluded" (p. 373)
      • "An eligible couple receives only one $20 exclusion per month" (p. 374)
      • "$65 per month of earned income plus one-half of the remaining earned income" (p. 374)
      • "The $65 earned income exclusions are applied only once to a couple" (p. 374)
      • _apply_ssi_exclusions on pooled income, then halved, matches all four.
    • Interest and dividends, Chapter I § 24.1.1 (p. 439): "Dividends or interest earned on countable resources are not income." Excluding all of it, because the inputs can't flag excluded resources, is a documented and reasonable simplification (Case 21).
    • Resources, Chapter E § 5 (p. 152): "Individual $2000 Couple $3000". That is the SSI limit parameter.
  • Assistance unit, Chapter B § 6 (pp. 34–35): the couple is a unit only when both were married and living together "As of the first moment of the month of application", and each entered care, applied and was found eligible that month. "This situation can exist only in the month of application. ... Sharing a room in an institution is not living in the same household."
    • That matches va_ag_is_joint_initial_month (Cases 4 and 7).
  • Covered groups and aliens.
    • Chapter C § 2 (p. 75): "The AG covered groups are aged, blind and disabled". That supports is_ssi_aged_blind_disabled.
    • The qualified-alien chart in § 9.4.3.1 (pp. 108–111) uses SSI's conditions (40 quarters, the 7-year refugee/asylee limit, receipt on 8/22/96). That supports is_ssi_qualified_noncitizen.
  • Administration.
    • POMS SI 01415.058 A (January 2026) lists California, Delaware, DC, Hawaii, Iowa, Michigan, Montana, Nevada, New Jersey, Pennsylvania, Rhode Island and Vermont as federally administered. Virginia is absent.
    • AG Manual Chapter A (p. 2): "Virginia opted for self-administration."
    • So there is no SSA rounding and no $1 minimum, and the PR correctly doesn't use the shared _ssi_state_supplement helper.
  • Kept out of SSI income. 20 CFR 416.1124(c)(2) excludes "Assistance based on need which is wholly funded by a State or one of its political subdivisions". AG is funded 80% by the state and 20% by localities (AG Manual SH chapter, p. 536).
    • va_ag isn't in the SSI income sources, so there is no circularity.
    • It holds only the state grant, 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". The SNAP reference consolidation matches the batch. The HUD addition matches the batch convention.
  • Code:
    • Vectorized throughout (where, min_, max_, clip, np.isin).
    • Periods. YEAR stocks and flags use period.this_year (age status, resources, county, immigration). YEAR flows come in monthly through period. The MONTH grant sums to 14,676 for 2026 (Integration Case 5).
    • No hard-coded policy values. The 0.5 is the rounding offset and the 2 is couple size.
    • References.
      • The PDF anchors open the cited text: p. 34, 69, 75, 127, 439, 519, 520, 522 and 542.
      • The variable tuples carry # PDF pages comments.
      • The rate letter is a single page, so it needs no anchor.
    • Callers. va_ag is referenced only in the lists this PR edits, including all four household_state_benefits year blocks.
    • Microsimulation. va_ag_certified defaults to false, so microsimulation pays nobody. That is consistent with the partial status.
  • Hand checks: all 28 expectations. The 2026 FBR is $994 for an individual and $1,491 for a couple. The limit is 2,130 + 87 = 2,217.
    • va_ag.yaml:
      • Case 1: 2,217 − 994 = 1,223.
      • Cases 2 and 3: 2,450 + 87 − 994 = 1,543 (Fairfax County, Manassas Park).
      • Case 4: 2,000 − 20 = 1,980 (SSI 0), so 237.
      • Case 5: SSI countable is (600 − 85) ÷ 2 = 257.50 and SSI is 736.50. 257.50 + 736.50 = 994, so 1,223.
      • Case 6: (1,500 − 20) + (602 − 65) ÷ 2 = 1,748.50, so 468.50, paid as 469.
      • Case 7: 2,450 ÷ 30 × 14 = 1,143.33; + 87 − 994 = 236.33, paid as 236.
      • Case 8: 2,000 + 500 − 20 = 2,480 is above 2,217, so 0.
      • Cases 9 and 10: resources of 2,000 give 1,223; 2,001 gives 0.
      • Cases 11–13: not certified, North Carolina and age 40 each give 0.
      • Cases 14 and 15: disabled at 18 and blind at 45 each give 1,223.
      • Case 16: 2,130 ÷ 30 × 15 = 1,065; + 87 − 994 = 158.
      • Case 17: 0 days gives 0.
      • Case 18: 1,152 − (994 − 400) = 558.
      • Case 19: 2,217 − (994 − 10) = 1,233.
      • Case 20: 1,500 + 87 − 994 = 593.
      • Case 21: SSI counts 2,000 + 5 − 20 = 1,985, so SSI is 0. The AG budget excludes the interest: 1,980, so 237.
    • integration.yaml:
      • Case 1: separate claims give SSI 994 each and 1,223 each.
      • Case 2: a joint claim gives SSI 745.50 each; 2,217 − 745.50 = 1,471.50, paid as 1,472.
      • Case 3: SSI is [994, 0] and va_ag is [1,223, 0].
      • Case 4: resources of 1,500 + 1,501 = 3,001 are above 3,000, so SSI is 0 and va_ag is 0.
      • Case 5: 12 × 1,223 = 14,676. SNAP and HUD unearned income are 11,928 + 14,676 = 26,604.
      • Case 6: separate marital units, so no deeming. SSI is 994, the maximum rate is 2,130 and va_ag is 1,223.
      • Case 7: (3,200 − 20) ÷ 2 = 1,590 each. 745.50 − 1,590 is negative, so SSI is 0, and 2,217 − 1,590 = 627 each.
  • Changelog: changelog.d/va-ssp-2026.added.md is top-level, typed added, and accurate.
  • Registry:
    • The programs.yaml entry sits under ssi_state_supplement.state_implementations, after WA.
    • partial fits the unmodeled conditional benefits and grandfathering.
    • parameter_prefix resolves.

Batch checks

  1. Axiom line: SHOULD (Should 1). axiom: needed is invalid for a staff PR. rulespec-us has no Virginia AG module or issue, so a dispatch-ready pe-parity issue and a queued line are needed.
  2. Parameter descriptions: SHOULD (Should 2). rate/standard.yaml, rate/northern_virginia.yaml (whose sentences are identical), northern_virginia_localities.yaml and proration_days.yaml are off-template. The other two are fine.
  3. Backdating: SUGGESTION (Suggestion 1). The rates leak $2,130 / $2,450 into years before 2026, where the Acts give $2,103 / $2,418 (2025), $2,079 (2024) and $1,609 (2022). The allowance leaks $87 into years before 2024, where it was $82 (from January 1, 2013). The PR claims only 2026 and documents the deferral.
  4. tx_rebate.py copy: SUGGESTION (Suggestion 2). va_ag is missing, which costs a Virginia AG resident 14,340 of SPM resources in 2027. ca_state_supplement is still missing too.
  5. Aggregate wiring: complete, with no double count. va_ag is in spm_unit_benefits, all four household_state_benefits blocks, HUD unearned, SNAP unearned and programs.yaml. It holds only the state grant, separate from ssi.
  6. Income attribution: correct for 2026, with three readings to pin (Suggestion 3).
    • Pinned: separate and joint SSI couples, pooled non-SSI couples in the initial month, the couple resource limit, and the deeming override (two forms).
    • Still to pin: deeming when the override is absent, SSI take-up, and Case 2's inert flag.
  7. Sibling conflicts (branch note):
  8. CI: one failing check, classified as infrastructure.
    • "Python tests / Full Suite - Rest (Python + variables)" was cancelled at the job's timeout-minutes: 90 ("The job has exceeded the maximum execution time of 1h30m0s").
    • Every test it ran passed: 4,266, with 11 skipped and 0 failed.
    • It touches none of this PR's tests. The same job ran 74–88 minutes on the sibling runs that day.
    • Re-run it. No code change is needed.
  9. State law first: done.
    • Read Va. Code § 51.5-160; 22VAC30-80-10, -15, -20, -40, -45, -50 and -60; the 2023, 2024, 2025 and 2026 Appropriation Act items; the 2026 DARS rate letter; AG Manual Chapters A–E, H, I § 24, J and the SH chapter; POMS SI 01415.058 A and SI 01401.001.
    • SSA's "State Assistance Programs for SSI Recipients" Virginia page returned HTTP 403, so administration rests on POMS and the Manual.
    • Every 2026 amount, the locality split, state administration and the January 1, 2026 effective date check out.
    • All 28 expectations check by hand.

Axiom line assessment

Invalid (Should 1).

CI status

25 of 26 checks pass; 1 failure, which is infrastructure (gh pr checks 10172). Three "skipping" entries belong to the superseded run 38359305588.

  • The run. Run 38367941792 on head 0e6fa7c292.
  • The failure. Job 115200102624, "Python tests / Full Suite - Rest (Python + variables)", conclusion cancelled.
    • The annotation reads "The job has exceeded the maximum execution time of 1h30m0s", and the limit is .github/workflows/python-tests.yaml:13.
    • All nine Rest Python groups passed (17 + 52 + 54 + 29 + 1,362 + 52 + 424 + 106 + 2,170 = 4,266 passed, 11 skipped, 0 failed). The last finished at 11:43:27, 89 minutes in.
    • The cancellation at 11:44:33 came before the step "Run tests/variables YAML tests". That step runs policyengine_us/tests/variables, which this PR doesn't touch.
  • Sibling runs the same day. The same job took 74 minutes on Add Pennsylvania state supplementation for 2026 #10167, 88 on Add Wyoming state supplementation for 2026 #10174 and 88 on Add Rhode Island state supplementation for 2026 #10168 (all success). It was cancelled at 90 on Add Vermont state supplementation for 2026 #10171.
    • main hasn't changed this workflow or the Rest Makefile targets since the merge-base, so a re-run is the remedy.
  • Where the new tests run. This PR's YAML files run in the baseline states shards, which pass.
  • Local run. The two new test files at the head with policyengine-core 3.33.3: 28 passed.
  • Partner tests. The PR touches none, 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: $2,130 / $2,450 (Planning District 8) / $87 match the DARS rate letter and the 2026 Act Item 332, the formula follows 22VAC30-80-50 and AG Manual Ch. J, and all 28 cases check by hand. Two should items (see the comment above): (1) 'axiom: needed' isn't valid for staff and rulespec-us has no Auxiliary Grant module, so file a dispatch-ready pe-parity issue and add a queued line; (2) four parameter descriptions are off the template. The one CI failure is the Rest job hitting its 90-minute limit after 4,266 tests passed with 0 failures, which is infrastructure; I've re-run it.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants