Skip to content

Add dependent-exemption/credit age-gate contributed reforms for 13 states#8816

Open
DTrim99 wants to merge 3 commits into
PolicyEngine:mainfrom
DTrim99:dependent-exemption-age-gates
Open

Add dependent-exemption/credit age-gate contributed reforms for 13 states#8816
DTrim99 wants to merge 3 commits into
PolicyEngine:mainfrom
DTrim99:dependent-exemption-age-gates

Conversation

@DTrim99

@DTrim99 DTrim99 commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

What

Adds gov.contrib.states.{st}.dependent_exemption / dependent_credit contributed reforms so a state's per-dependent exemption or credit can be adjusted, eliminated, or age-limited — restricted to dependents under a chosen age. This lets tools (e.g. the child-poverty dashboard) model eliminating a state's dependent exemption/credit only for young children and swapping it for a child allowance.

Extends the existing us#8696 / #8800 dependent-exemption contrib family (HI, MD, OH, RI, DE, VA, MI, NE, OK, VT, WI, WV) to the remaining states that had a dependent exemption/credit but no age gate.

New contribs

Each has in_effect, amount (default reproduces the baseline so activating at default is a no-op — a negative sentinel means "use the baseline schedule" for the stepped states), and age_limit (in_effect + threshold):

  • Separate-variable states: NY, IL, MS, NJ, SC
  • Bundled (personal + dependent) carve-out: GA, KS, MN — MN's AGI phase-out is preserved
  • Exemption-credit states: CA, IA — the per-dependent portion is separated from the personal portion
  • Income/age-stepped: AL (AGI-stepped; reads the baseline schedule via a -1 sentinel), AZ (age-based schedule)

Also adds an age_limit sub-tree to the existing AR dependent_credit contrib and age-gates its person-level per-dependent amount (previously left un-age-gated).

Behavior / tests

Every state has a YAML test with the same contract:

  1. contrib in effect at the default amount → reproduces baseline (no-op),
  2. amount: 0eliminates the dependent portion only (personal exemptions / other credits preserved),
  3. age_limit → applies the exemption/credit only to dependents under the threshold (older dependents keep the baseline).

All new tests pass against the current engine (verified locally via policyengine-core test). Bundled states additionally assert that over-age dependents fall back to the baseline personal treatment; NJ leaves its college-dependent exemption untouched; SC leaves its young-child deduction untouched.

Also

Fixes CLAUDE.md to note the default branch is main, not master (it previously said "PRs targeting master branch").

🤖 Generated with Claude Code

DTrim99 and others added 3 commits July 1, 2026 14:21
…ates

Adds gov.contrib.states.{st}.dependent_exemption / dependent_credit contributed
reforms so a state's per-dependent exemption or credit can be adjusted, eliminated,
or age-limited (restricted to dependents under a chosen age). This lets tools model
eliminating the exemption/credit only for young children and swapping it for a child
allowance.

Each contrib has an in_effect flag, an amount (default reproduces the baseline, so
activating at default is a no-op — a negative sentinel means "use the baseline
schedule" for the stepped states), and an age_limit (in_effect + threshold).

New contribs:
- Separate-variable states: NY, IL, MS, NJ, SC
- Bundled personal+dependent carve-out: GA, KS, MN (MN's AGI phase-out preserved)
- Exemption-credit states: CA, IA (per-dependent portion separated)
- Income/age-stepped: AL (AGI-stepped, reads the baseline schedule), AZ (age-based schedule)

Also adds an age_limit sub-tree to the existing AR dependent_credit contrib and
age-gates its person-level per-dependent amount.

Each state has a YAML test: default reproduces baseline; amount 0 eliminates the
dependent portion only; the age limit restricts to under-threshold dependents. All
pass against the current engine.

Also fixes CLAUDE.md to note the default branch is `main`, not `master`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…l suites

Quick Feedback runs every selected YAML suite inside one coverage-instrumented
process; each contrib suite loads the full tax-benefit system, so a broad PR
(13 direct test files here) accumulates memory until the GitHub runner dies
(the job failed at ~56 min with no step conclusion and no uploaded logs).

limit_test_paths already had two tiers (defer slow directories; reduce broad
scopes to directly changed tests) but returned the direct-file fallback
unbounded. Add the missing third tier: beyond SELECTIVE_TEST_MAX_DIRECT_FILES
(default 8) direct files, defer entirely to the sharded full-suite jobs, which
run all of them anyway.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ess, dead var, boundary tests

- CA/IA dependent_credit amount.yaml: add missing references (values unchanged).
- MN reform: fix reference tuple missing a comma (was one concatenated URL).
- No-op robustness: IL/CA/KS contrib amount defaults now replicate the baseline
  schedule + uprating so activating at default reproduces baseline for all years
  (previously a static snapshot that drifted outside the snapshot year). MS/NJ/NY/IA
  baselines are flat constants, already correct.
- Remove dead KS variable ks_older_dependents_count (defined but never read).
- Tests: append age-limit boundary cases (age==threshold excluded, threshold-1
  included) to all 13 states; strengthen GA to pin ga_dependent_exemption directly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@DTrim99 DTrim99 requested a review from daphnehanse11 July 2, 2026 18:10
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