PolicyEngine / PolicyEngine/microcosm

ALD-stack repeal scores −53% of JCX line-sum on Build P: #519 targets bind but per-component bases under-mass

Open
#579 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
0
Forks
4
Avg merge
1d 3h
Merged PRs (30d)
94

Description

Follow-up to #519 (target additions) and #535 (per-component repeal-revenue validation surface). Surfaced on the RCC dashboard's Build P validation refresh: https://github.com/PolicyEngine/refundable-credit-conversion/pull/72

Observation (Build P, TY2026)

The RCC ald toggle repeals every above-the-line deduction except alimony (drops all entries from gov.irs.ald.deductions except alimony_expense). Modal endpoint on policyengine 5.0.1 bundling populace-us-2024-buildp-sparse-rmloss100-cae8640-20260728T011454Z scores:

ALD-stack repeal (TY2026) PE Build P JCX-45-25 line-sum (indicative) gap
federal tax revenue impact $54.4B $116.0B −53%

Per the caveat already in scripts/scoring_validation/build_comparison.py and #298, the JCX line-sum is non-additive and should not be summed as a hard benchmark — but the gap direction is consistent with per-component under-scoring against each individual JCT line: #519's target additions all bind on Build P but sit under-fit (base-builder mass thin, not target-side).

Per-component fit on Build P

calibration_diagnostics.json at cae8640:

ALD component #519 target notes
SE-health insurance bound, under-fit health_insurance_premiums $16.5B on 1,402 records ≈ 55% of SOI Table 1.4
HSA bound, under-fit single target, 74% off
Traditional IRA bound, under-fit contribution columns thin on sparse
SE pension (Keogh/SEP) bound, under-fit biggest uncertain component per build_comparison.py caveat (~$30B est)
Student loan interest bound, under-fit single target, 49% off
Alimony (excluded from RCC repeal toggle)

Base-side context: retirement-contribution columns are enumerated as absent-from-H5 in #340 and #361; SE-health upstream flagged in #38.

Reproducer

reform = {
    "gov.irs.ald.deductions": {"2026-01-01.2100-12-31": ["alimony_expense"]},
}
# expected: ~$116B (JCX line-sum, non-additive caveat)
# observed on Build P (Modal endpoint, PE 5.0.1): $54.4B

Ask

Two options, non-exclusive:

  1. Extend #535's repeal_revenue_benchmarks.json with per-ALD-component rows so the yield gap is visible per component (matches how QBI / itemized components are handled via #535's per-component surface).
  2. Base-builder pass on the six ALD components — the #519 targets bind, so the under-fit is a base-mass ask, not a target-shape ask. Related base issues: #38 (SE-health upstream path), #340 (retirement-contribution columns absent from H5), #530 (raw-PUF pin that also touches SE income).

Refs

  • RCC validation surface refresh: refundable-credit-conversion#72
  • Target additions: #519
  • Per-component validation mechanism: #535
  • Related base issues: #38, #340, #361
  • Parallel per-component gap already tracked: #298 (QBI)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with scripts/scoring_validation/build_comparison.py, #535's repeal_revenue_benchmarks.json, and calibration_diagnostics.json from cae8640. Reproduce the Build P ALD result and compare each component with its listed target, then clarify whether the intended deliverable is per-component benchmark rows, base-builder work, or both. Done means the selected components' under-fit is surfaced or addressed with validation evidence.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.