Repository navigation
Keep claimable filers' own exemptions under the HI and VA dependent-exemption repeal - #10271
Conversation
…xemption repeal The contributed repeal of state dependent exemptions counted every head and spouse in its Hawaii and Virginia overrides, so it gave a filer whom another taxpayer can claim the exemption the baseline denies (HRS 235-54(a); Va. Code 58.1-322.03(2)(a) with IRC 151(d)(2)). An unclaimed but claimable single filer aged 22 got $1,144 in Hawaii and $930 in Virginia under the repeal against $0 in the baseline. Hawaii now counts own exemptions with head_spouse_count_not_dependent_elsewhere and keeps the baseline's aged gate (aged & head_or_spouse & ~claimable); Virginia keeps the baseline's per-person filer gate (filer & ~claimable). Virginia's $800 aged or blind exemption has no such bar and is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Property tests over an exhaustive grid (each filer not claimable, claimable, claimed or within the claimant filing exception; singles and couples; young, aged and blind/disabled; with and without dependents) and Hypothesis batches: under the repeal each Hawaii and Virginia exemption output equals the baseline for the same return with its dependents removed, never exceeds the baseline, and no claimable filer or dependent gets a Virginia personal exemption. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Hand-off to the US + core hub.
|
PR Review: Keep claimable filers' own exemptions under the HI and VA dependent-exemption repealPR #10271 (author: MaxGhenis). Head SummaryThe contributed reform So a "dependent exemption repeal" raised the exemptions of claimable filers. The PR swaps each override's filer count for the baseline's own gate and drops only the dependent term:
What the change gets right:
Open items: no critical items, no should-address items, and three suggestions. Critical (must fix)None. Should addressNone. Suggestions1. The title and changelog wording read backwards.
2. The new test module imports its strategies from another test module.
3. Track the deferred Delaware and Michigan overrides in an issue.
Verified correctThe law.
The code.
Tests activate the reform.
Hand-checked expectations (all 15 new YAML cases, 2025). HI base $1,144 and aged threshold 65; VA personal $930 and aged/blind $800.
Axiom line assessment
CI status
Branch status
Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
The fix is right. The HI and VA repeal overrides now use the baseline filer gate minus dependents, so a claimable filer gets the same $0 own exemption as under baseline law (HRS 235-54(a); Va. Code 58.1-322.03(2)(a) with IRC 151(d)(2)). Baseline is unchanged, all 13 reformed cases use reforms:, and the merged tree passes the source-conflict ratchet. Three suggestions, including rewording the title, which reads as if the filer gains an exemption. Full report in the comment above.
|
US + core hub merge audit, us#10271 at
|
The contributed repeal of state dependent exemptions (
gov.contrib.repeal_state_dependent_exemptions) gave a Hawaii or Virginia filer whom another taxpayer can claim as a dependent the exemption that the baseline denies. An unclaimed but claimable single filer aged 22 got $1,144 in Hawaii and $930 in Virginia under the repeal, against $0 in the baseline. The repeal should remove dependents and nothing else, so it must never raise such a filer's exemption.The US + core hub found this while reviewing #10044, which fixes the same defect for Rhode Island and Wisconsin. Both bad overrides are already on main and outside #10044.
The law
The baseline already applies these rules (
hi_regular_exemptions,va_personal_exemption_person). The repeal's overrides counted every head and spouse instead (head_spouse_count,is_tax_unit_head_or_spouse).Change
In
repeal_state_dependent_exemptions.py:head_spouse_count_not_dependent_elsewhere, and the aged add-on countsaged & head_or_spouse & ~claimable_as_dependent_on_another_return. That is the baseline's own and aged gate. Only the dependent count is dropped.filer & ~claimable_as_dependent_on_another_return), the baseline's filer gate without its dependent term.va_aged_blind_exemptionis not overridden, so it is unchanged.This uses the same helper as #10044's RI and WI fix and the existing HI dependent-exemption reform.
Non-claimable returns. Hawaii's count moves from
head_spouse_count(2 iffiling_statusis JOINT, else 1) to the number of heads and spouses in the unit who cannot be claimed. With no claimable filer, the two agree whenever filing status is computed, because thefiling_statusformula returns JOINT exactly when the unit has a spouse (tax_unit_married). They can differ only when afiling_statusinput disagrees with the unit's members. In that case the new count follows the baseline, which counts members (exemptions_countreturnstax_unit_sizefor a unit with no claimable filer).Before and after (2025)
hi_regular_exemptionshi_regular_exemptionshi_regular_exemptionshi_regular_exemptionshi_regular_exemptionshi_regular_exemptionshi_regular_exemptionsva_personal_exemptionva_personal_exemptionva_personal_exemptionva_personal_exemptionva_total_exemptionsva_personal_exemptionEvery value was computed with the model at
f9b55fc4dd(main) and at this head. Under the filing exception, the baseline keeps the dependents (Publication 501, Dependent Taxpayer Test); the repeal drops them and keeps the claimable spouse at zero.Invariants
For every return in Hawaii or Virginia:
hi_regular_exemptions,hi_disabled_exemptions,hi_exemptions,va_personal_exemption,va_aged_blind_exemption,va_total_exemptions). The same holds for each filer'sva_personal_exemption_person.policyengine_us/tests/core/test_claimable_filer_hi_va_repeal_invariants.pytests these in two ways:Invariant 1 is a differential test against an independent path: the baseline formulas run on the return without its dependents. It does not re-implement the reform.
Tests
Each file ran alone in a foreground process, with OMP/OpenBLAS/MKL/vecLib/NumExpr capped at 4 threads and
OMP_WAIT_POLICY=PASSIVE.contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yamlcore/test_claimable_filer_hi_va_repeal_invariants.pybaseline/gov/states/hi/tax/income/exemptions/(4 files, each alone)baseline/gov/states/va/tax/income/exemptions/(4 files, each alone)baseline/gov/states/ok/tax/income/ok_count_exemptions.yaml(also applies the repeal)/usr/bin/time -l). These are local measurements, not Linux CI figures. The file falls in Rest Python's existingcoregroup (shard 2); no runner, group or process was added.git diff --check, pass. No microsimulation was run.Impact
create_repeal_state_dependent_exemptions(). They are applied only whengov.contrib.repeal_state_dependent_exemptions.in_effectis true, and it defaults to false.filing_status-input case noted above.policyengine_us/reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py), its tests and the changelog. The change applies only when the contributed repeal is switched on.Review
GPT-6.1 Sol (Subfleet
20261019-085035-us10271-rev1, with a shell) approved atc0ceabd55bwith no P1–P3 findings. It reproduced:It also confirmed the conflicting-
filing_statusedge: two non-claimable filers withfiling_status: SINGLEget Hawaii regular exemptions of $1,144 on main, $2,288 at this head, and $2,288 in the baseline.Follow-ups (not in this PR)
The same reform file has two more overrides that break the "dependents only" invariant on main:
de_personal_creditcounts a claimable filer: with $40k wages, the credit is $0 in the baseline and $110 under the repeal. The override also bypasses the non-refundable credit cap and ordering.mi_exemptions' claimable branch bypasses the overriddenmi_personal_exemptions.#10044 fixes RI and WI. Delaware and Michigan are queued as a separate PR.
axiom: n/a: contributed reform; no statute encodes it (the baseline HI and VA rules are unchanged)
🤖 Generated with Claude Code