Repository navigation
Bar only the claimed spouse from the student loan interest deduction (26 U.S.C. 221(c)) - #10577
Conversation
26 U.S.C. 221(c) denies the deduction to the individual whom another taxpayer claims, not to that individual's unclaimed spouse. The Form 1040 worksheet bars the whole joint return; per the 2026-10-20 ruling the statute governs. Joint MAGI now includes both filers regardless of eligibility, so a claimed spouse's income still counts in the phase-out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6K4grkKNkfjkW6hbaN
A Hypothesis property test checks that an unclaimed filer's deduction ignores the claimed spouse, that a claimed spouse's own interest is never deducted, and that the return never exceeds the 221(b)(1) cap. The float32 determinism probe sets is_tax_unit_head_or_spouse, which MAGI's defined_for now reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6K4grkKNkfjkW6hbaN
|
Ready for hub review Head: What the item asked and how it's resolved
Hand computations
Tests (one file per process)
Mutants (each in its own process, code restored after)
CIDraft PR, so CI hasn't run. Judgment calls
Proposed follow-up
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 |
The property test now draws whether the claimed filer is the head or the spouse, so a bar that reached only a claimed spouse fails it, and pins phase-out examples where the claimed filer's income moves joint MAGI in 2019 and 2025. The candidates register splits the student loan interest half off the education-credit item, since PE-US now follows 221(c). Hawaii and Kentucky each get a joint case with a claimed spouse, the states where this eligibility reaches state tax. The eligibility reference now cites 221(e)(2) as well as 221(c). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FN4kh1QukzuAxXmrD
Its head earns enough that the joint return couldn't be filed only for a refund, so the claim is an input that pins the column arithmetic. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FN4kh1QukzuAxXmrD
|
Ready for hub review Head: Items and how each is resolved
CIThe latest Pull request run at
The run at Judgment calls
Proposed follow-up
Generated by Claude Code |
|
Ready for hub review This is round 2 of the review. The head hasn't moved since Summary:
Nothing here is P1 or P2. The three P3 notes below don't block. The METHODOLOGY_CHOICE is FindingsP3-1. The "State effects" section understates the reach and mislabels Kentucky. Where: the PR body, "State effects": "States that read this eligibility change on a joint return with one claimed spouse. Both follow § 221 …" What's wrong:
That's −$99 = $2,000 × 4.95%. Nothing is wrong in the code. A reader of the body would just think only two states move. Replacement for the section's first two sentences:
P3-2. A Where:
P3-3. The register bookkeeping still points at the old id after the split.
Checked and soundDefect at main. I copied head's four changed YAML files and ran them against main's code:
Every failure is a new or changed case, so the defect reproduces. P3-1 and P3-2 (round 1), the property test.
Mutants. Each ran in its own process on a scratch worktree. I printed
Tests at head, one file per process:
For the property test, the test call took 2.87 s and the crafted witness 0.13 s. Wall time was 53.5 s including import, and peak child RSS was 913 MB. These were local VM figures, not Linux CI, and are in line with the hand-off's 2.78 s and 909 MB. P3-5 (round 1), the state cases. I computed these from the parameters at head; the law itself was unreachable (see below). Hawaii, 2025 (
Kentucky, 2025 (rate 4%, standard deduction 3,270):
Run at main and at head, these match the hand-off's table:
The Hawaii change runs entirely through federal AGI: the Hawaii adjustment is 0 at both. The hand-off's explanation of why these differ from round 1's figures is consistent: the households differ. P3-3 (round 1), the register split.
P3-7 (round 1).
The body's "Corrections" section, checked against head.
Readers.
Population.
CI. Run 41469966080 (Pull request) at
Body lines. Scope.
What the build brief asked for that the PR doesn't do. Nothing material. The "State effects" paragraph exists but understates its reach (P3-1). What I couldn't check
Generated by Claude Code |
|
US + core hub merge audit, us#10577 at
|
Change
26 U.S.C. 221(c) denies the student loan interest deduction "to an individual" for whom another taxpayer is allowed a section 151 deduction. It doesn't reach that individual's spouse. On a joint return filed only to claim a refund (26 U.S.C. 152(c)(1)(E)), where one spouse is claimed elsewhere, the other spouse now keeps the deduction for their own qualified interest.
student_loan_interest_ald_eligibletests the person's ownclaimed_as_dependent_on_another_return(head_or_spouse & ~separate & ~claimed) instead of barring the return when another taxpayer claims either filer.student_loan_interest_ald_maginow covers every head or spouse (defined_for), so joint MAGI for the 221(b)(2) phase-out includes a claimed spouse's income.Ruling: statute governs the form; Max 2026-10-20. The Form 1040 Schedule 1 line 21 instructions bar the return if "you, or your spouse if filing jointly" are claimed; the statute bars only the claimed individual.
Source-conflict register
source_conflicts/candidates.yamlsplits the old joint item.us:education-benefits-joint-claimed-spousenow covers the education credits under 25A(g)(3) only (code:is_barred_from_education_credits_by_dependency.py; stillconflicting-source, with the page-anchor caveat). The newus:student-loan-interest-joint-claimed-spouserecords 221(c) against the Form 1040 instructions,follows: statute,state: ruled, codestudent_loan_interest_ald_eligible.py, this PR.State effects
On a joint return with one claimed spouse, federal AGI falls by the unclaimed spouse's deduction, so every state whose tax starts from federal AGI moves with it. Hawaii also reads
student_loan_interest_ald_eligibledirectly, and Montana readsstudent_loan_interest_ald. Tests cover the two cases below. No one has checked whether each state's conformity to the Code carries § 221(c)'s per-person bar.hi_student_loan_interest_deductionreadsstudent_loan_interest_ald_eligible). Refund-only joint return: head with $2,000 wages and $1,000 interest, claimed spouse with $700 interest. The Hawaii deduction goes from 0 to 1,000 andhi_agifrom 2,000 to 1,000;hi_income_taxstays −220 at this income. Test:hi_student_loan_interest_adjustment.yaml.ky_agifor the head goes from 50,000 to 48,000 andky_income_taxfrom 1,869.20 to 1,789.20 (2,000 × 4%). Test:ky_federal_agi.yaml(mechanics only).Invariants (Hypothesis property test
policyengine_us/tests/core/test_student_loan_interest_claimed_spouse_invariants.py)Each drawn couple has the claimed filer as either head or spouse.
Two explicit
@examplebatches (2019 and 2025) put a claimed filer's income inside the joint phase-out, with the claimed filer as head and as spouse. If joint MAGI dropped the claimed filer, invariant 1 would fail by $666.67 to $833.33.Corrections to the first hand-off comment
6ba66caa.ald_sum_personisn't masked bynot_dependent(student_loan_interest_ald_magi.py:44,:68). The newdefined_for = "is_tax_unit_head_or_spouse"(:25) excludes dependents anyway, so no output changes.student_loan_interest_ald_eligible.py:38at the current head (:35before the reference became a tuple), and the MAGIdefined_forisstudent_loan_interest_ald_magi.py:25.Tests
YAML (
student_loan_interest_ald.yaml,student_loan_interest_ald_eligible.yaml): the two joint cases that required both spouses to lose the deduction now bar only the claimed spouse; added the two refund-only joint cases (AGI $1,000 and $2,500) and a phase-out case whose joint MAGI counts the claimed spouse. Hawaii and Kentucky each get a joint case with a claimed spouse.impact: none at baseline. Both changed formulas read
claimed_as_dependent_on_another_return, an input with no formula, and the production dataset carries no such column, so the input is false for every record. Eligibility then matches main (head_or_spouse & ~separate).student_loan_interest_ald_magi's widerdefined_foradds MAGI only for married filing separately filers, whom eligibility still bars, sostudent_loan_interest_aldmatches main for every record.axiom: TheAxiomFoundation/rulespec-us#1981 queued
🤖 Generated with Claude Code