Add dependent-exemption/credit age-gate contributed reforms for 13 states#8816
Add dependent-exemption/credit age-gate contributed reforms for 13 states#8816DTrim99 wants to merge 3 commits into
Conversation
…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>
Program Review — PR #8816Title: Add dependent-exemption/credit age-gate contributed reforms for 13 states ScopeThis PR is a contrib reform, not a baseline model change. It extends the existing Because the reforms mirror already-reviewed baseline parameters, there was no external PDF/source-document audit — the defaults are validated against the corresponding baseline params in the repo. Reforms add an optional age gate (dependents at/over a threshold are treated differently), plus the ability to override the per-dependent amount (including Note: the PR author is also the reviewer of record here; findings below are stated plainly and specifically for that reason. Critical (Must Fix)
Should Address
Suggestions
What's CorrectDue credit — the following checks all PASSED:
Validation Summary
Consolidated (deduped): 3 Critical, 4 Should, 8 Suggestions. Review Severity: COMMENTReasoning: The three CRITICAL items are all reference-hygiene issues (two missing Next Steps: To auto-fix:
|
…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>
|
CI note for reviewers. The earlier red ✕ on Quick Feedback (Selective Tests + Coverage) was not a test failure — every test that executed passed. Two distinct infra issues:
The last commit fixes (2) structurally: |
…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>
Fixes applied (from the review above)Scope: Critical + Should. Pushed as Critical
Should address
Skipped (by decision)
Verification
🤖 Generated with Claude Code |
What
Adds
gov.contrib.states.{st}.dependent_exemption/dependent_creditcontributed 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), andage_limit(in_effect+threshold):-1sentinel), AZ (age-based schedule)Also adds an
age_limitsub-tree to the existing ARdependent_creditcontrib 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:
amount: 0→ eliminates the dependent portion only (personal exemptions / other credits preserved),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.mdto note the default branch ismain, notmaster(it previously said "PRs targeting master branch").🤖 Generated with Claude Code