Repository navigation
Limit the Montana elderly homeowner/renter credit to one claimant per household (MCA 15-30-2341(1)) - #9900
Conversation
… the forms - Federal income tax deduction (through 2023): attribute federal tax to the spouse who earned the income and cap each spouse at $5,000, instead of prorating the jointly capped amount by Montana AGI (2022 Form 2 instructions, Itemized Deductions Schedule, line 4). - Child and dependent care expense deduction (through 2023): phase out on the couple's combined Montana AGI and split the result equally only for spouses filing separately on the same form; a single filer and a joint return take the whole deduction (Form 2441-M lines 3-7). - Elderly homeowner/renter credit: count federal AGI without regard to losses (MCA 15-30-2337(9)(a); Form 2EC line 9). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions Each spouse filing separately on the same form deducts their own federal income tax up to $5,000, so both spouses itemize and Montana tax is 6,295.56. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…chedule - A married person filing on a separate form (federal filing status SEPARATE) cannot take the child and dependent care expense deduction: "married couples shall file a joint return or file separately on the same form" (MCA 15-30-2131(1)(c)(vi)(A)); 2022 instructions, line 14. - The 2023 credit schedule was the Elderly Homeowner/Renter Credit Schedule; it became Schedule 2EC in 2024. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MCA 15-30-2337(4) defines gross household income as "all income received by all individuals of a household while they are members of the household". The 2023 Elderly Homeowner/Renter Credit Schedule combines the returns of "ALL members of the household" (lines 1-7 and 9) and has non-filing members report their wages on line 8; the 2024 and 2025 Schedule 2EC put "Income received by other members of your household" on line 17. The model summed each person's federal AGI over the tax unit. A tax unit dependent's federal AGI is zero (their income is on their own return), so a dependent's wages and other income were left out, and household members who file their own returns were never counted. - Add dependent_gross_income to the gross income sources. It counts a dependent's gross income items, gains but not losses, and the taxable part of their Social Security; the formula now subtracts that part before adding the untaxed remainder, so the benefits count once. - Sum gross household income over the household instead of the tax unit in the net household income and the credit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tests dependent_gross_income counts anyone who is not the head or spouse, while irs_gross_income counts anyone who is not a dependent. A person with neither role (a minor alone in a tax unit whose dependent flag is input as false) was counted by both. Count dependent_gross_income in the formula for tax unit dependents only, so the two paths split people exactly. The property tests check, for random claimants and household members, that gross household income is the Schedule 2EC total whether the other member is a dependent or files their own return, that the credit is the same either way, stays within its bounds, and never rises with income. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… household MCA 15-30-2341(1): "Only one claimant per household in a claim period ... is entitled to relief." Since gross household income now counts every household member, two eligible tax units in one household (for example two elderly siblings filing separately) each computed a credit on the same household income and both were paid. - mt_elderly_homeowner_or_renter_credit_pre_one_claimant holds the existing computation (Schedule 2EC lines 18-30) for every eligible tax unit. - mt_elderly_homeowner_or_renter_credit_selected_claimant (TaxUnit) ranks the eligible tax unit heads within each household by that credit with get_rank and selects the largest; ties keep member order, so exactly one tax unit per household with an eligible one is selected. - mt_elderly_homeowner_or_renter_credit pays only the selected tax unit. Six legacy credit cases that never set a state now place their households in Montana. Adds YAML cases (two eligible tax units, one eligible, a joint couple, a tie, separate households) and property tests against a Schedule 2EC reference. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Cite ARM 42.4.302, the rule implementing 15-30-2341, in the selected claimant's references; note that neither it nor the statute says which member claims. - Restore the living-apart note in the net household income comment with its source (ARM 42.4.302(3)(a)), and say in the selection comment that a separated spouse in another tax unit is not linked, so that limit is not modeled. - Selected-claimant Case 8 now fails if non-heads are ranked: a dependent's input amount larger than the other tax unit's no longer decides the selection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Independent review (Opus) asked for text fixes only: - The selection ranks by Schedule 2EC line 26 (property tax billed plus 15% of rent, before the cap), not by total housing cost; say so. - Counting each tax unit's own property tax and rent follows the form's wording; the statute defines both for the homestead (MCA 15-30-2337(5), (10)). Name that reading as not modeled (queued for a ruling as decision d1035). - Uniqueness of the selection comes from get_rank's ranks; its stable sort only breaks ties. - Cite ARM 42.4.302 at Cornell, which shows the rule text. The Hypothesis test is now derandomized and pins a tie at the cap and an owner against a renter who pays more but has the smaller line 26. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ructions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Retain refundable-credit and actual-receipt income rules, dependent-owned non-loss deductions, and federal-AGI tax allocation alongside maximum-credit claimant selection and the negative-income multiplier fix. Preserve both test sets and add a worked combined-credit regression.
The separate-filing allocation fragment duplicated the line released in 2.38.17, and the household-member income fragment repeated the dependent and separate-filer income corrections released there too. Keep one line per change this PR makes: the one-claimant limit and the full multiplier for negative household income. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Three items for this PR from the reviews of #9882, which I closed as superseded by #9915. They belong here because this PR rewrites the files involved, and keeping one writer per file avoids conflicts:
#10139 touches only the gross household income formula, the trailing comment in 🤖 Generated with Claude Code |
|
US + core hub merge audit, us#9900 at
|
PR Review: Limit the Montana elderly homeowner/renter credit to one claimant per household (MCA 15-30-2341(1))PR #9900 (author: MaxGhenis, head Scope
SummaryWhen several tax units in one PolicyEngine household are eligible, the PR pays only the one with the largest credit. Before, each eligible unit computed a credit on the shared household income and every one of them was paid. The PR also fixes the multiplier lookup so that a negative gross household income gets 100% instead of 0%. Both changes follow the law:
What I checked:
I found no critical or should-address issues:
#9882's S1 and S2 are still open on Critical (must fix)None. Should addressNone. Suggestions
Pre-existing on main (from #9882's review; not blocking this PR)I checked both items on this head. S1: still open on
S2: still has no deterministic test on
Follow-up: #10139 (open, MaxGhenis, created 2026-10-12) fixes both items.
Verified correct
Axiom line assessment
CI statusAll green: Branch status
Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
Approving: the one-claimant limit follows MCA 15-30-2341(1). The largest-credit pick is a reasonable, documented convention, the ranking is deterministic, and exactly one unit per household is paid. The negative-income multiplier fix matches § 2340(5), and the tests pass on the head and on the merge with main. Six optional suggestions in the comment above. Note: #9882's two should items from my earlier review reached main via #9915 and are still live there; #10139 fixes both and should merge next.
#9900's one-claimant property test (now on main) builds claimants aged 65 or older with little income, for whom the model computes SSI, which gross household income now counts; its reference leaves SSI out, so the builder inputs none. Reference titles follow the repo format: no page in a single-page title, and quoted titles ending in "#page N-M" for several. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ner/renter credit income (MCA 15-30-2337(9)(a)(vi)) (#10144) * Count SSI, TANF and workers' compensation in Montana's elderly credit income MCA 15-30-2337(9)(a) counts all nontaxable income, including (vi) cash public assistance and relief. Schedule 2EC line 16 (2024, 2025) names SSI and workers' compensation, and the 2014-2023 instructions list SSI payments and workers' compensation as disability benefits. Add ssi, tanf_person (the SPM unit's TANF per capita, so the household sum counts it once) and workers_compensation to every period of the gross income sources, with worked Schedule 2EC / Form 2EC cases for 2016-2025. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add property tests for government assistance in Montana's elderly credit For a claimant, another adult and a child in four arrangements (one return or two, one SPM unit or two, and more assistance), gross household income adds every member's SSI and workers' compensation and the TANF once; the credit matches an independent reading of Schedule 2EC lines 18 to 30, does not depend on the arrangement, stays within the cap and never rises with more assistance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Format the Montana government assistance property tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Pin SSI to zero in Montana elderly credit cases that test other income Gross household income now counts SSI, and the model computes SSI for a claimant aged 65 or older with little income (take-up defaults to true). Three gross household income cases and three property-test builders are about other items, so they now input no SSI; SSI has its own cases in the government assistance tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Count guaranteed income payments; move the cases to variable-named files Review follow-ups: gi_cash_assistance is outside federal AGI and 15-30-2337(9)(a) counts all nontaxable income (a government-funded pilot is also "any other government assistance" on Schedule 2EC line 16), so it joins every period of the sources. The worked cases move into mt_elderly_homeowner_or_renter_credit.yaml (and the SNAP guard into the gross household income file), with a guaranteed income case, the 2016 worksheet total corrected to line 10 and the references consolidated to one per document, with the 2009 MCA text for the 2009 period. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Pin SSI in the one-claimant property test; format reference titles #9900's one-claimant property test (now on main) builds claimants aged 65 or older with little income, for whom the model computes SSI, which gross household income now counts; its reference leaves SSI out, so the builder inputs none. Reference titles follow the repo format: no page in a single-page title, and quoted titles ending in "#page N-M" for several. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… in Montana's elderly homeowner/renter credit income (#10163) * Count SSI, TANF and workers' compensation in Montana's elderly credit income MCA 15-30-2337(9)(a) counts all nontaxable income, including (vi) cash public assistance and relief. Schedule 2EC line 16 (2024, 2025) names SSI and workers' compensation, and the 2014-2023 instructions list SSI payments and workers' compensation as disability benefits. Add ssi, tanf_person (the SPM unit's TANF per capita, so the household sum counts it once) and workers_compensation to every period of the gross income sources, with worked Schedule 2EC / Form 2EC cases for 2016-2025. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add property tests for government assistance in Montana's elderly credit For a claimant, another adult and a child in four arrangements (one return or two, one SPM unit or two, and more assistance), gross household income adds every member's SSI and workers' compensation and the TANF once; the credit matches an independent reading of Schedule 2EC lines 18 to 30, does not depend on the arrangement, stays within the cap and never rises with more assistance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Format the Montana government assistance property tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Pin SSI to zero in Montana elderly credit cases that test other income Gross household income now counts SSI, and the model computes SSI for a claimant aged 65 or older with little income (take-up defaults to true). Three gross household income cases and three property-test builders are about other items, so they now input no SSI; SSI has its own cases in the government assistance tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Count guaranteed income payments; move the cases to variable-named files Review follow-ups: gi_cash_assistance is outside federal AGI and 15-30-2337(9)(a) counts all nontaxable income (a government-funded pilot is also "any other government assistance" on Schedule 2EC line 16), so it joins every period of the sources. The worked cases move into mt_elderly_homeowner_or_renter_credit.yaml (and the SNAP guard into the gross household income file), with a guaranteed income case, the 2016 worksheet total corrected to line 10 and the references consolidated to one per document, with the 2009 MCA text for the 2009 period. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Count disability benefits and unemployment compensation outside federal AGI in Montana's elderly credit income (WIP) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Test the 2020 cutoff above the band the federal test double subtracts; add changelog Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add a grid invariant test: disability benefits and unemployment compensation count once in every arrangement and year Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Pin SSI in the one-claimant property test; format reference titles #9900's one-claimant property test (now on main) builds claimants aged 65 or older with little income, for whom the model computes SSI, which gross household income now counts; its reference leaves SSI out, so the builder inputs none. Reference titles follow the repo format: no page in a single-page title, and quoted titles ending in "#page N-M" for several. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Name line 5 for disability pensions, describe the add-back's role edge, and test each list period's wiring Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Rename the add-back to mt_elderly_homeowner_or_renter_credit_unemployment_compensation_addback; supply Case 7's taxable allocation as an input Both review rounds noted that the helper adds more than nontaxable compensation for a person recorded as both a dependent and the head. Case 7 no longer pins the federal exclusion's allocation, which #10175 changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Montana's elderly homeowner/renter credit allows one claim per household, but the model paid every eligible tax unit in a household.
mt_elderly_homeowner_or_renter_credit_eligiblechecks only that the tax unit's head or spouse is 62 or older, and a comment in..._net_household_income.pysaid "Only one claim is allowed per household" without enforcing it. Since #9882, gross household income is summed over the whole PolicyEngine household. So two eligible tax units in one household each computed a credit on the full household income, and both were paid.Includes the stacked household-income and historical deduction corrections from #9882 and #9877. This round merges current
mainto incorporate #10004's deductible-mortgage-interest corrections alongside the care-deduction wiring.Example: 2024, two elderly siblings filing separately in one household
Sibling 1 is 66, has a $10,000 pension and pays $4,800 of rent. Sibling 2 is 70, has a $15,000 pension and pays $7,200 of rent.
In the stacked model, the household receives $560 before the claimant limit and $460 after it.
Which member claims
Neither the statute nor the Department of Revenue's implementing rule, ARM 42.4.302 ("IMP: 15-30-2340, 15-30-2341, 50-5-101"), says which eligible member is the claimant. I chose the tax unit whose credit is largest.
Alternatives I rejected:
ut_homeowner_renter_relief_selected_claimantdoes. With costs counted per tax unit, the oldest member may have no property tax or rent and a $0 credit. That would deny the household a credit the law allows one of its members.get_rankranks the candidates in each household 0, 1, 2, ..., so exactly one has rank 0. Its stable sort gives a tie to the first tax unit in member order. A joint return is one tax unit and one claim. The model already held that credit on the tax unit head, which stands in for "the spouse listed as the taxpayer".Changes
mt_elderly_homeowner_or_renter_credit_pre_one_claimant(Person): the existing Schedule 2EC computation moved frommt_elderly_homeowner_or_renter_credit, with this round's correction to the multiplier lookup for negative household AGI. It is nonzero only on an eligible tax unit's head.mt_elderly_homeowner_or_renter_credit_selected_claimant(TaxUnit,defined_for = StateCode.MT). It ranks eligible tax unit heads withinperson.householdby that credit, largest first, usingperson.get_rank, the same pattern as Utah's selected claimant. It is vectorized and has no loops or Python branching on arrays.mt_elderly_homeowner_or_renter_credit= pre-limit credit × the tax unit's selection. Its name anddefined_forare unchanged, somt_refundable_creditsandstate_property_tax_creditsneed no change...._net_household_income.pynow points at the selection variable.Tests
mt_elderly_homeowner_or_renter_credit.yaml, five new cases:[100, 0];[1_150, 0];[280, 0];[1_150, 900].mt_elderly_homeowner_or_renter_credit_eligible. They now place their household in Montana; their expected values are unchanged.mt_elderly_homeowner_or_renter_credit_selected_claimant.yaml, nine cases:mt_elderly_homeowner_or_renter_credit_pre_one_claimant.yaml: three tax units, one of them under 62. Its line-27 amounts are[0, 210, 0].policyengine_us/tests/test_mt_elderly_credit_one_claimant.py: a worked example plus a derandomized Hypothesis test of the invariants below. Two explicit examples are pinned: a tie at the cap, and an owner against a renter who pays more but has the smaller line 26. Random households have one to three tax units, single or joint, with any mix of ages, pension, interest, Social Security, property tax and rent. Each household is built in both tax-unit orders, and the results are compared against a reference written from the Schedule 2EC lines.+credit(the smallest claim wins) or selecting every candidate fails both the worked example and the Hypothesis test on its own.candidate = eligible) fails selected-claimant Case 8.Why a Python test as well as YAML. The YAML cases pin specific households. The Hypothesis test checks invariants over random households. It also runs a differential: each household is built in both tax-unit orders, and an independent reference written from the Schedule 2EC lines is compared with the model. YAML cannot express either. It follows #9882's
test_mt_elderly_credit_household_members.py:It reads parameters from the shared
policyengine_us.system.systeminstead of building a model.It builds one small
Simulationper example, 15 examples plus one worked example.It runs in the Rest "remaining" group (239 s in the Makefile's timing note).
Local measurement on macOS at load average about 377, so wall times are inflated:
That is about 7 CPU-seconds more than an import, and pytest reported 22.9 s. I have no Linux CI measurement yet.
Previous-round validation, run locally one file at a time (before this review round):
test_mt_elderly_credit_one_claimant.py(2 tests) and Count household members' income in Montana's elderly homeowner/renter credit #9882'stest_mt_elderly_credit_household_members.py(2 tests) pass.test_reference_urls,test_known_dead_reference_urls,test_no_concatenated_reference_urls,test_rest_python_groups,test_no_builtin_sum_over_entity_callsandtest_no_in_place_writes_to_cached_arrays.Invariants
These are property-tested over the generated 2024 domain: one to three single or joint tax units, using pension, interest, Social Security and housing costs:
Hub microsimulation impact (current head)
A real microsimulation on the default dataset, main at the merge base
42076211f5against this PR's headbfcf454cc5, for 2025 and 2026. The runs went one at a time under the shared heavy-job lock. Sums are weighted.mt_elderly_homeowner_or_renter_creditmt_elderly_homeowner_or_renter_credit_gross_household_incomemt_income_taxhousehold_net_incomestate_income_taxincome_taxhousehold_benefitsComparison files are in
fixes/9900-impact/on the hub host.Hub microsimulation impact (before #9915 merged)
These earlier impact numbers were measured before #9915 merged on 2026-10-11. They do not describe the merged head below. The hub will rerun the impact comparison.
A real microsimulation on the default dataset, main at the merge base
41220ad346against this PR's head261e65b1ba, for 2026. The runs went one at a time under the shared heavy-job lock. Sums are weighted.mt_elderly_homeowner_or_renter_creditmt_elderly_homeowner_or_renter_credit_gross_household_incomemt_income_taxhousehold_net_incomestate_income_taxincome_taxhousehold_benefitsComparison files are in
fixes/9900-impact/on the hub host.Hub microsimulation impact
Claimant-limit-only measurement: $0 in 2024 at the previously measured head. The existing same-run comparison at
98d3742c35onpopulace_us_2024compares the pre-limit and paid credit. Both incorporate the stacked household-income and deduction fixes, so it isolates only the claimant limit. It does not measure the whole PR against merge basebab1a47c6046a5f74a51f250e2ffaee171dc90e0, or against currentmain. The stacked income corrections, historical deduction years, this round's dependent AGI adjustments, and the negative-total multiplier correction remain unquantified. The hub must supply that full impact comparison; no microsimulation was run in this round.All 10 sample households with two or more eligible tax units have gross household income from $46,768 to $466,767. That is at or above the $45,000 cutoff, so every one of their credits is already $0. The limit binds for households the sparse sample does not contain, such as the elderly siblings above. Only 14 Montana records have a positive credit. No other year was measured; historical deduction effects and the full branch impact cannot be inferred from these records.
Review round 2
Reproduced P2 on the exact reviewed head: the 2023 $20,000-pension claimant with $12,000 rent and a dependent earning $10,000 of self-employment profit received $930 instead of $965.323875. The correction preserves the dependent's permitted, person-attributable non-loss federal AGI adjustments while continuing to exclude losses. 2023 instructions, PDF pp. 51–52 start with each member's AGI and add back losses. Hand arithmetic from 2023 Schedule SE, p. 1:
10,000 × .9235 × .153 / 2 = 706.4775; household income29,293.5225; credit1,800 − (29,293.5225 − 12,600) × .05 = 965.323875. The YAML regression and expanded Hypothesis cases cover earned income, SE health/pension adjustments and early-withdrawal penalties, including negative member AGI. Derived assertions now cover TAXSIM property-tax credit, multi-tax-unit Montana income tax, and a care-deduction phaseout crossing the standard-deduction threshold. P3's impact claim is scoped to the claimant limit, with the whole stacked-branch comparison explicitly left to the hub.The expanded property test also reproduced a negative-total edge case: the existing multiplier lookup paid $0 at household incomes of −$325 and −$547, although both should receive the $319 housing-cost credit. The 2024 instructions, PDF p. 49 give a 100% multiplier for all income below $35,000. Floor only the multiplier lookup input, preserving signed household income and the full non-loss deductions. Worked regressions and pinned Hypothesis examples cover both cases and retain the monotonicity invariants. Hand arithmetic:
347 + 4,420 + 894 − 5,986 = −325;347 − 894 = −547; both have zero household contribution after the $12,600 exclusion, so$319 × 100% = $319.The expanded household-member file passes all 3 tests, retaining 15 derandomized generated examples and pinning the review case, SE-tax threshold, negative household totals, and a minor's separate return. The fixtures use
main's validated explicit filer roles so that a minor filing separately is its return's head; the existing assertions verify the resulting dependency status.Local cost measurements include interpreter/model setup. The original test file was run with the corrected pre-merge model; the expanded file includes merged
mainand all final corrections. These macOS runs include varying shared-machine load and model changes; Linux CI cost is unmeasured.Validation before the #9915 merge. CI at
261e65b1ba: all 26 checks passed (run 38085467718). Local runs (one file per process): 22 credit YAML cases, 3 itemization-choice YAML cases, 7 joint and 5 individual itemized-deduction cases, and the expanded household property file (3 tests) passed. An earlier run of that property file failed 1 of 3 before the last commit supplied explicit filer roles in its fixtures; the rerun passed. The local run stopped there when the build reached its time limit; the remaining merged mortgage fixture files were not re-run locally and are covered by CI. Ruff format/lint and the PR diff check againstgh/mainpass.Validation after merging #9915
Merged
gh/mainat42076211f50b73d4f31ab22a01eaf85682d56a47into the approved head261e65b1ba3eec8bd4e356c50a98f4734b4f72e3with a plain merge commit. Merged head:da7c17e84416602056b239c77e5fbbe9704ba1f4.All seven conflicts are resolved: retain #9900's maximum-credit selection, one payment per household, expanded household-member property tests, and negative-income multiplier correction; retain #9915's federal refundable credits, actual credit/rebate receipts, dependent-owned non-loss deductions, and positive federal-AGI allocation with zero shares when filer AGI is zero. Both PRs' YAML cases are preserved. Partner contract tests are unchanged.
A new combined Schedule 2EC regression counts pensions 25,000 plus federal refunds 800 plus actual elderly-credit receipts 100 plus rebate receipts 100: gross household income 26,000; contribution
(26,000 - 12,600) * .05 = 670; pre-limit credits[720 - 670, 1,080 - 670] = [50, 410]; paid[0, 410]. The existing 2021 59.24 expectation and its EITC/EIP arithmetic are retained from #9915.Local execution was attempted using the requested existing Python environment, one file in the foreground:
mt_elderly_homeowner_or_renter_credit.yaml. Model startup exceeded 25 minutes without test output and was interrupted while loading parameter YAML (KeyboardInterrupt), per the requested cutoff. No test cases completed locally. The required inventory contains 28 Montana files (21 YAML and 7 Python); the remaining 27 files were not started. Execution validation therefore relies on CI for this merged head; no folders, full suites, or microsimulations ran locally.CI at the merged head: run 38141521698. All 21 inventory YAML files passed (179 cases) in completed Baseline state shards 1 and 4; Montana's shard-4 batch passed 664 cases. Quick Feedback passed six changed files individually (46 tests), including both claimant Python files and all 28 credit YAML cases. PR validation and Household API Partners also passed. At this update, 24 checks have succeeded, two remain running, and none have failed. Rest Python is still running;
test_mt_elderly_credit_dependent_deductions.py,test_mt_elderly_credit_rebate_receipts.py,test_mt_elderly_credit_refundable_credits.py,test_mt_federal_income_tax_deduction_allocation.py, andunit/test_mt_joint_agi_deductions_properties.pyawait that result.make format(Ruff formatting and lint) andgit diff --check gh/mainpass. The earlier CI and microsimulation measurements above apply to their named pre-merge heads; the hub reruns impact for this merged head.Methodology
mainby limiting the household to one payment; this round retains the reviewed selection rule.main; decision d1035 remains for Max.main, where it has been since Count refundable credits received in Montana's elderly homeowner/renter credit income #9915; this PR does not change federal tax attribution.main, where it has been since Count refundable credits received in Montana's elderly homeowner/renter credit income #9915; this PR does not change it. Tax-unit-only adjustments, such as HSA contributions, cannot be assigned to a dependent's separate return with existing inputs; that pre-existing attribution limitation remains.mainon this edge case; it does not floor gross household income or discard deductions.Additional household-income invariants (Hypothesis, for the generated income sources and supported deductions): each member contributes AGI without losses plus nontaxable income; person-attributable non-loss adjustments reduce the total by their full modeled amount, with no zero floor on an individual contribution; dependent and separate-filer arrangements agree for a single capital-gain source when other refundable credits are absent. Mixed long-term gains and short-term losses retain their pre-existing treatment and are outside this equivalence assertion. Generated cases include positive SE income, bounded SE health/pension expenses, early-withdrawal penalties, capital losses, and Social Security. The existing claimant-selection invariants above remain covered.
Not changed
Householdcannot identify them. As in Count household members' income in Montana's elderly homeowner/renter credit #9882, they count as household members, so the limit can apply to them.axiom: TheAxiomFoundation/rulespec-us#1512 queued (required output 8 names §2341's one-claimant limit; this PR's verbatim sources, review_finding addendum and companion cases are in this comment)
🤖 Generated with Claude Code