Skip to content

Fix OBBBA itemized-limit reform validation (counterfactual must keep Pease)#226

Merged
PavelMakarchuk merged 1 commit into
mainfrom
fix-obbba-itemized-limit-pease
Jun 29, 2026
Merged

Fix OBBBA itemized-limit reform validation (counterfactual must keep Pease)#226
PavelMakarchuk merged 1 commit into
mainfrom
fix-obbba-itemized-limit-pease

Conversation

@PavelMakarchuk

Copy link
Copy Markdown
Contributor

Problem

On the reform-validation page, obbba_itemized_tax_benefit_limit (JCX-35-25 Ch.1 line 11) showed the wrong sign: populace +$7.1B vs JCT −$16.0B.

Root cause: the reform reverted both switches —

gov.irs.deductions.itemized.limitation.applies      → False
gov.irs.deductions.itemized.limitation.obbb.applies → False

Setting limitation.applies=False disables the itemized-deduction limitation entirely, so the counterfactual had no limitation. The provision was measuring "OBBBA cap vs nothing" (a revenue raise) instead of "OBBBA cap vs present-law Pease" (the JCT-scored cost).

What the provision actually is

OBBBA replaces the (TCJA-suspended, present-law-reinstated) Pease limitation with a weaker ~2/37 cap for top-bracket filers. PE-US's itemized_taxable_income_deductions_reduction variable uses obbb.applies to switch between the cap and Pease (it doesn't stack), so the correct counterfactual is limitation.applies=True, obbb.applies=False = present-law Pease. Pease is tougher than the cap, so OBBBA is a net cost.

Fix

Revert only obbb.applies, keeping limitation.applies=True (present-law Pease).

Verification (released populace_us_2024.h5, 2026)

income tax
OBBBA baseline (cap) 2,320.3B
present-law Pease (new counterfactual) 2,333.3B
no limitation (old counterfactual) 2,317.2B
  • old effect (cap vs nothing): +$3.0B standalone (+$7.1B stacked) — wrong sign
  • new effect (cap vs Pease): −$13.0B — correct sign, matches JCT −$16.0B (residual is normal PE-vs-JCT)

Adds test_itemized_benefit_limit_counterfactual_keeps_pease so the applies=False regression can't return.

🤖 Generated with Claude Code

obbba_itemized_tax_benefit_limit (JCX-35-25 Ch.1 line 11) reverted both
limitation.applies and limitation.obbb.applies to False, so its
counterfactual had NO itemized-deduction limitation at all. It therefore
measured the OBBBA cap vs nothing — a revenue *raise* (+$3B standalone /
+$7B stacked) — when JCT scores the provision as a $16B cost.

The provision is really 'OBBBA ~2/37 cap vs present-law Pease': under
TCJA expiration the Pease limitation reinstates in 2026, and OBBBA
replaces it with a weaker cap, a net cost. PE's limitation variable uses
obbb.applies to switch between the cap and Pease, so reverting only
obbb.applies (keeping limitation.applies=True) yields the present-law
Pease counterfactual.

Verified on the released H5: the effect flips from +$3B to -$13B,
matching JCT's -$16B. Adds a regression test that the counterfactual
reverts only obbb.applies.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@PavelMakarchuk PavelMakarchuk merged commit 717f33c into main Jun 29, 2026
4 checks passed
@PavelMakarchuk PavelMakarchuk deleted the fix-obbba-itemized-limit-pease branch June 29, 2026 23:23
PavelMakarchuk added a commit to PolicyEngine/calibration-diagnostics that referenced this pull request Jun 30, 2026
Refresh the committed override with the f0af251 release re-stacked using
the corrected itemized-limit encoding (PolicyEngine/populace#226). The
itemized tax-benefit limit row flips from +$7.1B (wrong sign) to
-$22.1B, in line with JCT's -$16.0B; the fix also shifts the shared
pre-OBBBA baseline, so other rows move slightly (rates -192.7->-195.6,
AMT -102.7->-101.5, misc +17.3->+17.0).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

1 participant