Repository navigation
Conversation
Md. Code Tax-Gen. 10-704(c)(1)(i), (c)(2)(iii), (c)(3)(i)2 and (d) compute the state and county credits without the 26 U.S.C. 32(m) limitation from 2020 (Chapter 40 of 2021, made permanent by Chapters 3 and 4 of 2023). 36 M.R.S. 5219-S(7) accepts an ITIN or any Social Security number from 2021. Both reach the filer, spouse and qualifying children (32(c)(1)(E) and (c)(3)(D)) and keep the section 911 bar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 29, 2026
Sol's r1 review found that the recomputed credit used baseline parameters whenever the waiver changed the child count, and that max_ with eitc undid reforms to the final credit (the individual EITC's AGI limit). Replace the recomputation with a policyengine-core branch whose meets_eitc_identification_requirements also accepts has_tin. Every federal EITC variable the Maryland and Maine formulas read now comes from that branch: eitc, eitc_child_count, eitc_phased_in, eitc_maximum, eitc_reduction and filer_meets_eitc_identification_requirements. Each is the federal formula's own result, reforms, take-up and section 911 included. Core 3.33's branch set_input drops the values calculated from the replaced input, and get_branch_for_period rebuilds the branch for each period. Tests: - state_eitc_itin_reforms.yaml: the r1 counterexamples for both states, and a streamlined case where a second child lowers the credit. - test_state_eitc_itin.py: the twin invariants under five structural reforms, and one simulation across 2019, 2025 and 2020 matching separate simulations. The never-below-eitc bounds hold under current law only, so they are checked without reforms. - test_state_eitc_itin_property.py samples a reform. Register the Maine worksheet-versus-statute reading of ITIN children as a source-conflict candidate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…idate Global ids are lowercase (test_candidates_have_unique_well_formed_ids). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ainst a fresh reference Sol's r2 review found that under labor-supply responses the 32(m)-free credit depended on calculation order: the branch recomputed responses through measurement branches that lose its identification input. The branch now takes each person's behavioral responses from the parent as inputs, so it computes the credit on actual earnings, and the helper returns the parent's tax units when the waiver changes no one's identification. Tests: - both calculation orders under the Working Parents Tax Relief Act with labor-supply elasticities, against a fresh simulation on the post-response earnings with identification relaxed by input (fails on the previous helper: $3,853.50 vs $2,824.53); - every grid check now compares the 32(m)-free credit, the state child count and the childless pro forma with that fresh reference, re-reads the parent's identification and federal credit after the state credits, and runs the 2025 grid state-first; - Sol's education-credit household, where another SSN rule separates the twin but not the reference; - the individual EITC's AGI limit moves to $10,000, inside the childless credit's range. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The two files simulate under seven reforms and keep 4.8 GiB resident after the first one; both in one process peak at 6.97 GiB locally. Their own group releases that heap before the remaining group runs, the convention for modules that retain reformed systems. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e pro formas' final eitc Sol r3, finding 1: the waived branch relaxed meets_eitc_identification_requirements, which the 2020-2021 recovery rebate credits also read, so in the branch and its itemization branches an ITIN parent got rebates that 6428(g) and 6428A(g) deny, which could change the itemization choice and the AGI. Now: - eitc_ssn_limitation_waived (TaxUnit input, false) and eitc_identification_accepted (Person) carry the waiver. eitc_child_count, filer_meets_eitc_identification_requirements and the Working Parents Tax Relief Act's young-child count read the latter; the recovery rebate credits keep the valid-SSN predicate. - The branch sets the flag and takes the AGI and behavioral responses of the return as filed (keep_return_as_filed), as the federal EIC worksheet the states point to reads AGI from Form 1040 line 11. Finding 2: the Maryland and Maine childless pro formas rebuilt the credit from its components, so a reform of the final eitc formula (the individual EITC's AGI limit, the End Child Poverty Act's neutralized eitc) did not reach them. pro_forma_federal_eitc now evaluates the final eitc in a per-period branch with eitc_eligible set to each pro forma's own conditions, take-up and voluntary filing true, and the return's AGI and responses. Current-law values are unchanged. Tests: - YAML: expected-zero cases for the $10,000 individual-EITC limit and the End Child Poverty Act (ITIN and SSN filers, MD 35 and ME 20), Sol's recovery rebate credit household and its SSN twin, an as-filed AGI case, and two capital-gains-response cases. - Python: the references take the flag and the AGI as filed by input; an independent pro forma reference sets eitc_eligible from each household's description; the End Child Poverty Act joins the reform grid; a white-box test checks that the waived branch and its itemization branches give the ITIN parent no recovery rebate credits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test-yaml-reform runs one process per file, and each reformed case builds its own system: the 13 cases in one file peaked at 10.6 GB locally. Split, the original six cases peak at 6.1 GB, the four pro forma cases at 6.1 GB and the three return-as-filed cases at 4.0 GB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 M.R.S. 5219-S(7) applies "for an individual who files a federal income tax return". The waiver flag reached every Maine return, and the childless pro forma sets voluntary filing, so an ITIN filer with no federal return got Maine's credit (Sol r4 finding 1: $191.25 where the statute gives $0). - md_eitc_ssn_limitation_waived, me_eitc_ssn_limitation_waived and state_eitc_ssn_limitation_waived say whom each state's waiver reaches. Maine's reads the federal EITC's filing condition on the parent, before any pro forma sets filing. federal_eitc_tax_unit sets the branch's flag to the combined variable, so every state credit gives the branch the same inputs. - The tests' references follow the filing condition; the grid adds a row of households that don't file, and Hypothesis samples it. - The pro forma reference applies Maryland's federal maximum age (Sol r4 finding 2) and reads Maine's cohort from me_childless_eitc_age_eligible. - test_a_later_period_reads_its_own_inputs: Sol's r4 case for the per-period branch ($3,400, not a shared branch's $1,700). - YAML: Maine nonfilers and their filing, required-to-file and SSN counterparts; a Maryland nonfiler and twin; the Maine pro forma's investment-income gate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 M.R.S. 5219-S(7) applies "for an individual who files a federal income tax return", and the MRS worksheet asks whether the filer filed one. The candidate us-me:eitc-itin-qualifying-children stated the statute's reading and its example without that condition; the register entry copies this text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol r5 finding 1: Maine's waiver counts a tax unit that would file to claim a refundable credit as filing a federal return, as the federal eitc formula's filer test does. tax_unit_is_filer counts that propensity only with a federal credit, which 32(m) denies an ITIN filer, so it calls such a filer a nonfiler. The comment and documentation now state the choice and its reasons (Maine's EITC is refundable; the SSN twin with a federal credit files), and the YAML pins tax_unit_is_filer: false for the credit-propensity filers. Sol r5 finding 2: no test set voluntary filing on a household. A YAML case now has an ITIN filer who files voluntarily and not for a credit (tax_unit_is_filer: true, $191.25). The tests' "files" takes a third value, "voluntarily"; the grid's take-up row uses it and asserts that it reaches a Maine ITIN filer, and Hypothesis samples it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol r6 (APPROVE) found two non-equivalent mutants the tests missed: - responses-not-kept (drop keep_return_as_filed's response loop) passed the labor-supply regression. With a Maine household present, the waiver flag reads the filing requirement on the parent, which calculates the responses before the branch exists, and the branch inherits them from the parent's cache. The regression now sets the filing requirement by input (false, as it is at $5,000), so the branch needs the copy. - Zeroing only the self-employment response in the branch passed every case: none had one. md_eitc_itin.yaml and me_eitc_itin.yaml gain an ITIN parent with $5,000 of self-employment income and a $1,000 response: $5,576.11 of earned income, a $1,895.88 basis, $853.15 from Maryland and $473.97 from Maine. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sol r7 finding 1: the labor test's comment said nothing is cached when the waived branch is created, which holds only when the state variables come first. The eitc-first order calculates the responses before the branch exists and inherits them. The comment now says so: by input, the two orders agree only if keep_return_as_filed copies the responses. Sol r7 note 4: with the filing requirement by input, the test no longer ran Maine's filing formula under labor-supply responses. The test now runs with the requirement by formula, as at r6, and by input, as False, the value the formula gives these households. Of the 46 mutants in the mutation run, five survived: two equivalent, responses-not-kept (2819d69's labor test kills it), and two more. - md-pro-forma-investment: no Maryland case had investment income. The Maryland pro forma's YAML gains Maine's two cases: $12,000 of interest bars the credit; $11,000 leaves $237.43, all of it Maryland's non-refundable credit. - pro-forma-branch-shared-name (one branch for both pro formas) is equivalent at core 3.33.2: set_input on a branch drops what was calculated from the input it replaces, so the second pro forma recalculates eitc. A new test runs both pro formas in one simulation, in both orders, with a Maryland ITIN filer aged 65 and a claimable Maine ITIN filer aged 20, whom the two branches give different federal credits ($0 and $76.50 in Maryland's, $649 and $0 in Maine's); each gets no pro forma credit, as each does alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Status (2026-10-29 16:06Z): Sol's r7 review approved
2819d69563with two wording fixes and a coverage note.5a92f6cc0cmakes them, runs the labor-supply test with the filing requirement by formula and by input, and closes the gaps the mutation run found: Maryland's pro forma had no investment-income case, and a new test runs both states' pro formas in one simulation in both orders. The mutation table below is complete. Sol's r8 review of that test-only commit is in progress, and the microsim waits for #10525.Stacked on #10525. GitHub retargets this PR to
mainwhen #10525 merges, and CI (pr.yaml) runs only once the base ismain.This PR applies the 26 U.S.C. 32(m) waivers that Maryland and Maine enact for their EITCs. Section 32(m) limits the taxpayer identification number required by 32(c)(1)(E) (filer and spouse) and 32(c)(3)(D) (qualifying children) to a Social Security number valid for employment. On main and in #10525, every MD and ME path still requires that number.
Law
Maryland, Md. Code Tax-Gen. 10-704. Each path computes the § 32 credit "without regard to" or "but for the limitation under § 32(m)":
Chapter 40 of 2021 (SB 218) applies the waiver to tax years from 2020 (Comptroller Tax Alert 03-11-2021), and Chapter 3 of 2023 made it permanent. The 2025 Resident Booklet (Instructions 18 and 19) tells filers to calculate "the federal earned income credit disregarding the SSN requirement" for both the state and the local credit.
Maine, 36 M.R.S. 5219-S(7), from 2021: "for an individual who files a federal income tax return, notwithstanding Section 32(m) of the Code ... the taxpayer identification number required by Section 32(c)(1)(E) and 32(c)(3)(D) of the Code means a federal individual taxpayer identification number ... or a social security number". Unlike Maryland's, Maine's waiver reaches only a filer of a federal return.
Neither state waives 32(c)(1)(C), the bar on section 911 claimants, and every new path keeps it.
METHODOLOGY_CHOICE: the return as filed. This PR computes the waived federal credit on the federal return as filed. Neither statute says whether the filer re-chooses the itemization election for the waived credit; the state instructions support the choice. Maryland's booklet has an ITIN filer calculate "the federal earned income credit disregarding the SSN requirement", and Maine's worksheet has the filer complete a "pro forma" federal EIC worksheet. That worksheet takes AGI from the return: "Enter the amount from Form 1040 or 1040-SR, line 11" (2024 Form 1040 instructions, EIC Worksheet A, line 3).
Design
An ITIN holder is
ssn_card_type: NONEwithhas_tin: true, the convention CO, IL, DC and CalEITC (#10322) already use. A person with no TIN hashas_tin: false. A Social Security number not valid for employment (OTHER_NON_CITIZEN) also passes both states' test.The waiver reaches only the EITC's identification test. Two new federal variables carry it:
eitc_ssn_limitation_waived(tax unit, input, default false): whether the EITC variables accept any TIN in place of the Social Security number valid for employment that 32(m) requires.eitc_identification_accepted(person):meets_eitc_identification_requirements, or any TIN (has_tin) where the flag is set.eitc_child_count,filer_meets_eitc_identification_requirementsand the Working Parents Tax Relief Act'seitc_young_child_countreadeitc_identification_accepted. The other readers ofmeets_eitc_identification_requirementskeep the valid-SSN test: the 2020-2021 recovery rebate credits (26 U.S.C. 6428(g), 6428A(g)), Colorado's comparison of its own test with the federal one, and the Montana newborn credit reform. The flag is false outside the state branches, so every federal value equals main's.Whom the waiver reaches. Three tax-unit variables say it:
md_eitc_ssn_limitation_waived: every Maryland return from 2020.me_eitc_ssn_limitation_waived: from 2021, a Maine return whose filer files a federal return. The test is the federaleitcformula's filing condition (eitc_filing_requirement_met: required to file, filing voluntarily, or would file to claim a refundable credit, Maine's own included), read on the parent, so the childless pro forma's own voluntary filing (below) can't satisfy it.state_eitc_ssn_limitation_waived: either of the two.METHODOLOGY_CHOICE: who files a federal return (Sol's r5 finding 1). PE-US's
tax_unit_is_filercounts a tax unit that would file to claim a refundable credit only when it is eligible for a federal one (eligible_for_refundable_credits:eitcor the refundable CTC above zero). Section 32(m) denies an ITIN filer the federal EITC, sotax_unit_is_filercalls such a filer a nonfiler even when it would file for Maine's credit. This PR counts Maine's refundable EITC among the credits a filer files to claim, for three reasons:tax_unit_is_filer. Subsection 7 accepts the ITIN filer's identification as federal law accepts the twin's, and this reading treats the two the same.would_file_if_eligible_for_refundable_creditcovers "a refundable tax credit (EITC, ACTC, etc.)" and doesn't limit it to federal credits.tax_unit_is_fileris false (files_return_for_aca_ptc).tax_unit_is_filerin its place would pay $0 to Sol's household (2025, single, 20, $5,000 of wages, an ITIN, filing only to claim a credit), where this PR pays $191.25;me_eitc_itin.yamlpinstax_unit_is_filer: falsefor it. With both filing inputs at their defaults (voluntary false, credit true), every Maine ITIN filer counts as filing, so the condition binds only where a household's inputs say it wouldn't file.The waived branch.
federal_eitc_tax_unit(tax_unit, period)instate_eitc_helpers.py:tax_unit.eitc_without_ssn_limitation, with the flag set tostate_eitc_ssn_limitation_waivedand with the AGI and behavioral responses of the return as filed (keep_return_as_filed). Every state credit gives the branch the same flag, so the order in which a simulation calculates the two states' credits can't change it.The 32(m)-free credit (
md_andme_federal_eitc_without_ssn_requirement) is the branch'seitc, so reforms of the federal credit, take-up, filing, investment income, marital rules and section 911 carry through. The state child counts are the branch'seitc_child_count.Sol's r4 finding 1 (Maine's filing condition). In r4 the flag reached every Maine return, and the childless pro forma sets voluntary filing, so an ITIN filer with no federal return got Maine's credit. Sol's household: 2025, single, 20, $5,000 of wages, an ITIN, taking up the EITC, with neither voluntary nor credit-driven filing. r4 paid a $382.50 basis and $191.25 from Maine; subsection 7 gives $0, as this PR now does. With the filing condition in the flag, a Maine return without a federal return (not required to file, with both filing inputs false) gets exactly main's treatment on every path (YAML):
tax_unit_is_filer; see the methodology choice above), so does one filing voluntarily, and one required to file ($17,000 of wages) gets $80.465;Maryland's waiver has no filing condition, so a Maryland ITIN filer with no federal return gets the childless credit ($649 at $10,000 of wages), like the SSN twin.
The return as filed. The branch takes each tax unit's AGI and each person's labor-supply and capital-gains responses (
NEUTRALIZED_BEHAVIORAL_RESPONSE_VARIABLES) from the parent as inputs, as the state worksheets take them from the federal return (see Law). So the changed credit can't move them, through the itemization election (in 2020 and 2021 the charitable deduction for non-itemizers sits above the line) or through a response measured on the branch's own marginal rates.eitcfirst and $2,824.53 when it calculated the state basis first. The fresh reference on the parent's post-response earnings gives $3,853.50, as both orders now do. Sol's r3 accepted holding actual earnings fixed as a methodology choice.The childless pro formas (
federal_eitc_without_age_minimum,me_pro_forma_childless_eitc) evaluate the final federaleitc(pro_forma_federal_eitc). They do so in a per-state, per-period branch (md_pro_forma_eitc,me_pro_forma_eitc) of the tax unitsfederal_eitc_tax_unitreturns, with:eitc_eligibleset to the pro forma's own conditions, evaluated in those tax units: the investment income limit, the filer's and spouse's identification and the section 911 bar, plus the federal maximum age for Maryland (unless a qualifying child counts) and no dependent filer for Maine;takes_up_eitcandwould_file_taxes_voluntarilytrue, and no separate-filer rule, since the pro formas apply none of the three on main;On main they rebuild the credit from
eitc_phased_in,eitc_maximumandeitc_reduction, so a reform of the final formula misses them (Sol's r2, and r3 finding 2). Take the individual EITC with a $10,000 AGI limit, or the End Child Poverty Act, which neutralizeseitc. Under either, a 2025 childless filer with $10,000 of wages gets $649 from Maryland at age 35 and $324.50 from Maine at age 20, with an ITIN or an SSN. Here both get $0, so this PR also changes those two reforms' results for SSN filers. Under current law the two computations agree: the MD and ME YAML suites pass unchanged.Other SSN rules. The waivers relax 32(m) only, so other SSN rules stay in force, and they can reach a household's taxes through AGI. Then the SSN twin, whose taxes those rules also change, is not the right comparison:
The definition the tests check the branch against is a fresh simulation with the flag and the AGI as filed set by input.
Three mechanisms make the branches reliable:
eitcbefore the branch existed.get_branch_for_periodcreates each branch again for each period, from the parent as it stands then. A branch kept across periods answers a later period from its copy of the inputs, which misses an input set after the copy. Sol's r4 case: a Maryland ITIN parent with an SSN child and $5,000 of wages in 2020 and 2025, whose 2025 wages become $10,000 after the simulation calculates the 2020 credit. The per-period branch gives a 2025 basis of $3,400 ($1,530 from Maryland), as a simulation of 2025 alone does; a shared branch gives $1,700, though it takes the $10,000 AGI as filed.test_a_later_period_reads_its_own_inputschecks it, so r4'sbranch-not-per-periodmutant was not equivalent. Within one period the parent itself doesn't recompute after aset_input, and the branch agrees with it.Sol's r1 review found the earlier design (recompute the credit from baseline parameters, then
max_witheitc) wrong under structural reforms. This design replaces it.Under some reforms a second qualifying child lowers the federal credit: the streamlined EITC at $30,000 of wages, and the Working Parents Tax Relief Act at $5,000 when the second child is older. A Maryland filer with an SSN child and an ITIN child then gets a basis of the two-child amount ($2,594.51 under the streamlined EITC in 2025), not the larger one-child federal credit ($2,932.33). That is what the otherwise identical SSN family gets federally in PE-US. Maryland's "allowable ... or that would have been allowable but for § 32(m)" could be read to let the filer take the larger, but only under such a reform. Maine's subsection 7 leaves no choice. Current law gives no such case.
Changes
Federal EITC variables:
eitc_ssn_limitation_waivedandeitc_identification_accepted.State waiver flags: new
md_eitc_ssn_limitation_waived,me_eitc_ssn_limitation_waivedandstate_eitc_ssn_limitation_waived(see Design).eitc_child_count,filer_meets_eitc_identification_requirementsand the Working Parents Tax Relief Act'seitc_young_child_countreadeitc_identification_accepted.Helpers (
policyengine_us/tools/state_eitc_helpers.py):federal_eitc_tax_unit,keep_return_as_filedandpro_forma_federal_eitc.Maryland:
md_eitc_child_countandmd_federal_eitc_without_ssn_requirement.md_qualifies_for_unmarried_childless_eitcand both married-or-has-child paths) uses the Maryland child count, so a child with an ITIN makes the filer a filer with a qualifying child.federal_eitc_without_age_minimumevaluates the finaleitc(see Design).md_local_eitcuses the 32(m)-free credit.Maine:
me_eitc_child_countandme_federal_eitc_without_ssn_requirement.me_eitcuses both new variables.me_pro_forma_childless_eitcevaluates the finaleitc, and the 18-24 cohort test uses the Maine child count.Parameters:
gov.states.{md,me}.tax.income.credits.eitc.itin_eligible, with MD from 2020 and ME from 2021.Makefile: a Rest Python group,
state-eitc-itin, for the two Python test files (see Test cost).Source conflict: a
source_conflicts/candidates.yamlentry,us-me:eitc-itin-qualifying-children(state: ruled, follows: statute). Both sources reach only a filer who files a federal return, and the entry says so. The MRS 2024 worksheet changes the federal identification answer only for "you (or your spouse, if married)", but subsection 7 names 32(c)(3)(D), so a child with an ITIN counts. Maryland's booklet is silent on children, not contrary (Instruction 5 accepts "a valid SSN or ITIN" for any dependent), so Maryland has no conflict to register.This PR follows the order the guard enforces.
test_source_conflicts.pyfails a marker whose entry is missing from the pinned rulespec-us copy and accepts a candidate, so:proposed, in its register batch A. The hub has queued that PR (hub-register-batch-a) to open after the host reservation ends; this line gets its link then. The entry cites 5219-S(7) from the corpus and the worksheet's Step 1, question 2 sentence from the capture already onmain(source_conflicts/sources/us-me/eitc-worksheet-2024.txt), so this PR adds no capture.main, a follow-up PE-US PR adds the marker atme_eitc_child_count.py, refreshes the pin and deletes the candidate.CONTRIBUTING (Source conflicts) lists the entry, marker and pin as three things one PR does, but its own rules spread them over this order: step 1 pins only commits on
mainand lists an open PR underproposeduntil it merges, step 3 refreshes the pinned copy only once the entry is on rulespec-usmain, and the guard fails a marker whose entry the pinned copy lacks. So this PR does what an open PR can. The hub has queued a docs-only PR that rewords CONTRIBUTING to describe this order (queued with the hub; this line gets its link when it opens); this PR doesn't depend on it, leaves CONTRIBUTING unchanged and adds no pin for unmerged code.Example
2025, wages of $10,000, a citizen parent whose only child has an ITIN. The federal EITC is $649, the childless amount.
An ITIN parent with an ITIN child gets $0 on main in both states and the same amounts here; in Maine that takes the default filing inputs, under which the parent would file to claim a credit (see the methodology choice in Design).
Invariants
Each holds for every household, year and reform the tests generate. Households file to claim a credit (the default inputs), file voluntarily and not for a credit, or file only if required to (
would_file_taxes_voluntarilyandwould_file_if_eligible_for_refundable_credit); "files" below means required to file or filing by those inputs. Every household runs beside a twin in which each ITIN or non-work SSN becomes a valid SSN. It also runs beside two references, each a fresh simulation of the households alone, with each household's AGI as calculated (the return as filed) andeitc_ssn_limitation_waivedset where its state's waiver applies to it: Maryland from 2020, Maine from 2021 for a household that files.0. Reference. In every year, the 32(m)-free credit and the state child count equal the reference's
eitcandeitc_child_count. This is the waivers' definition, Maine's filing condition included, and a differential check of the waived branch.eitc_child_count.eitcwhen everyone holds a valid SSN, and where the waiver doesn't apply to the household: a differential check of the branch against the federal variables. Under current law it is never beloweitc, since an added qualifying child never lowers the federal credit. Some reforms break that property (see Design), so the tests check this half without reforms.calculate) readsmeets_eitc_identification_requirementsbefore anything else and again after the state credits, and finds it unchanged.eitcandeitc_child_countbefore the state credits and find them unchanged after.False, the value the formula gives these households. By formula, Maine's waiver reads that requirement under the responses, so both orders calculate the responses before the waived branch exists, and the branch inherits them (core'sget_branchstarts from the parent's cached values). By input, the state-first order calculates nothing before the branch exists, so the orders agree only ifkeep_return_as_filedcopies the responses (Sol's r6 and r7 notes). The 2025 grid runs the state credits first and the year grids the federal first, so they check each order's invariants, not that the orders agree.federal_eitc_without_age_minimum, andme_pro_forma_childless_eitcwithin Maine's cohort (me_childless_eitc_age_eligible; zero outside it), equal the federaleitcof the second reference, under the same reform. That reference setseitc_eligiblefrom each household's description: identification (Maine's waiver needing a federal return), the section 911 bar and, for Maryland, the federal maximum age unless a child with an accepted TIN counts. Take-up and voluntary filing are true.Tests
md_eitc_itin.yaml(22 cases) andme_eitc_itin.yaml(26 cases), each with three SSN twins of its ITIN cases. They cover:tax_unit_is_filerpinned for the credit-propensity and voluntary filers (Sol's r5 findings 1 and 2), a childless ITIN filer aged 30 and twin (the Axiom parity case ME-9), a citizen parent with an ITIN child in Maine, and the Maryland nonfiler and twin.me_pro_forma_childless_eitc.yaml(2 new cases): investment income over the $11,950 limit ($0) and under it ($237.43), the gate Sol's r4 found no case for.federal_eitc_without_age_minimum.yaml(2 new cases): the same two households in Maryland, aged 21 ($0; $237.43, and Maryland's non-refundable credit takes all of it). The mutation run found no Maryland case for the gate.tests/policy/reform/state_eitc_itin_reforms.yaml(6 cases): Sol's r1 counterexamples under the streamlined EITC and the individual EITC's AGI limit, for both states, and the streamlined case in Design where a second child lowers the credit.state_eitc_itin_pro_forma_reforms.yaml(4 cases): ITIN and SSN childless filers (Maryland, 35; Maine, 20) get $0 under the $10,000 individual-EITC limit and under the End Child Poverty Act.state_eitc_itin_return_as_filed.yaml(3 cases): Sol's r3 recovery rebate credit household, its SSN twin, and the as-filed AGI case.eitc_child_countoreitcto the MD routing and local-credit variables now feed the variables those formulas read.test_state_eitc_itin.pychecks invariants 0-11 on a 2,400-household grid (a fifth of them households that don't file, and a fifth that file voluntarily, not for a credit, and don't take up the EITC) for 2019, 2020, 2021 and 2025. It also checks a 192-household grid under each of six structural EITC reforms:Each reform test also asserts that the reform changes some state credit, and the 2025 grid asserts that it reaches the households Maine's filing condition separates. Five regressions run separately: both calculation orders under labor-supply responses; both pro formas in one simulation, in both orders, where a Maryland ITIN filer aged 65 and a claimable Maine ITIN filer aged 20 get no credit, as each does alone, though the two pro formas' branches give them different federal credits; the education-credit household where twin and reference part, the recovery rebate credits in the waived branch, and Sol's r4 period case.
test_state_eitc_itin_property.py(Hypothesis) samples households (ages 18-80; filing for a credit, voluntarily or not at all), years and a reform (or none).Test cost. Measured locally with
/usr/bin/time -lon macOS, Python 3.14, 4 numeric threads, on a shared host. Each figure is one process, including setup. Linux CI figures will come from the first CI run.ea2e81f002)test_state_eitc_itin.pystate-eitc-itin(new)test_state_eitc_itin_property.pystate-eitc-itin(new)state_eitc_itin_reforms.yaml(new)test-yaml-reform, one process per filestate_eitc_itin_pro_forma_reforms.yaml(new)test-yaml-reformstate_eitc_itin_return_as_filed.yaml(new)test-yaml-reformstate-eitc-itin. The files simulate under eight reforms: the six EITC reforms, labor-supply responses and the education-credit SSN rule. An earlier per-test measurement oftest_state_eitc_itin.pyput 6.2 GiB resident by its last test, with the labor-supply test adding 1.6 GiB to the peak; at09acdc59efthe whole module peaks at 9.22 GB in one process. In theremaininggroup that heap would stack on the other files' (main's latest release run, 40753949728:remaining18:04 wall, 8.02 GB). So the Makefile gives these files their own group, as it does for other modules that retain reformed systems, andremainingskips them. The planner may still split a group, so the files need not share a process.code_health/test_rest_python_groups.pypasses. The baseline arrays the reform cases compare against come from one module fixture, and the property test samples a reform half the time.test-yaml-reform. Each reformed case builds its own system. In one file, the 13 cases peaked at 10.6 GB, so they sit in three files, each near the ~5.5 GB the Makefile records forwinship.yaml.Mutation checks
Each mutant changes one piece of the PR's code, and a test that fails kills it. The run took the 46 mutants below one at a time (2026-10-29, 10:02-16:02Z), one test process at a time: the YAML files, then, if every case passed,
test_state_eitc_itin.py, then the Hypothesis file. It copied the worktree's tests when each mutant started, and the tests changed during the run, so the third column names the tests each mutant met. The model code changed only in a comment and a documentation string (11:51Z).09acdc59ef09acdc59ef09acdc59ef09acdc59eftest_state_eitc_itin.py)09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59ef09acdc59eftest_state_eitc_itin.py)09acdc59eftest_state_eitc_itin.py)2657cfa1842657cfa1842657cfa184eitc_eligible2657cfa1842657cfa1842657cfa1842657cfa184test_state_eitc_itin.py)2657cfa184set_inputon a branch drops every value the branch calculated from the input it replaces, so the second pro forma recalculateseitc(5a92f6cc0c's two-state test passes it, though the two branches'eitcdiffer there)md_eitc_child_countwithout the waiver2657cfa184md_federal_eitc_without_ssn_requirementwithout the waiver2657cfa1842657cfa1842657cfa1842819d69563YAML,2657cfa184Python2819d695632819d69563eitc_child_count2819d69563eitc_child_count2819d69563eitc2819d69563md_local_eitcuseseitc2819d695632819d69563me_eitc_child_countwithout the waiver2819d69563me_federal_eitc_without_ssn_requirementwithout the waiver2819d695632819d695632819d695632819d695632819d69563me_eitcuseseitc2819d69563me_eitcrate useseitc_child_count2819d69563eitc_child_count2819d695632819d69563+5a92f6cc0clabor test5a92f6cc0cOf 46: 41 killed, 3 equivalent and 2 survived. Later runs, each against the tests named:
tax_unit_is_filerin its place fails nine YAML cases and the grid (91 of 800).Limitations
has_tindefaults to true, and the default dataset carries neitherhas_tinnor its legacyhas_itin. So everyssn_card_type: NONEperson counts as an ITIN holder. In 2025, a childless Maine filer aged 35 with $10,000 of wages gets $324.50 withhas_tinomitted and $0 withhas_tin: false. This follows the CO, IL, DC and CalEITC convention. For the same reason, the microsim below treats everyNONEperson in the data as an ITIN holder.md_local_eitcdoes not apply (c)(3)(i)'s minimum-age waiver. This gap predates this PR, which leaves it as it was.eitc_eligibleitself. The pro formas replaceeitc_eligiblewith their own conditions, so a reform of that variable would not reach them. No shipped reform replaceseitc_eligibleor the variables it reads.tax_unit_is_filerdoesn't if the filer has no federal credit (the METHODOLOGY_CHOICE in Design). With both filing inputs at their defaults, every Maine ITIN filer counts as filing.Interactions
federal_eitc_without_age_minimum.pyand its YAML. The second to land keeps this PR'spro_forma_federal_eitccall, puts Apply Iowa, Kansas, Louisiana and Maryland rules for a filer who can be claimed as a dependent #10045'sdemographic_eligible(read from the branch's tax units) into its eligibility in place ofmeets_max_age, and keeps both files' YAML cases. A trial merge of2657cfa184withmain(1b52a6d7c0) and then Apply Iowa, Kansas, Louisiana and Maryland rules for a filer who can be claimed as a dependent #10045 (e0eaf477c9), with that resolution, passes each MD EITC YAML file (63 cases), eachmd/tax/income/localYAML file (21), eachgov/local/mdcounty YAML file (153),me_eitc_itin.yaml(25), Apply Iowa, Kansas, Louisiana and Maryland rules for a filer who can be claimed as a dependent #10045's invariants test (6) and the ITIN grid test, one file per process.eitc_filing_status_eligiblenext to the new helpers. The 32(m)-free credit is the branch's federaleitc, so Fix EITC eligibility for married separate filers #10307's marital rule carries through to it. The childless pro formas apply no separate-filer rule, on main or here.48a0943da4. The rebase resolvesme_eitc.pyandsource_conflicts/candidates.yaml, and itstest_me_childless_eitc_age_gate.pycheck 4 then readsme_federal_eitc_without_ssn_requirementandme_eitc_child_count, since this PR pays non-work-SSN filers from 2021. Extend Maine's childless EITC expansion to 2021 students aged 19 to 23 #10526 also redefines Maine's cohort (no one meeting the federal age test), so invariant 11 reads the cohort fromme_childless_eitc_age_eligiblerather than restating it.eitc_child_countandfiler_meets_eitc_identification_requirementsreadeitc_identification_accepted. A PR that edits either formula keeps that read.REST_PYTHON_GROUPSorREST_LISTED_TESTSconflicts with the new group's lines; keep both.Impact
Pending: the microsim runs once #10525 merges and this branch rebases onto
main.Axiom parity
axiom: us-md/statute/gtg/10-704 rulespec-us#1422 queued
axiom: us-me/statute/36/5219-S rulespec-us#1651 queued
The parity comments on both issues give the encoding briefs and companion cases.
🤖 Generated with Claude Code