Repository navigation
Deny the refundable CTC and the EITC to section 911 filers (26 U.S.C. 24(d)(3), 32(c)(1)(C), 6012(c)) - #9750
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9750 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 4 5 +1
Lines 76 86 +10
Branches 2 1 -1
=========================================
+ Hits 76 86 +10
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
MaxGhenis
marked this pull request as ready for review
October 2, 2026 13:43
MaxGhenis
force-pushed
the
ctc-refundable-foreign-earned-income-exclusion
branch
from
October 2, 2026 20:34
74bd843 to
a0b9b88
Compare
MaxGhenis
force-pushed
the
ctc-refundable-foreign-earned-income-exclusion
branch
from
October 3, 2026 03:16
a0b9b88 to
13bd6a8
Compare
MaxGhenis
added a commit
that referenced
this pull request
Oct 3, 2026
…3, citations - Worksheet B excludes Form 2555 filers only from 2015, when 24(d)(3) (then (d)(5)) first barred their refundable CTC. Reuses #9750's foreign_earned_income_exclusion_bar_applies parameter, byte-identical. - Colorado's 2023 DR 0104CN line 4 is Schedule 8812 line 13 (Worksheet A line 5, after Worksheet B); 2022 lines 4-6 stay Worksheet A lines 1-3. - Comments name the 2022 lines (Form 5695 line 30; no 6m) and the credits not modeled (Form 8978, Form 8910); split the Worksheet A line 4 and Worksheet B line 15 anchors; Worksheet B line 14 is on page 6. - The 24(h)(5) cap is $1,400 indexed ($1,700 for 2025). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 3, 2026
MaxGhenis
force-pushed
the
ctc-refundable-foreign-earned-income-exclusion
branch
2 times, most recently
from
October 3, 2026 14:16
7ecaa09 to
adad909
Compare
26 U.S.C. 24(d)(3) says the refundable portion of the Child Tax Credit "shall not apply to any taxpayer for any taxable year if such taxpayer elects to exclude any amount from gross income under section 911 for such taxable year". refundable_ctc never read foreign_earned_income_exclusion, so Form 2555 filers got the additional child tax credit. - Add gov.irs.credits.ctc.refundable.foreign_earned_income_exclusion_bar_applies (false before 2015, true from 2015: Pub. L. 114-27 section 807 applies to taxable years beginning after 2014). - refundable_ctc is zero when the exclusion is positive and the bar applies. The fully refundable year (2021) is unchanged: section 24(i)(1)(A) switched off subsection (d) for filers living in the United States, which the model assumes. - Apply the same bar in the Wyden-Smith reform's copy of refundable_ctc (H.R. 7024 amends section 24(h) and leaves 24(d)(3) in place). - Add YAML unit, household and reform tests, and Hypothesis property tests (hypothesis joins the dev extras). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hypothesis is a dev extra. Importing it at module level would fail test collection in any environment installed without dev extras. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of the first version found two problems. pr_refundable_ctc takes the larger of refundable_ctc and social security taxes less the EITC, so the social security route handed the refund back to a filer the bar had just denied. Section 24(k)(2)(B) drops only the three-children condition for residents of Puerto Rico; it does not waive section 24(d)(3). The bar now lives in one variable, refundable_ctc_barred_by_section_911_exclusion, read by refundable_ctc, the Wyden-Smith reform and pr_refundable_ctc. The household test gave a tax figure the model computes without section 911(f), which taxes included income at the rates it would face with the excluded amount added back. The test now uses zero taxable income, where the Foreign Earned Income Tax Worksheet is skipped, so its figures match the form. Also fix two reference URLs fused by a missing comma in pr_refundable_ctc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Second review of this PR (APPROVE WITH CHANGES) found: - With the bar on, a Form 2555 filer whose only reason to file was the refundable credit could become a model non-filer, which zeroes the premium tax credit and switches on Medicaid non-filer rules. The root cause predates this PR: 26 U.S.C. 6012(c) computes gross income for the filing requirement "without regard to the exclusion provided for in section 911", and tax_unit_is_required_to_file did not. It now adds the exclusion to gross income (as earned income, not unearned). - The household test's counterfactual and "every figure is the form's" wording overclaimed; it now asserts the section 26(a)-limited credits. - The social security case did not route through ctc_phase_in; it now computes the phase-in from social security taxes. - The 2021 Puerto Rico case used an input combination 2021 law rules out. - The property test replaces a 26(a) check that could not fail with the equality of the limited credits under the bar and without it, covers pr_refundable_ctc, and caps dependants at 17. Also: changelog and parameter text name the 2021 exception, cite 24(k)(2)(B)(ii) and the prior-year Schedule 8812 instructions URL, fix two fused reference URLs, and ignore .hypothesis/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Third review of this PR found that the section 6012(c) filing fix made a Form 2555 filer a required filer, which let the EITC through: the model's EITC lacked section 32(c)(1)(C), "The term 'eligible individual' does not include any individual who claims the benefits of section 911". In the new filing fixture (single, $5,000 included wages, $30,000 excluded) the EITC went from $0 to $382.50. eitc_eligible now excludes a tax unit with a positive foreign_earned_income_exclusion. Unlike the CTC bar, the rule has no 2015 start or 2021 exception, so it does not reuse the CTC bar variable. Also: the deterministic grid tests move out of the Hypothesis module so they run without the dev extra, the property tests assert a zero EITC for section 911 claimants, and a Puerto Rico test comment cites 24(k)(2)(B)(ii). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fourth review of this PR found two state credits that the federal changes made worse for section 911 filers. - New Jersey: with the federal EITC now denied (32(c)(1)(C)), a childless section 911 filer fell into nj_eitc's age-exception fallback, which pays 40% of the federal childless maximum. A single 40-year-old with $5,000 of included wages and a $30,000 exclusion went from $153 to $259.60; the law gives $0. P.L. 2021, c.130, section 1a(4) requires the filer to "meet all qualifications, except for the minimum or maximum age, for the federal earned income tax credit". nj_childless_eitc_age_eligible now excludes section 911 claimants. - Colorado: co_refundable_ctc replicates the federal refundable CTC and subtracts the federal EITC from social security taxes. With that EITC now zero, a 2022 filer with three young children, $1,000 of included wages and a $30,000 exclusion got $76.50 of refundable basis. Colorado matches the allowed federal credit (1 CCR 201-2, Rule 39-22-129(1)), so the section 24(d)(3) bar now applies to the replica. Removing either guard fails exactly the new cases that assert it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fifth review of this PR found three more places where the earlier changes moved a section 911 claimant the wrong way. - Filing: with the refundable CTC and the EITC denied, a claimant below the filing threshold lost the refundable-credit reason to file and became a model non-filer (no premium tax credit; Medicaid non-filer rules). But the exclusion is claimed on Form 2555 attached to the return (Treas. Reg. 1.911-7(a)(1): the election "must be filed either with the income tax return, or with an amended return"). tax_unit_is_filer now treats a positive exclusion as filing. - State EITCs: counting the exclusion toward the filing requirement (6012(c)) opened state credits that recompute a federal-style EITC without 32(c)(1)(C): Colorado's ITIN and under-25 paths, DC's childless credit, Illinois, Indiana's conformity check and Washington's WFTC. Each waives only named federal rules (age, SSN, separate filing). A new helper, eitc_section_911_eligible, applies the exclusion in calculate_eitc_like_amount and in DC's and Washington's own paths. - AFA: the reform's copy of refundable_ctc runs current law before 2025 and lacked the section 24(d)(3) bar, so a 2024 claimant gained $76.50 once the federal EITC went to zero. Removing any of the three guards fails exactly the new cases for it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
force-pushed
the
ctc-refundable-foreign-earned-income-exclusion
branch
from
October 3, 2026 16:21
adad909 to
20cbba0
Compare
A continuing section 911 election needs no return below the filing threshold (Treas. Reg. 1.911-7(a)(1)), so a claimant under the threshold files only when the tax unit would file to claim a tax benefit. The American Family Act has no section 911 bar, so the reform's copy of the refundable CTC applies the bar only to years before 2025. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 5, 2026
…hedule 8812 Credit Limit Worksheets A and B (#9742) * Order the residential clean energy credit after the CTC (Schedule 8812 Credit Limit Worksheets A and B) The CTC's tax-liability limit subtracted every other non-refundable credit, and the residential clean energy credit (26 U.S.C. 25D) was ordered before the CTC and before the 25C, elderly and clean vehicle credits. Section 25D(c) orders it last. Follow the IRS worksheets: - Credit Limit Worksheet A line 2 is a parameter (gov.irs.credits.ctc_tax_liability_limit.preceding_credits); line 3 is the new ctc_tax_liability_after_preceding_credits. - Worksheet A line 4 / Worksheet B line 15 (subsequent_credits) reduces the limit only when Worksheet B applies (ctc_credit_limit_worksheet_b_applies). - Worksheet B line 14 is ctc_non_refundable_minimum, the CTC that precedes the residential clean energy credit on the Form 5695 line 14 worksheet. - The residential clean energy credit's limit subtracts every other credit; the 25C, elderly and clean vehicle lists no longer subtract it. - Colorado's 2022-2023 replica reads Worksheet A line 3 (DR 0104CN 4-6). - The Alabama 2020-IRC pin, CRFB and AFA reforms update the new lists. Adds YAML tests (hand-worked 2025 households) and a statutory differential plus Hypothesis property tests; adds hypothesis to the dev extra. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Cite 24(d)(3), not the pre-2018 (d)(5), for the Form 2555 bar on Worksheet B The section 911 exclusion bar was added as 24(d)(5) and redesignated (d)(3) by Pub. L. 115-141; Cornell LII has no #d_5 anchor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Cite the 2020 Publication 972 worksheet lines, not the 2013 numbering The 2020 CTC and ODC Worksheet lists the preceding credits on line 12, and the credits ordered after the CTC are line 15 of its Line 14 Worksheet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Apply review findings: Form 2555 gate from 2015, Colorado 2023 line 13, citations - Worksheet B excludes Form 2555 filers only from 2015, when 24(d)(3) (then (d)(5)) first barred their refundable CTC. Reuses #9750's foreign_earned_income_exclusion_bar_applies parameter, byte-identical. - Colorado's 2023 DR 0104CN line 4 is Schedule 8812 line 13 (Worksheet A line 5, after Worksheet B); 2022 lines 4-6 stay Worksheet A lines 1-3. - Comments name the 2022 lines (Form 5695 line 30; no 6m) and the credits not modeled (Form 8978, Form 8910); split the Worksheet A line 4 and Worksheet B line 15 anchors; Worksheet B line 14 is on page 6. - The 24(h)(5) cap is $1,400 indexed ($1,700 for 2025). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Recompute the residential clean energy credit on pinned CTC branches The residential clean energy credit's limit now subtracts the non-refundable CTC, so New York's pre-TCJA CTC branch and Alabama's 2020 IRC branch must recompute it instead of inheriting the parent's value. Before, NY's CTC for a 2021 joint return (two children, $6,000 wages, $40,000 interest, $10,000 solar) was $660 when calculated fresh but $200 when income_tax was calculated first. The callers now also drop variables named in pinned_tbs.CREDIT_DEPENDENT_VARIABLES; a test checks three calculation orders. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 5, 2026
) * Order the residential clean energy credit after the CTC (Schedule 8812 Credit Limit Worksheets A and B) The CTC's tax-liability limit subtracted every other non-refundable credit, and the residential clean energy credit (26 U.S.C. 25D) was ordered before the CTC and before the 25C, elderly and clean vehicle credits. Section 25D(c) orders it last. Follow the IRS worksheets: - Credit Limit Worksheet A line 2 is a parameter (gov.irs.credits.ctc_tax_liability_limit.preceding_credits); line 3 is the new ctc_tax_liability_after_preceding_credits. - Worksheet A line 4 / Worksheet B line 15 (subsequent_credits) reduces the limit only when Worksheet B applies (ctc_credit_limit_worksheet_b_applies). - Worksheet B line 14 is ctc_non_refundable_minimum, the CTC that precedes the residential clean energy credit on the Form 5695 line 14 worksheet. - The residential clean energy credit's limit subtracts every other credit; the 25C, elderly and clean vehicle lists no longer subtract it. - Colorado's 2022-2023 replica reads Worksheet A line 3 (DR 0104CN 4-6). - The Alabama 2020-IRC pin, CRFB and AFA reforms update the new lists. Adds YAML tests (hand-worked 2025 households) and a statutory differential plus Hypothesis property tests; adds hypothesis to the dev extra. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Cite 24(d)(3), not the pre-2018 (d)(5), for the Form 2555 bar on Worksheet B The section 911 exclusion bar was added as 24(d)(5) and redesignated (d)(3) by Pub. L. 115-141; Cornell LII has no #d_5 anchor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Cite the 2020 Publication 972 worksheet lines, not the 2013 numbering The 2020 CTC and ODC Worksheet lists the preceding credits on line 12, and the credits ordered after the CTC are line 15 of its Line 14 Worksheet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Apply review findings: Form 2555 gate from 2015, Colorado 2023 line 13, citations - Worksheet B excludes Form 2555 filers only from 2015, when 24(d)(3) (then (d)(5)) first barred their refundable CTC. Reuses #9750's foreign_earned_income_exclusion_bar_applies parameter, byte-identical. - Colorado's 2023 DR 0104CN line 4 is Schedule 8812 line 13 (Worksheet A line 5, after Worksheet B); 2022 lines 4-6 stay Worksheet A lines 1-3. - Comments name the 2022 lines (Form 5695 line 30; no 6m) and the credits not modeled (Form 8978, Form 8910); split the Worksheet A line 4 and Worksheet B line 15 anchors; Worksheet B line 14 is on page 6. - The 24(h)(5) cap is $1,400 indexed ($1,700 for 2025). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Order federal credit limits as the IRS credit limit worksheets do Each non-refundable credit's limit subtracts a preceding_credits list. Several lists followed the Schedule 3 line order instead of the credit's own credit limit worksheet. Read together, the 2013-2025 worksheets give one order: foreign tax, child and dependent care, elderly or disabled, education, retirement savings, energy efficient home improvement, previously owned clean vehicle, new clean vehicle, Child Tax Credit, residential clean energy. - Schedule R subtracts only Schedule 3 lines 1, 2 and 6l, so the elderly or disabled credit precedes the education, saver's and 25C credits (Forms 8863, 8880 and 5695 subtract line 6d). - Form 8936 line 11 subtracts line 6m, so the previously owned clean vehicle credit precedes the new one; the used credit now applies its own limit (the unused part is lost, line 18). - The foreign tax credit applies against tax before 2022 too (26 U.S.C. 26(a)(1); Pub. 972 and every worksheet subtract it). - The 2021 lists drop the CDCC, a subpart C credit that year (21(g)(1)); the Alabama 2020-IRC pin restores it in every split list. - gov.irs.credits.non_refundable is in that order. Oklahoma's federal CTC applies the credits Credit Limit Worksheet A subtracts (line 2, plus line 4 under Worksheet B), not those listed before the CTC. - CRFB and AFA reform lists follow the order; AFA now includes the foreign tax credit. Tests: hand-worked YAML cases for each list, Oklahoma cases, a parameter chain test (baseline, Alabama pin, both reforms) and a sequential 26(a) differential with Hypothesis households. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…me-exclusion Conflict: pr_refundable_ctc.py reference tuple. Kept main's comma fix (#9786) and re-added the PR's 24(k)(2)(B)(ii) and 24(d)(3) references; the PR's section 911 bar on line 27 is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…me-exclusion Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ctc_credit_limit_worksheet_b_applies (#9742) repeated the bar's test (exclusion > 0 and the parameter on, outside fully refundable years) instead of reading refundable_ctc_barred_by_section_911_exclusion. The two agree whenever both are calculated, so no output changes; they could disagree only when the bar is set as an input. Worksheet B now reads the bar, so one variable decides both the refund and the worksheet (2025 Schedule 8812 instructions: Worksheet B only if "You are not filing Form 2555"). Two YAML cases set the bar as an input in each direction, and the grid and Hypothesis invariants check that Worksheet B equals its bar-off value less the barred filers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Since #9761, main taxes a Form 2555 filer's included income at the rates it would face with the exclusion added back. The grid test's docstring and the integration.yaml note said the model did not, which contradicted the #9761 case at the top of the same file. Both now describe the stacked tax, and the grid test asserts that it reaches filers whose stacked tax leaves part of the credit to refund, so the tax identity is checked on stacked tax. The changelog fragment now names the state credits, the reforms and the new filing reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The filing reason reads would_file_if_eligible_for_refundable_credit; the claimant needs no refundable credit. The integration.yaml note now says the Foreign Earned Income Tax Worksheet is skipped for the Form 2555 filer (the second case has no exclusion) and why the capped credits equal Schedule 8812 line 14 there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…me-exclusion Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 7, 2026
MaxGhenis
added a commit
that referenced
this pull request
Oct 7, 2026
Contributor
Author
|
US + core hub merge audit, us#9750 at
|
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.
Summary
refundable_ctcnever applied 26 U.S.C. 24(d)(3), so a filer who excludes foreign earned income or housing amounts under section 911 (Form 2555) still got the additional child tax credit. This PR makes the refundable CTC zero for those filers from tax year 2015 (except fully refundable 2021). It also applies 26 U.S.C. 6012(c), which counts the section 911 exclusion toward the filing requirement (without that, the bar could turn some of these filers into model non-filers), and 26 U.S.C. 32(c)(1)(C), which denies the EITC to anyone who claims the benefits of section 911 (without that, the filing fix would have let the EITC through for them). The rest of the PR keeps those federal changes from pushing other variables the wrong way. A section 911 claimant under the filing threshold files whenwould_file_if_eligible_for_refundable_creditis true (the exclusion is claimed on Form 2555 with a return; see Methodology choices), so denying the credits does not turn it into a non-filer. The section 911 bar reaches New Jersey's childless EITC age exception, Colorado's replica of the refundable CTC, the state credits that recompute a federal-style EITC (Colorado, DC, Illinois, Indiana, Washington) and the American Family Act reform's copy of the refundable CTC in years before 2025.Fix round 3 (2026-10-07)
Addresses review r2's sole P2 finding (P2-1). New PR head:
0df2fbec60b09f673fc3dec072efb0f1e7020176.The 2040 American Family Act fixture with Puerto Rico residence previously kept the $825 federal refundable CTC but lost all $825 of the Puerto Rico refundable CTC because the shared section 911 bar became true after the reform's fully-refundable parameter expired in 2039. AFA now overrides the shared bar from 2025 onward; its refundable-credit formula, Puerto Rico credit and other consumers share that rule. Earlier years retain the baseline bar. AFA section 2(a), new IRC 24A(d), section 2(c), and section 2(f)(1) establish refundability including Puerto Rico, replace old section 24 after 2024, and apply without a sunset. The existing 2039 parameter-window limitation remains: this change preserves the modeled $825 rather than implementing the bill's full refund beyond that window.
Validation: 35/35 YAML cases across four files and 3/3 Python tests across two files passed, run sequentially as single files with locked dependencies on Python 3.13.15.
make format(format and lint) andgit diff --checkpassed. No failures or skips. These are local checks at this new head; the CI results below are historical results at1d276d820d.afa_other_dependent_credit.yamlpr_refundable_ctc.yamlrefundable_ctc_barred_by_section_911_exclusion.yamlctc_credit_limit_worksheet_b_applies.yamltest_afa_section_911.pytest_ctc_foreign_earned_income_exclusion.pyThe before-fix run preserved the failing shared-bar assertions in both 2040 AFA fixtures (13 passed, 2 failed); a true bar drives the Puerto Rico guard to $0. The matching current-law fixture remains barred and receives $0 federal and Puerto Rico refundable CTC. The new Python integration test uses
Reform.from_dictactivation and covers 2024, 2025, 2039 and 2040. Notes and logs remain untracked underbuild/hub-evidence/; no partner expectations were edited.Current-law/default-dataset impact: this round changes only the AFA contrib implementation, with its default
in_effectparameter false. Baseline formulas and parameter files are unchanged, so current-law outputs on the default dataset are unchanged by this fix. No microsimulation was run this round; the historical impact evidence below remains historical.Earlier fix round (completed 2026-10-07)
The three P3 findings in review r1 are addressed. Validated prior PR head:
1d276d820d2315ac5b178218d14be26410b8ef32.7caa0a5733): the grid docstring andctc/integration.yamldescribe section 911(f) stacking, already on main via Tax Form 2555 filers' income at stacked rates (26 U.S.C. 911(f)) #9761. The grid explicitly reaches excluders with stacked tax above their no-exclusion twins and a refund to deny. Invariant 5 checks the tax identity with stacking in both runs.e1631f8199): Worksheet B now readsrefundable_ctc_barred_by_section_911_exclusion; one condition decides both the worksheet and the refundable credit. Calculated outputs remain unchanged. Directly setting the bar as an input intentionally changes Worksheet B in the two added regression cases. The 2021 early return remains unchanged.e0b5bafd15): the changelog includes the state credits, AFA and Wyden-Smith reforms, and the filing propensity choice.1614285197(47ab53e0fb) and again at1d276d820d(26348e7cf7); both merges were clean.Validation: all 35 checks at the prior head passed, including the IRS CTC/EITC shard, state/contrib/reform shards, Python/property tests, Household API Partners and CI microsimulation. Completed CI run.
Targeted CI evidence at that prior head: 455/455 YAML cases across 77 files and 45/45 Python tests, with no failures or skips. The Python total comprises the grid (2), Hypothesis (1), credit worksheets (3), federal credit order (16), and override branches (23). CI's synthetic merge tree is identical to the prior PR head tree.
The declared YAML selection contains 449 cases at pre-refactor
1614285197, 451 ate0b5bafd15, and 455 at the prior head. P3-2 adds only the two Worksheet B input-override cases; all six original worksheet cases and all 19 parsed integration cases are unchanged. The later main merge adds four social-security-tax cases. The earlier body's 459/461 local tallies cannot be reconciled to the declared selection from surviving logs and are not counted as validated results. The interrupted mutation run has no result and is not counted either.Completed local checks (one file at a time, foreground, nice 0): grid 2/2; seeded Hypothesis property test 1/1. With only Worksheet B replaced by its
1614285197implementation in separate systems, all 13 property outputs were array-equal in 20 current-law/bar-off comparisons (10 generated batches; years 2018, 2022 and 2025). This isolates P3-2 from unrelated main changes.The prior differential's 13 equal rows at
e0b5bafd15were preserved. The missing 2026 bar-off row is now equal too, completing 14 law/bar-off rows over 688 households in years 2015, 2017, 2018, 2021, 2022, 2025 and 2026; worksheet and bar source bytes are unchanged between those heads. These are 13 reused rows plus one new row, not 14 reruns at the prior head. Direct bar inputs deliberately differ: true disables 194 old Worksheet B results; false enables 304 results the old condition excluded. Both added YAML regressions pass in prior-head CI.Detailed evidence and report.
make formatand lint passed. No partner test expectations were edited. The optional no-stacking mutation was not completed and is excluded from validated results.Law (each source read on 2026-10-01)
#d_3; there is no#d_5.What changes
gov.irs.credits.ctc.refundable.foreign_earned_income_exclusion_bar_applies: false before 2015, true from 2015. Order the residential clean energy credit after the CTC, following Schedule 8812 Credit Limit Worksheets A and B #9742 added the same file to main, so it is no longer in this PR's diff.refundable_ctc_barred_by_section_911_exclusion: true whenforeign_earned_income_exclusion > 0, the parameter is true and the year is not fully refundable.ctc_credit_limit_worksheet_b_applies(from Order the residential clean energy credit after the CTC, following Schedule 8812 Credit Limit Worksheets A and B #9742) reads the bar variable instead of repeating its test, so Form 2555 filers skip Schedule 8812 Credit Limit Worksheet B in exactly the years the bar applies (2025 instructions: Worksheet B only if "You are not filing Form 2555").refundable_ctcreturns 0 for a barred filer.non_refundable_ctc(ctclessrefundable_ctc) becomes the whole credit, still limited to tax by section 26(a).pr_refundable_ctcreturns 0 for a barred filer. It takes the larger ofrefundable_ctcand social security taxes less the EITC, so without this the social security route handed the refund back. Section 24(k)(2)(B)(ii) drops only the three-children condition for residents of Puerto Rico; it does not waive 24(d)(3).refundable_ctcgets the same bar. H.R. 7024 §§ 101-104 amend section 24(h) and leave 24(d)(3) in place.tax_unit_is_required_to_fileaddsforeign_earned_income_exclusionto gross income, as earned income (it does not count toward the unearned-income test). Before this, a Form 2555 filer below the threshold on included income alone could file only to claim a refundable credit; with that credit barred,tax_unit_is_filercould turn false, which zeroesaca_ptcand switches on Medicaid non-filer rules. An exclusion small enough to keep gross income under the threshold is covered by the filing rule below.eitc_eligibleis false for a tax unit with a positiveforeign_earned_income_exclusion, in every year. Without it, the filing fix above made such a filer a required filer and the EITC followed: single, $5,000 included wages and $30,000 excluded went from $0 to $382.50 of EITC. The rule does not reuse the CTC bar variable, whose 2015 start and 2021 exception do not apply to the EITC.nj_childless_eitc_age_eligiblenow excludes section 911 claimants. P.L. 2021, c.130, section 1a(4) (text) extends the credit to filers who are ineligible for the federal EITC "due to age requirements", and they "shall meet all qualifications, except for the minimum or maximum age, for the federal earned income tax credit". Without the guard, the federal EITC denial sent a childless section 911 filer intonj_eitc's age-exception fallback, which pays 40% of the federal childless maximum: a single 40-year-old with $5,000 of included wages and a $30,000 exclusion went from $153 to $259.60, where the law gives $0.co_refundable_ctcreplicates the federal refundable CTC and subtracts the federal EITC from social security taxes. 1 CCR 201-2, Rule 39-22-129(1) (PDF p. 47) makes the Colorado credit "a percentage of the allowed federal child tax credit", so the section 24(d)(3) bar now applies to the replica. Without it, a 2022 filer with three young children, $1,000 of included wages and a $30,000 exclusion got $76.50 of refundable basis (and $45.90 of Colorado CTC) once the federal EITC went to zero.tax_unit_is_filergains a reason: the tax unit hasforeign_earned_income_exclusion > 0andwould_file_if_eligible_for_refundable_creditis true (its default). This is a modelling proxy; see Methodology choices.eitc_section_911_eligibleintools/state_eitc_helpers.py, applies 32(c)(1)(C) incalculate_eitc_like_amount(Colorado's ITIN and under-25 paths, Illinois, Indiana's conformity check, DC's with-child credit) and in DC's childless credit and both Washington WFTC paths. Each of these credits is the federal credit with named rules waived (age, SSN, separate filing): Illinois 35 ILCS 5/212(b-5), (b-10), (b-15) base the credit on "the federal tax credit for which [the taxpayer] would have been eligible" without regard to age or SSN; Colorado Rule 39-22-123.5(2), D.C. Code 47-1806.04(f), WAC 458-20-285 ("you cannot file Form 2555") and Indiana's IRC conformity likewise keep the federal qualifications. Without it, counting the exclusion toward the filing requirement made these filers required filers and paid them (a single 40-year-old with $5,000 of included wages and a $30,000 exclusion: Colorado $191.25, DC $382.50, Washington $335).refundable_ctc_barred_by_section_911_exclusionkeeps the baseline formula before 2025 and is false from 2025 onward. Both the federal and Puerto Rico refundable credits use that rule, including after the fully-refundable parameter expires in 2039. Without the pre-2025 bar, a 2024 claimant with three children and $1,000 of included wages got $76.50 once the federal EITC went to zero.pr_refundable_ctccites sections 24(k)(2)(B)(ii) and 24(d)(3). (An earlier version also split two reference strings fused by a missing comma; Separate concatenated URLs in Variable reference and documentation strings #9786 made that fix on main.)What does not change, and why
specified_possession_income(section 931) andpuerto_rico_income(section 933) do not trigger the bar.refundable_ctc.fully_refundableto true for 2025-2039. Its shared bar applies section 24(d)(3) for years before 2025 (current law) and is false from 2025 onward for all consumers, including Puerto Rico. The reform's parameter changes stop in 2039, so the same branch runs again from 2040; the bar is not applied there, because the bill replaces section 24 with a section 24A that has no section 911 bar and no sunset. A 2040 claimant with one child, $8,000 of included wages and a $1,000 exclusion keeps the $825 the reform gave on main, including the Puerto Rico refund. That figure is itself too low (the bill pays the full credit): the reform's year window is an existing limitation this PR leaves alone.ctc_refundable_maximumand setsnon_refundable_ctcto 0, so the rest of the credit is dropped. Adding the bar there would deny barred filers the whole credit, so it is left alone. Under that reform the bar variable is still true for an excluding filer, andpr_refundable_ctc(which reads it) is 0 whilerefundable_ctcis positive.Methodology choices
A section 911 claimant under the filing threshold counts as a filer whenever
would_file_if_eligible_for_refundable_creditis true (the new reason intax_unit_is_filer). The law does not settle this for the model, so it is a modelling choice.would_file_if_eligible_for_refundable_creditpropensity decides. With its default (true), a claimant under the threshold files. With it false andwould_file_taxes_voluntarilyfalse, the claimant does not file, as on main.tax_unit_is_filer.yaml(the seventh-version mutation check below).aca_ptcgates ontax_unit_is_filerandmedicaid_uses_non_filer_rulesreads it, so these filers would lose the premium tax credit and switch to Medicaid non-filer rules. That happens even though they report an exclusion that can only be claimed with a return (married parents, one child, $28,000 of included wages and a $1,000 exclusion).would_file_taxes_voluntarilyinstead. Its default is false, so a household-calculator user who enters an exclusion would be a non-filer by default. That is the same outcome as (2).Section 911(f) stacking (on main since #9761)
Main now taxes a Form 2555 filer's included income at the rates it would face with the excluded amount added back (
income_tax_main_ratesusestaxable_income_plus_section_911_exclusion, less the tax on the excluded amount alone; the AMT does the same). The CTC's tax limit sees that stacked tax: see the #9761 case at the top ofctc/integration.yaml.This PR's household cases in that file have zero taxable income. The 2025 Form 1040 instructions (p. 37) say "If Form 1040 or 1040-SR, line 15, is zero, don't complete this worksheet", and the model's stacked tax is $0 there too, so their figures match the form. The grid invariants run with stacking in both the bar-on and bar-off runs. The integration tests and grid run with this treatment in place.
Interaction with other PRs (all now merged or closed)
ctc_credit_limit_worksheet_b_applies. That variable carried its own copy of the bar's test. It now readsrefundable_ctc_barred_by_section_911_exclusion, so one variable decides both the refund and the worksheet.ctc_non_refundable_minimumdoes not read the bar. It matters only when Worksheet B applies, which never happens for a barred filer.ctc/integration.yaml, and this PR's cases sit at the end.refundable_ctc. Their tests are in this round's test run:test_override_branches.py,test_federal_credit_limit_order.py,credit_limit_order.yaml.pyproject.tomlanduv.lockare no longer in this PR's diff, because main already has thehypothesisdev pin.Invariants
policyengine_us/tests/test_ctc_foreign_earned_income_exclusion.pychecks these on a 288-household grid (it does not need Hypothesis), andtest_ctc_foreign_earned_income_exclusion_property.pychecks them on Hypothesis-generated households (single or married, 0-4 dependants aged 0-17, wages to $500,000, exclusion 0 or $1-$130,000; Texas, standard deduction; 2018, 2022, 2025 and 2026). Each batch runs under current law and under a reform that switches the parameter off, which isolates the refundable-CTC bar while preserving the other section 911 rules.refundable_ctc_barred_by_section_911_exclusionis true exactly for filers with an exclusion, and they haverefundable_ctc == 0,pr_refundable_ctc == 0andeitc == 0(the EITC under both runs).refundable_ctc,non_refundable_ctc,pr_refundable_ctcandincome_taxbitwise equal to the bar-off run.refundable_ctc.0 <= refundable_ctc <= min(ctc, ctc_refundable_maximum). (refundable_ctc + non_refundable_ctc == ctcis also asserted; it holds by definition.)non_refundable_ctcis the whole credit; soincome_taxrises by exactly the refund denied. Both runs tax included income at the section 911(f) stacked rates (Tax Form 2555 filers' income at stacked rates (26 U.S.C. 911(f)) #9761), and the grid test asserts that it includes filers whose stacked tax is above their no-exclusion twin's and who still have part of the credit to refund, so the identity is checked on stacked tax.Historical mutation checks reported in earlier versions (not rerun this round): with
refundable_ctc.pyreverted to main (first version of this PR), exactly the four YAML cases that asserted the bar failed and the other 28 in those files passed. With the guard removed frompr_refundable_ctc.py(second version), exactly the one Puerto Rico case that asserts it failed and the other four passed. With the EITC guard removed (fourth version), exactly the three cases that assert it failed (two ineitc_eligible.yaml, one intax_unit_is_filer.yaml) and the other 13 in those files passed. With the New Jersey and Colorado guards removed (fifth version), exactly the four new state cases failed and the other 71 in those folders passed. With the new state helper disabled (sixth version), all five cases insection_911_state_eitc.yamlfailed; removing the filer or AFA guard failed exactly its one new case. For the seventh version: making every exclusion a filing reason fails exactly the two "would not file" cases intax_unit_is_filer.yaml, and removing the section 911 filing reason fails exactly the two default-propensity cases (11 others pass each time); applying the AFA bar in every year fails only the 2040 case, and in no year only the 2024 case (13 others pass).Tests
ctc_credit_limit_worksheet_b_applies.yaml: 2 new cases (the bar set to true as an input with no exclusion turns Worksheet B off; set to false with an exclusion, Worksheet B applies). Both fail on2656278f28, where Worksheet B repeated the bar's test.refundable_ctc_barred_by_section_911_exclusion.yaml: 6 cases (exclusion; none; 2014; 2015; 2021; parameter off).refundable_ctc.yaml: 7 new cases (bar on; bar on with the phase-in computed from social security taxes for three children, and its control; parameter switched off; 2014 no bar; 2015 bar; 2021 unchanged).pr_refundable_ctc.yaml: 4 new cases (exclusion with social security taxes gives 0; the same filer without it gets $1,530; 2021 unchanged; matching current-law Puerto Rico 2040 fixture still has no federal or Puerto Rico refund).tax_unit/tax_unit_is_filer.yaml: 3 new cases for section 6012(c) (exclusion over the threshold makes filing required, and the EITC stays $0; the same filer without it is not; the exclusion does not count as unearned income).earned_income/eitc_eligible.yaml: 3 new cases for section 32(c)(1)(C) (ineligible in 2025; the same filer without an exclusion is eligible; ineligible in 2021).states/nj/.../nj_childless_eitc_age_eligible.yamlandnj_eitc.yaml: 4 new cases (the age exception excludes a section 911 claimant; households aged 40 and 20 with an exclusion get $0; the 40-year-old without one gets $153).states/co/.../co_refundable_ctc.yaml: 2 new cases (a section 911 filer gets no refundable basis; the same filer without the exclusion gets $76.50).states/section_911_state_eitc.yaml: 5 cases (Colorado, DC, Illinois, Washington, Indiana), each a required filer because of the exclusion, with no state EITC.tax_unit/tax_unit_is_filer.yaml: 4 cases for claimants below the threshold (a single claimant and married parents with one child each file under the default propensity, and do not file with both propensities false).contrib/congress/afa/afa_other_dependent_credit.yaml: a 2024 claimant remains barred with the reform active; Texas and Puerto Rico 2040 claimants have the shared bar false and keep the reform's $825.contrib/congress/afa/test_afa_section_911.py: production AFA activation preserves the 2024 bar, removes it in 2025/2039/2040, keeps both Puerto Rico refunds in 2040, and preserves current-law bars and refunds in all four years.ctc/integration.yaml: a 2025 head of household with two children, $8,000 of included wages, $12,500 of interest and a $40,000 exclusion. Taxable income and tax are zero (the Foreign Earned Income Tax Worksheet is skipped when Form 1040 line 15 is zero), the EITC is zero (investment income over $11,950), the credit is $4,400 and Schedule 8812 line 14 allows $0 of it. The additional child tax credit is $0, so income tax is $0. A household with the same included income and no foreign earnings gets $825 (line 27), so income tax is -$825.reform/ctc_expansion.yaml: the Wyden-Smith reform with an exclusion.Microsimulation impact
Earlier fix round (2026-10-07): the r7 impact result is retained; no new local microsimulation was run. P3-1 updates comments and test coverage. P3-2 changes the implementation of Worksheet B without changing its calculated condition; only explicit bar inputs intentionally differ. Prior-head (
1d276d820d) YAML/property CI pass (run); the paired local property outputs and completed worksheet differential above confirm no output change from P3-2 for computed bar values. The retained result is the earlier measured zero difference; the totals below are historical, not measurements at the new head. The reasons:foreign_earned_income_exclusion > 0, or throughrefundable_ctc_barred_by_section_911_exclusion, which needs it. The Wyden-Smith and AFA paths are reforms, not current law.foreign_earned_income_exclusionis still input-only: no formula and noadds.populace_us_2024.h5@populace-us-2024-spm-20260909, sha2566496cc43…aee84). The prior r7 investigation inspected that file: none of its 377 columns across the 6 entity tables contains "foreign" or "911". So the exclusion is 0 for every tax unit, and every record takes main's path.6b0e773868. Main has moved since then (for example Limit the CTC by actual tax liability and make formula branches calculate under their overrides #9741 changes the CTC's tax limit), so they are not today's totals. What carries over is the zero difference between branch and main.Real runs of the default microsimulation for 2026: this branch (
050fb01b21) against its merge base on main (6b0e773868), same dataset (populace_us_2024.h5@populace-us-2024-spm-20260909, sha2566496cc43…aee84), policyengine-core 3.32.12, one process each. Main and branch totals are equal to the cent, so one column shows both.ctcrefundable_ctcnon_refundable_ctcincome_taxeitcnj_eitcco_ctcco_eitcdc_eitcil_eitcwa_working_families_tax_credittax_unit_is_required_to_file(weighted count)tax_unit_is_filer(weighted count)All 16 arrays measured are bitwise identical, including
eitc_eligible,co_refundable_ctcandpr_refundable_ctc(the last has no residence test in its formula, so its national total is not a meaningful figure and is left out). The dataset has noforeign_earned_income_exclusioncolumn in any entity table, and the variable has no formula, so it is 0 for every tax unit and none of the changes fires. The measured society-wide results for this certified dataset do not change; household calculations change only for users who enter a section 911 exclusion. Earlier heads of this PR measured the same.Axiom
axiom:
us:statutes/26/24/d#ctc_refundable_foreign_income_eligibleencoded-correct for current law (rules effective from 2026-01-01; rulespec-us does not encode the 2015-2025 years this PR also changes). The companion casesection_911_foreign_earned_income_exclusion_exception_denies_refundable_creditin rulespec-usus/statutes/26/24/d.test.yamlsetselects_foreign_earned_income_exclusion_under_911: trueand expectsrefundable_ctc: 0andnon_refundable_ctc: 4000. At rulespec-us main0a4a8d08a,axiom-encode testwith the pinned toolchain passes all 4 cases in that file. The module's rules are effective from 2026-01-01.axiom:
us:statutes/26/32#eitc_demographic_eligible(32(c)(1)(C)) queued in TheAxiomFoundation/rulespec-us#1484. The rule already containsnot taxpayer_claims_section_911_benefits, but no companion case sets that input to true. A case copied fromone_child_phase_in_and_allowedwith the input set to true, expectingeitc_demographic_eligible: not_holds,eitc_allowed: not_holdsandeitc: 0, passes locally at rulespec-us2066cef61(encoder3869d66d, engineffd82132). Adding it needs the signed encoder, and32.yamlis waiver-frozen.axiom:
us:statutes/26/6012#gross_income_for_section_6012(6012(c)) queued in TheAxiomFoundation/rulespec-us#1484 as well. The rule (effective 2018-01-01) adds the section 911 exclusion to filing gross income, but every companion case sets that input to 0. A case with a $30,000 exclusion and $10,000 of gross income, expecting $40,000 and a required return, passes locally on the same toolchain.Follow-ups found on the way (not in this PR)
federal_eitc_without_age_minimumand Maine'sme_pro_forma_childless_eitcdo not apply section 32(c)(1)(C). This PR does not change their values: neither reads the filing requirement, the federal EITC or its eligibility, so a section 911 filer's childless credit there is the same before and after (and still wrong where state law follows the federal qualifications). New Jersey's age fallback applies to any federally ineligible childless filer aged 18 or over, not only to filers ineligible because of age; it does enforce investment income (nj_eitc_income_eligible).ma_gross_incomesubtractsforeign_earned_income_exclusionfrom federal gross income, while the federal MAGI variables treat that amount as outside AGI.