Fix OBBBA itemized-limit reform validation (counterfactual must keep Pease)#226
Merged
Merged
Conversation
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
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>
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.
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 —
Setting
limitation.applies=Falsedisables 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_reductionvariable usesobbb.appliesto switch between the cap and Pease (it doesn't stack), so the correct counterfactual islimitation.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, keepinglimitation.applies=True(present-law Pease).Verification (released
populace_us_2024.h5, 2026)Adds
test_itemized_benefit_limit_counterfactual_keeps_peaseso theapplies=Falseregression can't return.🤖 Generated with Claude Code