Skip to content

Leave dependents' income out of Wisconsin homestead credit household income - #10191

Open
MaxGhenis wants to merge 4 commits into
mainfrom
wi-homestead-dependent-income
Open

MaxGhenis wants to merge 4 commits into
mainfrom
wi-homestead-dependent-income

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

What was wrong

A Wisconsin homestead credit household is "a claimant and an individual related to the claimant as husband or wife" (Wis. Stat. 71.52(4)). Household income is "all income received by all persons of a household" (71.52(5)), less $500 for each dependent. The 2024 Schedule H instructions add two points:

  • "A household is a claimant and the claimant's spouse living in the claimant's homestead" (file page 8).
  • "do not include your children's social security or SSI benefits, whether paid to them directly or to you on their behalf" (file page 13; the 2020 instructions say the same on file page 13). Tax 14.03(5)(a)6 agrees.

PolicyEngine got two things wrong:

  • Household income. It added the homestead income sources over every tax unit member, so a dependent child's survivor benefits, SSI or 2020 excluded unemployment compensation raised the claimant's household income. The list's Social Security item, tax_exempt_social_security, is a tax-unit amount built from tax_unit_social_security, which includes dependents' benefits.
  • Earned income test. wi_homestead_eligible counted a dependent's earnings toward the earned income test. The instructions say "Only one spouse must have earned income to qualify for the homestead credit. The spouse that meets this definition must be the claimant" (file page 10).

Engine output on main:

TY Household Variable main This PR
2024 Claimant 70, Social Security 18,000, pension 6,000, rent 9,000 (heat included); dependent grandchild 17 with survivor benefits 12,000 wi_homestead_income 35,500 23,500
wi_homestead_eligible false (over 24,680) true
wi_homestead_credit 0 82.88
2020 Claimant 66, Social Security 15,000, pension 5,000; dependent child with UC 8,000 (excluded under IRC 85(c)) and SSI 3,000 wi_homestead_income 30,500 19,500
2024 Claimant 40 with UC 6,000 and no earnings; dependent child with wages 4,000 wi_homestead_eligible true false

What changes

All of these follow from Wis. Stat. 71.52(4): the household is the claimant and the claimant's spouse.

  • Household income. wi_homestead_income adds the sources with tax_unit_non_dep_add, so only the head's and spouse's person-level amounts count. tanf is the W-2 payment the claimant receives, an SPM unit amount, and is added as before.
  • Social Security. The sources list takes filer_tax_exempt_social_security, the existing head-and-spouse version of tax_exempt_social_security.
  • Capital loss add-back. wi_homestead_disqualified_losses adds back filer_loss_limited_net_capital_gains (Schedule 4 line 3). A dependent's gains and losses no longer move household income.
  • Property taxes and rent. wi_homestead_property_tax counts only the head's and spouse's property taxes (71.52(7): a homestead "owned by the claimant or a member of the claimant's household") and rent (71.52(8): "paid … by a claimant and his or her household").
  • Eligibility. wi_homestead_eligible tests each of the head and spouse as the claimant. The claimant must be 18 or older, and also 62 or older, disabled, or have their own earned income (71.52(1g); 2024 instructions, file pages 4 and 10). Before, the code summed every member's earnings and split the age and earnings tests across people:
    • a dependent's wages qualified the unit;
    • a spouse's self-employment loss could cancel the other spouse's wages;
    • a 17-year-old earner with a 19-year-old non-earning spouse passed.

Invariants

  • Leak removed. Adding any income, property tax or rent to a tax unit dependent leaves wi_homestead_income, wi_homestead_property_tax and the claimant's eligibility unchanged. The one exception is the dependent's effect on W-2 (TANF) eligibility, which counts the family's income.
  • Unchanged without dependents. For a tax unit with no dependents, the credit is unchanged, with two exceptions:
    • negative net Social Security (a repayment), which tax_unit_social_security_for_taxability floors at zero;
    • married units, where each spouse is now tested separately.

How it was checked

  1. All-state household sweep, TY2020–2026. It is the same sweep as Leave dependents' unemployment compensation off California, Rhode Island and Wisconsin filer returns #10187, with a 17-year-old dependent who has UC 10,000 or survivor benefits 12,000. With this PR merged on top of Leave dependents' unemployment compensation off California, Rhode Island and Wisconsin filer returns #10187, Fix the 2020 unemployment compensation exclusion: cutoff test, per-spouse cap, dependents #10175 and Leave dependents' capital income out of state lines on the filers' return #9894/Leave dependents' own items out of DC, Delaware and Ohio subtractions #9939, every Wisconsin homestead credit decrease caused by the child's Social Security, SSI or 2020 UC goes away. That is 18 rows across 2020–2026.

    The rows that remain are for a 15,000 earner whose family loses W-2 (Wisconsin Works) when the child's income counts. W-2 is the claimant's household income (Tax 14.03(4)(b)3.b), so losing it raises the credit. Results: ~/reviews/dependent-uc-state-lines-2026-10-12/movers_after_wi.txt.

  2. Tests. New cases come from the 2024 Schedule H:

    • wi_homestead_income Cases 6–7;
    • wi_homestead_eligible Cases 8–9;
    • wi_homestead_credit Case 5.

    4 fail on main and pass here, and the WI integration and income tax files pass. Round 2 adds 6 more cases:

    • wi_homestead_income Cases 8–9;
    • wi_homestead_property_tax Cases 2–3;
    • wi_homestead_eligible Cases 10–11.

    All 6 fail on main. Cases 10 and 11 also fail under the round 1 code. The credit case asserts the continuous formula's 82.88. Schedule H's Tables A and B round to bands and give 84, as for the existing credit tests.

Hub microsimulation impact (current head)

This is a real microsimulation on the default dataset, comparing main at the merge base de3815f4cc with this PR. The runs went one at a time under the shared heavy-job lock, and the sums are weighted.

  • 2024 ran at a576e21681. Commits since then change only tests and the changelog.
  • 2026 is the earlier run at 4c0b18e1f1, before the round 2 fixes to capital losses, property tax and rent, and eligibility. The 2026 re-run at the current formulas started, but I withdrew it before its PR side under the host disk pause (relayed by Fleet ops at 03:07Z). It will replace this column when the pause lifts.
Output 2024 change (current) 2024 records changed (weighted) 2026 change (4c0b18e1f1) 2026 records changed (weighted)
wi_homestead_income -1.35bn 18 (105,621) -1.46bn 18 (107,363)
wi_homestead_eligible +9,089 6 (17,339) +22,041 7 (30,428)
wi_homestead_credit +34.31M 4 (36,949) +35.91M 4 (37,559)
wi_homestead_property_tax -1,563 4 (2) not run not run
wi_homestead_disqualified_losses +0 0 (0) not run not run
wi_refundable_credits +34.31M 4 (36,949) +35.91M 4 (37,559)
wi_income_tax -34.31M 4 (36,949) -35.91M 4 (37,559)
filer_tax_exempt_social_security +0 0 (0) +0 0 (0)
state_income_tax -34.31M 4 (36,949) -35.91M 4 (37,559)
income_tax +0 0 (0) +0 0 (0)
household_net_income +34.31M 4 (36,949) +35.91M 4 (37,559)
household_benefits +0 0 (0) +0 0 (0)

What the 2024 re-run shows:

  • The round 2 fixes moved no credit record. The credit change (+34.31M, 4 records) is identical to the round 1 run at 4c0b18e1f1.
  • Property tax. wi_homestead_property_tax changes for 4 records whose combined weight is about 2. These are dependents' rent or property taxes, and the credit is unchanged for all 4.
  • Capital losses. wi_homestead_disqualified_losses changes for no record.
  • Household income. It falls for every changed record, because dependents' Social Security, SSI and other tax-exempt amounts leave it.
  • Eligibility. wi_homestead_eligible turns false for 5 records. Lower household income can only add eligibility, so these come from the claimant test: the head and spouse are under 62, not disabled and without their own earnings, and the unit qualified only through a dependent's. It turns true for 1 record, whose household income fell under the limit.
  • Credit. The one decrease is a record that lost eligibility. The other three changes are increases, up to the 1,168 maximum (1,460 x 80%).

Comparison files are in fixes/10191-impact/ on the hub host (compare.2024.json, and prev/ for the earlier head).

Review

The Codex review lanes were held until 06:00Z and the Claude lanes were closed, so per the fallback rule an independent in-session Opus 5.5 reviewer reviewed 4c0b18e1f1.

Round 1: REQUEST_CHANGES.

  • Major:
    • a dependent's capital gains and losses still moved household income;
    • property taxes and rent counted dependents.
  • Minor: eligibility summed earnings and split the age and earnings tests across spouses.
  • Nit: the invariant wording for negative Social Security.

a576e21681 addresses all of them. Round 2: APPROVE at a576e21681.

The reviewer re-ran the round 1 probes and checked:

  • that no dependent income, loss, rent or property tax moves household income or the property tax amount;
  • single filers;
  • negative wages;
  • 62-year-old spouses and dependents.

It also confirmed that only wi_homestead_credit and wi_homestead_income read the changed variables. In round 2 it flagged that Case 11 lacked explicit head and spouse roles, so the 17-year-old was inferred as a dependent, and that the changelog was too narrow. 509e5c9d71 fixes both.

axiom: TheAxiomFoundation/rulespec-us#1726 queued (rulespec-us us-wi has no homestead credit module; the issue is dispatch-ready with us-wi/statute/71.52 from the pinned release and companion tests from these YAML cases)

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 12, 2026 20:01
…income

A Wisconsin homestead household is the claimant and the claimant's spouse
(Wis. Stat. 71.52(4)); Schedule H tells claimants to leave out children's
social security and SSI. wi_homestead_income summed the nontaxable sources
over every tax unit member, and wi_homestead_eligible counted a dependent's
earnings toward the earned income test. Sum only the head and spouse with
tax_unit_non_dep_add.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d tests

tax_exempt_social_security is a tax-unit amount that includes dependents'
benefits, so the homestead list now takes filer_tax_exempt_social_security.
New cases from the 2024 Schedule H instructions: a grandchild's survivor
benefits (Case 6, credit Case 5), a child's SSI and 2020 excluded UC (Case 7),
and the earned income test (eligibility Cases 8-9). Four fail on main.

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

codecov Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (909176a) to head (509e5c9).
⚠️ Report is 442 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main    #10191   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         4           
  Lines           76        76           
  Branches         2         1    -1     
=========================================
  Hits            76        76           
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.

MaxGhenis and others added 2 commits October 12, 2026 22:30
… eligibility

Wis. Stat. 71.52(4) limits the household to the claimant and spouse:
- wi_homestead_disqualified_losses adds back filer_loss_limited_net_capital_gains,
  so a dependent's gains and losses no longer move household income.
- wi_homestead_property_tax counts only the head's and spouse's property taxes
  (71.52(7)) and rent (71.52(8)).
- wi_homestead_eligible tests each of the head and spouse as the claimant:
  18 or older, and 62 or older, disabled or with their own earned income
  (71.52(1g); 2024 Schedule H instructions, pages 4 and 10). Summed earnings
  let a spouse's self-employment loss cancel the other's wages.

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

MaxGhenis commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor Author

Hand-off to the US + core hub

Head: 509e5c9d71

Review. The Codex review lanes were held until 06:00Z and the Claude lanes were closed, so per the fallback rule an independent in-session Opus 5.5 reviewer reviewed this PR:

  • Round 1 at 4c0b18e1f1: REQUEST_CHANGES.
    • a dependent's capital gains and losses still moved household income;
    • property taxes and rent counted dependents;
    • eligibility was split across spouses.
  • Round 2 at a576e21681: APPROVE, after those were fixed.
  • Round 3 at 509e5c9d71: APPROVE, after Case 11 got explicit head and spouse roles and the changelog was widened.

The verdict file is ~/reviews/dependent-uc-state-lines-2026-10-12/review/verdict_10191.md on the hub host.

Passed locally:

  • the five homestead YAML files, 36 cases;
  • the related WI, household and contrib files, 27 cases.

10 of the 11 new cases fail on main; eligibility Case 9 is a control.

CI. It is running on 509e5c9d71; when last checked, 1 check had passed and 25 were pending, with no failures.

Impact. One item is still owed, and the hub is asked to run it. In the body, 2024 is at a576e21681, whose formulas match the current head; 2026 is still the earlier run at 4c0b18e1f1. I withdrew the 2026 re-run before its PR side under the disk pause relayed by Fleet ops at 03:07Z; it held no lock.

When the Disk manager reports more than 60 GB free:

  1. Run zsh ~/reviews/us-hub/scripts/impact_queue.sh ~/reviews/us-hub/fixes/impact-queue/spec-2026-10-13-10191b.txt (years 2024 and 2026).
  2. Run python3 ~/reviews/us-hub/scripts/impact_body.py 10191 2024 2026 --apply, which replaces the hand-written section.

In 2024 the round 2 fixes moved no credit record, so I expect 2026 to be close to the earlier +35.9M. That is a guess; it has not been run.

Order. This PR is independent of #10187 and #10175.

Merge. The PR needs an approving review (REVIEW_REQUIRED), so land it on the gates with --admin --match-head-commit once CI is green and the impact section is current.

Axiom. TheAxiomFoundation/rulespec-us#1726 is queued.

Follow-ups. Other states' credit income lists still count dependents' Social Security through tax_exempt_social_security, which includes them (CO, ME, MI, MO, WV). That is proposed as a separate session.

@DTrim99

DTrim99 commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Leave dependents' income out of Wisconsin homestead credit household income

PR #10191 (author: MaxGhenis, head 509e5c9d71, merge-base de3815f4cc). 11 files (+358/−25), 4 commits. Axiom: TheAxiomFoundation/rulespec-us#1726 queued.

Summary

The PR applies Wis. Stat. § 71.52(4), under which the homestead credit "household" is the claimant and spouse, to four variables:

  • wi_homestead_income:
    • The income sources are now added with tax_unit_non_dep_add, so a dependent's person-level amounts (SSI, tax-exempt interest, pensions and unemployment compensation) drop out.
    • The Social Security item becomes filer_tax_exempt_social_security, which already exists on main.
  • wi_homestead_disqualified_losses: the Schedule 4 line 3 capital-loss add-back uses filer_loss_limited_net_capital_gains.
  • wi_homestead_property_tax: only the head's and spouse's real_estate_taxes and rent count, following § 71.52(7) and (8).
  • wi_homestead_eligible:
    • The head and the spouse are each tested as the claimant: 18 or older, and also 62 or older, disabled, or with their own earned income.
    • Previously the code pooled every member's earnings and split the age and earnings tests across people.
  • Tests: 11 new YAML cases, plus a renamed input (filer_loss_limited_net_capital_gains) in two existing disqualified-loss cases.

The policy is right:

  • Law. The statute, Tax 14.03(5)(a)6, and the 2020 and 2024 Schedule H instructions all exclude a dependent's income, rent and property taxes. The 2024 instructions also require the earner to be the claimant.
  • No double counting. PolicyEngine's tax-unit AGI already leaves dependents out, so the new sums count each item once.
  • Hand checks. I checked all 21 expectations in the 11 new cases by hand, and they all hold. Ten of the new cases fail on the merge-base; eligibility Case 9 is a control.
  • Local runs. The five homestead files pass locally at the head (36/36) and on the merged tree (42/42, with integration.yaml and wi_income_tax.yaml).
  • CI is green, and the merge into main is clean.

One should-fix item remains: no test covers the spouse side of the new head/spouse logic. I removed the spouse's earned-income and age-62 paths and restricted household income to the head, and every WI test still passed. There are also five suggestions.

Critical (must fix)

None.

Should address

1. No test covers the spouse side of the new head/spouse logic.

  • Where:

    • variables/.../homestead/wi_homestead_eligible.py:28 (spouse_earnings) and :36-40 (spouse_qualifies)
    • variables/.../homestead/wi_homestead_income.py:28: tax_unit_non_dep_add must keep the spouse's person-level items
  • The law:

    • 2024 Schedule H instructions, Question 1d (p. 10): "Only one spouse must have earned income to qualify for the homestead credit. The spouse that meets this definition must be the claimant."
    • Step 1(a)1 (p. 4): "Are age 62 or older as of December 31, 2024 (in order to meet this qualification you must be the claimant)?"
    • 2024 Schedule H (p. 1): "Household Income Include all 2024 income as listed below. If married, include the incomes of both spouses."
  • What the tests cover:

    • Every new eligibility case turns on the head. In Case 10 the earner is person1, who is the head. In Case 11 the 19-year-old spouse has no earnings.
    • The only case where the spouse qualifies is the pre-existing unit test 6, where the spouse is disabled.
    • No income case gives the spouse SSI, tax-exempt interest, unemployment compensation or a pension.
    • Property tax Case 3 does cover the spouse's property taxes.
  • Mutation check. On a copy of the head I made three changes:

    • removed | (spouse_earnings > 0) from spouse_qualifies
    • removed (spouse_age >= min_elderly_age) from spouse_qualifies
    • replaced the income sum with a head-only sum of the person-level sources

    All 41 cases still pass: the five homestead files, integration.yaml and wi_income_tax.yaml. So do the other 35 WI-related cases: wi_income_tax_before_refundable_credits.yaml, the two retirement-exclusion files, household_state_income_tax.yaml and the WI contrib reform test.

  • Why it matters. A later refactor could deny every married couple in which only the spouse works or only the spouse is 62 or older, and CI would stay green. That is the case the instructions single out.

  • Fix. Add three cases. I reproduced these values on the head, and the mutant gives the value in brackets. Set explicit roles, ssi: 0 for anyone without SSI, and tanf: 0 on the SPM unit, as Cases 8–9 do.

    • wi_homestead_eligible, 2024. Head 40 with no income; spouse 38 with wages 6,000. Expected true (mutant false). Household income is 6,000.
    • wi_homestead_eligible, 2024. Head 50 with no income; spouse 65 with Social Security 9,000. Expected true (mutant false).
    • wi_homestead_income, 2024. Head 70 with pension 6,000 and Social Security 6,000; spouse 64 with Social Security 4,000 and SSI 1,000.
      • AGI is 6,000: provisional income is 6,000 + 5,000 = 11,000, under the 32,000 joint base, so no benefits are taxable.
      • Household income = 6,000 + 10,000 + 1,000 = 17,000 (mutant 16,000).

Suggestions

1. Bring rulespec-us#1726 up to the PR's current scope.

  • When it was written. The issue was filed at 00:19 UTC, during round 1. It lists three mistakes: dependents' tax-exempt items, dependents' Social Security, and dependents' earnings in the earned income test.
  • Fixes it doesn't cover. The head (round 2, a576e21681) also fixes:
    • Property taxes and rent of household members only. § 71.52(7) covers taxes "levied on a homestead owned by the claimant or a member of the claimant's household", and § 71.52(8) covers rent "paid in cash or its equivalent by a claimant and his or her household". See property tax Cases 2–3.
    • The filers' capital loss add-back (§ 71.52(1e)(b); Schedule 4 line 3). See income Cases 8–9.
    • Per-claimant age and earned income tests. See eligibility Cases 10–11.
  • Wrong section in the issue. It says "If the encoder also takes the 71.53 eligibility rule". Only the under-18 bar is in § 71.53(2)(c). The 62-or-older, disabled and earned-income tests are in § 71.54(1)(dm), (em) and (gm).
  • Fix:
    • Add outputs for (7) and (8). They are in the same pinned us-wi/statute/71.52 row.
    • Name § 71.53(2)(c) and § 71.54(1)(dm)–(gm) for eligibility.
    • Add the round 2 companion tests. All of them come from the 2024 instructions (pp. 4, 7 and 10) and the statute.

2. Cite the eligibility statute and correct two test comments.

  • Variable reference. wi_homestead_eligible.py:9-14 cites only the LFB paper and the 2024 instructions.
    • Add § 71.53. Subsection (2)(c): no claim if "The claimant was under 18 years of age at the close of the year to which the claim relates."
    • Add § 71.54.
      • (1)(dm): "no credit may be allowed ... unless the claimant or the claimant's spouse is over the age of 61"
      • (1)(em): "unless the claimant is disabled"
      • (1)(gm): "no credit may be allowed ... if the claimant had no earned income in the taxable year"
  • wi_homestead_eligible.yaml:144-146 cites "Wis. Stat. 71.52(1g)" for "18 or older and 62 or older, disabled or have their own earned income". Subsection (1g) only defines earned income. Cite § 71.53(2)(c) and § 71.54(1)(dm)–(gm) instead.
  • wi_homestead_eligible.yaml:99 says "The claimant or the claimant's spouse must have earned income". That describes the old pooled rule. The code and p. 10 require the earner to be the claimant. Suggested wording: "The claimant must have their own earned income; either spouse may be the claimant."
  • Optional. The new statute URLs point at the whole section. The subsection anchors /52/4, /52/7 and /52/8 would match wi_homestead_disqualified_losses.py, which uses /52/1e.

3. Document that a dependent aged 62 or older can file their own claim, which PolicyEngine does not model.

  • The law.
    • § 71.53(2)(d) bars a claimant who "was claimed as a dependent for federal income tax purposes by another person ... but this limitation shall not apply if the claimant was 62 years of age or older".
    • The 2024 instructions repeat this in Step 2(a) (p. 4).
  • What happens now.
    • In property tax Case 2, the 70-year-old dependent's $2,000 of property taxes now goes to no one.
    • Leaving it off the filer's claim is correct under § 71.52(7), but PolicyEngine has no claim for the dependent.
    • Before the PR, the filer received it, which was also wrong.
  • Fix: a comment in wi_homestead_property_tax.py (or a follow-up issue) noting the unmodeled claim. This isn't blocking.

4. Negative net Social Security now floors at zero.

  • The PR body discloses this.
  • The law.
    • § 71.52(6): "Amounts not included in adjusted gross income but added to 'income' under this subsection in a previous year and repaid may be subtracted from income for the year during which they are repaid."
    • 2024 instructions (p. 12): "Nontaxable income that was included in household income in a prior year and was required to be repaid in 2024 may be subtracted from household income".
  • Effect.
    • Take a single filer with net Social Security of −1,000. tax_exempt_social_security was −1,000. filer_tax_exempt_social_security is 0, because tax_unit_social_security_for_taxability floors at zero.
    • So household income is now 1,000 higher (probe at the head).
    • This is rare in the data.
  • Fix: optionally subtract the filers' negative net benefits, or add a comment in sources.yaml noting that the floor is deliberate.

5. Pre-existing, outside this diff: S corporation income counts as earned income.

  • Where: eligible/earnings_sources.yaml lists partnership_s_corp_income.
  • The law. § 71.52(1g) defines earned income as "wages, salaries, tips, and other employee compensation ... plus the amount of the claimant's net earnings from self-employment". An S corporation shareholder's pass-through share is not net earnings from self-employment.
  • Why raise it here. The PR now tests this list per claimant and cites § 71.52(1g).
  • Fix: a separate PR or issue.

Verified correct

  • Statute (Wis. Stat. § 71.52):

    • (4): "'Household' means a claimant and an individual related to the claimant as husband or wife."
    • (5): "all income received by all persons of a household in a calendar year while members of the household, less $500 for each of the claimant's dependents".
    • (1): "When 2 individuals of a household are able to meet the qualifications for a claimant, they may determine between them as to who the claimant is." So either spouse may be the claimant.
  • Instructions:

    • Household. 2024 instructions p. 8: "A household is a claimant and the claimant's spouse living in the claimant's homestead. If you are single, you are a household, whether you live alone or with others."
    • Children's benefits. p. 13: "do not include your children's social security or SSI benefits, whether paid to them directly or to you on their behalf."
    • 2020. The 2020 instructions have the same text on p. 8 and p. 13, which covers income Case 7.
    • Administrative code. Tax 14.03(5)(a)6 (PDF p. 4) excludes "Social security or SSI payments received on behalf of a claimant's children or the children of the claimant's household."
  • Who is summed:

    • AGI. adjusted_gross_income already leaves dependents out:
      • irs_gross_income multiplies by ~is_tax_unit_dependent.
      • limited_business_loss, capital_losses_allowed_against_gains, limited_capital_loss and self_employment_tax_ald all exclude dependents.
      • So tax_unit_non_dep_add's fall-back to add for this tax-unit item is right.
    • Social Security. filer_tax_exempt_social_security = the filers' benefits − tax_unit_taxable_social_security. Together with AGI, that gives the filers' total benefits, which is Schedule H line 7 plus line 9b.
    • TANF. tanf still goes through add's SPM-to-tax-unit split, which is unchanged.
    • No overlap. No item is counted twice. The capital loss add-back uses the same filer-only Schedule D lines as AGI's loss deduction (Case 9).
  • Eligibility matches the statute:

    • It combines § 71.53(2)(c) with § 71.54(1)(dm)–(gm).
    • (dm) lets the age test be met by "the claimant or the claimant's spouse". A spouse over 61 is also over 18 and can be the claimant, so testing each spouse as the claimant gives the same answer.
    • The instructions say the same on p. 4: "you must be the claimant".
  • Probes at the head:

    • Own earnings net out. A head with wages 3,000 and their own self-employment loss of 5,000 is ineligible. This matches the instructions' Example 2 (p. 7): "$5,000 of wages and ($8,000) of net earnings from self-employment ... would not qualify".
    • Under-18 spouse. A 30-year-old head with no earnings whose 17-year-old spouse has wages is ineligible.
    • Disabled spouse. The unit is eligible.
    • Dependent's items. A dependent's tax-exempt interest, wages, self-employment loss, rental loss, 2024 unemployment compensation or tax-exempt pension leaves AGI, the add-back and household income unchanged.
    • Spouse's SSI is counted (5,000).
  • Hand checks (all 21 expectations in the 11 new cases; the main ones are below):

    Case Calculation Expected
    Credit 5 (2024) Household income 6,000 + 18,000 − 500 = 23,500. Rent 9,000 × 20% = 1,800, capped at 1,460. (1,460 − 15,440 × 8.785%) × 80% = 103.596 × 80% 82.88
    Credit 5, Schedule H tables Table A, 23,470–23,585 → 1,359 (p. 25); 1,460 − 1,359 = 101; Table B, 100–110 (p. 26) 84, as the comment says
    Income 6 (2024) Provisional income 6,000 + 9,000 < 25,000, so AGI is 6,000; 6,000 + 18,000 − 500 23,500
    Income 7 (2020) Head: 5,000 + 15,000 − 500; the child's 8,000 unemployment compensation and 3,000 SSI are left out 19,500
    Income 8 (2024) The child's −2,000 is not in AGI (6,000); add-back 0; 6,000 + 12,000 − 500 17,500
    Income 9 (2024) AGI 6,000 − 3,000 = 3,000; add-back 3,000 (the child's +2,000 is left out); 3,000 + 3,000 + 12,000 − 500 17,500
    Property tax 2 The dependent's 2,000 is left out; credit 0 0 / 0
    Property tax 3 300 + 6,000 × 20%; the dependent's 1,000 rent is left out 1,500
    Eligible 8 Head 40 with unemployment compensation only, so no earned income (p. 7); the dependent's wages don't count false
    Eligible 9 Head's wages 4,000; household income 3,500 true
    Eligible 10 Head's wages 5,000 > 0; household income −3,000 + 8,000 add-back = 5,000 true
    Eligible 11 Head 17 is under 18; spouse 19 has no earned income false
  • The tests are functional.

    • I ran the head's five test files against the merge-base code. Eleven cases fail: every new case except eligibility Case 9, plus disqualified-loss Case 1, whose input was renamed to filer_loss_limited_net_capital_gains.
    • Eligibility Case 9 passes on both, as the control.
  • Callers.

    • wi_homestead_income is read only by wi_homestead_credit and wi_homestead_eligible.
    • wi_homestead_property_tax is read only by wi_homestead_credit.
    • The credit feeds wi/.../credits/refundable.yaml, retirement_income_exclusion_refundable.yaml and state_property_tax_credits.yaml.
    • The PR doesn't change filer_tax_exempt_social_security or filer_loss_limited_net_capital_gains, so their other users (the CRFB surtax, net investment income, Michigan household resources) are unaffected.
  • Code-health ratchet (test_no_group_variables_in_person_adds.py): no interaction.

    • The ratchet scans adds/subtracts on Person variables.
    • The changed homestead/income/sources list is read by a TaxUnit formula through tax_unit_non_dep_add, and its new entry is a TaxUnit variable.
    • The earnings sources go through add(person, ...), and all of them are person-level.
    • KNOWN_VIOLATIONS is untouched.
  • References and pages:

  • Changelog. changelog.d/wi-homestead-dependent-income.fixed.md is top-level, typed fixed, and describes all four changes.

  • Test periods are plain (2020, 2024).

  • Code style:

    • The code is vectorized (&/| on arrays) and uses tax_unit.sum over role masks.
    • No policy value is hard-coded, and the reference is a tuple.
  • Coverage. Codecov reports 100% of the changed lines covered.

Axiom line assessment

Valid queued.

  • The line: axiom: TheAxiomFoundation/rulespec-us#1726 queued.
  • The issue is OPEN and labelled pe-parity, created 2026-10-13 at 00:19 UTC. It has:
    • module path: us-wi/statutes/71.52.yaml
    • corpus citation: us-wi/statute/71.52 from the pinned release us-rulespec-2026-08-08-obbb-alien-snap
    • verbatim law: § 71.52(4)–(6)
    • required outputs: homestead_household_member, homestead_income_of_person and homestead_household_income
    • blocker: the billed signed-encoder run needs approval
    • companion tests A–D, taken from the 2024 Schedule H instructions and computed by hand rather than from PolicyEngine output
  • Gap. The issue matches the round 1 behavior only. It doesn't cover the round 2 fixes: property taxes and rent under (7)–(8), the filers' capital loss add-back, and the per-claimant tests under § 71.53(2)(c) and § 71.54(1)(dm)–(gm). It also attributes the eligibility rule to "71.53" (Suggestion 1).

CI status

All 28 checks pass (gh pr checks 10191, run 38338762863 on 509e5c9d71).

  • Where the homestead tests ran. Baseline states-shard-3 ran the five homestead files:
    • credit: 5 cases
    • disqualified losses: 8
    • eligibility: 11
    • income: 9
    • property tax: 3
  • Partner tests. The PR touches no partner test file, and the Household API Partners job passes.
  • Local run. policyengine-core 3.33.3 also passes these 36 cases at the head.

Branch status

  • Position: 4 commits ahead of PolicyEngine/main (35a94c3b02) and 22 behind; merge-base de3815f4cc.
  • Merge: git merge-tree --write-tree PolicyEngine/main 509e5c9d71 is clean (tree 8f661c2185).
  • Changes on main since the merge-base that touch the same area:
  • Merged tree. It passes the five homestead files plus integration.yaml and wi_income_tax.yaml locally (42/42).

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 law supports the change: under Wis. Stat. 71.52(4) the household is the claimant and spouse, Tax 14.03(5)(a)6 excludes children's SS and SSI, and the Schedule H instructions agree. All 21 new expectations check by hand. One should item (see the comment above): nothing tests the spouse side. Removing the spouse's earnings and age-62 eligibility paths, and summing income for the head only, leaves all 76 WI cases passing. Add three cases: only the spouse earns (eligible), only the spouse is 65 (eligible), and spouse SS 4,000 + SSI 1,000 giving household income 17,000.

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