Skip to content

Model Montana's working military retirement and survivor benefit exemption - #10713

Open
MaxGhenis wants to merge 3 commits into
mainfrom
fix-mt-military-retirement-exemption
Open

MaxGhenis wants to merge 3 commits into
mainfrom
fix-mt-military-retirement-exemption

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

What was missing

PolicyEngine-US did not model Montana's working military retirement and survivor benefit exemption. military_retirement_pay.py listed it as a limitation and the Montana subtractions.yaml marked it "not yet modeled", so PolicyEngine-US taxed all of a Montana military retiree's pay.

The law

  • MCA 15-30-2120(3)(n)(i) subtracts "a portion of military pensions or military retirement income as calculated pursuant to subsection (8)" that a retired member of the armed forces, the national guard or a reserve component receives. (3)(n)(ii) subtracts "up to 50% of all income received as survivor benefits for military service".
  • (8)(a): the (3)(n)(i) subtraction "is equal to the lesser of: (i) the amount of Montana source wage income on the return; or (ii) 50% of the taxpayer's military pension or military retirement income." (8)(b) counts wages and other pay for services performed in Montana, net income from a trade or business carried on there, and net farm income from there.
  • (9): a person may claim either subtraction only if they "became a resident of the state on or after June 30, 2023" or "was a resident of the state before receiving military pension or military retirement income and remained a resident"; only "for 5 consecutive years after satisfying the provisions of subsection (9)(a)"; and not after claiming it and then becoming a nonresident.
  • Form WMRE (2025) Part II: line 1 takes taxable military retirement income; lines 2 to 5 take Montana source wages, business income, partnership and S corporation income, and farm income, and lines 3 to 5 each say "If zero or less, enter 0"; line 6 adds lines 2 to 5; line 7 takes half of line 1; line 8 takes the lesser of lines 6 and 7. Part III takes half of taxable military survivor benefits. The instructions (p. 2) give residents from before July 2023 tax years 2024 through 2028, and note that SB 124 (2025) repealed the 2033 expiration.
  • The Revenue Interim Committee's November 2025 memo says "The partial exemption first became available in tax year 2024."

Change

  • New parameters under gov.states.mt.tax.income.subtractions.military_retirement: rate (0.5), survivor_rate (0.5) and in_effect (false before 2024, true from 2024; parameters extend their first value backward, so the rates alone would have reached 2023).
  • New input mt_military_retirement_exemption_eligible (Person, default true) for the (9) residency and five-year conditions, which PolicyEngine-US cannot derive.
  • New mt_military_retirement_exemption (Person). The head's record carries the return's amount: in_effect × [min(rate × the eligible head's and spouse's military_retirement_pay, the return's earned income) + survivor_rate × their eligible military_retirement_pay_survivors]. Earned income adds irs_employment_income, self_employment_income, partnership_s_corp_income and farm_income across head and spouse, and floors each source at 0, as WMRE lines 3 to 5 do. Dependents' pay and income do not count.
  • subtractions.yaml adds the variable to its 2024 and 2025 lists (2026 carries 2025 forward), and military_retirement_pay.py drops the Montana limitation line.

Assumptions

  • mt_military_retirement_exemption_eligible defaults to true. The exemption began in 2024, so through 2027 no claimant can have used up five consecutive years; the default can only miss a filer who fails the residency test (someone who lived in Montana before July 2023 but began receiving the pay elsewhere, or who claimed it and moved away). From 2028, users should set it to false for claimants past their five years.
  • PolicyEngine-US models full-year residents, so all of the return's wages, business, partnership and S corporation, and farm income count as Montana source. WMRE line 4's instruction points to Form 1040 Schedule 1 line 5, which also holds rents and royalties; the statute counts only "net income from a trade, business, profession, or occupation", so the code uses partnership_s_corp_income and leaves rents out.
  • One return can take both subtractions (one spouse's retired pay and the other's survivor benefits), as the statute allows. Form WMRE has each filer mark one box, and says joint filers who both qualify complete one form.

Invariants

For every input:

  • the exemption is 0 before 2024, for ineligible filers, and on every record but the head's;
  • 0 ≤ exemption ≤ half the eligible filers' military retirement pay plus half their survivor benefits;
  • the retirement part never exceeds the return's earned income, each source floored at 0;
  • the exemption never raises Montana income tax.

A local randomized check (600 tax units, 60% married, random pay, survivor benefits, wages, business and farm income including losses, and eligibility; seed 20261108; not committed, following this repo's YAML-first test policy) found every invariant held, and the exemption equaled min(0.5 × pay, earned income) + 0.5 × survivor benefits on every unit.

Tests

New mt_military_retirement_exemption.yaml, 10 cases:

  1. TY2026, $30,000 of pay and $60,000 of wages: 15,000 on the head; mt_subtractions 15,000.
  2. TY2025, $30,000 of pay and $8,000 of wages: 8,000 (wages bind).
  3. TY2026, retired couple with $45,000 of pay and no earnings: 0.
  4. TY2025, $10,000 of survivor benefits and no earnings: 5,000.
  5. TY2026, head with $20,000 of pay and $5,000 of business income, spouse with $10,000 of survivor benefits: 5,000 + 5,000 = 10,000.
  6. TY2026, the spouse has the pay and the head the wages: 15,000 on the head.
  7. TY2026, $6,000 of wages and a $4,000 business loss: 6,000 (the loss floors at 0).
  8. TY2026, a dependent's military pay: 0.
  9. TY2026, mt_military_retirement_exemption_eligible false: 0.
  10. TY2023: 0, and mt_subtractions 0.

At 3b2bcd5, all 1,062 cases under tests/policy/baseline/gov/states/mt pass, and so do the 98 tests in tests/core/test_dependent_retirement_income_state_invariants.py, test_state_tax_head_spouse_swap_invariance.py, test_dependent_elsewhere_head_spouse_swap_invariance.py, test_mi_military_survivor_income_invariants.py, tests/code_health/test_military_retirement_readers.py, test_known_dead_reference_urls.py and tests/test_aggregate_list_integrity.py. ruff format and check pass.

Before and after

A married couple, one spouse age 45 with $30,000 of military retired pay and $60,000 of wages, TY2026 (PolicyEngine/veterans-day-2026, scripts/trace_state.py MT working_45):

mt_military_retirement_exemption Montana income tax
Before (2.105.0) (none) 2,717
After (this branch) 15,000 2,012

With no pension the couple owes 1,307, so Montana's tax on the pay falls from 1,410 to 705. A retired couple, ages 67 and 65, with $45,000 of military retired pay, $30,000 of Social Security and no earnings (retired_67) owes the same on both versions: without earned income it gets no exemption.

axiom: us-mt/statute/15-30-2120 queued (TheAxiomFoundation/rulespec-us#2075)

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits November 8, 2026 01:32
…ption

MCA 15-30-2120(3)(n) and (8), from tax year 2024: the lesser of half the
return's military retirement pay or its Montana earned income (Form WMRE
lines 2-5), plus half of military survivor benefits. An input records the
section (9) residency and five-year conditions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… June 30, 2023)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's #10331 drops the disability income exclusion from Montana's
subtractions for 2024 on, after SB 399 repealed it. This branch adds
the working military retirement exemption to the same lists. The
resolution keeps both: the exemption joins the 2024 and 2025 lists,
the exclusion stays out, and the references keep both changes' sources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review November 9, 2026 16:50
@MaxGhenis
MaxGhenis requested a review from DTrim99 November 9, 2026 16:50
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

David, I'd like your read on two Montana choices here:

  1. The PR defaults mt_military_retirement_exemption_eligible to true, since no filer can use up the five consecutive years before 2028.
  2. It leaves rents and royalties out of the earnings that cap the exemption. MCA 15-30-2120(8)(b) counts "net income from a trade, business, profession, or occupation", but Form WMRE line 4 points to Schedule 1 line 5, which includes them.

If you can look by Tuesday afternoon, we can merge it before the Veterans Day post (PolicyEngine/policyengine-app-v2#1523).

@DTrim99

DTrim99 commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Model Montana's working military retirement and survivor benefit exemption

Summary

The structure follows the law. MCA 15-30-2120(3)(n)(i) and (8)(a) give a retiree "the lesser of: (i) the amount of Montana source wage income on the return; or (ii) 50% of the taxpayer's military pension or military retirement income". (3)(n)(ii) gives "up to 50% of all income received as survivor benefits", with no earnings cap. (9) adds the residency and five-year conditions. The rates (0.5 and 0.5), the 2024 start, pooling the earnings cap over the return, carrying the return's amount on the head, keeping dependents out, the zero floor on each business source, and the per-person eligibility mask all match the statute, Form WMRE (2025) and its instructions. The exemption flows through the 2024+ federal-taxable-income path (mt_taxable_income_joint.formula_2024). The PR's before/after figures reproduce: $2,716.60 to $2,011.60 for the TY2026 couple.

One critical problem remains. Two of the four earnings sources that set the cap are the wrong PolicyEngine variables:

  • self_employment_income is only non-SSTB Schedule C income, so a retiree who works as a consultant, physician or lawyer gets no cap room from that business.
  • farm_income is the Schedule J income-averaging input. It isn't in federal AGI. Schedule F income sits in farm_operations_income, which the formula never reads.

Three should items remain: the PR's two statute-over-form readings have no source-conflict candidate entries; four new terms are unpinned by tests; and one reference title carries page text.

On the two questions in the thread:

  • Rents and royalties (question 2). Leaving them out is right under the 2026-10-19 statute-first rule. (8)(b)(ii) counts only "net income from a trade, business, profession, or occupation", and WMRE line 4's own label is "Montana source partnership and S corporation income". Only the line 4 instruction points to all of Schedule 1 line 5. The reading needs a candidate entry (Should 1).
  • Defaulting eligibility to true (question 1). It's a reasonable default, with two caveats for the documentation (Suggestion 2). First, the five-year limit doesn't bind anyone until 2029, one year later than the PR body says. Second, the residency test already excludes a real group in 2024-2028 that the default can't see.

Critical (must fix)

  1. The earnings cap misses SSTB business income and Schedule F farm income, and counts a non-AGI input (mt_military_retirement_exemption.py:36-44).
    • The law counts all of them. (8)(b) defines "Montana source wage income" to include "(ii) net income from a trade, business, profession, or occupation carried on in the state; and (iii) net income from farming activities carried on in the state". The WMRE instructions (p. 3) send line 3 to "the total business income included on Form 1040, Schedule 1, line 3" (all Schedule C income). Line 5 is "farming income". The 2024 Form 2 instructions (p. 5) list "Net income from a trade or business" and "Net income from farming activities in Montana".

    • SSTB income. PolicyEngine splits Schedule C into self_employment_income ("Self-employment non-farm income") and sstb_self_employment_income (income from a specified service trade or business under IRC 199A(d)(2)). total_self_employment_income adds the two. Federal gross income, earned_income and eitc_earned_income read both. The formula reads only self_employment_income, so it drops the professions that (8)(b)(ii) names explicitly.

    • Farm income. farm_income is documented as "Income averaging for farmers and fishermen. Schedule J. Seperate from QBI and self-employment income." No federal or Montana tax formula reads it; gov/irs/gross_income/sources.yaml lists farm_operations_income ("Income from active farming operations. Schedule F") instead. The formula does the reverse: it ignores Schedule F income and counts farm_income, which isn't in AGI at all.

    • Probes on the head tree (TY2026, single, Montana, age 50 or 55, $30,000 of military retired pay):

      Earnings Law Head Montana tax at head Montana tax under the law
      $40,000 sstb_self_employment_income 15,000 0 $2,434.44 $1,695.48
      $40,000 farm_operations_income 15,000 0 $2,434.44 $1,695.48
      $40,000 farm_income (AGI stays $30,000) 0 15,000

      The first two filers overpay Montana tax by $738.95.

    • Hand check for the SSTB filer:

      • SE tax: 40,000 × 0.9235 × 0.153 = 5,651.82, so the deduction for half is 2,825.91.
      • AGI: 70,000 − 2,825.91 = 67,174.09.
      • QBI deduction: 0.2 × 37,174.09 = 7,434.82.
      • Federal taxable income: 67,174.09 − 16,100 − 7,434.82 = 43,639.27. Montana adds back the QBI deduction: 51,074.09.
      • Tax at the head: 47,500 × 4.7% + 3,574.09 × 5.65% = 2,232.50 + 201.94 = 2,434.44.
      • Tax with the 15,000 exemption: 36,074.09 × 4.7% = 1,695.48.
    • Montana is a heavily agricultural state, and consulting is a common second career for retirees, so neither case is rare.

    • Fix:

      • Replace "self_employment_income" with "total_self_employment_income" (Schedule 1 line 3 nets SSTB and non-SSTB Schedule C income, matching the combined floor) and "farm_income" with "farm_operations_income".
      • Add a TY2026 case for each: $30,000 of pay with $40,000 of SSTB income gives 15,000, and $30,000 of pay with $40,000 of Schedule F income gives 15,000.
      • farm_rent_income (Form 4835, Schedule E line 40) is a crop-share landlord's rent. Like other rents it stays out under the statute reading the PR already takes (see Should 1).
      • Update the PR body's source list and the "Earned income adds ..." sentence.

Should address

  1. Record the two statute-over-form readings as source-conflict candidates (policyengine_us/variables/gov/states/mt/tax/income/subtractions/military_retirement/mt_military_retirement_exemption.py).

    • CLAUDE.md and CONTRIBUTING.md#source-conflicts require it. Where the statute conflicts with a form or its instructions, the code follows the statute and the ruling PR adds a source_conflicts/candidates.yaml item (step 1: id, program, question, years, at least two sources, readings, pe_us with follows: statute, state). It adds no marker yet. The PR takes two such readings and records neither, though its body describes both.
    • (a) Rents, royalties, estates and trusts in the cap.
      • (8)(b)(ii) counts "net income from a trade, business, profession, or occupation".
      • The WMRE line 4 instruction (p. 3) says "Residents actively engaged in a business as an owner of a partnership or S corporation, enter the amount from Form 1040, Schedule 1, line 5". That line also carries rental real estate, royalties, estates, trusts and Form 4835 farm rent.
      • The code uses partnership_s_corp_income alone.
      • Suggested id: us-mt:military-retirement-exemption-schedule-e-income.
    • (b) Both subtractions on one return.
      • (3)(n)(i) and (ii) are separate subtractions, and the code allows both, such as one spouse's retired pay and the other's survivor annuity, or a retiree who is also a survivor.
      • Form WMRE has the filer "Mark the appropriate box" (one of two). The instructions (p. 3) say "If you mark the Military Retiree box, complete Parts I and II. If you mark the Beneficiary ... box, complete Parts I and III" and "If filing jointly and both spouses qualify for the exemption, complete only one form." So the form allows one of the two per return.
      • Case 5 pins the statute reading.
      • Suggested id: us-mt:military-retirement-and-survivor-exemptions-same-return.
    • Optional, in the same entries: the zero floor on each business source is a gap-fill from WMRE lines 3-5 ("If zero or less, enter 0"). (8)(b) says only "net income".
    • The PR adds no conflict-sounding comments, so the Tie source-conflict markers to the register shared with Axiom #10287 ratchet is unaffected either way.
  2. Pin four unpinned terms (mutation rule: deleting each fails no test).

    • The 2024 subtractions.yaml entry. No test runs TY2024. Case 1 (2026) pins only the 2025 list, which 2026 carries forward. Add a TY2024 case that checks mt_subtractions. A probe on the head tree gives 15,000 for a single 50-year-old with $30,000 of pay and $50,000 of wages.
    • partnership_s_corp_income in the source list. No case uses it. Probe: TY2025, $30,000 of pay and $9,000 of partnership_income gives 9,000.
    • The farm source. No case uses it (covered by the Critical fix's new case).
    • The filer mask on earnings and the eligibility mask on survivor benefits.
      • Case 8 gives the military pay to the dependent, so it pins only the mask on pay. Add a filer with pay and no earnings whose dependent has wages. Probe: TY2026, $30,000 of pay and a dependent with $20,000 of wages gives 0.
      • Case 9 has no survivor benefits, so replacing eligible with filer in the survivor sum fails nothing. Add an ineligible survivor (expect 0).
  3. Drop the page text from the RIC memo reference title (policyengine_us/parameters/gov/states/mt/tax/income/subtractions/military_retirement/in_effect.yaml:13).

    • The title "Montana Revenue Interim Committee, Tax Benefits for Veterans (November 2025), p. 1" ends in page text, and the href already has #page=1.
    • CLAUDE.md: "One cited page: #page=57 in the href only, no page in the title." Remove ", p. 1".

Suggestions

  1. Remove the stale Montana line from military_retirement_pay_survivors.py. The PR deletes the Montana "not yet modeled" limitation from military_retirement_pay.py. The survivor variable still says "Montana (MCA 15-30-2120(3)(n)(ii)): allows exempting up to 50% of military survivor benefits ... this deduction is not yet modeled". After this PR, that is false.

  2. Eligibility default (question 1): keep true, but document when it stops being exact.

    • Timing. The WMRE instructions (p. 2) say that for residents from before July 1, 2023 "the exemption is available for five years beginning with tax year 2024. The last year these taxpayers can claim the exemption will be tax year 2028." The form also asks for the "First tax year the exemption was taken". So (9)(b) can't bind anyone before 2029, not 2028 as the PR body says ("through 2027 ... From 2028"). The input's own documentation already says 2024 through 2028. From 2029, everyone whose eligibility began before 2024 drops out, and the default keeps them in. Say so in the input's documentation, so long-run projections carry the caveat.
    • Residency. (9)(a) already excludes, from 2024, a resident from before July 2023 whose pay began elsewhere. WMRE gives this example: "Albert ... moved to Montana in 2021 ... He began receiving his military retirement income when he was a resident of Georgia in 2020 ... he is not eligible for the exemption." Many retirees move after retiring, and service members stationed in Montana often keep another state's residency, so this group may be large.
    • Benchmark. The Revenue Interim Committee memo (p. 1) reports 1,783 claimants and $25.5 million exempted in TY2024. A microsimulation aggregate well above that would suggest the default (or the residency test) needs a takeup-style adjustment.
    • The plain-input design is right: a default formula would hide the variable from the web calculator's household builder (the Give Michigan's qualified disabled veteran exemption to every veteran with a service-connected disability #10714 lesson).
  3. Move the earnings source list to a parameter. For example, military_retirement/earned_income_sources.yaml, looped with the same per-source floor. The list then carries its own references (WMRE lines 2-5), and source changes like the Critical fix become data-only.

  4. Note the "armed forces" scope.

    • (3)(n)(i)(A) covers "the armed forces of the United States, as defined in 10 U.S.C. 101": Army, Navy, Air Force, Marine Corps, Space Force and Coast Guard.
    • military_retirement_pay covers retirees of all "uniformed services", which adds the NOAA Corps and the Public Health Service.
    • One line in the exemption's documentation would record that assumption.
  5. Bill numbers and the 2024 start (text only).

    • The PR body and rulespec-us#2075 say SB 124 (2025) repealed the 2033 termination, following the WMRE instructions. The 2025 Form 2 instructions (p. 4: "Senate Bill 93 removes the expiration date for the military retirement income and survivor's benefits subtraction") and the RIC memo (p. 2) say SB 93. The current MCA carries no termination note for (3)(n), so the code is right either way.
    • For the 2024 start, the 2024 Form 2 instructions (p. 5, "Under Senate Bill 104 ... the exemption can only be claimed for five years beginning with tax year 2024") or WMRE p. 2 would be a Department of Revenue source to add beside the memo in in_effect.yaml.

Verified correct

  • Statute (current MCA 15-30-2120, read in full).
    • (3)(n)(i)(A)-(D) and (ii) "up to 50%".
    • (8)(a)(i)-(ii) "lesser of", applied only to (3)(n)(i).
    • (8)(b)(i)-(iii).
    • (9)(a)(i) "on or after June 30, 2023", (a)(ii), (b) five consecutive years, and (c).
    • There's no termination note for (3)(n); the only termination notes are for (3)(p) and (q), in 2035.
    • The input documentation's "on or after June 30, 2023" follows the statute; WMRE says "after June 30, 2023". It's documentation only, with no computational effect.
  • Form WMRE (2025).
    • Part II: line 1 is taxable military retirement income (1099-R box 2a, code 7). Lines 2-5 are wages, business, partnership/S corporation and farm income, with lines 3-5 floored at 0. Line 6 is the sum, line 7 is 50% of line 1, and line 8 is the lesser of lines 6 and 7.
    • Part III: 50% of taxable SBP benefits. Death benefits (code 4) don't qualify, and military_retirement_pay_survivors already excludes DIC.
  • Start year. The 2024 Form 2 instructions (SB 104) and the RIC memo ("first became available in tax year 2024") support in_effect = false before 2024 and true from 2024.
  • Pooling and placement.
    • The cap uses "Montana source wage income on the return", so pooling the head's and spouse's earnings is right, and case 6 (the spouse's pay against the head's wages) is right.
    • Only eligible filers' pay and survivor benefits count.
    • The head carries the amount. mt_taxable_income_joint.formula_2024 sums mt_subtractions over the head and spouse, so placement doesn't change tax (spouse rows are 0 in cases 1, 3, 5, 6 and 8).
    • Married filing separately on the same return ended in 2024, so mt_agi_indiv isn't reached.
  • Probes on the head tree.
    • Probe 8: a retiree who also receives survivor benefits ($24,000 of pay, $8,000 of benefits), joint with a spouse who has $50,000 of wages and $10,000 of pay but is ineligible: 12,000 + 4,000 = 16,000.
    • Probe 9: an Idaho resident gets 0 and mt_income_tax 0, with no errors.
    • No state-gated int or enum key, so the NH Add New Hampshire state supplementation for 2026 #10156 pattern doesn't apply.
  • Reuse. The formula reuses military_retirement_pay, military_retirement_pay_survivors, irs_employment_income and partnership_s_corp_income. No existing variable records Montana residency history, so the new eligibility input duplicates nothing. It has no formula, so it stays a calculator input.
  • Count military SBP annuities in state benefit income lists #10317 guard. The formula reads the raw military_retirement_pay and the survivor input separately from a file under .../mt/tax/..., which is_tax_side exempts. That is correct, since (8) caps only the retiree's pay. test_military_retirement_readers.py passes on the merged tree.
  • Tie source-conflict markers to the register shared with Axiom #10287 ratchet. The PR adds no conflict-sounding comments (checked against CONFLICT_COMMENT_RE), and no touched file is in KNOWN_UNMARKED. Every repository-content check in test_source_conflicts.py passes on the merged tree (see CI status for one local-only self-test failure).
  • Other checks.
    • The changelog fragment is top-level, with type added.
    • The tests are in a variable-named YAML file.
    • No partner-test files are touched.
    • rate.yaml and survivor_rate.yaml references corroborate 0.5 (WMRE Part II line 7, Part III line 2).
  • Hand-checks (arithmetic; the PR's ten cases also pass on the head tree):
    1. Case 1 (2026): min(60,000, 0.5 × 30,000) = 15,000 on the head and 0 on the spouse. mt_subtractions is 15,000 (no old-age subtraction at ages 45/43).
    2. Case 2 (2025): min(8,000, 15,000) = 8,000.
    3. Case 3: earnings 0, so min(22,500, 0) = 0. Interest and Social Security aren't earnings.
    4. Case 4: 0.5 × 10,000 = 5,000, with no earnings needed.
    5. Case 5: min(0.5 × 20,000, 5,000) + 0.5 × 10,000 = 10,000.
    6. Case 6: min(60,000, 0.5 × 30,000) = 15,000 on the head.
    7. Case 7: 6,000 + max(0, −4,000) = 6,000, and min(15,000, 6,000) = 6,000.
    8. Case 8: the dependent's pay is masked, so 0.
    9. Case 9: the input is false, so 0.
    10. Case 10 (2023): in_effect is false, so 0. Every 2021-list subtraction is 0 for this household, so mt_subtractions is 0.
    11. PR body, TY2026 couple: federal taxable income is 90,000 − 32,200 = 57,800 (probe confirms 57,800).
      • Before: 57,800 × 4.7% = 2,716.60.
      • After: 42,800 × 4.7% = 2,011.60 (probe confirms).
      • Without the pension: 27,800 × 4.7% = 1,306.60.
    12. The SSTB filer in Critical 1: 2,434.44 at the head vs 1,695.48 under the law (both probe-confirmed).

Axiom line assessment

axiom: us-mt/statute/15-30-2120 queued (TheAxiomFoundation/rulespec-us#2075) is a valid queued line: it has a status word and links the issue.

rulespec-us#2075 is OPEN and labelled pe-parity. It is dispatch-ready:

  • module path us-mt/statutes/15-30-2120/3/n.yaml;
  • corpus citation with its sha256;
  • verbatim (3)(n), (8) and (9);
  • seven required outputs;
  • companion tests A-G, which are hand-derived from the statute and form arithmetic, not PolicyEngine output;
  • the pipeline wiring step.

It records the encoding debt (the held mt_pit_2026_has_military_retirement_subtraction branch) in the same form accepted for #2074 in this batch.

It matches the head's behavior. Its output 4 is stated at the level of the law ("net income from a trade or business and net farm income"), so the Critical fix doesn't contradict it. When the fix lands, consider adding a farm companion test, such as "$30,000 of military retirement income and $40,000 of net farm income gives output 5 = 15,000". Also consider correcting "SB 124" (Suggestion 5).

CI status

At head 2eeb5d3, 36 checks pass and 7 are skipped, with none failing or pending. The passing checks include:

  • PR validation (lock, guard tests, lint, changelog);
  • Quick Feedback;
  • Household API Partners;
  • Microsimulation;
  • all Baseline, Contrib and Python Rest shards.

The head already includes main, so CI ran the merged tree.

Locally on that tree:

Branch status

The branch is 3 commits ahead and 0 behind main. git merge-tree --write-tree gives the head's own tree, and head vs main differs only in the PR's nine files.

#10331 (merged today) edited subtractions.yaml. The PR merged main after it, and both changes are intact: #10331's disability-exclusion repeal comment and 2021 list, and this PR's 2024 and 2025 entries.

No file overlaps with the sibling military retirement PRs (#10702 UT, #10714 MI, #10715 ID, #10716 DE, #10717 ID).

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Requesting changes per the review above: 1 critical (the earnings cap reads self_employment_income and farm_income, so it drops SSTB business income and Schedule F farm income that 15-30-2120(8)(b) counts, and counts a non-AGI input; use total_self_employment_income and farm_operations_income), 3 should (record two statute-over-form readings; four unpinned terms; a reference title), 5 suggestions.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants