Repository navigation
Conversation
…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 Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10191 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 4
Lines 76 78 +2
Branches 2 1 -1
=========================================
+ Hits 76 78 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
… 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>
Hand-off to the US + core hubHead: 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:
The verdict file is Passed locally:
10 of the 11 new cases fail on CI. It is running on Impact. One item is still owed, and the hub is asked to run it. In the body, 2024 is at When the Disk manager reports more than 60 GB free:
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 Axiom. TheAxiomFoundation/rulespec-us#1726 is queued. Follow-ups. Other states' credit income lists still count dependents' Social Security through |
PR Review: Leave dependents' income out of Wisconsin homestead credit household incomePR #10191 (author: MaxGhenis, head SummaryThe PR applies Wis. Stat. § 71.52(4), under which the homestead credit "household" is the claimant and spouse, to four variables:
The policy is right:
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 address1. No test covers the spouse side of the new head/spouse logic.
Suggestions1. Bring rulespec-us#1726 up to the PR's current scope.
2. Cite the eligibility statute and correct two test comments.
3. Document that a dependent aged 62 or older can file their own claim, which PolicyEngine does not model.
4. Negative net Social Security now floors at zero.
5. Pre-existing, outside this diff: S corporation income counts as earned income.
Verified correct
Axiom line assessmentValid
CI statusAll 28 checks pass (
Branch status
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
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.
PR Review (round 2): Leave dependents' income out of Wisconsin homestead credit household incomePR #10191 (author: MaxGhenis, head SummaryAll six round 1 findings are addressed: five are fixed, and the S corporation item is deferred with a reason.
The new repayment rule follows the law.
Checks.
There are no open critical or should-address items. I have two optional suggestions: a pre-existing gap under § 71.53(2)(d), and a tracking issue for the deferred S corporation item. Prior findings
New findingsCritical (must fix)None. Should addressNone. Suggestions1. Pre-existing, outside this diff: § 71.53(2)(d) bars a claimant who was claimed as a dependent elsewhere, unless the claimant is 62 or older.
2. File the S corporation follow-up as an issue.
Verified
Axiom line assessmentValid
CI statusAll 29 checks pass (
Branch status
Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
Round 2: Should 1 is fixed. The spouse-side cases now run with both labellings and catch the round-1 mutants. S1-S4 are fixed too, including negative net Social Security repayments reducing household income per s. 71.52(6). All 22 new expectations hand-check, and the merged tree is clean and passes the ratchet. Two suggestions: the pre-existing s. 71.53(2)(d) dependent-claimant bar, and filing the S corporation follow-up as an issue. Full report in the comment above.
Main's #10302 (state-specific other additions and subtractions) changed Wisconsin files next to this PR's; the merge is clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's #10173 (Wisconsin state supplementation for 2026) changed Wisconsin files; the merge is clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
Wis. Stat. 71.52(5) and DOR Publication 127 count state SSI, SSI-E and Caretaker Supplement payments, but wi_ssp reached household income through no other source. Adding the person-level wi_ssp keeps the claimant's and spouse's payments, including a parent's Caretaker Supplement, and the existing dependent filter leaves out a child's own supplement. Cases 10 and 11 now include the spouse's regular supplement (83.78 x 12). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FjKTA223kkKGWSie6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FjKTA223kkKGWSie6
Main now treats social_security_retirement and the other component inputs as reported benefits, which must be nonnegative, so the 71.52(6) repayment cases failed CI once merged with main. They now give each filer's net benefits through social_security; the expected amounts are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FjKTA223kkKGWSie6
Adds the cases no test covered: AGI exactly at the $120,000 and $200,000
limits ("equal to or less than"), two surviving spouses who get no
subtraction under 32 V.S.A. § 5811(29)(B) (the form would give $3,000 and
$1,500), a dependent's interest, and a Wisconsin couple where neither
spouse alone is both 18 or older and an earner.
Also carries #10191's eligibility Cases 8 to 15 unchanged, so that PR's
merge of main can take main's side of the eligibility file whole, and cites
the effective date as the § 5811 history note gives it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6JwDtRRMHxwVAQMx6f
|
Ready for hub review Head: What the merge-delta review asked, and how it is resolvedP2: count Wisconsin's state supplement in homestead household income.
P3: the impact label. The body's heading now reads "PR head Hand computations (2026 parameters: phase-out start 8,060, rate 8.785%, credit rate 80%, property tax cap 1,460)
Tests (local, one file per process)
That is 147 YAML cases, 0 failed. Mutant ( CI
Judgment calls
Generated by Claude Code |
|
Hub review in progress Reviewing head
Still to do: mutant B (each tax unit member's supplement), the body checks, and the final write-up. Generated by Claude Code |
|
Ready for hub review This is an independent delta review of
This delta adds no new reading choice. No P1 findings. The code change is correct and its tests kill both mutants. The remaining items are body, citation and test-strength fixes, plus one follow-up. FindingsP2: the body has no
|
| Tree | ssi |
wi_homestead_income |
wi_homestead_credit (1,460 allowable property tax) |
|---|---|---|---|
main 25c4253483 |
11,928 | 11,928 | 896.16 |
this head merged into main 25c4253483 |
11,928 | 14,229.08 | 734.44 |
Hand computations, done before reading the expected values:
| Case | Computation | Result |
|---|---|---|
| Income Case 17 | federal SSI 994 × 12 = 11,928; regular 4 × 83.78 + 8 × 92.16 = 1,072.40; SSI-E 4 × 95.99 + 8 × 105.59 = 1,228.68; 11,928 + 1,072.40 + 1,228.68 | 14,229.08 |
| Credit Case 6 | (14,229.08 − 8,060) × 0.08785 = 541.95; (1,460 − 541.95) × 0.8 | 734.44 |
| Credit without the supplement | (11,928 − 8,060) × 0.08785 = 339.80; (1,460 − 339.80) × 0.8 | 896.16 |
| Income Cases 10–11 | pension 6,000 + Social Security 10,000 (nontaxable: 5,000 + 6,000 is under the 32,000 joint base) + spouse SSI 1,000 + 83.78 × 12 = 1,005.36 | 18,005.36 |
| Income Case 18 | 20,000 wages − 500, with the child's SSI 6,000 and supplement 1,000 excluded | 19,500 |
| Income Case 19 | 9,000 + 3,000 − 500 | 11,500 |
- The 2026 parameters are phase-out start 8,060, rate 0.08785, credit rate 0.8 and property tax cap 1,460, read from the parameter files.
- In Cases 10–11 the head has no SSI, so the spouse gets the individual rate.
- Every value matches the YAML.
The CI fix (5c3716b10b). Cases 12–16 test the same rule as before.
wi_homestead_income.pyreads netsocial_securitythroughtax_unit_non_dep_add(..., ["social_security"]), andsocial_securityis only the sum of its four components. The old negativesocial_security_retirementinputs reached the formula only through that sum, so supplying the sum directly exercises the same branch.- Expected values are unchanged: 5,000, 5,000, 9,000, 9,000 and 4,500.
- On main, a negative component input now raises "Reported Social Security benefits must be finite and nonnegative". My probe got that error at main and on the merge: a 2024 claimant with pension 6,000 and
social_security_retirement−1,000. - A repayment entered as net
social_security: -1000still reaches the rule on main:wi_homestead_incomeis 5,000 on both main and the merge. - Population data has no negative benefits, so this branch has no baseline effect.
Tests at the head, one file per process.
| File | Result |
|---|---|
wi_homestead_income.yaml |
19 passed |
wi_homestead_credit.yaml |
6 passed |
wi_homestead_eligible.yaml |
15 passed |
wi_homestead_property_tax.yaml |
3 passed |
wi_homestead_disqualified_losses.yaml |
9 passed |
dhs/ssp/integration.yaml |
10 passed |
dhs/ssp/wi_ssp.yaml |
17 passed |
dhs/ssp/wi_cts.yaml |
55 passed |
dhs/ssp/wi_ssp_countable_for_hud.yaml |
13 passed |
code_health/test_source_conflicts.py |
103 passed |
- That is 147 YAML cases with 0 failed.
- On a merge with current main
25c4253483, the five homestead files pass 19, 6, 15, 3 and 9. - The new cases assert the claim itself, not a weaker one. They check exact amounts at a 0.01 margin, and the delta has no generated ranges.
Mutants. Each ran in its own process on a scratch worktree, and git status was clean afterwards.
| Mutant | Change | Income file | Credit file | Killed by |
|---|---|---|---|---|
| A (the hand-off's) | - wi_ssp commented out of sources.yaml |
4 failed of 19: Cases 10 and 11 (17,000), 17 (11,928) and 19 (8,500) | 1 failed of 6: Case 6 (income 11,928) | Cases 10, 11, 17, 19 and credit Case 6 |
| B (mine): count every member's supplement | tax_unit_non_dep_add(..., include_dependents=("wi_ssp",)) at wi_homestead_income.py:28 |
2 failed of 19: Case 18 (20,500) and Case 7 (2020: 20,505.36, because the child's composed supplement now counts) | 6 passed | Cases 18 and 7 |
Readers. sources.yaml is read only by wi_homestead_income. wi_homestead_income is read by:
wi_homestead_eligible(the< max_incometest);wi_homestead_credit, which feedswi/.../credits/refundable.yaml,retirement_income_exclusion_refundable.yamlandhousehold/state_property_tax_credits.yaml.
Each reader moves in the direction 71.52(6) requires. The one pre-existing limitation is listed above with its witness.
Overlap with Fix Vermont student loan interest, Utah's at-home parent credit and Wisconsin's homestead claimant #10104 (head a35d9295a3, open).
- Fix Vermont student loan interest, Utah's at-home parent credit and Wisconsin's homestead claimant #10104's
wi_homestead_eligible.yamllines 417–619 and this head's lines 103–305 (Cases 8–15) are byte-identical: 203 lines each, both with SHA-2563c5e7ab5…63fb23. - A trial
git merge pr-10104onto this head merged into main conflicts inwi_homestead_eligible.pyandwi_homestead_eligible.yaml. - What the second lander should keep:
- Fix Vermont student loan interest, Utah's at-home parent credit and Wisconsin's homestead claimant #10104's per-person formula, which tests each head or spouse alone and adds the 71.53(2)(d) claimed-dependent gate. It matches this PR's head and spouse tests:
head_is_disabledisis_disabledfor the head. - Both PRs' reference entries: the 2024 and 2025 Schedule H instructions, 71.53(2)(c), 71.54 and 71.52(1g).
- Fix Vermont student loan interest, Utah's at-home parent credit and Wisconsin's homestead claimant #10104's rewritten unit tests 1–7 and its nine 2025 claimed-dependent cases.
- One copy of the shared Cases 8–15.
- Fix Vermont student loan interest, Utah's at-home parent credit and Wisconsin's homestead claimant #10104's per-person formula, which tests each head or spouse alone and adds the 71.53(2)(d) claimed-dependent gate. It matches this PR's head and spouse tests:
- Fix the 2020 unemployment compensation exclusion: cutoff test, per-spouse cap, dependents #10175 matched the search only by text. It shares no file with this PR.
Body checks.
- The "State SSI supplement" table: rows 1 and 4 match my runs and hand computations, and rows 2 and 3 are income Cases 19 and 18.
- The impact heading is relabelled to
4f5e4a6ff1againstde3815f4ccand says the figures predate this head. - The changelog sentence matches the code.
- The
axiom:line is present.
CI. The Pull request run at 5c3716b10b (run 41739391616, attempt 1) completed with success. All 36 jobs succeeded, and none was skipped or cancelled. They include all four baseline states shards, Quick Feedback, Household API Partners and Microsimulation. Main moved to 25c4253483 after that run; my local merge with it passes the homestead files above.
Scope. No file under .github/ or policyengine_us/tests/policy/baseline/partners/ is in the PR's 11 files.
What I couldn't check
- Sources. From this VM, docs.legis.wisconsin.gov and revenue.wi.gov are blocked, both to curl and to the fetch tool. govinfo.gov, uscode.house.gov, ecfr.gov, dhs.wisconsin.gov, ssa.gov and law.cornell.edu are blocked too. As a result:
- The rule check rests on the hub's quotes of 71.52(4)–(6).
- I couldn't read Publication 127 page 9, ss. 49.77 and 49.775, or the DHS memo behind the 2026 supplement amounts.
- That 83.78, 95.99 and 275 also applied before 2026 is unverified.
- Population impact. I ran no microsimulation, so the impact rerun is the hub's.
- Peak memory of the test runs.
Generated by Claude Code
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
71.52(5) defines household income as what the household's members receive; it is 71.52(6) that makes cash public assistance income. DOR Publication 127, page 9, has claimants report state SSI, SSI-E and caretaker supplement payments with their SSI. The dependent exclusion stays cited to 71.52(4)-(5). Claude-Session: https://claude.ai/code/session_01QpcqEDZvsBp213aZFaj3ty Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Before, the child's supplement composed to 0, so counting every member's
wi_ssp (include_dependents=("wi_ssp",)) still gave 11,500. With the
child's wi_ssp_regular at 1,000, that mutant gives 12,500 while the head
still leaves the child's supplement out: 9,000 + 3,000 - 500 = 11,500.
Claude-Session: https://claude.ai/code/session_01QpcqEDZvsBp213aZFaj3ty
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review Head: Built on ItemsItem 5, the citation in The old comment ran over lines 26-28, not 26-27. Its third line, "supplement stays out of household income.", is restated by the new comment's last sentence. Replacing only 26-27 would have left that fragment dangling, so I replaced all three lines. Sources:
Item 6, Case 19.
Mutants, each in its own process, with the code restored and
Item 7, the body.
Item 8, runs at this head, one file per process:
Hand computationCase 19:
CIPull request run 41860003710 at Judgment calls
Follow-upsNone new. The review's proposed issue still stands: "Add pre-2026 history to Wisconsin SSP, SSI-E and Caretaker Supplement amounts". Generated by Claude Code |
|
Hub review in progress Done: the round 5 review at Generated by Claude Code |
|
Ready for hub review This is an independent round 5 delta review of
The head hasn't moved past
There are no P1 findings. The round 4 items for #10191 (items 5–7 of the assignment) are done as asked, Case 19 now kills mutant B, and CI is green. What remains is the hub's FindingsP2 (the hub's, carried from round 4): the body still has no
|
| Mutant | Change | Income file (19) | Credit file (6) | Killed by |
|---|---|---|---|---|
| B (round 4's) | include_dependents=("wi_ssp",) at wi_homestead_income.py:28 |
3 failed | 6 passed | Case 7 (20,505.36 vs 19,500), Case 18 (20,500 vs 19,500), Case 19 (12,500 vs 11,500) |
| B2 (the session's) | add(tax_unit, period, sources) at line 28 |
3 failed | 6 passed | Case 7 (31,505.36), Case 18 (26,500), Case 19 (12,500) |
| B against Case 19 alone | extracted Case 19 at 5c3716b10b and at dbe35eb8bc |
old: 1 passed; new: 1 failed (12,500) | — | the new Case 19 |
| C (mine): only the CTS counts | - wi_ssp changed to - wi_cts in sources.yaml |
3 failed | 1 failed | income Cases 10 and 11 (17,000 vs 18,005.36), Case 17 (11,928 vs 14,229.08); credit Case 6 |
Case 19 passes under C, as designed: it holds only a parent's CTS. Every number the hand-off gives for B and B2 matches my runs.
The defect at main (25c4253483, run in its own environment because main needs a newer policyengine-core than this branch's lock).
- The PR's income file at main: 10 failed, 9 passed. The failures are Cases 6 (35,500 vs 23,500), 7 (30,500 vs 19,500), 8, 9, 10, 11, 16, 17, 18 and 19.
- The first two values are the body's
maincolumn. Case 19 gives 8,500, the "before" value in row 2 of the body's supplement table.
Tests, one file per process.
| File | At head | Head merged into main 25c4253483 |
|---|---|---|
wi_homestead_income.yaml |
19 passed | 19 passed |
wi_homestead_credit.yaml |
6 passed | 6 passed |
wi_homestead_eligible.yaml |
15 passed | 15 passed |
wi_homestead_property_tax.yaml |
3 passed | 3 passed |
wi_homestead_disqualified_losses.yaml |
9 passed | 9 passed |
code_health/test_source_conflicts.py |
103 passed | — |
The merge with main is clean. Case 19 asserts the claim itself, an exact 11,500 at a 0.01 margin. The delta adds no generated ranges.
Readers.
gov.states.wi.tax.income.credits.homestead.income.sourcesis read only bywi_homestead_income.py:28.wi_homestead_incomeis read bywi_homestead_eligible.py:46andwi_homestead_credit.py:23.wi_homestead_creditfeedswi/tax/income/credits/refundable.yaml,retirement_income_exclusion_refundable.yamlandhousehold/state_property_tax_credits.yaml.- The delta changes no reader's inputs, because the comment and the test case aren't read by any formula.
CI. The Pull request run 41860003710 at dbe35eb8bc (attempt 1) completed with success at 16:43Z. All 36 jobs concluded success, and none was skipped or cancelled. Contrib other-shard-3, which the hand-off left running, succeeded. The jobs include all four Baseline states shards, Household API Partners, Microsimulation, Quick Feedback and PR validation.
Scope. The PR's 11 files include nothing under .github/ or policyengine_us/tests/policy/baseline/partners/.
Overlap with open PRs. I searched open PRs for each changed file name and compared file lists.
- Fix Vermont student loan interest, Utah's at-home parent credit and Wisconsin's homestead claimant #10104 shares
wi_homestead_eligible.pyandwi_homestead_eligible.yaml. Round 4 already recorded that conflict and what the second lander should keep; the delta doesn't touch either file. - Fix the 2020 unemployment compensation exclusion: cutoff test, per-spouse cap, dependents #10175, Model the Medicare Part D low-income subsidy as a CBO means-tested transfer #10127, Apply the Form 4684 $100 per-casualty reduction and drop dependents' losses in the federal, NY, AL and HI casualty deductions #9912, Zero a separate filer's whole standard deduction and exclude dependent care benefits from wages #10579, Add West Virginia LIEAP regular heating assistance #10618 and Add Hawaii LIHEAP regular heating eligibility and subsidized-dwelling benefit #10614 matched by text only and share no file.
What I couldn't check
- Sources. This session can't reach docs.legis.wisconsin.gov or revenue.wi.gov: the proxy refuses the CONNECT, and the fetch tool can't resolve either host. So:
- I couldn't read Wis. Stat. 71.52(4)–(6), DOR Publication 127 page 9, or the Schedule H instructions. The comment's 71.52(6) "cash public assistance" reading and the Publication 127 citation rest on the hub's reading and the session's.
- The hand-off says the 2025 instructions list SSI-E and caretaker payments on file page 5. The pre-existing reference in
sources.yaml:9points to#page=6. I couldn't open the PDF to say which page is right.
- Population impact. I ran no microsimulation. The
impact:line and its 2021–2026 rerun are the hub's. - Peak memory of the test runs.
Generated by Claude Code
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
…statute The comment's "which DOR has claimants report" could be read as pointing at Wis. Stat. 71.52(6). Name the payments as what DOR has claimants report with SSI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6HWtPqg7fKcLTqL3ef
|
Ready for hub review Head: Built on Items
Mutants and hand computationsNone. The change is a YAML comment, so it can't move an output, and no Python file changed. BodyI read the body. It paraphrases the 71.52(6) and Publication 127 point in its own words (the "State SSI supplement" section) and doesn't quote the comment, so no sentence became false. It has no CI sentence, so I made no PATCH. CIPull request run 41945112558 at Judgment calls
Generated by Claude Code |
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:
PolicyEngine got two things wrong:
tax_exempt_social_security, is a tax-unit amount built fromtax_unit_social_security, which includes dependents' benefits.wi_homestead_eligiblecounted 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:mainwi_homestead_incomewi_homestead_eligiblewi_homestead_creditwi_homestead_incomewi_homestead_eligibleWhat changes
All of these follow from Wis. Stat. 71.52(4): the household is the claimant and the claimant's spouse.
wi_homestead_incomeadds the sources withtax_unit_non_dep_add, so only the head's and spouse's person-level amounts count.tanfis the W-2 payment the claimant receives, an SPM unit amount, and is added as before.filer_tax_exempt_social_security, the existing head-and-spouse version oftax_exempt_social_security. Wisconsin household income also preserves negative aggregate filer benefits as qualifying prior-year nontaxable repayments under 71.52(6) and the 2024 instructions, file page 12. Negative inputs are assumed to meet the prior-inclusion requirement; the model has no claim history.wi_homestead_disqualified_lossesadds backfiler_loss_limited_net_capital_gains(Schedule 4 line 3). A dependent's gains and losses no longer move household income.wi_homestead_property_taxcounts 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").wi_homestead_eligibletests 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.53(2)(c), 71.54(1)(dm)–(gm); earned income is defined by 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:Invariants
wi_homestead_income,wi_homestead_property_taxand the claimant's eligibility unchanged. The one exception is the dependent's effect on W-2 (TANF) eligibility, which counts the family's income.How it was checked
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.
Tests. New cases come from the 2024 Schedule H:
wi_homestead_incomeCases 6–7;wi_homestead_eligibleCases 8–9;wi_homestead_creditCase 5.4 fail on
mainand pass here, and the WI integration and income tax files pass. Round 2 adds 6 more cases:wi_homestead_incomeCases 8–9;wi_homestead_property_taxCases 2–3;wi_homestead_eligibleCases 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.Changes after review
Review
Round 1, at
4c0b18e1f1: REQUEST_CHANGES.a576e21681addresses all of them. Round 2: APPROVE ata576e21681.The reviewer re-ran the round 1 probes and checked:
It also confirmed that only
wi_homestead_creditandwi_homestead_incomeread 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.509e5c9d71fixes both.State SSI supplement (merge-delta review)
Main added
wi_ssp(the regular state supplement, SSI-E and the Caretaker Supplement), but the homestead income source list only carried a commented-out placeholder, andwi_sspreached household income through no other path. Wisconsin counts "cash public assistance" as income (Wis. Stat. 71.52(6)), and DOR has claimants report state SSI, SSI-E and Caretaker Supplement payments with their SSI (Publication 127, page 9).sources.yamlnow listswi_ssp; the existing dependent filter keeps the claimant's and spouse's payments, including a parent's Caretaker Supplement, and leaves out a dependent child's own supplement.wi_homestead_incomebeforewi_homestead_creditbeforeCredit: (14,229.08 − 8,060) × 0.08785 = 541.95 phase-out; (1,460 − 541.95) × 0.8 = 734.44, against (1,460 − 339.80) × 0.8 = 896.16 without the supplement.
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
Hub microsimulation impact (PR head
4f5e4a6ff1against mainde3815f4cc)A real microsimulation on the default dataset, main at the merge base
de3815f4ccagainst this PR's then head4f5e4a6ff1, for 2024 and 2026. These figures predate the current head. Counting the state SSI supplement in household income (above) and main's exclusion of SSI custodial parents from W-2 can both move households through the credit phase-out. Sums are weighted.wi_homestead_incomewi_homestead_eligiblewi_homestead_creditwi_homestead_property_taxwi_homestead_disqualified_losseswi_refundable_creditswi_income_taxfiler_tax_exempt_social_securitystate_income_taxincome_taxhousehold_net_incomehousehold_benefitsRun at
4f5e4a6ff1, which includes the review-round change that restores qualifying negative Social Security repayments (§71.52(6)). These figures replace the earlier runs ata576e21681and4c0b18e1f1.Generated by Claude Code