Skip to content

Stop adding in-kind SNAP and WIC to MA Senior Circuit Breaker income - #9250

Merged
hua7450 merged 5 commits into
mainfrom
ma-scb-in-kind-assistance
Aug 8, 2026
Merged

Stop adding in-kind SNAP and WIC to MA Senior Circuit Breaker income#9250
hua7450 merged 5 commits into
mainfrom
ma-scb-in-kind-assistance

Conversation

@hua7450

@hua7450 hua7450 commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Stops re-adding SNAP and WIC to ma_scb_total_income, the income measure for the Massachusetts Senior Circuit Breaker credit. Both are commented out in disallowed_deductions.yaml rather than deleted, with an inline note recording a conflict between the statute and DOR guidance.

Regulatory basis

M.G.L. c.62 § 6(k)(1) defines "taxpayer's total income" as Part A + Part B + Part C AGI, increased by eight enumerated add-backs and reduced by certain § 3(b) exemptions. The second add-back is:

cash, but not in-kind, public assistance

The commas mark a mid-phrase interruption, not list separators: the item is "cash public assistance," with in-kind public assistance affirmatively carved out. SNAP and WIC are public assistance delivered as restricted food purchasing power, not cash, so neither falls within it.

The conflict with DOR guidance

This is the part reviewers should weigh, because it cuts against the change.

The eighth add-back is a catch-all — "gross receipts from any other source" — broad enough on its face to reach in-kind benefits. DOR's Senior Circuit Breaker page relies on it, and instructs filers to include food stamps twice:

Cash public assistance (Schedule CB, Line 6) - Includes food stamps and welfare…

Food stamps - See cash public assistance above

DOR's own exclusion list confirms which clause it is leaning on. It exempts "Payments, in-kind payments, or monies received that are otherwise not defined as: … Gross receipts" — that is, in-kind payments are excluded only when they are not gross receipts. DOR treats food stamps as gross receipts, so it reaches inclusion through item 8 rather than item 2.

DOR never mentions WIC.

§ 6(k)(1) item 2 § 6(k)(1) item 8 DOR
SNAP excludes arguably includes includes (explicit)
WIC excludes arguably includes silent

Why this PR follows item 2: reading the catch-all to sweep in in-kind assistance would leave the words "but not in-kind" with no work to do, and statutory text is not ordinarily read as surplusage. DOR's guidance is also internally inconsistent on the point — the same bullet that includes food stamps excludes discounted-rate fuel assistance as "in-kind assistance."

This is a judgment call, not a settled question. The parameter file documents both readings so the next reader sees the disagreement was deliberate, and the commented-out entries make re-enabling a one-line change if DOR clarifies or the team prefers to follow the agency.

Changes

File Change
disallowed_deductions.yaml Comment out snap and wic; document the item 2 / item 8 / DOR tension; point the statutory reference at malegislature.gov, which is fetchable (the mass.gov mirror returns 403 to non-browser clients)
ma_scb_total_income.yaml Two tests: in-kind SNAP and WIC are not re-added; cash assistance (SSI, MA state supplement, TANF) still is
changelog.d/ .fixed fragment

No other consumers: the parameter is read only at ma_scb_total_income.py:20. All eight cases in integration_ma.yaml already set snap: 0 and wic: 0, so no expected values shift.

Out of scope

Reading the full DOR page surfaced three unrelated gaps in this variable, none introduced here:

  • Total income starts from ma_gross_income, not AGI. DOR's formula is "Massachusetts adjusted gross income + all other income excluded from Massachusetts gross income − exemptions," and the exemption list includes "certain deductions reported on Massachusetts Schedule Y, Lines 1 through 10." Starting from gross income skips those, overstating total income and understating the credit. ma_part_b_agi already applies them.
  • tax_exempt_retirement_distributions is not re-added, though DOR lists "Previously taxed income distributions … IRA/Keogh, Annuity, Stock bonus, Pension, Profit sharing plan."
  • Several other DOR add-backs are unmodeled: workers' compensation, sick pay and disability income paid in lieu of wages, gifts, return of capital, gains on sale of a personal residence, and tax-exempt dividends (no variable exists for the last).

Test plan

  • 2 new tests in ma_scb_total_income.yaml
  • make format clean, ruff passes
  • CI passes

hua7450 and others added 3 commits August 6, 2026 15:52
M.G.L. c.62 s.6(k)(1) defines "taxpayer's total income" as AGI increased
by "cash, but not in-kind, public assistance". SNAP and WIC are in-kind,
so they do not belong in the add-back list. Counting them overstated
ma_scb_total_income, which both raised the property-tax phase-in floor
and could breach the max-income cliff, understating a refundable credit.

Fixes #9249

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Keep snap and wic commented out in the Senior Circuit Breaker
disallowed_deductions list rather than deleted, and record why.

M.G.L. c.62 s.6(k)(1) item 2 re-adds "cash, but not in-kind, public
assistance", excluding SNAP and WIC. Item 8, the "gross receipts from
any other source" catch-all, is broad enough to reach them, and DOR
relies on it: "Cash public assistance (Schedule CB, Line 6) - Includes
food stamps and welfare." DOR never mentions WIC.

We follow item 2, since reading item 8 to sweep in in-kind aid would
make "but not in-kind" surplusage.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@hua7450
hua7450 marked this pull request as ready for review August 7, 2026 15:18
@hua7450
hua7450 requested a review from DTrim99 August 7, 2026 18:37
@DTrim99

DTrim99 commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Program Review — multi-agent audit

PR #9250 — MA Senior Circuit Breaker: stop adding in-kind SNAP/WIC to "total income"

Scope

The PR removes snap and wic from the Senior Circuit Breaker (SCB) "total income" add-back list (disallowed_deductions.yaml) — commenting them out (not deleting) with an inline statute-vs-DOR tension note, adding two YAML test cases to ma_scb_total_income.yaml, and adding a .fixed changelog fragment. ma_scb_total_income sums ma_gross_income + add-backs − exemptions; the credit ("total income" measure) drives eligibility and amount under M.G.L. c.62 §6(k)(1).

  • CI: 31/31 pass (orchestrator).
  • Branch: 3 ahead / 11 behind main.
  • Files (in scope): 1 parameter YAML, 1 test YAML, 1 changelog fragment. No variable edits.
  • Sources web-verified (no PDF audit): §6(k)(1) full text retrieved from malegislature.gov (200); DOR SCB guidance retrieved via Wayback raw snapshot (mass.gov 403s tooling — confirms the PR's stated reason for repointing). Standalone Schedule CB PDF not independently retrieved (host 403).

Interpretation verdict (the crux)

DEFENSIBLE — leaning PREFERABLE for WIC, DEFENSIBLE-but-contested for SNAP. This is a statutory-interpretation judgment call, not a value error to "fix."

The surplusage argument (sound). §6(k)(1) item 2 adds back "cash, but not in-kind, public assistance." The commas set off "but not in-kind" as an interruption within a single list item — the item is "cash … public assistance," modified by "but not in-kind" (verified against the retrieved statute; this is the correct grammatical parse). If item 8's residual ("gross receipts from any other source") were read to sweep in-kind public assistance back in, the express "but not in-kind" carve-out becomes pure surplusage. The canon against surplusage plus specific-governs-general (item 2 is the specific public-assistance provision; item 8 is residual) both cut the author's way. SNAP and WIC are in-kind public assistance; on the statute alone, they are excluded. This is the more natural reading, not a fringe one.

WIC removal is better-grounded than SNAP. DOR never mentions WIC anywhere on its page — there is no administered practice to mirror, so removing WIC has no countervailing agency-practice cost.

The DOR administered-practice counterargument (real, but weaker here). DOR's guidance explicitly instructs filers to include food stamps ("Cash public assistance … Includes food stamps and welfare"), anchoring inclusion in the item-8 "gross receipts" bucket. A model whose purpose is to predict the credit a filer actually receives can legitimately mirror what the assessing agency instructs, and PolicyEngine often follows administered practice where statute and practice diverge. That case has genuine force for SNAP. It is weaker because DOR's own text is internally incoherent on the exact axis in dispute — it labels food stamps "cash public assistance" while, in the same bullet, excluding discounted-rate fuel assistance as "in-kind … exclude it." And DOR grounds inclusion in item 8, precisely the provision the surplusage canon forecloses. No MA case law / 830 CMR / TIR directly construing item 2 vs item 8 for in-kind assistance was located.

Author handled the tension well. The author disclosed the statute-vs-DOR conflict openly in an inline note, kept the entries commented (not deleted) for a one-line re-enable, and cited the statute precisely.

Consequence (microsim-affecting). Removing the add-backs lowers ma_scb_total_incomehigher/broader SCB credit, and more filers under the income ceiling. SNAP is modeled/imputed for a large share of low-income senior households (WIC less so), so MA senior households with modeled SNAP near the income ceiling will see higher credits or newly qualify — an eligibility-flip at the margin that shifts aggregate MA SCB cost/eligibility upward. This direction is the intended effect of the statute reading; it is the opposite of a conservative modeling default, so the team should expect the aggregate shift. (Direction reported per the microsim rule; magnitude not prescribed.)

Verified correct

  • Statute quoted accurately. Item 2 "cash, but not in-kind, public assistance" is verbatim; the single comma-interrupted-item parse is correct. Item 8 "gross receipts from any other source other than assistance received by this subsection" (catch-all) matches. Item 3 "tax-exempt interest and dividends" matches the note's aside. No misquote found.
  • Tests isolate the change and hand-verify. "In-kind not re-added": 25,000 gross + 0 add-backs − 700 aged = 24,300 ✓ (would be 28,500 on main — genuinely fails without the change). "Cash still re-added": 25,000 + 2,000 SSI + 500 MA supplement + 1,000 TANF − 700 aged = 27,800 ✓. Reconstructed and run through Simulation independently — both outputs reproduced exactly. Entity/period correct (TaxUnit/YEAR at period: 2021; ma_gross_income on tax_unit, snap/tanf on spm_unit, wic/ssi/ma_state_supplement/age on person; MONTH→YEAR conversion handled by harness).
  • YAML parses; structure intact. yaml.safe_load yields a clean 7-member list (social_security, tax_exempt_unemployment_compensation, tax_exempt_pension_income, tax_exempt_interest_income, ssi, ma_state_supplement, tanf); # - snap / # - wic are comment lines, not values; no dangling key. The 18-line statutory note block is valid YAML. Consumer add(tax_unit, period, scb.income.disallowed_deductions) simply drops two addends — no KeyError.
  • Reference repoint is an upgrade. Vague mass.gov catch-all replaced with the permanent malegislature.gov §6(k)(1) cite (200, resolves; title carries the precise § 6(k)(1) even though the site has no per-subsection anchor). Both refs use the required title+href dict form.
  • Changelog present and typed. changelog.d/ma-scb-in-kind-assistance.fixed.md; .fixed is appropriate for a behavior correction; cites §6(k)(1).

Critical (must fix)

None.

Should address

  1. Add an end-to-end SCB credit-outcome test driven by nonzero upstream SNAP/WIC. The two new tests only touch ma_scb_total_income; nothing asserts that excluding SNAP/WIC moves an actual ma_senior_circuit_breaker dollar amount. integration_ma.yaml is a TAXSIM35-parity contract suite (snap:0/wic:0 on every case) so it can't hold nonzero SNAP. Natural home: a new case in ma_senior_circuit_breaker.yaml that supplies nonzero snap/wic upstream and lets ma_scb_total_income derive. HIGH value, non-blocking.
  2. Add an income-ceiling boundary case where excluding SNAP flips the credit from $0 to positive. This is the exact scenario the PR fixes and the one place the change moves a dollar amount: engineer income so ma_scb_total_income lands just below the SINGLE ceiling with snap/wic excluded, but would exceed it if the ~4,200 in-kind were re-added, then assert a nonzero ma_senior_circuit_breaker. Strongest guard against silent regression. HIGH value, non-blocking.
  3. (Optional) Open a tracking issue for the ma_gross_income-vs-AGI base gap. Pre-existing and correctly out of scope, but the most material of the disclosed gaps (see Suggestions) and a reasonable follow-up. Also consider making the SNAP fork a documented decision (linked issue capturing the statute-vs-DOR fork and the upward cost direction) given its population-level effect.

Suggestions

  1. Add an interaction case with SNAP/WIC and cash assistance both nonzero. e.g. snap 3,000 + wic 1,200 + ssi 2,000 + tanf 1,000, asserting only the 3,000 cash is re-added — catches a mistake where the two behaviors interact (an accidental re-add gated on "any assistance present"). Low effort.
  2. Commented-out vs delete — convention observation (not prescriptive). The repo leans toward deleting dead entries (git history preserves them) or gating with a dated/in_effect toggle rather than leaving commented list members. Keeping # - snap / # - wic with an explanatory note is defensible here because the note documents a genuine, standing statute-vs-DOR tension a future editor needs. For a standing, contested interpretation with cost impact, a documented parameter toggle or linked issue is the more durable engineering choice. Noted, not blocking.
  3. Other disclosed out-of-scope gaps — confirmed pre-existing, correctly excluded.
    • Variable starts from ma_gross_income, not AGI (comment says an "equivalent path"); capital-loss/gains add-backs handled implicitly. Most material; candidate for the tracking issue above.
    • tax_exempt_retirement_distributions exists in the codebase but is not in the add-back list, though §6(k)(1) item 1 covers "retirement … annuities." Low-cost follow-up since the variable already exists.
    • Tax-exempt dividends (§6(k)(1) item 3) have no variable to reference; the inline note already documents this. Fine to leave.
    • The consumer variable ma_scb_total_income.py still references the old mass.gov catch-all URL (file untouched by this PR); could be repointed to the permanent cite for consistency.
    • DOR secondary href 403s tooling (same failure mode the statute link fixed) and could not be independently corroborated this run — the statute is correctly the authoritative cite; consider annotating the DOR link as browser-only or replacing it with a working snapshot. Schedule CB PDF not independently read (host 403).

Validation summary

Check Result
Regulatory / interpretation PASS — statute quoted accurately; interpretation DEFENSIBLE (WIC preferable, SNAP contested); no code/reference defect
References PASS w/ note — statute reaches (200) & corroborates direction; DOR link 403s (secondary, unverified this run)
Code patterns PASS — YAML parses to intact 7-member list; consumer add() unaffected; 0 should-address
Entity / period PASS — TaxUnit/YEAR at 2021; inputs on correct entities; MONTH→YEAR handled
Test coverage PASS w/ gaps — change isolated (fails without it) + positive control; missing credit-outcome & boundary-flip cases (non-critical)
CI PASS — 31/31

Review severity: COMMENT

Recommend COMMENT. Zero criticals (no code defect, no value mismatch, statute quoted accurately, tests isolate and hand-verify) so not REQUEST_CHANGES; but the interpretation is a defensible statutory judgment call the maintainers should consciously ratify — follow-statute (exclude in-kind, the model's current choice) vs follow-DOR (include food stamps for filer-experience fidelity) — given the live DOR conflict and the upward microsim effect. This is a decision to sign off on, not a bug.

Next steps

  • /fix-pr 9250 for the two should-address test additions (end-to-end SCB credit-outcome case with nonzero upstream snap/wic; income-ceiling boundary-flip case).

🤖 Generated by /review-program (Claude Code)

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

Address minor nits, then ready

hua7450 and others added 2 commits August 7, 2026 16:19
- Add a 2025 boundary-flip case to ma_senior_circuit_breaker.yaml: a
  single 70-year-old whose derived total income (71,300) sits below the
  75,000 SINGLE ceiling only because 4,200 of in-kind SNAP and WIC is
  not re-added; re-enabling the add-back flips the credit from 870 to 0.
  Verified to fail with snap/wic restored to the parameter list.
- Add an interaction case to ma_scb_total_income.yaml with in-kind and
  cash assistance both nonzero, asserting only the cash is re-added.
- Repoint ma_scb_total_income.py's reference from the 403-ing mass.gov
  mirror to malegislature.gov, matching the parameter file.
- Note the documented DOR conflict in the changelog fragment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (2d1f58a) to head (f2f4de8).
⚠️ Report is 7 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main     #9250   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         1    -2     
  Lines           68        26   -42     
=========================================
- Hits            68        26   -42     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@hua7450
hua7450 requested a review from DTrim99 August 7, 2026 20:31
@hua7450
hua7450 merged commit 74a13c1 into main Aug 8, 2026
33 checks passed
@hua7450
hua7450 deleted the ma-scb-in-kind-assistance branch August 8, 2026 02:24
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