Skip to content

Apply Iowa, Kansas, Louisiana and Maryland rules for a filer who can be claimed as a dependent - #10045

Open
MaxGhenis wants to merge 48 commits into
mainfrom
claimable-filer-ia-ks-ky-la-md
Open

MaxGhenis wants to merge 48 commits into
mainfrom
claimable-filer-ia-ks-ky-la-md

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Iowa, Kansas, Louisiana and Maryland each have rules for a filer who can be claimed as a dependent on another return that the model never applied. A return on which the filer (or, if joint, either spouse) can be claimed has no dependents unless the would-be claimant meets the filing exception. That is IRC 152(b)(1); Publication 501 says "you and your spouse can't claim any dependents on your joint return". These states also have their own rules for the claimable or claimed filer. This PR applies the ones the federal fixes do not already cover. Each rule is symmetric between head and spouse and reads the fact its law names, using #10024's split inputs:

  • IRC 152(b)(1) "no dependents" rules read head_or_spouse_is_dependent_elsewhere_without_filing_exception, as the federal formulas do.
  • Rules whose text says "claimed" read the claim (claimed_as_dependent_on_another_return). Iowa's also reads the claiming person's income. Maryland's poverty line credit reads a claim on another Maryland return, an input that defaults to the federal claim.
  • Rules that count federal exemptions (Kansas's 2021-2023 exemptions and food sales tax credit) read claimability, filer by filer (IRC 151(d)(2)).
  • Maryland's own exemption goes to every filer, claimable or not. Tax-General 10-211(a)(1) allows one for "the taxpayer" with no dependency condition, so the booklet's filing status 6 ("You do not get an exemption for yourself") gives way, as on main.

It also fixes one related error in the same formulas (last row of the table). Kentucky claimable-filer coverage follows the federal fixes.

Stacked on the federal claimable-filer PR #10087 (claimable-filer-federal, merged in at 35a2cbc) and on #10024. The 2026-10-09 audit was written before those changes. The rows they already fix are listed below, with the YAML cases that now pin them.

Formula Rule now (fact read) Source
ia_exemption_credit No $40 dependent credits on a return with a claimable filer, outside the filing exception; each filer keeps the personal credit Iowa Code 422.12(1)(a), (2)(a)(3): "Dependent" has its Internal Revenue Code meaning. 2025 IA 1040 instructions: "You may claim a $40 personal exemption credit even if you are claimed as a dependent", and the dependents "you are claiming for federal income tax purposes"
ia_is_tax_exempt, ia_reduced_tax, ia_alternate_tax_eligible (+ new ia_claimed_filer_income_disqualified and claimant inputs ia_dependent_claimant_net_income, ia_dependent_claimant_spouse_net_income, ia_dependent_claimant_filing_status) A filer claimed on another return loses the low-income exemption, the single-filer tax reduction and the alternate tax only when the claiming person's net income exceeds the subsection's limit. The limits are $9,000, or $13,500 for a joint, head of household or surviving spouse claimant, and $24,000/$32,000 when either filer here is 65 or older; a married claimant's combined income also counts against the larger limit. Strictly greater than. The claimant inputs default to no disqualification Iowa Code 422.5(3)(a) (2022) and 422.5(2)(a)-(b) (2024): the dependent "shall not receive the benefit of this subsection if the person claiming the dependent has net income exceeding" the limit
ks_count_exemptions (2021-2023) Each filer whom no other taxpayer may claim (IRC 151(d)(2)), plus dependents only outside a claimable filer (152(b)(1)); a head of household counts only the head K.S.A. 79-32,121(a): $2,250 "for each exemption for which such individual is entitled to a deduction" federally; 2022 HB 2239 § 40
ks_exemptions (2024+) The filing-status allowance stays; no $2,320 dependent exemptions on a return with a claimable filer, outside the filing exception K.S.A. 79-32,121b: "for each dependent for which such taxpayer is entitled to a deduction ... for federal income tax purposes". 2024 K-40 p.6: "enter '0' in the number of dependents box". KDOR FAQ: a claimable taxpayer "will qualify for the personal exemption allowance of $9,160"
ks_fstc (2021-2024) $125 for each federal exemption: each unclaimable filer plus dependent children under 18 (children only outside a claimable filer); the same child count drives the child route K.S.A. 79-32,271(d): "$125 for every exemption claimed on the taxpayer's federal income tax return"; 2022 HB 2106 § 4
la_dependents_exemption (2021-2024) No dependent exemption on a return with a claimable filer, outside the filing exception; own exemptions unchanged IT-540 instructions: Line 6C "dependents claimed on your federal return"; Line 6A "even if someone else claimed you"
md_personal_exemptions_count (new), md_total_personal_exemptions An exemption for each filer, claimable or not, plus dependents only outside a claimable filer (152(b)(1), with the exception); counted locally, not from federal exemptions_count Tax-General 10-211(a)-(b): an exemption for "(1) the taxpayer". 2018 ch. 575, PDF p.1-2 struck (b)(1)'s § 151 reference. 2025 Resident Booklet p.13, Instruction 8: "Each spouse must claim their own personal exemption" and the dependents may not "exceed the overall number of dependents"
md_aged_dependent_exemption None on a return with a claimable filer, outside the filing exception 10-211(b)(2): "each dependent, as defined in § 152" who is 65 or older
federal_eitc_without_age_minimum The childless route also needs no claimable filer outside the filing exception, as in eitc_demographic_eligible 10-704(c)(3)(i) drops "the minimum age requirement" and the § 32(m) limitation for a childless individual; the formula drops only the age (see Other findings); booklet p.22: "otherwise eligible for the federal credit"; IRC 32(c)(1)(A)(ii)(III); Publication 596
md_ctc, md_ctc_eligible No qualified child on a return with a claimable filer, outside the filing exception 10-751(a)(2)(i): "a dependent for purposes of § 152"
is_eligible_md_poverty_line_credit (+ new input md_claimed_as_exemption_on_another_return, which defaults to claimed_as_dependent_on_another_return; md_poverty_line_credit_income_level) No credit when a filer is actually claimed as an exemption on another Maryland return; claimability alone does not exclude. Earned income is the ordinary § 32(c)(2) eitc_earned_income. The poverty level uses the exemptions the individual "is allowed and claims", which include every filer's own 10-709(a)(3)(iii): "who is not claimed as an exemption on another individual's tax return under § 10-211"; (a)(2) for the poverty level
md_aged_dependent_exemption (related fix) Limited by federal AGI like every other (b)(1)-(2) exemption: $1,600/$800/$0 above $100,000 ($150,000 joint) 10-211(c): "the amount allowed for each exemption under subsection (b)(1) or (2)"; booklet chart: "This reduction applies to the additional dependency exemptions as well"

The Iowa, Kansas and Maryland dependent-exemption contrib reforms and the state dependent exemption repeal keep these rules (YAML cases added). In repeal_state_dependent_exemptions.py this PR changes only the Kansas entry; the Maryland entry is main's, which already counts every filer. #10043 and #10044 also edit that file.

Audit rows already fixed by #10024 or the federal branch (not changed here)

  • IA: EITC (federal eitc) and care credit (cdcc_potential). Pinned in ia_eitc.yaml and ia_cdcc.yaml.
  • KS: EITC (eitc) and care credit (cdcc). Pinned in ks_total_eitc.yaml and ks_cdcc.yaml.
  • KY: care credit and tuition credit.
    • The care credit matches the federal credit: pre_obbba_cdcc through 2025 and, from 2026, the live cdcc (Use the OBBBA federal credit for Kentucky's 2026 dependent care credit #10267). Both use the federal qualifying-expense dependency gates, pinned in ky_cdcc_potential.yaml.
    • The tuition credit reads the federal AOC/LLC, barred when either filer is claimed.
    • The family size credit already keeps qualifying children under 152(c) ("even if you are claimed as a dependent").
  • LA: EITC (eitc), refundable and nonrefundable care credits (cdcc_potential, cdcc), and through them the school readiness credit. Pinned in la_eitc.yaml and la_refundable_cdcc.yaml.
  • MD: care credit (cdcc), dependent care subtraction (count_cdcc_eligible, cdcc_relevant_expenses) and local EITC (eitc). The subtraction is pinned in agi/subtractions/md_dependent_care_subtraction.yaml.

No tax formula in these five states reads raw childcare expenses; the raw-expense readers are the child care assistance and cash assistance programs.

Maryland's separate returns: how far this models them

Maryland requires a married filer who can be claimed to file separate Maryland returns (filing status 6 for that spouse). The model keeps the federal joint tax unit and applies each rule per filer where the rule is per filer:

  • Exemptions: each filer gets their own; the spouses split the federal return's dependents, of which it has none outside the filing exception.
  • Poverty line credit: no credit when someone claims either filer as an exemption on another Maryland return; otherwise the joint unit's § 32(c)(2) earnings and the 10-709(a)(2) poverty level.
  • EITC and CTC: no childless EITC and no qualified child.

It does not compute two separate Maryland returns. These still use the joint unit:

  • filing status;
  • the standard deduction;
  • the Schedule I rates;
  • each spouse's own AGI for the exemption phase-down;
  • the poverty line credit's level and tax limit (its AGI test expressly uses joint federal AGI after a joint federal return, even when Maryland returns are separate);
  • the EITC split ("a combined total of up to one-half the federal credit").

A married person can be claimed only if the couple's joint return is "filed only to claim a refund of withheld income tax or estimated tax paid" (Publication 501), so these are low-income couples. From 2025 the two separate flat standard deductions sum to the joint one ($3,350 x 2 = $6,700), but the separate rate schedules can still give a different tax. Computing the two returns needs each spouse's income as on a separate federal return (Instruction 8), a split the Maryland model does not have.

Review r3 (DTrim99, at 0a28338): responses

Finding Response
C1. A claimable Maryland filer lost the own exemption that Tax-General 10-211(a)(1) allows, and with it the poverty level Fixed. md_personal_exemptions_count gives every filer an exemption and keeps the 152(b)(1) dependent gate. The zero-exemption poverty branch is gone, and the Maryland reform and repeal return to main's filer counts. Cases re-derived; new candidate us-md:dependent-taxpayer-own-exemption (reading 12)
S1. The Maryland CTC gate acts alone in 2021-2024 and no test pinned it Fixed. 2024 and 2022 claimable cases expect $0, and a 2024 filing-exception control expects $500 (md_ctc.yaml)
S2. Eight candidates naming this PR still described main Fixed. Each now records follows: statute, the deciding files, the years the code applies and a refreshed note
S3. The Kansas 2021-2023 head-of-household change was unrecorded Fixed. New candidate us-ks:2021-2023-head-of-household-exemption (reading 13); the changelog names the change
S4. Stale axiom issues and invalid n/a items The axiom line stays until the hub replaces it; the hand-off comment drafts the issue updates and two new queued issues
Suggestion 1. Unpinned filing-exception restorations Fixed. One exception case each for ks_fstc, md_aged_dependent_exemption and the Iowa and Maryland reforms
Suggestion 2. The Maryland claim input defaulted to false Done. It defaults to the federal claim; an explicit false covers a claimant who files no Maryland return
Suggestion 3. Stale Kentucky text Done. #10267 moved the 2026 reader to cdcc; the Kentucky limitation and proposed separate PR are removed
Suggestion 4. "§ 10-704 waives only the minimum age" Comment corrected: (c)(3)(i) also waives § 32(m), which the formula still applies. Follow-ups listed under Other findings
Suggestion 5. Stale ks_fstc.yaml comment Fixed
Suggestion 6. Duplicate test location Fixed. The six cases moved to agi/subtractions/md_dependent_care_subtraction.yaml
Suggestion 7. CI cost figures Done. CI cost cites run 41948195035's shard 4 artifacts
Conflict with main Merged main at 13d4d12de5, keeping both appended blocks in repeal_state_dependent_exemptions.yaml

Readings

This round (2026-11-09)

Item What changed What was kept Why
Maryland own exemption (reading 12, new) md_personal_exemptions_count counts every member and drops dependents only when 152(b)(1) leaves the return none. A claimable single filer has 1 exemption ($3,200) and the $15,650 level (was 0 and no level). A joint return with one claimable spouse has 2 ($6,400) and $21,150 (was 1, $3,200 and $15,650). The zero-exemption poverty branch is gone. Main's results return for these filers The 152(b)(1) dependent gate with the filing exception 10-211(a)(1) allows an exemption for "the taxpayer" with no dependency condition; 2018 ch. 575 struck (b)(1)'s reference to the exemptions deductible under § 151
Maryland claim on another return md_claimed_as_exemption_on_another_return defaults to the federal claim; an input of false still models a claimant who files no Maryland return The actual-claim test (reading 10) A Maryland claimant takes an exemption for each IRC 152 dependent (10-211(a)(3))
Kansas 2021-2023 head of household (reading 13, recorded) No code change this round; recorded as a source conflict One filer exemption for a head of household 79-32,121's head-of-household allowance was "for tax year 1998"; 2022 HB 2239 § 40 deleted it

Statute-first changes (2026-11-03)

Following the 2026-10-19 rule (statute over forms and instructions; forms fill gaps) and the 2026-10-20 ruling on the food sales credit, that round changed five readings.

Item What changed What was kept Why
Iowa alternate tax, claimed spouse (reading 4) ia_alternate_tax_eligible now also requires ~ia_claimed_filer_income_disqualified. A 2024 joint return with a claimed spouse whose claimant has $9,001 keeps its $500 regular tax instead of $370.50 2024 deductions $13,500/$32,000 and rate 5.7% 422.5(2)(a)'s dependent bar covers the whole subsection, including (b)'s alternate tax; the worksheet is silent, not contrary
Iowa low-income exemption and tax reduction (reading 3) Exemption and single-filer reduction depend on the claimant's net income (new inputs and helper), not the dependent's $5,000 test. A claimed filer with $6,000 and an $8,000 claimant is exempt; with a $9,001 claimant, tax stays $100 and the reduction no longer erases it Ordinary exemption thresholds; actual claim (not claimability); no Iowa-return restriction 422.5(3)(a)/(2)(a) test the claimant's income; the instructions' $5,000 test departs from it
Kansas 2021-2023 exemptions (reading 1) Count = unclaimable filers + allowable dependents; no whole-return zero; head of household counts 1. Same count in the repeal and Kansas dependent-exemption reforms. Joint, one claimed spouse: $2,250 (was $0); claimable but unclaimed single: $0 (was $2,250) $2,250 per exemption; disabled-veteran allowance 79-32,121(a) incorporates federal entitlement, which IRC 151(d)(2) denies per person on claimability
Kansas food sales tax credit (reading 2) $125 × (unclaimable filers + dependent children under 18), replacing tax-unit size and Line E. 2024 joint with one claimable spouse: $125 (was $250); claimable single: $0 (was $125); head of household with one child: $250 AGI, age/disability and liability limits; $125 through 2024, $0 from 2025 79-32,271(d) counts federal exemptions (ruled 2026-10-20)
Maryland poverty line credit (reading 10) Excludes only a filer actually claimed on another Maryland return (new input); the claimability exclusion and its earned-income wrapper are removed. Since this round, a claimable but unclaimed single filer at $10,000 also has the one-person level, so a $500 potential credit The 10-709(a)(2) poverty-level count (reading 11) 10-709(a)(3)(iii) requires an actual claim; filing status 6 departs from it

All readings

These preserve the PR's choices. Items 3 and 6 identify missing inputs or return representation rather than discretion to ignore an explicit legal requirement. Amounts below illustrate the rule at issue, before unrelated tax limits unless stated.

  1. Kansas 2021–2023 exemptions (statute since 2026-11-03). The K-40 instructions zero the total count when either spouse is claimed (2022 K-40 instructions, PDF p.6). 2023 K.S.A. 79-32,121(a) with IRC 151(d)(2) works per person, on claimability. Worked 2023 joint return, one claimed spouse, other spouse unclaimable, no dependents: statute 1 × $2,250 = $2,250; instructions $0. A claimable but unclaimed single filer: statute $0; instructions $2,250.
  2. Kansas food sales tax credit, 2021–2024 (statute since 2026-11-03). K-40 Line E counts the 2024 filing-status allowance (2024 instructions, "Exemptions and Dependents" and "Lines E through H"). K.S.A. 79-32,271(d) counts federal exemptions. Worked otherwise-eligible 2024 joint return with one claimable spouse and no dependents: statute 1 × $125 = $125; Line E 2 × $125 = $250. An otherwise-eligible claimable single filer: $0 versus $125, before the general tax-liability cap. The inherited disabled-veteran omission is listed under Not modeled.
  3. Iowa low-income exemption: claimant income (statute since 2026-11-03). Iowa Code 422.5(2)(a), PDF p.7 conditions the dependent exclusion on the claimant exceeding the income limit; the 2022 instructions, PDF p.37 use the $5,000 dependent test and an Iowa-return claim. Worked 2022 claimed single filer with $6,000 net income and a single claimant with $8,000: statute exempt, tax $0; instructions not exempt. A non-Iowa claimant raises the analogous jurisdiction-input choice; the model has no Iowa-return restriction.
  4. Iowa alternate tax (statute since 2026-11-03). The 2024 alternate worksheet repeats no dependent bar; 2024 Code 422.5(2)(a)–(b), PDF p.7 applies the dependent exclusion to the whole subsection. Worked 2024 joint return, one claimed spouse, modified income $20,000, ordinary tax $500, claimant income $30,000: statute $500; worksheet min($500, ($20,000 − $13,500) × 5.7%) = $370.50.
  5. Maryland dependents on separate returns. Keep Instruction 8's overall dependent pool as the federal joint return's, which has none when either filer is claimable outside the claimant filing exception (2025 booklet, PDF p.13; Publication 501, PDF p.11). The alternative computes a pro forma separate federal dependent pool for the unclaimable spouse. Worked 2025 couple with one claimable spouse, an otherwise qualifying child age 4 and AGI $2,000: PR $6,400 of exemptions and $0 CTC; alternative $9,600 and $500 CTC, under 10-211(a)(3), (b) and 10-751(a)(2)(i).
  6. Maryland separate returns — model limitation. Keep the per-filer rules on one federal joint unit; a full two-return computation remains outside this PR. Filing status 6 and Instruction 8, PDF pp.12–13 require separate Maryland returns. Worked 2025 example: no children, claimable spouse earnings $10,000, other spouse earnings $5,000, no adjustments. Current aggregate taxable income is $15,000 − $6,700 − $6,400 = $1,900; separate taxable incomes total max(0, $10,000 − $3,350 − $3,200) + max(0, $5,000 − $3,350 − $3,200) = $3,450. The poverty-credit AGI test still uses joint federal AGI for separate Maryland filers after a joint federal return (booklet, PDF p.23).
  7. Louisiana school readiness credit, incapable child. Keep the inherited care-credit route: IRC 21(b)(1)(B) disregards 152(b)(1) for an incapable qualifying person; R.S. 47:297.4(A) imports that credit and 47:6104(A) multiplies it by facility rating. The alternative imposes a separate legal-dependent gate from the 2023 instructions, PDF p.16, which use "qualified dependent". Worked 2023 claimable filer, incapable child age 4, $1,000 qualifying care, $10,000 AGI/earnings, five-star facility: PR federal credit $350, Louisiana care credit $175, school readiness $175 × 200% = $350; alternative $0.
  8. Maryland filing exception and the dependent-taxpayer chart. Keep the statutory reading: 10-211(a)(3), (b)(1) allows an actual IRC 152 dependent when the claimant filing exception preserves that dependent. Chart 10A's dependent-taxpayer "Each Exemption" column is $0 (2025 booklet, PDF p.12). Worked low-AGI 2025 single claimable filer, claimant filing exception true, one qualifying child: PR 2 × $3,200 = $6,400 (the child's, plus the filer's own under reading 12); chart $0.
  9. Kansas 2024+ actual claims versus federal dependent entitlement. Keep the federal-entitlement reading in K.S.A. 79-32,121b(a)(3), which preserves an eligible dependent under the claimant filing exception. The alternative follows the 2024 K-40 instructions, PDF p.6: a taxpayer actually claimed elsewhere enters zero dependents. Worked 2024 single filer, actually claimed, claimant filing exception true, one eligible child: PR $9,160 + $2,320 = $11,480; instructions $9,160. The Kansas dependent-exemption reform applies the same 152(b)(1) gate.
  10. Maryland poverty credit: actual claim versus claimability (statute since 2026-11-03). The 2025 booklet, PDF pp.12 and 23 bars every filing status 6 filer; Tax-General 10-709(a)(3)(iii) excludes only a filer actually claimed. Worked 2025 claimable single filer whom no one claims on a Maryland return, $10,000 of earnings, $600 of State tax, no EITC: statute min($600, 5% × $10,000) = $500; booklet $0. The Maryland claim input defaults to the federal claim, so a filer claimed federally is excluded unless the input says otherwise.
  11. Maryland poverty threshold: allowed exemptions versus persons on the federal return. Keep the allowed-and-claimed exemption count in Tax-General 10-709(a)(2); the 2025 worksheet, PDF p.23 uses "the number of persons in family/household on your federal tax return". Since every filer now keeps an exemption (reading 12), both counts agree for every unit the model builds. A 2025 joint return with one claimable spouse counts 2 and uses $21,150 either way. They part only on a separate Maryland return, which the model does not compute: 1 exemption and $15,650 versus 2 persons and $21,150.
  12. Maryland own exemption (new this round). Keep Tax-General 10-211(a)(1): an exemption for "the taxpayer", with no dependency condition since 2018 ch. 575. The 2025 booklet, PDF p.12, filing status 6: "You do not get an exemption for yourself." Worked 2025 claimable single filer, $10,000 of earnings, $600 of State tax, no Maryland claim: statute 1 × $3,200 and the $15,650 level, so a $500 potential poverty credit; booklet $0 and no credit. A joint return with one claimable spouse: 2 × $3,200 = $6,400 versus $3,200.
  13. Kansas 2021–2023 head of household (recorded this round). Keep K.S.A. 79-32,121: its head-of-household exemption was "for tax year 1998", and 2022 HB 2239 § 40 removed the sentence. The 2021, 2022 and 2023 K-40 instructions say "you are allowed an additional Kansas exemption". Worked 2022 head of household with one child: statute 2 × $2,250 = $4,500; instructions 3 × $2,250 = $6,750.

Not modeled (listed, not implemented)

  • IA: early childhood development credit and tuition/textbook credit (per dependent, 422.12(2)(b), 422.12C(2)); rent reimbursement program ("not ... claimed as a dependent").
  • KS: 2025+ additional newborn allowance and stillbirth exemption; the homestead refund's dependent-child route; the inherited omission of disabled-veteran exemptions from the food-credit Line E count (2024 instructions, PDF p.6). An otherwise eligible single disabled veteran has $125 in the current model versus 2 × $125 = $250 under the Line E reading, before the tax-liability cap.
  • LA: school tuition, homeschool and public-school expense deductions (claimed dependents, current or preceding year).
  • MD: 2021 RELIEF Act payment (excluded "Persons claimed as a dependent").

Other findings (not fixed here)

Invariants

  1. Swap invariance. Every changed output, and each of the five states' income taxes, is the same under either head/spouse labelling.

  2. Monotonicity. Marking another filer as claimed never raises:

    • the dependent-based amounts;
    • the Kansas exemptions and food sales tax credit;
    • the Maryland exemption count and amount, CTC and pro forma EITC.

    Left out by design:

    • Taxes and the Iowa exemption: the Iowa exemption turns on an actual claim and the claimant's income, not on claimability, so it can newly exempt.
    • Maryland's poverty line credit amounts: they rise when lost exemptions raise the tax they offset.
  3. Identities. With a filer claimable outside the filing exception: no Louisiana dependent exemption, no Maryland aged dependent exemption or CTC, and no pro forma EITC without a child. Every Maryland filer keeps an exemption, so the count covers both spouses and the poverty level is positive.

  4. Differential. Wherever the federal EITC's eligibility holds, Maryland's federal_eitc_without_age_minimum equals the federal credit before take-up and filing.

  5. Unchanged when nobody can be claimed. The Maryland count equals tax_unit_size. The poverty level equals tax_unit_fpg. The tested la_dependents_exemption amount is $1,000 per dependent. The hub microsimulation will check the remaining outputs; the exceptions are the aged dependent AGI fix and the 2021-2023 Kansas head-of-household count.

  6. Filing-exception scope. The exception never lowers the 152(b)(1) amounts. It does not change Iowa's exemption (an actual-claim rule) or Maryland's poverty line credit exclusion (an actual Maryland claim).

Tests

  • YAML. Variable-named cases cover every changed formula and the inherited state readers above:

    • a single claimable filer, with an unclaimed single control where it differs;
    • a joint return with one claimable spouse, under both head/spouse labellings;
    • a joint return with both spouses claimable;
    • a joint return with nobody claimable;
    • claimable-but-unclaimed cases for the actual-claim rules;
    • filing-exception cases for the 152(b)(1) rules, now including the Kansas food sales credit, the Maryland aged dependent exemption and the Iowa and Maryland reforms.

    Expected values come from the law and the repository parameters, with the arithmetic in each case's comments.

  • This round's cases (at 994d9fab52):

    • md_personal_exemptions_count.yaml: every claimable-filer case re-derived under 10-211(a)(1) (single 1, joint 2, joint with the filing exception 3), plus a 2022 claimable single filer (1, $3,200).
    • md_total_personal_exemptions.yaml, dependent_exemption_reform_test.yaml (Maryland) and repeal_state_dependent_exemptions.yaml: a claimable single filer $3,200; a joint return with a claimable spouse 2 × $3,200 = $6,400.
    • is_eligible_md_poverty_line_credit.yaml: a claimable single filer at $10,000 has 1 exemption, the $15,650 level and a $500 potential credit; at $12,000, $600. A filer claimed federally is claimed in Maryland by default ($0). Joint returns with one or both spouses claimable use $21,150 (credits $900 and $50); with the filing exception and a child, $26,650.
    • md_poverty_line_credit_income_level.yaml: under the federal exemption repeal, a joint return with a claimable spouse, the filing exception and a child counts 3 and uses $26,650.
    • md_ctc.yaml: 2024 and 2022 claimable filers get $0 although md_ctc_eligible holds; a 2024 filing-exception control gets $500.
    • Filing-exception cases: ks_fstc.yaml ($125 for the child), md_aged_dependent_exemption.yaml ($3,200), the Iowa reform ($80 + $100 = $180) and the Maryland reform (2 × $3,200 + $1,000 = $7,400).
  • Property test. policyengine_us/tests/core/test_claimable_filer_ia_ks_ky_la_md_invariants.py checks invariants 1-6 with Hypothesis (claimable, claimed and filing-exception draws), a seeded population in the five states for 2022, 2024 and 2026, and an exception-scope population for 2022 and 2025. Every Hypothesis batch now also includes the Maryland couple with both spouses claimable and no dependents, which had no Maryland exemption before this round.

  • Results at 994d9fab52, one file per process: 17 files, 320 cases passed, no failures; every file this round changes, plus test_source_conflicts.py, test_md_poverty_line_credit_invariants.py and federal_eitc_without_age_minimum.yaml (whose formula's comment changed).

CI cost

The property test runs in the existing Rest Python "core-2" group (shard 4). In run 41948195035 at 0a28338641, its six cases took 10.34 s of test time, and the group ran 266 tests in 19:45 wall with 6.45 GiB peak RSS (6,763,476 kB), from the shard's timing and resource artifacts. This round adds one couple to each Hypothesis batch, in the same simulation. It builds no new simulation. I ran the file locally (Linux, 4 vCPU), alone and back to back. At the merged head 13d4d12de5 it took 102 s wall (33.14 s in pytest) with 2,144 MiB peak RSS; at the final head, 93 s (28.91 s) with 2,140 MiB. The difference is within run-to-run noise. These are local figures, not Linux CI results. In this round's run 42642815203, the planner put the file in group core-1 (shard 4): its six cases took 14.58 s, and that group ran 588 tests in 27:34.30 wall with 7.05 GiB peak RSS. The groups differ between the two runs, so the group figures don't compare directly.

Microsimulation impact

impact: pending a comparison at the final head.

We'll run the default dataset for 2023 (Kansas's consolidated regime), 2025 and 2026, comparing this branch with main. If the dataset sets the dependency inputs for nobody, two changes move baseline totals: Maryland's aged dependent exemption gets the federal AGI limit, and each 2021-2023 Kansas head-of-household return loses one $2,250 exemption (reading 13). The Maryland own exemption now matches main. The Maryland claim input defaults to the federal claim input, so any federal claims in the data would also bar the poverty line credit.

axiom: TheAxiomFoundation/rulespec-us#1799 queued (IA: dependent credits, bounded low-income exemption/tax reduction, EITC/CDCC) | TheAxiomFoundation/rulespec-us#1800 queued (KS: 2024-2025 lawful dependent allowance, EITC/CDCC) | K.S.A. 79-32,271 n/a: expired after 2024 and unencoded | Louisiana 2021-2024 dependent exemption n/a: expired and unencoded | TheAxiomFoundation/rulespec-us#1801 queued (MD: exemptions/aged AGI limits, CTC, sourced EITC/poverty/care composition) | TheAxiomFoundation/rulespec-us#1802 queued (KY: 2024 care and tuition composition) | TheAxiomFoundation/rulespec-us#1793 queued (KY: 2026 care conformity) | TheAxiomFoundation/rulespec-us#1803 queued (LA: EITC, ordinary care/school readiness) | TheAxiomFoundation/rulespec-us#1621 queued (federal: childless EITC dependency gate/claimant exception) | TheAxiomFoundation/rulespec-us#1684 queued (federal: lawful dependency stack) | contrib reforms n/a: PE-only reform.

Review history

  • r1 (at 704a604). Maryland counts its own exemptions, so the federal repeal_dependent_exemptions reform no longer reaches it. The changelog names the aged-dependent AGI limit. The property test checks the nobody-claimable identities. Iowa wording and anchors, and a Louisiana 2023 reference, were fixed.
  • r2 (at 5e4bd89). The Kansas contrib reform's eligible-dependent count, readings 9-11, the Kansas food-credit narrative, swapped joint cases in ks_fstc.yaml, an Iowa page comment and the property-test cost. Its earned-income source change was later reversed (round 4), and Use the OBBBA federal credit for Kentucky's 2026 dependent care credit #10267 fixed Kentucky's 2026 reader.
  • 2026-11-03. The statute-first round above (readings 1-4 and 10).
  • Rounds 4-5 (at c9e4bf3, 0a28338). Main's poverty earned-income cases restored, and mixed-spouse poverty cases added. Round 4's zero-exemption poverty level was removed this round, since every filer now has an exemption.
  • r3 (DTrim99, at 0a28338). This round; see Review r3 above.

🤖 Generated with Claude Code

MaxGhenis and others added 19 commits October 8, 2026 11:03
The federal standard deduction and 17 state formulas read only whether the
tax-unit head is claimed elsewhere, so a joint return where one spouse can be
claimed was taxed differently depending on which spouse was labelled head.
Each formula now applies its jurisdiction's rule for that case (either spouse,
single filers only, per spouse, or only when every filer is claimed), using
two new label-independent helpers. Adds swap-pair YAML cases and a Hypothesis
property test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… barred

The New Mexico, Maine and Hawaii renters gates counted filers who are not
claimed elsewhere, so a tax unit with neither a head nor a spouse (252 in
the default dataset) looked like one whose every filer was claimed. A new
helper, every_filer_is_dependent_elsewhere, requires a claimed filer and no
unclaimed one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ss EITC

- Hawaii's dependent standard deduction uses earned income net of the
  deductible part of self-employment tax, as the N-11 worksheet does.
- New Mexico's medical care credit needs a filer who is both 65 or older
  and not a dependent when a filer is a dependent elsewhere (NMSA 7-2-18.13).
- The federal EITC without a qualifying child requires that no filer can be
  claimed as a dependent (IRC 32(c)(1)(A)(ii)(III), Publication 596), so
  Missouri's working family credit no longer reaches such a couple.
- Hawaii's food/excise credit keeps minor children receiving public support
  (HRS 235-55.85(c)) on a joint return where one spouse can be claimed.
- Comments label the readings the law does not settle, and the property
  test covers the EITC and the food/excise exemption amount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… meaning

- The federal and Oregon dependent worksheets use earned income net of the
  deductible part of self-employment tax, as Hawaii's now does.
- Hawaii's food/excise minor-child count excludes children who can be
  claimed by another taxpayer and the filers themselves (Form N-311 line 3).
- claimed_as_dependent_on_another_return documents what it stands for: a
  §151 deduction for the person is allowable to another taxpayer, so a
  person whose would-be claimer files only for a refund is not one
  (Publications 501 and 596); rules on actually being claimed read it too.
- Hawaii's renters comment labels the mixed joint reading as an inference;
  the Hawaii dependent threshold cites HRS 235-2.4(a)(3) on its page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A filer who can be claimed on another return is treated as having no
dependents (IRC 152(b)(1); on a joint return either spouse counts) and has no
personal exemption (IRC 151(d)(2)); one who is claimed gets no education
credits (25A(g)(3)), student loan interest deduction (221(c)) or recovery
rebate (6428(d)(2), 6428A(d)(2), 6428B(c)(2)). The model read none of these.
Now the child tax credit and credit for other dependents, the under-13 child
and dependent care qualifying person, exemptions_count and its RI, DE, OH, OR,
WI, HI and NM readers, the recovery rebates, the education credits and the
student loan interest deduction apply them symmetrically for joint returns.
Georgia keeps its own counts; the HI, WI and Treasury exemption reforms
follow the corrected count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…endent

A return on which the filer (or, if joint, either spouse) can be claimed as a
dependent has no dependents (IRC 152(b)(1)), and these states never applied
that or their own rules for such a filer. Now:
- Iowa: no $40 dependent credits (the personal credits stay, "even if you are
  claimed"); a claimed single filer is exempt from tax only with income below
  $5,000, a joint return with a claimed spouse is not exempt, and the single
  tax reduction worksheet excludes a claimed filer.
- Kansas: a claimed filer has no exemptions in 2021-2023 ("enter '0' in the
  Total Kansas exemptions box"); from 2024 the filing-status allowance stays
  and dependents are zero; the food sales tax credit counts exemptions the
  same way and has no child route.
- Louisiana: no dependent exemption (2021-2024).
- Maryland: no own exemption for a filer who can be claimed (filing status 6)
  and no dependent or aged-dependent exemptions; no child tax credit; no
  childless EITC on the pro forma federal credit without the minimum age; the
  poverty line credit is barred for a claimable filer and, on a joint return,
  kept for the other spouse on that spouse's earnings with the poverty level
  for the exemptions that spouse may claim (10-709(a)(2)).
The Iowa, Kansas and Maryland dependent-exemption contrib reforms and the
state dependent exemption repeal keep these rules.

Kentucky needs no change: its care and tuition credits read the federal
credits the base branch already corrects; YAML cases pin that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tax-General 10-211(c) limits "the amount allowed for each exemption under
subsection (b)(1) or (2)" once federal AGI exceeds $100,000 ($150,000 joint,
head of household or surviving spouse), and the Resident Booklet's chart says
"This reduction applies to the additional dependency exemptions as well". The
aged dependent exemption ((b)(2)) was a flat $3,200 at any income; it now
takes the same per-exemption amount as the personal exemption.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Child and dependent care: childcare expenses do not count on a return with a
  claimable filer unless a child under 13 still qualifies (IRC 21(b)(2)(A)(ii)).
- Tuition and fees deduction: not allowed to a filer who can be claimed (IRC
  222(c)(3)), so the education credit bar no longer makes such a filer eligible.
- Recovery rebates: the Armed Forces exception waives the identification rule
  only, not the exclusion of a spouse who is another taxpayer's dependent.
- Georgia: the contributed refundable credit and SB 520 reforms count the same
  children as ga_ctc_potential through a new ga_ctc_eligible_child.
- Education credits and student loan interest read the claimed input directly,
  since IRC 25A(g)(3) and 221(c) turn on an actual claim.
- One reference per source document; quote IRC 24(h)(4)(A) exactly.
- Tests: mixed-recipient care, tuition deduction, military rebates, Georgia
  refund cap, and the swapped New Mexico rebate case; the property test now
  covers the state readers of the exemption count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	policyengine_us/tests/policy/baseline/gov/states/oh/tax/income/exemptions/personal/oh_personal_exemptions_eligible.yaml
#10024 now separates three facts: is claimed, can be claimed, and the would-be
claimant's filing exception.

- IRC 152(b)(1) gates (child tax credit, credit for other dependents, under-13
  care child and its expenses, dependents in exemptions_count, ARPA dependents,
  Ohio dependents, the Hawaii and Wisconsin reforms) read
  head_or_spouse_is_dependent_elsewhere_without_filing_exception, so a filer
  within the Publication 501 exception keeps their dependents.
- Own exemptions, recovery rebates and the tuition deduction read claimability.
- Education credits and student loan interest keep reading the claimed input.
- Tests: the filing exception and a filer who can be claimed but is not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#10024's food/excise credit, Act 115 rebate and renters credit took claimable
filers off exemptions_count themselves. exemptions_count now leaves them out
(and, outside the filing exception, the return's dependents), so those credits
read it as it is; the filing-exception cases were one exemption short.

The renters credit also leaves out a dependent who can be claimed by another
taxpayer (Schedule X counts only people who cannot be), as the food/excise
credit already did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Education credits: a dependent student is not eligible on a return whose
  filer can be claimed outside the filing exception (IRC 25A(f)(1)(A)(iii),
  152(b)(1)); the filer's own eligibility still turns on an actual claim.
- Recovery rebates: no credit when every filer is a dependent of another
  taxpayer (IRC 6428B(a)); the CARES and CAA child prerequisite is a spouse
  with a valid SSN, whether or not that spouse is an eligible individual.
- Child and dependent care: cdcc_qualifying_childcare_expenses holds the
  expense rule, and the single-parent work requirement reform and California's
  expenses read it.
- References: Georgia HB 136 page 3; one entry per recovery rebate statute;
  quote IRC 24(h)(4)(A) exactly in the test comment.
- Tests: dependent students, the two rebate cases, the reform and California
  expenses, and the Hawaii, Wisconsin and Treasury reforms with a claimable
  filer under both labellings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Education credits: is_barred_from_education_credits_by_dependency holds the
  claimed-filer and dependent-student rules; both eligibility formulas and the
  reconciliation SSN reform's Lifetime Learning Credit read it, so the reform
  no longer turns a barred student's tuition into that credit.
- Child and dependent care: childcare counts when any child under 18 is still a
  qualifying individual, so an incapacitated child aged 13 to 17 keeps it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Setting meets_eitc_identification_requirements on one person made it an input
for every person, so the other spouse lost their SSN too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 3 commits October 11, 2026 12:03
#10024 now separates claimability (`claimable_as_dependent_on_another_return`)
from an actual claim (`claimed_as_dependent_on_another_return`) and adds the
claimant filing exception. Each rule now reads the fact its law names:
- IRC 152(b)(1) "no dependents" rules (Iowa dependent credit, Kansas
  dependents and food sales tax credit child, Louisiana dependent exemption,
  Maryland dependents, aged dependents and CTC, and the childless pro forma
  EITC) read `head_or_spouse_is_dependent_elsewhere_without_filing_exception`,
  as the federal formulas do.
- Rules whose text says "claimed" read the claim: Iowa's low-income
  exemption and tax reduction ("not claimed as a dependent on another
  person's Iowa return") and Kansas's 2021-2023 zero exemptions ("If you are
  claimed as a dependent").
- Maryland's filing status 6 ("Any person who can be claimed") keeps reading
  claimability for the own exemption and the poverty line credit.
Maryland now counts its own exemptions in `md_personal_exemptions_count`
instead of reading federal `exemptions_count`, so a federal-only reform of
that count no longer changes Maryland's exemptions (review r1 finding 1).
The changelog names the aged dependent AGI limit (r1 finding 2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases for a filer who can be claimed but is not claimed (Iowa
exemption and tax reduction, Kansas 2021-2023 exemptions) and for a
claimant who meets the filing exception (Iowa dependent credit, Kansas 2024
dependent exemption, Louisiana dependent exemption, Maryland exemption
count, CTC and pro forma EITC, and the poverty line credit, which the
exception does not restore). New md_personal_exemptions_count.yaml.

The property test now draws claimable, claimed and filing-exception
patterns, checks the unchanged-when-nobody-is-claimable identities
(review r1 finding 3) and adds a filing-exception scope test.

Also: the 2021 Iowa exemption anchor is page 38, not 37; Louisiana's 2023
instructions are cited; 422.13(1)(a) is labelled as the filing requirement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tax-General 10-709(a)(2) keys the applicable poverty income level to the
exemptions the individual "is allowed and claims", and HHS lists guideline
amounts only from one person up. The level formula fed a zero exemption count
to fpg and got a negative-person extrapolation ($10,150 in 2025), so a
claimable single filer earning up to that amount passed (a)(3)(i) and (ii).
Return 0 at zero exemptions and require a positive count for eligibility; a
claimable filer whose dependent the claimant filing exception allows keeps a
level and faces only the (a)(3)(iii) actual-claim test.

Restore main's md_poverty_line_credit_earned_income.yaml, which this PR had
deleted, so main keeps its 12 regression cases, and re-add round 2's two
pretax-contribution cases with only eitc_earned_income, eligibility and credit
outputs. Supply one exemption alongside the 15,650 level in the (iii)
witnesses and say both are supplied to isolate that test. Restore the
"every filer claimable and no exemption allowed: no credit" identity in the
property test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ready for hub review
c9e4bf3

Round 4 fixes for the review at 6d5a3cbfdd (P1-1, P2-1, P2-2, P2-3, P3-2). Two commits on top of the assigned head: 41276e3391 (merge main) and c9e4bf30f8 (fixes). Nobody else pushed to the branch while I worked; the remote head was still 6d5a3cbfdd just before my push.

Items

1. Pick-up and merge. Posted the pick-up comment. Merged origin/main (25c4253483) with a merge commit, 41276e3391. No files conflicted; repeal_state_dependent_exemptions.py merged untouched.

2. P2-1: main's test file restored. git checkout origin/main -- .../poverty_line/md_poverty_line_credit_earned_income.yaml. Its 12 cases are byte-identical to main (git diff origin/main shows only additions), and git diff --diff-filter=D <merge-base> HEAD now lists no deleted file.

  • Re-added round 2's two pretax-contribution cases from e0eaf477c9 (md_poverty_line_credit_earned_income.yaml:332 and :371, "2025 pretax contributions reduce poverty credit earnings when the claimable spouse is the head / spouse"). I dropped their md_poverty_line_credit_earned_income, adjusted_gross_income and md_poverty_line_credit_income_level outputs, so they read only eitc_earned_income (14,000), is_eligible_md_poverty_line_credit (true), md_poverty_line_credit_potential (700) and md_local_poverty_line_credit (448). Both are mixed-spouse cases: one claimable spouse with no income, the other with $16,000 wages − $2,000 pretax.
  • I did not re-add round 2's $500/$500 mixed-spouse cases. They assert the removed wrapper's per-spouse earnings (500); under the joint eitc_earned_income their expected values would change (25 → 50), so they'd be new cases rather than restored ones. The pretax pair already covers the one-claimable-spouse joint unit under both labellings.

3. P2-2: no poverty level at zero exemptions.

  • md_poverty_line_credit_income_level.py:32-36: for a return with a claimable filer, the level is fpg(count) when md_personal_exemptions_count > 0 and 0 otherwise. The nobody-claimable branch still returns tax_unit_fpg. Added the 2025 booklet p.23 to its references.
  • is_eligible_md_poverty_line_credit.py:36,73: eligibility now also requires md_personal_exemptions_count > 0. I updated the (iii) comment (lines 53-56) to say that a claimable filer with no allowed exemption fails through the level, while one with an allowed dependent faces only (iii).
  • The claimant filing-exception path is unchanged: count 0 + 1 dependent = 1, so it keeps a level.
  • New cases in is_eligible_md_poverty_line_credit.yaml compute the level rather than supplying it:
Line Case (2025) Count Level Eligible Potential
157 claimable unclaimed single, AGI = earnings = 12,000, tax 600, EITC 0 0 0 false 0
188 same at 10,000 (the head gave true, since 10,000 < 10,150) 0 0 false 0
219 same with zero income and 100 tax (isolates the count gate) 0 0 false —
249 claimable single filer, filing exception, child age 4, 10,000 1 15,650 true 500
286 same, md_claimed_as_exemption_on_another_return true 1 15,650 false 0

Hand values:

  • Line 249: filing status 6 gives no own exemption, and the filing exception keeps the child, so 0 + 1 = 1. The 2025 contiguous guideline for 1 is 15,650. AGI and earnings 10,000 ≤ 15,650; EITC 0 < tax 600; no Maryland claim; min(600, 5% × 10,000) = 500.
  • Line 286: the same count and level; (a)(3)(iii) alone fails.
  • Lines 157/188: count 0, so level 0 and AGI > 0 fails (i).
  • Line 219: 0 ≤ 0 passes (i) and (ii), and 0 < 100 passes (iv), so only the count gate makes it false.

This filing-exception case is built the same way as md_personal_exemptions_count.yaml:29 (single filer, claimable_as_dependent_on_another_return and dependent_claimant_filing_exception, child age 4).

4. P3-2: witness wording. In is_eligible_md_poverty_line_credit.yaml:53-58, the header now says the three cases supply a level of 15,650 and one allowed exemption to isolate the (a)(3)(iii) test, and that neither is the filer's own. Each case's output comment (lines 85-86, 115-116, 147-148) now refers to the supplied level. Judgment call: each witness now also supplies md_personal_exemptions_count: 1. Without it, the new count gate would make witnesses 1 and 3 false, and witness 2 would stop isolating (iii): a claimable single filer has 0 allowed exemptions. Lines 249/286 carry the real allowed-exemption path with nothing supplied.

5. P1-1 / P2-3: body. I made every replacement as given: the Microsimulation impact paragraph, the "Poverty line credit" bullet under Maryland's separate returns, invariants 2 (phrase, list item, deleted paragraph), 3, 5 and 6, the reading 11 addition, and the r1 response 3 marker. Other sentences these changes made false, also fixed:

  • Table row for is_eligible_md_poverty_line_credit: adds "a filer with none allowed has no level and no credit".
  • Reading 10 in the statute-first table: "Claimable but unclaimed filer: $500 potential credit (was $0)" now reads "...whose claimant filing exception keeps a dependent: $500 potential credit (was $0); with no allowed exemption the filer still gets $0, through reading 11".
  • "Items 5-9 and 11 below are kept as they were" now notes round 4's addition to item 11.
  • Reading 10's prose now notes that the $500 holds only where the filing exception keeps a dependent.
  • Invariant 5's "the only exception is the aged dependent AGI fix" was false given P1-1. It now names both that fix and the 2021-2023 Kansas head-of-household count.
  • r1 response 6 and the follow-up's item 6 said Maryland needs per-person earned-income sources. Both are marked superseded: round 4 uses the joint eitc_earned_income.
  • The property test restores invariant 3 as every_filer_is_dependent_elsewhere & md_personal_exemptions_count == 0 ⇒ no eligibility, md_poverty_line_credit or md_local_poverty_line_credit (test_claimable_filer_ia_ks_ky_la_md_invariants.py:130-143), and its docstring matches.
  • I read the body back after the PATCH; it matches what I sent. The axiom: line is byte-identical. There is still no impact: line (left for the hub).
  • The changelog fragment gains "a filer with no allowed Maryland exemption has no poverty level and so no credit".

Tests at c9e4bf30f8 (one file per process)

File Result
.../md/.../poverty_line/is_eligible_md_poverty_line_credit.yaml 12 passed
.../md/.../poverty_line/md_poverty_line_credit_earned_income.yaml (main's 12 + 2) 14 passed
.../md/.../poverty_line/md_poverty_line_credit_income_level.yaml 2 passed
.../md/tax/income/exemptions/md_personal_exemptions_count.yaml 8 passed
core/test_claimable_filer_ia_ks_ky_la_md_invariants.py 6 passed
test_md_poverty_line_credit_invariants.py 16 passed
code_health/test_source_conflicts.py 103 passed
Total 36 YAML + 125 Python passed, 0 failed

The Python dependencies came from uv sync --extra dev. ruff format --check and ruff check pass on the three changed Python files. I ran no full suites and no microsimulations.

Mutants (each in its own process, code restored after each and checked with git diff --stat)

Mutant Result
A: level back to fpg(md_personal_exemptions_count, ...) at zero (gate kept) Killed by is_eligible_md_poverty_line_credit.yaml:188 "2025 claimable but unclaimed single filer at 10,000 …" and :157 (12,000): level 10,150 ≠ 0. 2 failed, 9 passed
B: A plus the count gate removed (the head's behaviour) Killed by the same two cases (2 failed, 9 passed). A direct calculation shows the 10,000 filer eligible with potential 500, and the 12,000 filer ineligible
C: count gate removed, zero level kept First survived (with a level of 0, any positive AGI already fails (i)). I added line 219 (zero income, 100 tax); it is now killed (1 failed, 11 passed)

test_claimable_filer_ia_ks_ky_la_md_invariants.py still passes 6 under mutant B, so the restored invariant 3 assertion is sound but doesn't kill B. Its drawn and seeded units don't reach a zero-exemption filer whose income is at most 10,150 and whose Maryland tax is above the EITC. The YAML cases are what kill B.

CI

Pull request run 41854527358 at c9e4bf30f8: still in progress at 16:08Z, 60 minutes after the push (started 15:07Z). So far 27 of 36 jobs have passed and none has failed. The passed jobs include Household API Partners, all four Baseline states shards and every other Baseline shard (household, reform, contrib-hhs, irs, ssa-usda, rest-a, rest-b), and the 11 other Python test jobs. Still running: Microsimulation and eight Contrib shards (states 1-4, congress, other-1, other-2b, other-3). Per the brief, I'm handing off with the run URL rather than waiting longer.

Judgment calls

  • Supplying md_personal_exemptions_count: 1 in the three (iii) witnesses (item 4 above).
  • Re-adding only the pretax pair, trimmed, and not the $500/$500 mixed-spouse pair (item 2 above).
  • Adding the zero-income case at line 219, to kill mutant C.
  • Marking r1 response 6 and the follow-up's item 6 as superseded, in addition to the three P2-3 sentences.
  • Invariant 5's microsimulation-exception sentence now names the Kansas head-of-household change.

What I couldn't check

  • The 2025 Resident Booklet. marylandcomptroller.gov and web.archive.org were both refused (proxy 403), so I haven't read the p.23 filing status 6 sentence myself. The code comments paraphrase it without quoting, and the body's reading 11 addition is the brief's text.
  • The 10-709 statute text (not fetched this session; the quotes are the existing code's and the brief's).
  • Population impact, including the 2023 Kansas head-of-household run. Left for the hub, as are the impact: and axiom: lines.

Proposed follow-up

Add a zero-exemption Maryland unit to the claimable-filer property generator. Seed a claimable single filer with income below 10,150 and positive Maryland tax, so that invariant 3's new assertion can fail on its own. Today only the YAML cases kill the zero-person extrapolation.


Generated by Claude Code

@MaxGhenis

MaxGhenis commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor Author

Hub review in progress

Superseded by the final round 5 review: #10045 (comment)


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ready for hub review
VERDICT: APPROVE
c9e4bf3
METHODOLOGY_CHOICE: yes

This is a round 5 delta review of 6d5a3cbfdd..c9e4bf30f8 against the round 4 review. The head hasn't moved since the hand-off. It holds two commits:

  • 41276e3391 merges main 25c4253483. git show --remerge-diff is empty, and git merge-tree --write-tree origin/main c9e4bf30f8 is clean against current main.
  • c9e4bf30f8 makes the fixes: 6 files, +619/−10.

Every round 4 item is fixed as the brief specified. CI is green, and nothing I found is a wrong result or a false claim a reader would rely on.

What remains: no test pins the decisive case for reading 11 (P2-1). The test my own mutant passes shows this.

METHODOLOGY_CHOICE is yes:

  • A filer with zero allowed exemptions gets no poverty level. The statute is silent at zero.
  • The PR keeps the credit for a filing status 6 filer whose dependent the filing exception allows, where the booklet bars every status 6 filer.
  • Reading 11 counts allowed exemptions, not persons.

P2

P2-1. No test pins reading 11's mixed-spouse level. A mutant that switches to the person-count alternative passes every test.

Reading 11 says that for a 2025 joint return with one claimable spouse, "PR counts 1 allowed exemption and uses $15,650; person-count alternative counts 2 and uses $21,150. At $18,000 … the PR income test fails". The code does this. My witness at the head:

  • md_personal_exemptions_count 1
  • level 15,650
  • eligible false
  • the same under both head/spouse labellings

At main, the same household is eligible for $900: two persons, $21,150, and min($1,000, 5% × $18,000).

Round 2's pretax pair asserted md_poverty_line_credit_income_level: 15_650. This round re-added the pair without that output, as the brief allowed. Its $14,000 passes under both 15,650 and 21,150, so it can't tell the readings apart. The dropped $500/$500 pair also asserted 15,650 and 21,150, and its both-claimable case asserted no credit. The PR now has no YAML case for either a mixed-spouse joint level or a both-claimable joint return.

Mutant E (mine) uses fpg(max_(exemptions, tax_unit("head_spouse_count", period)), ...) in md_poverty_line_credit_income_level.py:34. That is the person-count floor for filers, which gives $21,150 for the mixed-spouse return. It survives:

  • is_eligible_md_poverty_line_credit.yaml 12 passed
  • md_poverty_line_credit_income_level.yaml 2 passed
  • md_poverty_line_credit_earned_income.yaml 14 passed
  • md_poverty_line_credit.yaml 2 passed
  • integration.yaml 1 passed
  • md_personal_exemptions_count.yaml 8 passed
  • test_claimable_filer_ia_ks_ky_la_md_invariants.py 6 passed

My witness file fails it: 3 failed, 1 passed.

Fix: add these cases to is_eligible_md_poverty_line_credit.yaml. They passed at the head (4 passed), and three of them kill mutant E.

- name: 2025 joint return with one claimable spouse uses one allowed exemption's level and fails at 18,000
  period: 2025
  input:
    people:
      a: {age: 30, is_tax_unit_head: true, claimable_as_dependent_on_another_return: true}
      b: {age: 30, is_tax_unit_spouse: true, employment_income: 18_000}
    tax_units:
      tax_unit: {members: [a, b], filing_status: JOINT, md_income_tax_before_credits: 1_000, md_married_or_has_child_non_refundable_eitc: 0}
    households:
      household: {members: [a, b], state_code: MD}
  output:
    # Tax-General 10-709(a)(2): one allowed exemption (the unclaimable spouse),
    # so 15,650, not the two-person 21,150. 18,000 > 15,650.
    md_personal_exemptions_count: 1
    md_poverty_line_credit_income_level: 15_650
    is_eligible_md_poverty_line_credit: false
    md_poverty_line_credit_potential: 0
# (plus the same case with the head and spouse labels swapped)

- name: 2025 joint return with both spouses claimable and no filing exception has no level and no credit
  period: 2025
  input:
    people:
      a: {age: 30, is_tax_unit_head: true, claimable_as_dependent_on_another_return: true, employment_income: 500}
      b: {age: 30, is_tax_unit_spouse: true, claimable_as_dependent_on_another_return: true, employment_income: 500}
    tax_units:
      tax_unit: {members: [a, b], filing_status: JOINT, md_income_tax_before_credits: 200, md_married_or_has_child_non_refundable_eitc: 0}
    households:
      household: {members: [a, b], state_code: MD}
  output:
    md_personal_exemptions_count: 0
    md_poverty_line_credit_income_level: 0
    is_eligible_md_poverty_line_credit: false
    md_poverty_line_credit_potential: 0

- name: 2025 joint return with both spouses claimable and the filing exception keeps the child's level
  period: 2025
  input:
    people:
      a: {age: 30, is_tax_unit_head: true, claimable_as_dependent_on_another_return: true, dependent_claimant_filing_exception: true, employment_income: 500}
      b: {age: 30, is_tax_unit_spouse: true, claimable_as_dependent_on_another_return: true, dependent_claimant_filing_exception: true, employment_income: 500}
      c: {age: 4, is_tax_unit_dependent: true}
    tax_units:
      tax_unit: {members: [a, b, c], filing_status: JOINT, md_income_tax_before_credits: 200, md_married_or_has_child_non_refundable_eitc: 0}
    households:
      household: {members: [a, b, c], state_code: MD}
  output:
    # 0 own + 1 child = 1 exemption: 15,650. min(200, 5% x 1,000) = 50.
    md_personal_exemptions_count: 1
    md_poverty_line_credit_income_level: 15_650
    is_eligible_md_poverty_line_credit: true
    md_poverty_line_credit_potential: 50

A smaller alternative is to restore md_poverty_line_credit_income_level: 15_650 to both pretax cases in md_poverty_line_credit_earned_income.yaml (outputs at lines 366-369 and 401-404). That also kills E.

P3

P3-1. A stale status sentence in the body. Under "Statute-first changes", the paragraph that begins "Merged current main at bfab65a78a" ends with "CI skips the draft, so it hasn't run." The PR is no longer a draft: .draft is false. Pull request runs completed with success at 6d5a3cbfdd (run 41831775423, per round 4) and at this head (below). Replace "CI skips the draft, so it hasn't run." with "Pull request CI passed at 6d5a3cbfdd and at c9e4bf30f8."

P3-2. A code comment reads as agreement with the booklet where the code departs from it. md_poverty_line_credit_income_level.py:27-28 says "The 2025 Resident Booklet likewise bars every filing status 6 filer from the credit." The code doesn't bar every status 6 filer. A status 6 filer whose dependent the filing exception allows keeps a level and the credit, as in is_eligible_md_poverty_line_credit.yaml:249. Replace with: "The 2025 Resident Booklet bars every filing status 6 filer from the credit; we follow it only where no exemption is allowed (see is_eligible_md_poverty_line_credit)."

Note for the hub: this departure from the booklet, and the (iii) one, carry no # Source conflict marker or register entry. The round 4 review records that the hub asked for none. test_source_conflicts.py passes (103).

P3-3. Hand-off counts. The hand-off says mutants A and B fail "2 failed, 9 passed". That was before line 219 was added. At this head each fails 3 of 12 (below). Also, the body's r1 response 3 has a capitalisation slip: "…equals tax_unit_fpg, and The tested la_dependents_exemption…".

P3-4. No impact: line yet. The axiom: line is present. Both lines are left to the hub. See the population check under "What I couldn't check".

Checked and sound

Main's test file (round 4 P2-1).

  • git diff --diff-filter=D --name-only <merge-base> HEAD is empty, so the PR deletes no file.
  • The first 326 lines of md_poverty_line_credit_earned_income.yaml are byte-identical to main's file (head -n 326 | cmp).
  • Main's 12 cases are followed by the two pretax cases (lines 332 and 371).
  • The pretax cases assert only eitc_earned_income, is_eligible_md_poverty_line_credit, md_poverty_line_credit_potential and md_local_poverty_line_credit.

Untested since round 2:

  • the joint mixed-spouse level (P2-1)
  • the both-claimable joint case (P2-1)
  • the $500/$500 per-spouse earnings. The removed wrapper owned these, so their loss is intended.

The zero-exemption gate (md_poverty_line_credit_income_level.py:32-36, is_eligible_md_poverty_line_credit.py:36,73).

  • The level is fpg(count) when the count is above 0 and 0 otherwise. It applies only in the claimable branch. The nobody-claimable branch keeps tax_unit_fpg.
  • Eligibility also requires a positive count.
  • fpg() computes first_person + additional_person × (n − 1). Mutant A's output confirms 15,650 − 5,500 = 10,150 at n = 0.
  • The gate is redundant with the zero level except at AGI ≤ 0. There eitc_earned_income (floored at 0) makes both credits 0. So the gate changes is_eligible_md_poverty_line_credit alone, which line 219 pins.
  • For a nobody-claimable unit the count is tax_unit_size ≥ 1, so the gate and level are inert there.

The brief's reading as quoted is "the amount … that corresponds to the number of exemptions which the individual is allowed and claims". The code matches it in every year (the level reads that year's gov.hhs.fpg), every filing status (single, joint with one or both claimable, with or without the exception) and the tax unit entity. I couldn't fetch the statute; see below.

The five new cases, by hand from the repository's 2025 contiguous guideline (15,650 first person, 5,500 each additional) and the 5% share:

Line Count Level (i)/(ii) (iii) (iv) Eligible Potential
157: single, claimable, $12,000 0 + 0 = 0 0 12,000 > 0 fails pass 0 < 600 false 0
188: same, $10,000 0 0 fails (would pass a 10,150 level) pass pass false 0
219: same, $0, tax 100 0 0 0 ≤ 0 passes pass 0 < 100 false (gate only) n/a
249: single, claimable, exception, child 4, $10,000 0 + 1 = 1 15,650 pass pass pass true min(600, 500) = 500
286: same, Maryland claim 1 15,650 pass fails pass false 0

All five match the file, and the file passes at the head (12 passed).

The witnesses (lines 59, 90, 121).

  • Each supplies md_personal_exemptions_count: 1 and md_poverty_line_credit_income_level: 15_650, together with AGI and earnings of 10,000, tax 600 and EITC 0. So (i), (ii), (iv) and the count gate all pass, and only (iii) varies.
  • Witnesses 1 and 3 (true) and witness 2 (false) differ only in the claim flags. Witnesses 2 and 3 differ only in md_claimed_as_exemption_on_another_return.
  • The supplied count feeds only the gate. In these cases nothing else reads it, because the level and md_income_tax_before_credits are supplied.
  • The hand-off is right that without the supplied count, witnesses 1 and 3 would turn false and witness 2 would fail for two reasons. Each witness still isolates (iii) and nothing else.
  • The header comment (lines 53-58) now says the values are supplied, not the filer's own, which closes round 4's P3-2.

Mutants. Each ran in its own process in a scratch worktree, which was restored afterwards (git status --short empty).

Mutant Result Killed by
A: level fpg(count) at zero, gate kept 3 failed, 9 passed lines 157, 188, 219 (level 10,150 ≠ 0)
B: A plus gate removed 3 failed, 9 passed; property test still 6 passed the same three YAML cases; not the property test, as the hand-off says
C: gate removed, zero level kept 1 failed, 11 passed line 219, the only zero-income case
D (mine): level branches on head_or_spouse_is_dependent_elsewhere_without_filing_exception 2 failed in is_eligible… (lines 249, 286: 21,150 ≠ 15,650); 2 failed in md_poverty_line_credit_income_level.yaml lines 249 and 286, and both level cases
E (mine): person-count floor max_(count, head_spouse_count) survives every file listed in P2-1 P2-1's witnesses (3 failed)

The defect at main. Main's is_eligible_md_poverty_line_credit uses tax_unit_fpg and has no claim test. At main (my witness, 2 passed):

  • a 2025 claimable single filer at $12,000 gets level 15,650 and is eligible for $600;
  • the joint mixed-spouse return at $18,000 gets 21,150 and $900.

At the head these are 0/ineligible and 15,650/ineligible.

Readers.

  • md_poverty_line_credit_income_level is read only by is_eligible_md_poverty_line_credit.
  • That variable is read by md_poverty_line_credit_potential (then md_poverty_line_credit, in md/…/credits/non_refundable.yaml) and by md_local_poverty_line_credit (then md_local_income_tax_before_refundable_credits).
  • md_personal_exemptions_count is read by those two and md_total_personal_exemptions.
  • No reform overrides any of them (grep across policyengine_us/).

Readers this round makes reachable and worse: none. The change only removes credit from filers with no allowed exemption, who are claimable.

Baseline.

  • This round's delta can't move baseline output. The dataset sets no dependency flags, so every unit takes the tax_unit_fpg branch with a count of at least 1.
  • The body's "two changes still move baseline totals" holds for the whole PR as far as I checked. ks_fstc is not a third mover: main's tax_unit_size − (all dependents − child dependents) equals the head's filers + child_dependents when nobody is claimable.

Body. Each replacement the brief listed is present verbatim:

  • the microsimulation paragraph;
  • the separate-returns bullet;
  • invariant 2 (phrase replaced, "poverty-credit earned income" removed, the self-employment paragraph deleted);
  • invariants 3, 5 and 6;
  • the reading 11 addition;
  • the r1 response 3 marker.

The extra edits are accurate against the code:

  • the table row for is_eligible_md_poverty_line_credit;
  • the reading 10 table cell and prose ($500 only where the exception keeps a dependent: line 249);
  • the "Items 5-9" note;
  • invariant 5's two exceptions;
  • the superseded marks on r1 response 6 and follow-up item 6, both correct now that the credit reads joint eitc_earned_income.

Invariant 3's new sentence matches the restored assertion (test_claimable_filer_ia_ks_ky_la_md_invariants.py:130-143). The axiom: line is present.

Tests at the head, one file per process:

  • is_eligible_md_poverty_line_credit.yaml 12
  • md_poverty_line_credit_earned_income.yaml 14
  • md_poverty_line_credit_income_level.yaml 2
  • md_poverty_line_credit.yaml 2
  • integration.yaml 1
  • md_local_poverty_line_credit.yaml 5
  • md_personal_exemptions_count.yaml 8
  • md_total_personal_exemptions.yaml 7
  • test_claimable_filer_ia_ks_ky_la_md_invariants.py 6
  • test_md_poverty_line_credit_invariants.py 16
  • test_source_conflicts.py 103

That's 51 YAML + 125 Python passed, 0 failed. ruff format --check and ruff check pass on the three changed Python files.

CI. Pull request run 41854527358 at c9e4bf30f8 completed with success: 36 of 36 jobs passed, none skipped or cancelled. That includes Household API Partners, all Baseline and Contrib shards, Microsimulation and the nine Rest Python shards.

Scope. Nothing changes under .github/ or policyengine_us/tests/policy/baseline/partners/. Searching open PRs:

What I couldn't check

  • Sources. This VM's network policy refuses every legal host I tried:

    • mgaleg.maryland.gov, marylandcomptroller.gov, govinfo.gov, uscode.house.gov, ecfr.gov, law.cornell.edu;
    • web.archive.org, kslegislature.gov, ksrevisor.gov, irs.gov, aspe.hhs.gov, federalregister.gov, law.justia.com.

    curl got a 403 to CONNECT, and WebFetch couldn't resolve the host. So I confirmed no quote. That covers Tax-General 10-709(a)(2)-(3) and 10-211(b)(1), whether (b)(1) covers dependents, booklet p.23, HHS's one-person-up table and K.S.A. 79-32,121(a)'s 1998 limit. Every legal statement above rests on the brief's and the PR's quotes.

  • Population impact. I have no population data. The hub's runs: 2023 Kansas, main against the head, on ks_income_tax and the count of head-of-household units; and 2025/2026 Maryland for the aged dependent AGI limit.


Generated by Claude Code

No case tested a joint return with one or both spouses claimable, so a
person-count level (21,150 rather than one allowed exemption's 15,650)
passed every test. Four cases cover a claimable head, a claimable spouse,
both claimable without the filing exception, and both with it. The
booklet comment now says the model follows the booklet's status 6 bar
only when the return has no allowed exemption.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6K4hbmpvP2YevFmELw
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Picking this up for the US hub. I'll post a hand-off comment here when it's ready.


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ready for hub review

Head: 0a28338641c1e46b2029da9774ee743080e571d1

This round builds on c9e4bf30f8, the head the item named. No other commit landed on the branch. I didn't merge origin/main: no check needed it.

Items

Item Resolution
8. P2-1, the mixed-spouse level is_eligible_md_poverty_line_credit.yaml now ends with four cases, after the case at line 286, using the names and comments the item gave: (1) "2025 joint return with a claimable head …", the review's first case; (2) "2025 joint return with a claimable spouse …", its copy with a heading the return at employment_income: 18_000 and b, the spouse, claimable; (3) "… both spouses claimable and no filing exception gets no level and no credit"; (4) "… both spouses claimable and the filing exception keeps the child's level", with the review's arithmetic comment. Inputs and outputs are the review's, written in the file's block style.
9. P3-2, the booklet comment md_poverty_line_credit_income_level.py:27-30 replaces the old lines 27-28 with the item's four lines verbatim.
10. P3-1 and P3-3, the body "and The tested" is now "and the tested" (r1 response 3). The "Tests" section has a "Round 5 cases" bullet with the four cases, mutant E's result and the counts at this head. Not done: I left the "CI skips the draft, so it hasn't run." sentence, because the item 19 sentence needs a finished run (see CI). I read the body back after the PATCH, and it matches what I sent. The impact: and axiom: lines are unchanged.
11. Runs See below.

Commit 0a28338641 holds items 8 and 9.

Tests at the head (one file per process)

File Result
is_eligible_md_poverty_line_credit.yaml 16 passed (12 + 4 new)
md_poverty_line_credit_income_level.yaml 2 passed
md_poverty_line_credit_earned_income.yaml 14 passed
md_poverty_line_credit.yaml 2 passed
md_personal_exemptions_count.yaml 8 passed
test_claimable_filer_ia_ks_ky_la_md_invariants.py 6 passed
test_md_poverty_line_credit_invariants.py 16 passed
test_source_conflicts.py (extra: the comment changed) 103 passed

I ran the first five and the two named Python files before the comment edit. After it, I reran is_eligible… (16) and …_income_level.yaml (2) at the committed tree. The edit only changes a comment. ruff format --check ("1 file already formatted") and ruff check ("All checks passed!") are clean on md_poverty_line_credit_income_level.py.

Mutant

Mutant Change Result
E md_poverty_line_credit_income_level.py:36 (line 34 before this round), fpg(exemptions, …) becomes fpg(max_(exemptions, tax_unit("head_spouse_count", period)), …) Killed. 3 failed, 13 passed. Each fails with md_poverty_line_credit_income_level@2025: [21150.] differs from 15650.0 in: (1) the claimable head; (2) the claimable spouse; (4) both claimable, with the filing exception. Case (3), both claimable without the exception, passes under E, because the zero-exemption branch (where(exemptions > 0, …, 0)) still returns 0. I restored the file afterwards.

Hand computations (2025: first person 15,650, each additional 5,500)

  • Cases 1-2: one allowed exemption (the unclaimable spouse), so the level is 15,650, not 21,150. Income 18,000 > 15,650, so the filer is ineligible and the potential credit is 0.
  • Case 3: 0 + 0 = 0 exemptions, so there's no level and no credit.
  • Case 4: 0 own + 1 child = 1, so 15,650. Income 1,000 passes, and the credit is min(200, 5% × 1,000) = 50.

CI

Pull request run 41948195035 at 0a28338641 had not finished 60 minutes after my 01:23Z push. At 02:24Z, 34 of 36 jobs had concluded success, none had failed or been cancelled, and Contrib tests / Full Suite - Contrib (other-shard-1) and (other-shard-3) were still in progress. Per the brief, I'm handing off with the run URL. Once it passes, the hub should replace "CI skips the draft, so it hasn't run." under "Statute-first changes" with: "Pull request run 41948195035 passed all 36 jobs at 0a28338641."

Judgment calls

  • The review wrote the cases in YAML flow style. I wrote them in the file's block style, with the same keys and values.
  • I placed the four cases at the end of the file, so no existing case moved.
  • The body bullet gives mutant E's result in neutral terms and names no reviewer.

What I couldn't check

  • Tax-General 10-709(a)(2) and the 2025 Resident Booklet: I didn't fetch them. The comments use the item's text.
  • Population impact and microsimulation, per the brief.

Generated by Claude Code

@DTrim99

DTrim99 commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Apply Iowa, Kansas, Louisiana and Maryland rules for a filer who can be claimed as a dependent

Summary

I read the statutes and the claimed years' instructions first, then the code. The PR uses only existing dependency variables:

  • head_or_spouse_is_dependent_elsewhere_without_filing_exception for IRC 152(b)(1)'s "no dependents" rule and for the childless-EITC bar;
  • head_or_spouse_is_dependent_elsewhere and head_spouse_count_not_dependent_elsewhere where a rule turns on claimability;
  • claimed_as_dependent_on_another_return where the text says "claimed".

The new inputs (the Iowa claimant's income and filing status, and an actual claim on another Maryland return) hold facts that no existing variable carries, so nothing is reinvented. These changes match the governing text for the claimed years:

  • the Iowa dependent credit and the claimant-income test for the low-income exemption, tax reduction and alternate tax;
  • Kansas's per-filer 2021–2023 exemptions, its 2024+ dependent allowance and the food sales credit count;
  • the Louisiana dependent exemption;
  • Maryland's dependent, aged-dependent and CTC gates, the aged-dependent AGI limit, the pro forma childless EITC and the actual-claim poverty-credit test.

CI is 36/36 green at the head.

One critical item and four should items are open:

  1. Maryland: the PR takes away a claimable filer's own exemption, following the booklet. Tax-General 10-211(a)(1) has allowed that exemption since 2018. The loss also removes the poverty line credit for a claimable single filer.
  2. The Maryland CTC gate in md_ctc.py is the only gate that acts in 2021–2024, and no test pins it.
  3. Eight existing candidates.yaml items that name this PR still describe main, not the head.
  4. Kansas's 2021–2023 head-of-household change follows the statute over the K-40 instructions, but the PR doesn't record it as a source conflict.
  5. The axiom: line's IA, KS and MD issues pin an October head and leave out changes made on November 3. Two items rely on "n/a: expired", which isn't a valid reason.

The branch also conflicts with current main in one test file.

Critical (must fix)

C1. Maryland: a claimable filer loses the own exemption that Tax-General 10-211(a)(1) allows, and with it the poverty line credit (md_personal_exemptions_count.py: where(claimable_filer, own + dependents, tax_unit_size) with own = head_spouse_count_not_dependent_elsewhere. It feeds md_total_personal_exemptions, md_poverty_line_credit_income_level, is_eligible_md_poverty_line_credit and the repeal and Maryland contributed reforms.)

  • The code. A filer who can be claimed gets no exemption of their own. The test comments cite the booklet: "Filing status 6: 'You do not get an exemption for yourself'".
  • The statute. Tax-General 10-211(a): "an individual may deduct an exemption for: (1) the taxpayer; (2) the spouse of the taxpayer if: (i) a joint return is not made by the taxpayer and the spouse; and (ii) the spouse ... has no gross income and is not a dependent of another taxpayer; and (3) each individual who is a dependent, as defined in § 152". (b)(1) then allows "$3,200 for each exemption that the individual may deduct under subsection (a)".
    • (a)(1) carries no dependency condition. The only one in the section is the spouse's, in (a)(2)(ii).
    • Before 2018, (b)(1) allowed $3,200 "for each exemption that the individual may deduct in the taxable year to determine federal taxable income under § 151 of the Internal Revenue Code". That wording brought in IRC 151(d)(2)'s denial for a dependent.
    • 2018 Md. Laws ch. 575 (SB 184), PDF p.1-2 struck that federal reference and substituted the (a)(1)–(3) list.
    • Contrast Kansas, where the PR rightly applies 151(d)(2) for 2021–2023: K.S.A. 79-32,121(a) still allows an exemption "for each exemption for which such individual is entitled to a deduction ... for federal income tax purposes".
  • The booklet. 2025 Resident Booklet, PDF p.12, filing status 6: "You do not get an exemption for yourself. Put a zero in Exemption Box A." Chart 10A gives the "Dependent Taxpayer" column "$0".
    • COMAR 03.04.02.02B only assigns the filing status: "An individual who is single and may be claimed as a dependent on another taxpayer's return shall use the filing status 'dependent taxpayer'". It says nothing about the exemption.
    • So this is a statute-against-instructions conflict, and CLAUDE.md says to follow the statute.
  • No record covers it.
    • us-md:dependent-exemption-chart-10a and us-md:poverty-threshold-exemption-count take the denial as given. Their statute sources are only 10-211(a)(3), (b)(1) and 10-709(a)(2).
    • The second item's "one exemption and $15,650 under the statute" example therefore rests on the booklet, not on (a)(1).
  • Witness: the PR's own case "2025 claimable but unclaimed single filer at 10,000 has no poverty level and no credit" (is_eligible_md_poverty_line_credit.yaml). The inputs are AGI and earned income of 10,000, tax before credits of 600, an EITC of 0 and no Maryland claim.
    • Head: exemption count 0, md_total_personal_exemptions 0, poverty level 0, not eligible, potential credit 0.
    • Statute: (a)(1) gives one exemption, so $3,200. The 10-709(a)(2) level for one exemption is 15,650, and 10,000 ≤ 15,650. (iii) passes because there is no claim. The potential credit is min(600, 5% × 10,000) = 500.
    • Main: tax_unit_size 1 gives $3,200, and tax_unit_fpg 15,650 makes the filer eligible for 500. Main matched the statute on both outputs, and the head changes both.
    • The same loss applies to every claimable single filer in every claimed year (2021–2026). $3,200 of exemption is worth about $152 of State tax at the 4.75% rate, plus county tax.
    • On a joint return with one claimable spouse, the statute gives both spouses an own exemption: 2 × $3,200 and a two-exemption level of 21,150. The head gives $3,200 and 15,650. This round's four new mixed-spouse cases pin the head's values.
  • Fix.
    • Count each filer's own exemption under (a)(1): head_spouse_count, not head_spouse_count_not_dependent_elsewhere. Keep the 152(b)(1) dependent gate with the filing exception.
    • Make the same change in the repeal and Maryland contributed reforms.
    • Re-derive the poverty cases. A claimable single filer gets 1 exemption, a level of 15,650 and a potential credit of 500 unless actually claimed on a Maryland return. The mixed joint return gets 2 exemptions and 21,150. Reading 11's zero-exemption branch then never arises for a filer.
    • If you read ch. 575 as meant to keep the pre-2018 count, record that as its own candidate: 10-211(a)(1) as amended against booklet p.12 and Chart 10A. Take it to the project lead, and keep main's statutory result until it's ruled.

Should address

S1. Maryland CTC: the gate in md_ctc.py is the only one that acts in 2021–2024, and no test pins it (dependent = person("is_tax_unit_dependent", period) & ~filer_is_dependent in formula_2020)

  • Why the gate matters. md_ctc is defined_for = "md_ctc_eligible". From 2025, md_ctc_eligible itself requires a qualifying child, so it already blocks a claimable filer. Before 2025 it is only agi <= p.agi_cap (cap $6,000 in 2021–2022, $15,000 in 2023–2024). So in 2021–2024 this new term alone applies 10-751(a)(2)(i) ("is a dependent for purposes of § 152 of the Internal Revenue Code").
  • The gap. All seven new md_ctc.yaml cases are 2025, so deleting the gate fails no test.
  • Witness (static trace). 2024, single filer age 23 with claimed_as_dependent_on_another_return: true, a child age 4 and AGI $1,000:
    • md_ctc_eligible is true (1,000 ≤ 15,000).
    • The head gives md_ctc 0. Without the gate it gives 1 × $500.
  • Fix. Add 2024 (and ideally 2022) claimable-filer cases expecting 0, with a filing-exception control expecting 500.

S2. Update the existing source_conflicts/candidates.yaml items for the readings this PR implements

CONTRIBUTING.md#source-conflicts, step 1: "If the backlog already lists the conflict, it updates that item instead." Nine items on main name this PR, and eight still describe main:

Item Now on main At the head
us-ia:alternate-tax-claimed-spouse follows: conflicting-source, code: [], years 2024 only Follows the statute in ia_alternate_tax_eligible.py and ia_claimed_filer_income_disqualified.py. The bar is in 422.5(3)/(3B) for 2021–2022 and (2)/(3) from 2023, and the code applies it in every year.
us-ia:low-income-exemption-claimant-income conflicting-source, code: [], "Code not yet on main" Follows the statute in ia_is_tax_exempt.py. ia_reduced_tax.py applies the same subsection over the worksheet's "not claimed ... on another person's Iowa return" bar.
us-ks:2021-2023-exemptions-dependent-filer follows: unknown; the note says "Current behaviour unresolved" Follows the statute in ks_count_exemptions.py.
us-ks:food-sales-credit-exemption-count conflicting-source, code: [] Follows the statute in ks_fstc.py.
us-la:school-readiness-incapable-child follows: statute, code: [], "Code not yet on main: la_refundable_cdcc" That reader is on main. List the deciding files.
us-md:dependent-exemption-chart-10a statute, code: [] md_personal_exemptions_count.py. Revisit after C1.
us-md:poverty-credit-claimed-vs-claimable conflicting-source, code: [], years 2025 only Follows the statute in is_eligible_md_poverty_line_credit.py, in every year.
us-md:poverty-threshold-exemption-count statute, code: [], years 2025 only md_poverty_line_credit_income_level.py. Revisit after C1.

us-ks:dependent-exemption-of-a-claimed-filer already matches the head.

Fix: in this PR, set follows, code and years, and refresh the notes. Then the register entries written after merge will pin the right files and years.

S3. Kansas 2021–2023 head of household: the PR follows the statute against the K-40 instructions but doesn't record the conflict (ks_count_exemptions.py, "A head of household counts only the head: the extra allowance in 79-32,121 is limited to tax year 1998"; ks_num_exemptions.yaml changes main's 2022 head-of-household case from 3 to 2)

  • The statute. Before 2022, K.S.A. 79-32,121 (2021–22 edition) read: "an individual filing a federal income tax return under the status of head of household ... shall be allowed an additional Kansas exemption of $2,250 for tax year 1998." 2022 HB 2239 §40, PDF p.38 removed the sentence, and the 2023 edition has none.
  • The instructions. The 2021, 2022 and 2023 K-40 instructions, PDF p.6 each: "If your filing status is Head of Household, you are allowed an additional Kansas exemption; enter a '1' in the box provided." The 2022 tax table also says "If filing status above is Head of household, add one exemption."
    • Those are the very pages ks_count_exemptions.py cites.
  • Effect. Following the statute is right under the 2026-10-19 rule. But the choice removes $2,250 from every Kansas head-of-household return for 2021–2023, and the body names it as one of two baseline movers. us-ks:2021-2023-exemptions-dependent-filer covers only claimability against actual claim.
  • Fix.
    • Add a candidate with the 1998-only sentence and its 2022 repeal against the K-40 p.6 instruction and the tax table. Include the 2 vs 3 example (2022 head of household with one child: $4,500 vs $6,750), years 2021–2023 and follows: statute.
    • Mention the head-of-household change in the changelog fragment.

S4. The axiom: line: stale issues, uncovered changes and invalid n/a items

Suggestions

  1. Filing-exception restoration is unpinned in several formulas. No case sets dependent_claimant_filing_exception: true for ks_fstc, md_aged_dependent_exemption, or the Iowa and Maryland contributed reforms. Swapping their helper for the ordinary head_or_spouse_is_dependent_elsewhere would pass every test. Add one exception case each, as ks_exemptions, la_dependents_exemption, md_ctc_eligible and the Kansas reform already have.

  2. md_claimed_as_exemption_on_another_return defaults to false, even when the federal claim input is true.

    • Maryland exemptions follow the federal return, so a federal claim by a Maryland claimant is normally also a 10-709(a)(3)(iii) claim.
    • Consider defaulting this input to claimed_as_dependent_on_another_return, keeping the "federal claim alone" case as an explicit override.
    • This matters more once C1 gives every claimable filer a level.
  3. PR body: Kentucky.

  4. federal_eitc_without_age_minimum's new comment says "§ 10-704 waives only the minimum age". 10-704(c)(3)(i) waives "1. the minimum age requirement ... or 2. the limitation under § 32(m)". The formula (as on main) still multiplies by filer_meets_eitc_identification_requirements. Correct the comment and open a follow-up for the childless ITIN case.

  5. A stale test comment. In ks_fstc.yaml, "2022 single filer who can be claimed as a dependent gets no food sales tax credit" still gives the Line E rationale ("which is '0' for a claimed filer"). The code now uses the federal-exemption count.

  6. A duplicate test location. The six new md_dependent_care_subtraction cases sit in a new md/tax/income/agi/md_dependent_care_subtraction.yaml. The existing file is md/tax/income/agi/subtractions/md_dependent_care_subtraction.yaml. Move the cases there.

  7. CLAUDE.md "Test design and CI cost". This PR's run 41948195035 has the numbers the body says it lacks:

    • the property file's six cases took about 10.3 s in Rest Python "core-2" (shard 4);
    • that group ran 266 tests in 19:45 wall with 6.45 GiB peak RSS.

    Cite these instead of the local macOS timings.

Verified correct

The law, read first.

  • Iowa.
    • 422.5(2)(a), 2024, PDF p.1 ((3)(a) and (3B) in 2022, PDF p.3): "A person who is claimed as a dependent by another person ... shall not receive the benefit of this subsection if the person claiming the dependent has net income exceeding thirteen thousand five hundred dollars or nine thousand dollars as applicable or the person claiming the dependent and the person's spouse have combined net income exceeding" those amounts. Subsection 3 uses $32,000/$24,000.
    • "This subsection" includes the tax reduction in (a) and the alternate tax in (b). So the actual-claim test, the claimant-income limits, the strict "exceeding", the larger limit for a joint, head-of-household or surviving-spouse claimant, the married combined test and the either-filer elderly switch all match.
    • 422.12(1)(a) and (2)(a), 2026, PDF p.39-40: "'Dependent' has the same meaning as provided by the Internal Revenue Code". The personal credits carry no dependency bar, so a claimable filer keeps $40/$80 and loses the dependent credits.
  • Kansas.
    • 79-32,121(a) (2023) keys to federal entitlement, so IRC 151(d)(2) denies a claimable filer's own exemption, spouse by spouse.
    • 79-32,121b(a)(3): "$2,320 for each dependent for which such taxpayer is entitled to a deduction ... for federal income tax purposes". The filing-status allowance has no dependency bar.
    • 79-32,271(d): "$125 for every exemption claimed on the taxpayer's federal income tax return, except that no exemption shall be counted for a dependent unless the dependent is a child under 18". (c)(3) is the child route. Credits apply "ending prior to January 1, 2025".
  • Louisiana. R.S. 47:294 (2021–2024), as reprinted in 2019 HB 416, PDF p.10-11: taxpayers "claim the same exemptions on their return ... as they used on their federal income tax return", with $1,000 "for each allowable exemption in excess of those required to qualify" for the combined exemption. 152(b)(1) leaves a claimable filer no dependents.
  • Maryland.
    • 10-211(a)(3) and (b)(2) cover dependents "as defined in § 152". (c) limits "the amount allowed for each exemption under subsection (b)(1) or (2)", so the aged-dependent AGI limit is right.
    • 10-751(a)(2)(i) is quoted in S1.
    • 10-704(c)(3)(i) waives only the age and 32(m) limits, so the 32(c)(1)(A)(ii)(III) bar stays (Pub 596 (2025), p.18: "neither you nor your spouse can be claimed as a dependent by another person").
    • 10-709(a)(3)(iii): "who is not claimed as an exemption on another individual's tax return under § 10–211". This is an actual claim, as coded.
  • Kentucky. KRS 141.067 is 20% of the federal §21 credit. The 2024 cases follow §21(b)(1)(A) through 152(b)(1).

The code.

  • Mutation rule. Apart from S1 and Suggestion 1, removing any new gate fails a YAML case:

    • Iowa: the exemption credit, the claimant-income matrix in ia_is_tax_exempt, the reduction, the alternate tax, and the reform;
    • Kansas: the 2021–2023 count (plus the reform's filing-exception count assertion), the 2024 allowance with its exception control, and the food credit filers and child route;
    • Louisiana: the exemption;
    • Maryland: the count, the totals, the aged-dependent gate and AGI limit, md_ctc_eligible, the pro forma EITC, the poverty has_exemption gate (line 219), the Maryland-claim test, the level, and both reforms.
  • Construction.

    • Vectorization is sound (where, tax_unit.any, person.tax_unit.project), and entities and periods are correct.
    • The only new state-gated enum, ia_dependent_claimant_filing_status, is only compared and never used as a parameter key, so the NH Add New Hampshire state supplementation for 2026 #10156 pattern doesn't arise.
    • The new inputs default to "no disqualification", so population results move only through the Maryland aged-dependent limit and the Kansas head-of-household count (and C1 once fixed).
  • Hand-checks (18).

    • IA exemption credit 2024: claimable single 40; joint, nobody claimable, one child: 80 + 40 = 120; filing-exception single with a child: 40 + 40 = 80.
    • IA alternate tax 2024: (20,000 − 13,500) × 5.7% = 370.50. A claimant at 9,001 > 9,000 restores the regular 500.
    • IA reduction 2022: min(700, 9,500 − 9,000) = 500.
    • IA married claimant: 8,000 + 6,000 = 14,000 > 13,500, so disqualified. Elderly: 20,000 ≤ 24,000, so not disqualified.
    • IA EITC: 1,000 × 7.65% × 15% = 11.475. IA CDCC: 1,000 × 35% × 75% = 262.50.
    • KS 2022: nobody claimable, one child: 3 × 2,250 = 6,750. One claimable spouse: 1 × 2,250 = 2,250.
    • KS 2024: 9,160 + 2,320 = 11,480. Reform: 9,160 + 4,000 = 13,160. Joint: 18,320 + 2,320 = 20,640.
    • KS food credit 2024: joint, nobody claimable, one child: 3 × 125 = 375. One claimable spouse: 125.
    • KS EITC: 76.50 × 17% = 13.005. KS CDCC: 350 × 50% = 175.
    • LA: 1 × 1,000. LA EITC: 76.50 × 5% = 3.825. Refundable CDCC: 350 × 50% = 175.
    • MD 2025 exemptions: 3 × 3,200 = 9,600. Aged dependent at single AGI 130,000: 800. At joint AGI 160,000: 1,600.
    • MD pro forma EITC: 0.0765 × 1,000 = 76.50. Married refundable at 45%: 34.425.
    • MD poverty credit, both spouses claimable with the filing exception and a child: 1 exemption, level 15,650, credit min(200, 5% × 1,000) = 50.
    • KY 2024: 20% × 350 = 70.
  • References. These show the cited text:

    • Iowa 2022 422.5 p.3 and 2024 422.5 p.1-2;
    • 2026 422 p.7 and p.39;
    • HB 2106 p.2 ("$125 for every exemption");
    • HB 2239 p.38 (Sec. 40);
    • Pub 596 p.18.

    Multi-page variable references carry the # PDF pages comment.

  • Housekeeping.

    • The changelog changelog.d/claimable-filer-ia-ks-ky-la-md.fixed.md is top-level.
    • No partner-contract or .github files are touched.
    • No source file gains a conflict-sounding comment (I checked against main's ratchet pattern), so the source-conflict guard holds on the merged tree.
    • Main's own ks_num_exemptions.yaml and ks_fstc_sunset.yaml cases now build the households they describe.

Axiom line assessment

The line lists eight queued issues and three n/a items. All eight issues are OPEN and labelled pe-parity.

CI status

gh pr checks 10045 at head 0a28338641: 36 of 36 pass, all in run 41948195035 (2026-11-05). That covers every Baseline and Contrib shard, all nine Rest Python shards, Microsimulation, Household API Partners and PR validation. Nothing fails or is pending.

Branch status

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes per the review above: 1 critical (MD personal exemption count drops a claimable filer's own exemption, which Tax-General 10-211(a)(1) has allowed unconditionally since 2018; main was right), 4 should (unpinned MD CTC gate for 2021-24; 8 stale candidates; unrecorded KS 2021-23 head-of-household choice; stale axiom issues and invalid n/a items), 7 suggestions.

@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Picking this up for the US hub. I'll post a hand-off comment here when it's ready.


Generated by Claude Code

Main's #10053 and this branch both appended cases to the state dependent
exemption repeal test. Keep both: main's three California cases first,
then this branch's Maryland and Kansas cases, so the branch's diff
against main stays a pure append.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1(a)(1)

Section 10-211(a)(1) allows an exemption for "the taxpayer" with no
dependency condition. 2018 ch. 575 struck (b)(1)'s reference to the
exemptions deductible under IRC 151, so 151(d)(2)'s denial for a
dependent no longer reaches Maryland. The booklet's filing status 6
still gives a claimable filer none; the statute governs, as main did.

The count now takes every member and drops the dependents only when
IRC 152(b)(1) leaves the return none, so a claimable single filer keeps
one exemption and the one-person poverty level. With every filer
counted, the zero-exemption poverty branch can no longer arise, so it
goes. The Maryland dependent-exemption and repeal reforms return to
main's filer counts.

The claim on another Maryland return now defaults to the federal claim,
since a Maryland claimant takes an exemption for each IRC 152 dependent;
an input of false still covers a claimant who files no Maryland return.

The property test's Hypothesis batches always include the couple that
had no Maryland exemption (both spouses claimable, no dependents), and
its identity now checks that every filer keeps an exemption. A
filing-exception case pins the Maryland reform's dependent gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oring gates

Before 2025 md_ctc_eligible tests only AGI, so md_ctc's own IRC
152(b)(1) gate is the one that removes a claimable filer's child, and
every claimable-filer case was from 2025. Add 2024 and 2022 claimable
cases expecting no credit and a 2024 filing-exception control at $500.

No case set the claimant filing exception for the Kansas food sales
credit, the Maryland aged dependent exemption or the Iowa reform, so
swapping their helper for the plain claimability one passed every test.
Add one exception case each. Also replace a Kansas food credit comment
that still gave the K-40 Line E rationale the formula no longer uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… file

The six claimable-filer cases sat in a new agi/md_dependent_care_subtraction.yaml
beside the existing agi/subtractions/md_dependent_care_subtraction.yaml. Both
paths run in the same Maryland shard, so one file keeps the cases together.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CONTRIBUTING's step 1 updates a backlog item that already lists a
conflict. Eight items naming this PR still described main: set their
follows, code and years to the readings the branch now implements, and
refresh their notes.

Add two items. us-md:dependent-taxpayer-own-exemption records
Tax-General 10-211(a)(1), as amended by 2018 ch. 575, against the
booklet's filing status 6. us-ks:2021-2023-head-of-household-exemption
records K.S.A. 79-32,121, whose head-of-household allowance was for tax
year 1998 only and which 2022 HB 2239 removed, against the 2021-2023
K-40 instructions' extra exemption. The changelog now names that Kansas
change and the Maryland own exemption.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…)(i)

The comment said section 10-704 waives only the minimum age. For an
individual without a qualifying child, (c)(3)(i) waives both the minimum
age and the section 32(m) identification limitation. The formula drops
only the minimum age and still applies 32(m), and unlike
eitc_demographic_eligible from 2021 it counts only children with a
valid identification number. Say so; the code is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Ready for hub review

Head: 994d9fab5230220a07e47c70f751b7147dd00006

This round answers DTrim99's review (review 5813540259, comment 6709676325) at 0a28338641. I checked each finding before changing code, and C1, S1-S3 and all seven suggestions held as stated. I can't read the rulespec-us issues behind S4, so its drafts rely on the review's account. No commit landed on the branch after 0a28338641 while I worked.

1. Main

  • GitHub reported a conflict. I merged origin/main (ba9bfdea75) with a merge commit, 13d4d12de5.
  • The one conflict was policyengine_us/tests/policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml, where Apply Arizona, Arkansas and California rules for a filer who can be claimed as a dependent #10053 and this PR both appended cases. I kept both blocks: main's three California cases first (lines 497-537), then this PR's Maryland and Kansas cases, so the PR's diff against main stays a pure append. repeal_state_dependent_exemptions.py auto-merged.
  • Tests on the merged head (13d4d12de5), one file per process:
File (under policyengine_us/tests/) Result Wall
policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml 29 passed in 27.22s 168 s
code_health/test_source_conflicts.py 103 passed in 23.63s 61 s
policy/baseline/gov/states/ks/tax/income/ks_num_exemptions.yaml 3 passed in 5.59s 93 s
policy/baseline/gov/states/ks/tax/income/ks_fstc_sunset.yaml 8 passed in 6.93s 96 s
policy/baseline/gov/irs/credits/earned_income/eitc_demographic_eligible_child_without_ssn.yaml 6 passed in 6.56s 95 s
policy/baseline/gov/irs/credits/earned_income/eitc_earned_income.yaml 18 passed in 12.89s 115 s
policy/baseline/gov/states/ia/tax/income/ia_net_income.yaml 8 passed in 10.98s 105 s
policy/baseline/gov/states/ia/tax/income/ia_is_tax_exempt.yaml 17 passed in 7.16s 97 s
policy/baseline/gov/states/ia/tax/income/ia_income_tax_before_refundable_credits.yaml 14 passed in 7.17s 95 s
policy/baseline/gov/states/ia/tax/income/alternate_tax/ia_alternate_tax_eligible.yaml 4 passed in 5.86s 92 s
policy/baseline/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.yaml 13 passed in 13.29s 110 s
policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit_earned_income.yaml 14 passed in 34.76s 157 s
core/test_claimable_filer_ia_ks_ky_la_md_invariants.py 6 passed in 38.28s 114 s

The property file first failed to import because uv sync had skipped the dev extras; I installed the locked hypothesis==6.168.3 and reran it (the line above). Main's changes to eitc_earned_income, eitc_demographic_eligible and Iowa net income move none of this PR's assertions, as the review said.

2. Findings

C1. Maryland own exemption. Reproduced. The reviewer's witness is a 2025 claimable single filer with AGI and earnings of $10,000, $600 of tax, no EITC and no Maryland claim. At 0a28338641 the PR's own case for it asserted 0 exemptions, a level of 0 and no credit, and run 41948195035 passed it. Mutant M1, which restores that count, gives 0 again. I read Tax-General 10-211 (whole section), 2018 Md. Laws ch. 575 (PDF pp.1-2), the 2025 booklet pp.12-13 and COMAR 03.04.02.01, .02 and .07. Section 10-211(a)(1) has no dependency condition, and ch. 575 struck (b)(1)'s § 151 reference. No COMAR rule addresses the resident exemption. So the statute governs, as on main.

  • md_personal_exemptions_count.py:46 now returns tax_unit_size minus the dependents when IRC 152(b)(1) leaves the return none. That gives every filer an exemption and keeps the filing-exception dependent gate. With nobody claimable it is exactly main's tax_unit_size.
  • The zero-exemption poverty branch and has_exemption gate are removed (md_poverty_line_credit_income_level.py:29, is_eligible_md_poverty_line_credit.py:66). The count is now at least 1 for any unit, so neither could fire.
  • The Maryland reform's personal count (md_dependent_exemption_reform.py:130) and the repeal's Maryland entry (repeal_state_dependent_exemptions.py:54) are back to main's text, which counts every filer.
  • Re-derived cases: md_personal_exemptions_count.yaml:3,59,248 (new 2022 case at 248), md_total_personal_exemptions.yaml, is_eligible_md_poverty_line_credit.yaml:189 (the reviewer's witness: 1 exemption, 15,650, eligible, $500), :323 and :384, md_poverty_line_credit_income_level.yaml, dependent_exemption_reform_test.yaml:161,176, repeal_state_dependent_exemptions.yaml:539,554.
  • Candidate us-md:dependent-taxpayer-own-exemption (candidates.yaml:4821, state open).

S1. Maryland CTC gate, 2021-2024. Reproduced statically: before 2025 md_ctc_eligible tests only the AGI cap, and every claimable case was 2025. New cases at md_ctc.yaml:762 (2024 claimable, 0), :790 (2024 filing-exception control, $500) and :818 (2022 claimable, disabled child, 0).

S2. Stale candidates. All eight items now record follows: statute, the deciding files, the years the code applies and refreshed notes:

  • candidates.yaml:3192, IA alternate tax, now from 2021;
  • :3305, IA low-income exemption, now also listing ia_reduced_tax.py;
  • :3929, KS 2021-2023 exemptions;
  • :4033, KS food credit;
  • :4473, LA school readiness, with its deciding files;
  • :4792, MD chart 10A, revisited after C1;
  • :5112, MD actual claim, now from 2021;
  • :5143, MD poverty count, revisited after C1.

us-ks:dependent-exemption-of-a-claimed-filer already matched and is unchanged.

S3. Kansas 2021-2023 head of household. Candidate us-ks:2021-2023-head-of-household-exemption (candidates.yaml:3962, state open), with the 2 vs 3 example. The changelog names the change (changelog.d/claimable-filer-ia-ks-ky-la-md.fixed.md:1).

S4. The axiom line. Kept as it was, per the brief. Drafts for the hub are under Axiom drafts.

Suggestions.

  1. Filing-exception cases added: ks_fstc.yaml:677 ($125), md_aged_dependent_exemption.yaml:264 ($3,200), contrib/states/ia/dependent_credit_reform_test.yaml:120 ($180) and contrib/states/md/dependent_exemption_reform_test.yaml:189 ($7,400).
  2. Done: md_claimed_as_exemption_on_another_return.py:23 defaults to claimed_as_dependent_on_another_return. The "federal claim alone" case is now an explicit override (is_eligible_md_poverty_line_credit.yaml:119), and :221 pins the default.
  3. Done in the body. I confirmed that Use the OBBBA federal credit for Kentucky's 2026 dependent care credit #10267 merged on 2026-10-19 and that ky_cdcc_potential reads the live cdcc from 2026 (irc_conformity/obbba.yaml).
  4. Comment corrected (federal_eitc_without_age_minimum.py:31) after reading 10-704(c)(3)(i). The code is unchanged; two follow-ups below.
  5. Fixed: the case at ks_fstc.yaml:59 now gives the federal-exemption rationale (:78).
  6. Moved: the six cases now sit in md/tax/income/agi/subtractions/md_dependent_care_subtraction.yaml from line 78; the new file is gone. Both paths sit under states/md, which the Makefile's test-yaml-no-structural-states target runs per state subdirectory.
  7. Done: I read run 41948195035's shard 4 artifact. core-2: 266 tests, 19:45.24 wall, 6,763,476 kB peak RSS (6.45 GiB); the property file's six cases sum to 10.34 s. The body cites these.

3. Rulings for the hub

The hub confirms each call before the PR lands.

  1. Maryland own exemption: new candidate us-md:dependent-taxpayer-own-exemption (state open).
    • Call: follow Tax-General 10-211(a)(1) as amended by 2018 ch. 575, so every filer keeps an own exemption, as main did.
    • Sources read: 10-211's current text (mgaleg.maryland.gov); 2018 Md. Laws ch. 575 (SB 184), PDF pp.1-2, applicable to tax years after December 31, 2017; the 2025 Resident Booklet, pp.12-13; COMAR 03.04.02.01, .02 and .07.
    • Texts: (a)(1) allows an exemption for "the taxpayer"; the booklet's filing status 6 says "You do not get an exemption for yourself. Put a zero in Exemption Box A."
    • Counter-reading: ch. 575's purpose clause ("altering the determination of the number of exemptions") might be read as keeping the pre-2018 federal count, which carried IRC 151(d)(2). I did not adopt it, because (a)(2)(ii)'s spouse rule is the section's only dependency condition. If the hub prefers that reading, it goes to the project lead.
    • Reverses: the PR body's "Maryland's filing status 6 reads claimability for the personal exemption"; round 4's zero-exemption poverty level (reading 11); round 5's mixed-spouse values (1 exemption, $15,650); and the premise of us-md:dependent-exemption-chart-10a and us-md:poverty-threshold-exemption-count.
  2. Kansas 2021-2023 head of household: new candidate us-ks:2021-2023-head-of-household-exemption (state open).
    • Call: follow K.S.A. 79-32,121, so a head of household has one filer exemption.
    • Sources read:
      • the 2021 edition ("an additional Kansas exemption of $2,250 for tax year 1998");
      • the 2023 edition, with no such sentence and history "L. 2022, ch. 63, § 40";
      • 2022 HB 2239 § 40, PDF p.38;
      • the 2021, 2022 and 2023 K-40 instructions, p.6 ("you are allowed an additional Kansas exemption");
      • the Form K-40 in each booklet (2021 p.17, 2022 p.17, 2023 p.19).
    • Text extraction can't show HB 2239's strike-through, so the 2023 edition is my evidence that § 40 removed the sentence.
    • Not a reversal: the November 3 round coded it; this round records it.
  3. Maryland claim default (Suggestion 2), a modeling default rather than a source conflict. md_claimed_as_exemption_on_another_return now defaults to the federal claim. Reverses the variable's documented behavior ("a claim on a federal return alone does not establish it") and the PR body's description. A filer claimed federally now loses the poverty credit unless the input says there is no Maryland claim.
  4. us-md:poverty-threshold-exemption-count, revisited. After C1 the statutory count equals the federal return's person count for every unit the model builds. Reverses the recorded example (1 exemption and $15,650 versus 2 persons and $21,150 for a joint return with one claimable spouse). I kept the item with a separate-return example, which the model does not compute. The hub may drop it.
  5. us-md:dependent-exemption-chart-10a, revisited. The statute reading no longer says the filer's own exemption is denied; the example isolates the child's $3,200 (with the own exemption, $6,400 versus $0).
  6. Years. The Iowa alternate-tax item now starts in 2021. The bar sits in 422.5(3) and (3B) in 2022 (Code PDF p.3) and in 422.5(2) and (3) in 2024 (PDF pp.1-2). The three Maryland statute items start in 2021, since the code applies in every year; their notes say I read only the 2025 booklet.

4. Axiom drafts

I can't read the rulespec-us issues from this session (outside its repository access), so these drafts rely on the review's account of them. Module paths are for the hub to confirm on rulespec-us main.

Comment for #1799 (IA1). Re-pin to 994d9fab5230220a07e47c70f751b7147dd00006. Since e0eaf477:

  • The low-income exemption (ia_is_tax_exempt) and single-filer tax reduction (ia_reduced_tax) follow Iowa Code 422.5's claimant test, not the instructions' $5,000 test. A claimed dependent loses them only when "the person claiming the dependent has net income exceeding" the limit: $9,000, or $13,500 for a joint, head-of-household or surviving-spouse claimant, and $24,000/$32,000 when either filer is 65 or older. A married claimant's combined income is also tested against the larger limit.
  • The alternate tax in 422.5(2)(b) carries the same bar (reading 4), through ia_alternate_tax_eligible. Citations: 422.5(3)(a) and (3B) for 2021-2022; 422.5(2) and (3) from 2023.
  • Add companions:
    • ia_is_tax_exempt.yaml: "2022 claimant income exactly at the statutory limit preserves the exemption", "2022 claimant income over the statutory limit removes the exemption", "2024 a head-of-household claimant uses the larger limit".
    • Also there: "2024 a married claimant's combined income is tested against the larger limit", "2024 an elderly return uses the elderly limits for the claimant test".
    • ia_alternate_tax_eligible.yaml: "A claimed spouse with a high-income claimant prevents alternate tax", "Claimant income equal to its limit preserves alternate tax".
    • ia_income_tax_before_refundable_credits.yaml: "2022 claimed single filer with a low-income claimant has tax reduced to income above $9,000".
  • Drop the companions "2022 single filer who can be claimed as a dependent with $5,000 of net income is not exempt" and "2022 single filer who can be claimed as a dependent gets no tax reduction". Both existed at e0eaf477 and are gone. Also drop the note that reading 4 is not dispatched.

Comment for #1800 (KS1). Re-pin to 994d9fab5230220a07e47c70f751b7147dd00006 and add the readings it excluded, now ruled and coded:

  • 2021-2023 exemptions (K.S.A. 79-32,121(a), IRC 151(d)(2), 152(b)(1)): ks_count_exemptions counts each filer whom no other taxpayer may claim, plus dependents only outside a claimable filer, with the claimant filing exception. Companions in ks_count_exemptions.yaml: "A claimed spouse does not remove the other spouse's exemption", "A claimable but unclaimed 2021 filer has no personal exemption".
  • 2021-2023 head of household: one filer exemption, since L. 2022, ch. 63, § 40 removed the 1998-only allowance. Companion: "A 2022 head of household receives no additional adult exemption" (ks_count_exemptions.yaml).
  • 2024 actually claimed filer with the filing exception (79-32,121b(a)(3)): companion "2024 actually claimed single filer whose claimant meets the filing exception keeps the dependent exemption" (ks_exemptions.yaml, $11,480).

Comment for #1801 (MD1). Re-pin to 994d9fab5230220a07e47c70f751b7147dd00006 and update:

  • Own exemption: Tax-General 10-211(a)(1) allows one for "the taxpayer" with no dependency condition, since 2018 ch. 575 struck (b)(1)'s § 151 reference. The PR now counts every filer. The review reports that this issue flags the rulespec-us 10-211 module for adding one taxpayer exemption unconditionally; that module now agrees with the PR. Withdraw the request to derive own-exemption eligibility; the project lead rules on us-md:dependent-taxpayer-own-exemption.
  • Poverty credit: earned income is the joint § 32(c)(2) eitc_earned_income. The (a)(3)(iii) exclusion reads an actual claim on another Maryland return, an input that defaults to the federal claim. The (a)(2) level counts allowed exemptions, every filer's own included.
  • Readings 8, 10, 11 and 12 are pinned. Companions:
    • is_eligible_md_poverty_line_credit.yaml: "2025 claimable but unclaimed single filer at 10,000 gets the one-exemption level and the credit" ($500).
    • Also there: "2025 joint return with a claimable head uses the two-exemption level and qualifies at 18,000" ($900).
    • Also there: "2025 joint return with both spouses claimable and no filing exception gets the two-exemption level and the credit" ($50).
    • md_personal_exemptions_count.yaml: "2025 single filer whose claimant meets the filing exception has exemptions for the filer and the child" (2, $6,400).
    • md_ctc.yaml: the 2024 and 2022 claimable cases (0) and the 2024 filing-exception control ($500).

Comments for #1802 (KY1) and #1803 (LA1). Re-pin to 994d9fab5230220a07e47c70f751b7147dd00006; content unchanged.

#1793. It belongs to #10267 (merged 2026-10-19). Drop it from this PR's axiom line, or relabel it "#10267's Kentucky 2026 reader".

New issue: Kansas food sales tax credit, 2021-2024. Title: "KS: count federal exemptions for the food sales tax credit with a claimable filer (K.S.A. 79-32,271(d))".

  • Module: the us-ks module for 79-32,271 (path to confirm). Corpus citation: K.S.A. 79-32,271(d), 2025-26 edition.
  • Law: (d) allows "$125 for every exemption claimed on the taxpayer's federal income tax return", counting a dependent only if a child under 18. Credits apply to tax years ending before January 1, 2025.
  • Required output: the credit per return. Companions from ks_fstc.yaml:
    • the 2022 and 2024 claimable single filers ($0);
    • "The 2024 joint credit counts only the unclaimable spouse" ($125);
    • "An unclaimable head of household and one child count twice" ($250);
    • "2024 claimable single filer whose claimant meets the filing exception gets the credit for the child" ($125).
  • Label pe-parity; blocker: the signed encoder run.

New issue: Louisiana dependent exemption, 2021-2024. Title: "LA: no dependent exemption on a return with a claimable filer (R.S. 47:294(B), 2021-2024)".

  • Module: the us-la module for 47:294 (path to confirm). Corpus citation: R.S. 47:294, as reprinted in 2019 HB 416, PDF pp.10-11.
  • Law: taxpayers "claim the same exemptions on their return ... as they used on their federal income tax return", with $1,000 "for each allowable exemption in excess of those required to qualify". IRC 152(b)(1) leaves a claimable filer no dependents.
  • Required output: the dependent exemption per return. Companions: the seven 2024 cases in la_dependents_exemption.yaml, including "2024 single filer whose claimant meets the filing exception gets the dependent exemption" ($1,000).
  • Label pe-parity; blocker: the signed encoder run.

Proposed axiom line, for the hub to finalize with the new issue numbers:

5. Mutants

Each mutant ran in its own git worktree at the final head, in its own test process; the main checkout was never edited. M2's first attempt was killed for memory while two other test processes ran, so I reran it alone. M1's first property-test run failed to import hypothesis, so I reran it after installing the locked version.

Mutant What it undoes File run Result Killing case
M1 C1: a claimable filer loses the own exemption (head_spouse_count_not_dependent_elsewhere, as at 0a28338641) md_personal_exemptions_count.yaml killed, 8 of 9 failed "2025 single filer who can be claimed keeps their own exemption but no dependents" (0 vs 1), and every other claimable case
M1 same test_claimable_filer_ia_ks_ky_la_md_invariants.py killed, 4 of 6 failed the Hypothesis test, through EVERY_FILER_CLAIMABLE (counts [0, 0] against [2, 2]), and the three seeded populations
M2 C1 in the Maryland reform's personal count contrib/states/md/dependent_exemption_reform_test.yaml killed, 3 of 13 failed both "MD dependent exemption reform - joint return with a claimable spouse keeps both spouses' exemptions but no dependent exemption" labellings (3,200 vs 6,400) and the filing-exception case (4,200 vs 7,400)
M3 C1 in the repeal's Maryland entry contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml killed, 2 of 29 failed both "Joint filers with a claimable spouse in Maryland keep both spouses' exemptions" labellings (3,200 vs 6,400)
M4 S1: drop the 152(b)(1) gate in md_ctc's formula_2020 md_ctc.yaml killed, 2 of 33 failed "2024 single filer who can be claimed as a dependent gets no child tax credit although income-eligible" and "2022 single filer who can be claimed as a dependent gets no child tax credit for a disabled child" (500 vs 0 each). The 31 older cases all pass under this mutant, which is the gap S1 named
M5 Suggestion 1: ks_fstc reads plain claimability, without the filing exception ks_fstc.yaml killed, 1 of 29 failed "2024 claimable single filer whose claimant meets the filing exception gets the credit for the child" (0 vs 125)
M6 Suggestion 1: the same swap in md_aged_dependent_exemption md_aged_dependent_exemption.yaml killed, 1 of 11 failed "2025 claimable single filer whose claimant meets the filing exception gets the aged dependent exemption" (0 vs 3,200)
M7 Suggestion 1: the same swap in the Iowa reform contrib/states/ia/dependent_credit_reform_test.yaml killed, 1 of 9 failed "IA dependent credit reform - joint return whose claimable spouse's claimant meets the filing exception keeps the dependent credit" (80 vs 180)
M8 Suggestion 1: the same swap in the Maryland reform's eligible-dependent count contrib/states/md/dependent_exemption_reform_test.yaml killed, 1 of 13 failed "MD dependent exemption reform - joint return whose claimable spouse's claimant meets the filing exception keeps the dependent exemption" (9,600 vs 7,400)
M9 Suggestion 2: no default for the Maryland claim is_eligible_md_poverty_line_credit.yaml killed, 1 of 16 failed "2025 claimable single filer claimed on another federal return is by default claimed in Maryland and gets no credit" (eligible vs not)

No mutant for the removed zero-exemption branch: restoring it changes no value, since every count is at least 1. The candidate, changelog, comment and file-move changes have no code to mutate; test_source_conflicts.py checks the candidates.

6. Tests at the final head and CI

Local runs at 994d9fab52, one file per process (the working tree matched the head). 17 files, 320 cases passed, none failed, covering every file this round changes plus test_source_conflicts.py:

File (under policyengine_us/tests/) Result Wall Peak RSS
policy/baseline/gov/states/md/tax/income/exemptions/md_personal_exemptions_count.yaml 9 passed in 6.06s 95 s 2,211 MiB
policy/baseline/gov/states/md/tax/income/exemptions/md_total_personal_exemptions.yaml 7 passed in 18.25s 140 s 3,813 MiB
policy/baseline/gov/states/md/tax/income/credits/poverty_line/is_eligible_md_poverty_line_credit.yaml 16 passed in 6.53s 99 s 2,231 MiB
policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit_income_level.yaml 2 passed in 10.34s 125 s 3,212 MiB
policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit_earned_income.yaml 14 passed in 45.25s 174 s 3,809 MiB
policy/baseline/gov/states/md/tax/income/credits/poverty_line/md_poverty_line_credit.yaml 2 passed in 10.55s 107 s 2,480 MiB
policy/baseline/gov/states/md/tax/income/credits/ctc/md_ctc.yaml 33 passed in 8.91s 100 s 2,351 MiB
policy/baseline/gov/states/md/tax/income/exemptions/md_aged_dependent_exemption.yaml 11 passed in 10.50s 102 s 2,521 MiB
policy/baseline/gov/states/md/tax/income/agi/subtractions/md_dependent_care_subtraction.yaml 8 passed in 13.93s 113 s 2,812 MiB
policy/baseline/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.yaml 13 passed in 13.45s 110 s 2,607 MiB
policy/baseline/gov/states/ks/tax/income/ks_fstc.yaml 29 passed in 8.13s 98 s 2,296 MiB
policy/contrib/states/ia/dependent_credit_reform_test.yaml 9 passed in 67.03s 279 s 8,150 MiB
policy/contrib/states/md/dependent_exemption_reform_test.yaml 13 passed in 68.40s 283 s 8,165 MiB
policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml 29 passed in 27.48s 166 s 4,760 MiB
code_health/test_source_conflicts.py 103 passed in 23.53s 60 s 931 MiB
test_md_poverty_line_credit_invariants.py 16 passed in 65.07s 114 s 2,493 MiB
core/test_claimable_filer_ia_ks_ky_la_md_invariants.py 6 passed in 30.82s 92 s 2,140 MiB

Wall times include model start-up; some runs overlapped with one other test process.

CI. The latest Pull request run at 994d9fab52 is 42642815203. At 16:15 UTC, 60 minutes after the push, it was still in progress, so I'm handing off with it running.

  • 32 of 36 jobs had passed: every Baseline shard, all nine Rest Python shards, Microsimulation, Household API Partners, PR validation, Package and compatibility, Quick Feedback and five Contrib shards.
  • Four Contrib shards were still running: other-shard-1, other-shard-3, states-shard-1 and states-shard-2.
  • No job had failed, been cancelled or been skipped.
  • In this run the planner put the property file in group core-1 (shard 4). Its six cases took 14.58 s, and the group ran 588 tests in 27:34.30 wall with 7,394,368 kB (7.05 GiB) peak RSS and no failures. The groups differ from run 41948195035's, so the group figures don't compare directly.

7. Body

Every section now describes the final head. The Maryland rows, readings 5-6, 8 and 10-11, the invariants and the tests reflect C1; readings 12 and 13 are new. The Kentucky limitation and its proposed separate PR are gone (Suggestion 3), and CI cost cites run 41948195035 (Suggestion 7). I condensed the validation tables for older heads into a short review history and dropped the internal ids and local paths they carried. The impact: line reads impact: pending a comparison at the final head.; the axiom line is unchanged.

Hand computations

2025 Maryland amounts use $3,200 per exemption (AGI at most $100,000) and the contiguous guideline of $15,650 plus $5,500 per extra person.

  • Exemption count = members − dependents when IRC 152(b)(1) applies. Single claimable filer with a child: 2 − 1 = 1, $3,200. With the filing exception: 2, $6,400. Joint, one claimable spouse, a child: 3 − 1 = 2, $6,400. Same with the exception: 3, $9,600. Both spouses claimable, a child: 3 − 1 = 2, $6,400. 2022 claimable single filer: 1, $3,200.
  • Poverty levels: 1 → 15,650; 2 → 21,150; 3 → 26,650.
  • Poverty credits are min(tax − nonrefundable EITC, 5% × earnings).
    • Single claimable filer: at 12,000, min(600, 600) = 600; at 10,000, min(600, 500) = 500.
    • Joint at 18,000: min(1,000, 900) = 900. Both claimable at 1,000: min(200, 50) = 50.
  • Maryland reform: 2 × 3,200 = 6,400; with the exception and a flat $1,000 dependent amount, 6,400 + 1,000 = 7,400. Repeal: 2 × 3,200 = 6,400.
  • Maryland CTC.
    • 2024, one child under 6, AGI 1,000 ≤ 15,000: $500 for the exception control, $0 when claimable.
    • 2022, a disabled child under 17, AGI ≤ 6,000, no federal CTC to offset it: $0 when claimable, $500 under the mutant.
  • Aged dependent with the exception: 1 × $3,200. Kansas food credit with the exception: 0 filers + 1 child = 1 × $125. Iowa reform with the exception: 2 × $40 + 1 × $100 = $180.
  • Kansas head of household, 2022, one child: statute 2 × $2,250 = $4,500; instructions 3 × $2,250 = $6,750.
  • Reading 5: $6,400 and $0 CTC versus $9,600 and $500. Reading 6: aggregate $15,000 − $6,700 − $6,400 = $1,900; separate ($10,000 − $3,350 − $3,200) + max(0, $5,000 − $3,350 − $3,200) = $3,450.

Judgment calls

  1. The hub's follow-up ("a zero-exemption unit in the property generator"). After C1 no unit can have zero Maryland exemptions, so the old zero-exemption identity was vacuous. Every Hypothesis batch now includes EVERY_FILER_CLAIMABLE (test_claimable_filer_ia_ks_ky_la_md_invariants.py:113,197): the Maryland couple that had zero exemptions at 0a28338641. The identity at :156 checks that every filer keeps an exemption and that the level is positive.
  2. Dead code. I removed the zero-exemption poverty branch and the has_exemption gate rather than keep code no unit can reach.
  3. Main's text in the reforms. The Maryland repeal entry and the Maryland reform's personal count are main's text again, which gives the C1 result and a smaller diff for Apply New Jersey, North Dakota, Ohio, Oklahoma and Pennsylvania rules for a filer who can be claimed as a dependent #10043.
  4. Count formula. tax_unit_size − (dependents when 152(b)(1) applies) equals main's tax_unit_size whenever nobody is claimable, even for inputs where filing_status and membership disagree. head_spouse_count + dependents would not.
  5. us-md:poverty-threshold-exemption-count. Kept with a separate-return example rather than deleted (ruling 4).
  6. Suggestion 2. Implemented, since the codebase already defaults claimable_as_dependent_on_another_return to the claim input.
  7. Suggestion 4. Comment only. Waiving § 32(m) or counting SSN-less children would change values for filers nobody can claim, beyond this PR; follow-ups 1 and 2.
  8. Candidate states. The two new items are open, since only the hub rules.
  9. Candidate years. Extended to 2021 where the code applies in every year; each note names the source years I read.
  10. Louisiana. I added no school-readiness YAML case (not requested); the candidate note and follow-up 3 record the gap.
  11. PR body. Rewritten to the final head. I folded the stale validation tables for older heads into a short review history and removed internal ids and local paths that were in it. The axiom line is unchanged.
  12. Commit trailers. They end with the Co-Authored-By line only, without a session URL, following the brief's rule on internal ids.
  13. Merge order. Main's California block comes before this PR's block in the repeal test, so the PR's diff against main is a pure append.
  14. Session branch. I also pushed the same commits to this session's designated branch, claude/pr-10045-review-65wd6i; no workflow runs on pushes outside main.
  15. Whitespace. git diff --check flags a trailing blank line in ia_alternate_tax_eligible.yaml and ia_income_tax_before_refundable_credits.yaml, both from the November 3 round. I left them, since no finding names them.

Proposed follow-up issues

  1. Waive § 32(m) in Maryland's childless pro forma EITC (Tax-General 10-704(c)(3)(i)).
    federal_eitc_without_age_minimum still applies the identification test to a childless filer. Section 10-704(c)(3)(i) waives it, and the 2025 booklet (p.22) lets an ITIN filer claim the credit "disregarding the SSN requirement"; verify the enactment years first.
  2. Match Maryland's pro forma EITC to the federal eligibility fixes in Let a qualifying child without an SSN establish EITC eligibility from 2021 #10583 and Compare completed years in the childless EITC age ceiling #10585.
    Its has_child counts only children with a valid identification number, and its age ceiling compares fractional ages. eitc_demographic_eligible counts an SSN-less qualifying child from 2021 and compares completed years.
  3. Pin Louisiana's school readiness credit for a claimable filer's incapable child.
    us-la:school-readiness-incapable-child has no YAML case for the credit itself. Add reading 7's 2023 five-star case ($350) so the register entry can pin it.

DISMISSAL MAP

Paths are under policyengine_us/ unless they start with source_conflicts/ or changelog.d/; tests are under tests/policy/baseline/gov/states/ unless shown in full.

  • C1 (Maryland own exemption) — FIXED. variables/gov/states/md/tax/income/exemptions/md_personal_exemptions_count.py:46; zero branch removed at .../poverty_line/md_poverty_line_credit_income_level.py:29 and .../is_eligible_md_poverty_line_credit.py:66; reforms on main's text at reforms/states/md/dependent_exemption/md_dependent_exemption_reform.py:130 and reforms/state_dependent_exemptions/repeal_state_dependent_exemptions.py:54. Pinned by md/.../md_personal_exemptions_count.yaml:3,59,248 and md/.../is_eligible_md_poverty_line_credit.yaml:189,323,384. Candidate source_conflicts/candidates.yaml:4821. Mutant M1 killed.
  • S1 (Maryland CTC gate, 2021-2024) — FIXED. md/tax/income/credits/ctc/md_ctc.yaml:762,790,818. Mutant M4 killed by :762 and :818.
  • S2 (eight stale candidates) — FIXED. source_conflicts/candidates.yaml:3192,3305,3929,4033,4473,4792,5112,5143.
  • S3 (Kansas head of household unrecorded) — FIXED. source_conflicts/candidates.yaml:3962; changelog.d/claimable-filer-ia-ks-ky-la-md.fixed.md:1.
  • S4 (axiom line) — DRAFTED. The body's line is unchanged, per the brief; section 4 drafts the Add DC EITC #1799-Colorado Works (TANF) pregnancy allowance #1803 and Simplify MO pension and social security deduction variables #1793 updates and two new queued issues for the hub to file.
  • Suggestion 1 (unpinned filing-exception restorations) — FIXED. ks/tax/income/ks_fstc.yaml:677; md/tax/income/exemptions/md_aged_dependent_exemption.yaml:264; tests/policy/contrib/states/ia/dependent_credit_reform_test.yaml:120; tests/policy/contrib/states/md/dependent_exemption_reform_test.yaml:189. Mutants M5-M8 killed.
  • Suggestion 2 (Maryland claim default) — FIXED. variables/gov/states/md/tax/income/credits/poverty_line/md_claimed_as_exemption_on_another_return.py:23; default pinned by md/.../is_eligible_md_poverty_line_credit.yaml:221, override by :119. Mutant M9 killed.
  • Suggestion 3 (stale Kentucky text) — FIXED in the PR body; Simplify MO pension and social security deduction variables #1793 handled in the axiom drafts.
  • Suggestion 4 (10-704 comment) — FIXED. variables/gov/states/md/tax/income/credits/eitc/federal_eitc_without_age_minimum.py:31; follow-ups 1 and 2.
  • Suggestion 5 (stale ks_fstc.yaml comment) — FIXED. ks/tax/income/ks_fstc.yaml:78.
  • Suggestion 6 (duplicate test location) — FIXED. md/tax/income/agi/subtractions/md_dependent_care_subtraction.yaml:78; the new file is deleted.
  • Suggestion 7 (CI cost figures) — FIXED in the PR body's CI cost section, from run 41948195035's shard 4 artifacts.
  • Branch conflict with main — FIXED. Merge 13d4d12de5; tests/policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions.yaml keeps both blocks.

Generated by Claude Code

PolicyEngine follows the statute for Maryland's own exemption (Tax-General 10-211(a)(1), as 2018 ch. 575 amended it) and for Kansas's 2021-2023 head-of-household add-on (K.S.A. 79-32,121 limits it to tax year 1998). Both candidates move from open to ruled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis closed this Nov 10, 2026
@MaxGhenis MaxGhenis reopened this Nov 10, 2026
@MaxGhenis MaxGhenis closed this Nov 10, 2026
@MaxGhenis MaxGhenis reopened this Nov 10, 2026

This branch has not been deployed

No deployments
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.

3 participants