Found root-causing #511 (mortgage dollars +29.5% on certified O-1). Second of the two concept gaps behind that row; the first (target-side gross-vs-deducted) has its own PR.
The defect
The donor column home_mortgage_interest in the pinned PUF artifact (irs-soi-puf/1.8.0/puf_2024.h5, consumed at base-o per its summary puf_h5/puf_sha256=7669f5b5…) carries the E19200 lineage — Schedule A "Interest paid deduction, Total" — not the home-mortgage-only concept the SOI Table 2.1 target measures. The repo's own evidence notes document the construction (release_input_coverage_manifest.json investment_interest_expense exclusion; mortgage_conversion stage notes): archived puf.py L654 maps E19200 → interest_deduction, L1548-1550 assigns the identical amount as deductible mortgage interest, and utils/mortgage_interest.py L268-320 derives investment_interest_expense only as the (zero) residual. The artifact has 499,045 all-zero investment_interest_expense values.
At TY2015 (SOI Pub 1304 Table 2.1, all itemized returns):
| line |
amount |
| Interest paid deduction, total (=E19200) |
$304.461B |
| Home mortgage interest (FI + individuals) — the target concept |
$283.004B |
| Deductible points |
$1.274B |
| Qualified mortgage insurance premiums |
$6.287B |
| Investment interest expense |
$13.895B |
So every imputed home_mortgage_interest draw is concept-inflated by ×1.0758 (global; the ratio varies by AGI band — investment interest concentrates at the top).
Receipts on certified O-1 (buildo-sparse-rmloss100-22bd902)
Itemizer-masked masses at final weights vs the $186.31B aged Table 2.1 fact:
| step |
mass |
rel err |
gross home_mortgage_interest (the #511 row as shipped) |
$241.27B |
+29.5% |
engine-capped deductible_mortgage_interest_tax_unit (target-side PR) |
$214.20B |
+15.0% |
| ÷1.0758 donor concept scale (this issue) |
$199.11B |
+6.9% |
Residual +6.9% (count +2.45%, mean +4.3%) is within normal solve slack — carriers are broad (5,762; top-1 2.6% per diagnose_us_target_support), so no #481-style tail story on this row. Donor realized ETL uprate on the column ex-aggregate-rows: ×1.374 ($304.46B → $418.25B at 2024, measured via puf_tax_unit_donor_from_arrays on the pinned artifact).
Fix shape (#487's variable-specific donor mechanism, applied as a concept carve)
Root fix in the irs-soi-puf ETL: carve E19200 into a mortgage leg and an investment-interest(+points+QMIP) leg using SOI TY2015 Table 2.1 shares — ideally by AGI band — emitting home_mortgage_interest at the A19300-family concept and a real investment_interest_expense column (reversing the SOURCE-UNAVAILABILITY exclusion with the SOI table as the evidence base). Interim populace-side option: scale the donor column (and the first/second_home_mortgage_interest structural legs, which carry the same total) by 283.004/304.461 = 0.9295 at donor load, factor ledgered — the #486 repair precedent.
Interaction note: the JCT deductible_mortgage_interest reform neutralizes interest_deduction; while investment_interest_expense is all-zero that row measures the mortgage-only concept by accident. If the carve un-zeroes investment interest, the reform should neutralize deductible_mortgage_interest instead — otherwise the JCT row re-inflates by the carved leg.
Relates #511, #487 (mechanism class), #486 (repair precedent). Full forensics on #511.
Found root-causing #511 (mortgage dollars +29.5% on certified O-1). Second of the two concept gaps behind that row; the first (target-side gross-vs-deducted) has its own PR.
The defect
The donor column
home_mortgage_interestin the pinned PUF artifact (irs-soi-puf/1.8.0/puf_2024.h5, consumed atbase-oper its summarypuf_h5/puf_sha256=7669f5b5…) carries the E19200 lineage — Schedule A "Interest paid deduction, Total" — not the home-mortgage-only concept the SOI Table 2.1 target measures. The repo's own evidence notes document the construction (release_input_coverage_manifest.jsoninvestment_interest_expenseexclusion; mortgage_conversion stage notes): archivedpuf.pyL654 maps E19200 →interest_deduction, L1548-1550 assigns the identical amount as deductible mortgage interest, andutils/mortgage_interest.pyL268-320 derivesinvestment_interest_expenseonly as the (zero) residual. The artifact has 499,045 all-zeroinvestment_interest_expensevalues.At TY2015 (SOI Pub 1304 Table 2.1, all itemized returns):
So every imputed
home_mortgage_interestdraw is concept-inflated by ×1.0758 (global; the ratio varies by AGI band — investment interest concentrates at the top).Receipts on certified O-1 (
buildo-sparse-rmloss100-22bd902)Itemizer-masked masses at final weights vs the $186.31B aged Table 2.1 fact:
home_mortgage_interest(the #511 row as shipped)deductible_mortgage_interest_tax_unit(target-side PR)Residual +6.9% (count +2.45%, mean +4.3%) is within normal solve slack — carriers are broad (5,762; top-1 2.6% per
diagnose_us_target_support), so no #481-style tail story on this row. Donor realized ETL uprate on the column ex-aggregate-rows: ×1.374 ($304.46B → $418.25B at 2024, measured viapuf_tax_unit_donor_from_arrayson the pinned artifact).Fix shape (#487's variable-specific donor mechanism, applied as a concept carve)
Root fix in the irs-soi-puf ETL: carve E19200 into a mortgage leg and an investment-interest(+points+QMIP) leg using SOI TY2015 Table 2.1 shares — ideally by AGI band — emitting
home_mortgage_interestat the A19300-family concept and a realinvestment_interest_expensecolumn (reversing the SOURCE-UNAVAILABILITY exclusion with the SOI table as the evidence base). Interim populace-side option: scale the donor column (and thefirst/second_home_mortgage_intereststructural legs, which carry the same total) by 283.004/304.461 = 0.9295 at donor load, factor ledgered — the #486 repair precedent.Interaction note: the JCT
deductible_mortgage_interestreform neutralizesinterest_deduction; whileinvestment_interest_expenseis all-zero that row measures the mortgage-only concept by accident. If the carve un-zeroes investment interest, the reform should neutralizedeductible_mortgage_interestinstead — otherwise the JCT row re-inflates by the carved leg.Relates #511, #487 (mechanism class), #486 (repair precedent). Full forensics on #511.