Repository navigation
Conversation
26 U.S.C. 224(h) and 225(g) allow no deduction for any taxable year beginning after December 31, 2028, and sections 70201(j) and 70202(g) of Pub. L. 119-21 start both in 2025. The federal deduction lists already dropped them from 2029, but tip_income_deduction and overtime_income_deduction kept computing, and South Carolina's add-back, Montana's Schedule 1-A subtraction and Arizona's 2026 subtraction list read them directly. Each now gets zero outside 2025-2028. Colorado's add-back (C.R.S. 39-22-104(3)(u)) has no end date and needed a 2029 switch only because the federal variable leaked; the switch goes, and its 2029 test now computes the deduction instead of entering it. The reform-backdating test switches the tip deduction on for 2024 so its leaked-cap guard still sees a nonzero deduction. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Over 2015-2035 the deductions are zero outside 2025-2028; with the year switch forced on, every year gives the 2025 amount, so the switch is the only change across years. South Carolina's add-back, Montana's Schedule 1-A subtraction and Arizona's subtractions move by exactly the federal deductions in 2026-2028 and not at all from 2029. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ches taxable income Review round 1 found that switching the new in_effect parameters on for 2029 revived the two variables but not the federal deduction, because the federal lists dropped both at 2029; Colorado would then add back a deduction never taken federally. Both lists, and the CRFB senior deduction extension's 2029 lists, now name the two deductions in every year, so the in_effect parameters are the only place the dates live. Baseline results are unchanged: the variables are zero outside 2025-2028. Tests: the federal years file asserts both lists in 2028, 2029 and under the switch in 2029 and 2024; the 2030 itemizing case computes the two deductions instead of entering them; Colorado Case 11 pins its add-back without an end date. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The two in_effect parameters cite the enrolled bill once each, with both pages in the title, as CLAUDE.md's one-entry-per-source rule asks. - The year cases move into the variable-named files (tip_income_deduction.yaml, overtime_income_deduction.yaml, at the top, clear of #10396's appended cases), the list-level cases into the existing tip_and_overtime_income_deduction.yaml, and the Arizona cases into az_subtractions.yaml beside its variable. - The property test draws once for its year check, so the switched-on reform builds one model: 41.8 s and 3.13 GB peak footprint locally, down from 64.5 s and 3.18 GB. - The changelog says the lists now name both deductions in every year. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 23, 2026 11:25
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ready for CI. Three rounds of independent review are done (round 1 asked for changes; rounds 2 and 3 approved with nits, all addressed below), and main, with #10393, is merged in. The final-head impact is below. Before merge: the final-head local test set, queued behind a host reservation that ends 15:30Z, and CI.
What was wrong
26 U.S.C. 224(h) and 225(g) say "No deduction shall be allowed under this section for any taxable year beginning after December 31, 2028". Pub. L. 119-21 secs. 70201(j) and 70202(g) apply the two sections to taxable years beginning after December 31, 2024.
The federal deduction lists dropped both deductions from 2029, so federal taxable income was right. But
tip_income_deductionandovertime_income_deductionkept computing in every year. Seven state modules read them directly, and three of them had wrong 2029 values.Household probe at this head (
b8d9ea68) against main3128b789, 2029, single filer, age 40, $60,000 wages, $10,000 qualified tips, $5,000 FLSA overtime premium:mt_federal_obbba_subtractionaz_subtractionssc_obbba_addbackco_overtime_income_addbackmi_qualified_tips_deduction+ overtimeid_qualified_business_income_and_federal_schedule_1a_deductionssc_taxable_incomestarts from federal AGI under H.4216 (sciad.in_effect), so the OBBBA add-back no longer enters it and South Carolina tax doesn't change under current law. The remaining $800 is the standard deduction add-back, which this PR doesn't touch.Change
gov.irs.deductions.tip_income.in_effectandgov.irs.deductions.overtime_income.in_effect: false before 2025, true for 2025-2028, false from 2029. They cite 224(h) and 225(g), and the enrolled bill's sections 70201(a) and (j) and 70202(a) and (g).in_effectpattern (energy_efficient_home_improvement_credit_potential,ctc_arpa_phase_out_cap). Every consumer now gets 0 outside 2025-2028.deductions_if_itemizing.yamlanddeductions_if_not_itemizing.yamlnow name both deductions in every dated block, and so do the CRFB senior deduction extension's 2029 lists (reforms/crfb/senior_deduction_extension.py). The switches are now the only place the dates live, so a reform that turns them on in another year reaches federal taxable income as well as the states. Baseline results are unchanged.qualified_overtime/in_effect.yamlhad a2029-01-01: falseentry only because the federal variable leaked, as its comment said. This PR removes the entry and rewrites the comment. Baseline is unchanged, because the federal amount is 0 from 2029. Under a reform that extends section 225, Colorado now adds the deduction back, as its statute requires.TODO: Remove this subtraction starting in 2029stays. The tips and overtime parts are now 0, but the senior and car loan parts still leak (see follow-up).State law: does any state continue a deduction after 2028?
No affected state does. I read each text this session:
Tests
tip_income_deduction.yamlandovertime_income_deduction.yamleach open with the same filer computed in 2024 (0), 2025, 2028, 2029 (0) and 2030 (0). The cases sit at the top of the files, clear of Count only filers' tips and overtime toward the deductions, and require only the recipient's SSN #10396's appended cases.tip_and_overtime_income_deduction.yamlgains list-level cases, with every other listed deduction set to 0. Both lists hold 15,000 in 2028 and 0 in 2029, and 15,000 again with both switches on in 2029 and in 2024.taxable_income_before_itemized_deductions.yamlit now computes the two deductions instead of entering them.sc_obbba_addback: 15,000, then 0 (itemizer).mt_federal_obbba_subtraction: 10,000, then 0.az_subtractions.yaml, 15,000, then 0.tip_income_deduction: 10_000andovertime_income_deduction: 10_000, which pinned the leak; it now expects 0.test_reform_backdating.py::test_simulation_reform_leaves_earlier_years. Its leaked-cap guard needs a nonzero 2024 tip deduction, which the gate now correctly zeroes. Both simulations now switch the tip deduction on for 2024 only, so the guard still catches a cap reform leaking back into 2024 (round 1 confirmed this with a simulated leak).tests/core/test_tip_and_overtime_deduction_years.py(new): see invariants.core, shard 2.Local runs: all 40 affected files passed at
ce325ed3, one process each under the hub heavy lock. The full affected set runs again at this head after the reservation. Nine code-health files pass at this head: 320 passed, 1 skipped. They are reference URLs, concatenated reference URLs, known dead reference URLs, parameter YAML keys, Rest Python groups, selective test batches, make-test-matches-CI, batched YAML collection and source conflicts. The log is in~/reviews/tips-overtime-2029-2026-10-23/code-health-b8d9ea68.logon the hub host.Invariants
For every input:
sc_obbba_addback, Montana'smt_federal_obbba_subtractionand Arizona'saz_subtractionsby exactly the federal tips and overtime deductions in 2026-2028, and by 0 from 2029. This pass-through identity is checked with Hypothesis.Mutants, with each failure read:
mutants.mdin the same folder.Merging with #10393 and #10396
#10393 merged first, and main is merged into this branch with no conflicts. #10396 (still open) edits the same formulas and test files: it changes some existing cases and appends others.
git merge-treewith its headbbf9b859reports no conflicts. On that trial merge, both property test files pass (7 of 7), as dotip_income_deduction.yaml(39),overtime_income_deduction.yaml(34) andtip_and_overtime_income_deduction.yaml(18). The log is intrial-merge-10396.login the same folder.Axiom
axiom: TheAxiomFoundation/rulespec-us#1883 queued
rulespec-us
us/statutes/26/224.yamland225.yamlencode 224(h) and 225(g) only asand not taxable_year_begins_after_termination_date. That is an input the caller sets: nothing derives it from the period, and no upstream companion case sets it. #1883 is dispatch-ready (pe-parity) and asks to derive the termination from the taxable year and retire the input. It carries the verbatim law, a pasteablereview_finding, companion cases from the same ground truth as this PR's tests, and the pipeline module's own use of the name.As evidence of today's behaviour, I ran 2028 (input false) and 2029 (input true) cases for each section through
axiom-encode teston enginecd4cbdf8(rulespec-usfa533144, with 224/225 identical to current main). All 12 cases passed, and a negative control failed as it should.Review
Independent Opus 5.5 reviews were used because Subfleet had no dispatchable Codex or Claude lane at the time (status snapshot
lanes-status-*.txtin the same folder).9551d7b6. It confirmed baseline is unchanged under the list change, with zero differences in a differential run against main's lists. It found no double-counting and confirmed the merged formulas. The nits are fixed inb8d9ea68: this body, one reference entry per source, the changelog, the NJ Child Tax Credit #1883 pipeline note, and test cost.b8d9ea68. Every round-2 finding is resolved. A programmatic check found that the test moves lost none of the 26 assertions. The remaining nits are about wording and saved logs, and both are fixed here and in NJ Child Tax Credit #1883.Impact
A real microsimulation on the default dataset, main at the merge base
c5837fb00bagainst this PR's headb8d9ea68ca, for 2024 and 2026 and 2029. The runs went one at a time under the shared heavy-job lock. Sums are weighted.tip_income_deductionovertime_income_deductionsc_obbba_addbackmt_federal_obbba_subtractionaz_subtractionstaxable_incomestate_income_taxincome_taxhousehold_net_incomehousehold_benefitsComparison files are in
fixes/10397-impact/on the hub host.tip_income_deductionandovertime_income_deductionin 2024 and 2029 are amounts that were computed but never deducted federally.Follow-up (not in this PR)
The senior deduction (151(d)(5)(C)) and the car loan interest deduction (163(h)(4)) leak the same way.
additional_senior_deductionandauto_loan_interest_deductionkeep computing after 2028, and three states read them:sc_obbba_addback.mt_federal_obbba_subtraction.additional_senior_deductionfrom 2026.At this head, a single 67-year-old with $5,000 of car loan interest still gets, in 2029, an SC add-back of $11,800, an MT subtraction of $11,000 and an AZ subtraction of $6,000. A separate session has been proposed for it; the CRFB senior extension needs care there.
🤖 Generated with Claude Code