Skip to content

fix: eight TY2025 engine fixes for accuracy - #147

Merged
a7ul merged 55 commits into
mainfrom
codex/eval-fixes-2025
Oct 19, 2026
Merged

a7ul merged 55 commits into
mainfrom
codex/eval-fixes-2025

Conversation

@a7ul

@a7ul a7ul commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Eight engine fixes found by running seven real TY2025 returns (Drake, UltraTax, Lacerte) through the opentax CLI and comparing them with the returns the tax software printed. Each mismatch was checked by hand against the 2025 IRS instructions; these are the cases where the tax software was right. Every fix has its own commit and a regression test built from synthetic inputs. Each test failed before its fix and passes after. No taxpayer data is in this PR.

Fixes

1. Schedule SE dropped all SE tax for Schedule C plus K-1 box 14a

  • Citation: i1040sse, Line 2 (Schedule C line 31 and K-1 (Form 1065) box 14 code A add on line 2); i1040sse, Who Must Pay SE Tax (each spouse files their own Schedule SE).
  • Change: Schedule C and K-1 both sent net_profit_schedule_c. The executor merged them into an array, schedule_se failed Zod validation, and SE tax silently became 0. Now schedule_se accepts one total per source, adds them, and keeps the combined line 2. On a joint return, each K-1 with SE earnings becomes an owner source for the spouse its recipient_tin names. The joint path now raises an error for line 2 earnings that belong to no spouse instead of dropping them, and the export check rebuilds the K-1 sources.
  • Test: forms/f1040/e2e/taxes/self-employment/schedule_se_multiple_sources.test.ts. MFJ case: Schedule C 219,689, plus K-1 −32,870 for each spouse, gives SE tax 26,396 and deduction 13,198. A single-filer case is included too.

2. The dependent standard deduction never computed

  • Citation: 2025 i1040, Standard Deduction Worksheet for Dependents. Earned income is line 1z plus Schedule 1 lines 3, 6 and 8r, minus Schedule 1 line 15. The deduction is the greater of $1,350 or earned income + $450, capped at the basic standard deduction.
  • Change: general no longer requires a hand-entered dependent_earned_income. agi_aggregator now sends the worksheet's earned income to standard_deduction. A reviewed figure, when supplied, still takes precedence.
  • Test: forms/f1040/e2e/deductions/standard/dependent_standard_deduction.test.ts. W-2 65,630 gives 12e 15,750 and tax 5,887 (Tax Table). 1099-NEC 4,356 gives 12e 4,498, taxable income 0, and total tax 616.

3. return get printed totals after a node failed

  • Change: return get now returns complete: false and failedNodes whenever an EXECUTOR_NODE_FAILURE occurs, and its first warning is [SUMMARY_INCOMPLETE]. Every node feeds some return line, so any failure flags the summary. Export blocking is unchanged.
  • Test: cli/commands/return.test.ts covers a general failure and a clean return.

4. 1099-R code H was taxed in full

  • Citation: 2025 Instructions for Forms 1099-R and 5498, box 7 code H; 2025 i1040 lines 5a–5b.
  • Change: Code H now has a zero taxable amount and checks line 5c (rollover).
  • Test: f1099r/index.test.ts.

5. W-2 box 10 was excluded without qualified expenses

  • Citation: 2025 Form 2441 Part III, lines 16–17. The exclusion cannot exceed the qualified expenses incurred.
  • Change: When no Form 2441 filing details are given, the exclusion is now the smallest of the benefits, the qualified expenses, and the §129 limit. With no expenses, all benefits go to line 1e. The existing limit tests now state ample expenses.
  • Test: form2441/index.test.ts.

6. Excess social security pooled both spouses when an EIN was missing

  • Citation: 2025 Schedule 3 line 11 instructions: figure each spouse's excess separately.
  • Change: The fallback for W-2s missing an EIN now groups by employee_ssn.
  • Test: w2/index.test.ts. Two spouses each at the 10,918 cap now give no excess.

7. The extension payment was dropped unless produce_4868 === "X"

  • Citation: 2025 Schedule 3 line 10; Form 4868 line 7.
  • Change: produce_4868 is only a print flag. The line 7 payment now reaches Schedule 3 line 10 either way, and still requires its reviewed payment evidence. The two export checks no longer require the flag.
  • Test: ext/index.test.ts.

8. Fractional line 13 and line 23

  • Citation: 2025 i1040, Rounding Off to Whole Dollars.
  • Change: Form 1040 now keeps whole-dollar line 23; before, Schedule 2 / Form 8960 cents showed through, e.g. 17,748.59. The general Form 8995 calculation rounds line 15, so 783.40 becomes 783. The Schedule 2 / line 23 export check accepts the whole-dollar line.
  • Tests: f1040/index.test.ts and form8995/index.test.ts. One existing test expected an unrounded 2000.2 for line 13 and now expects 2000.

Entered values replaced by computed ones (executor merge)

Root cause: in core/runtime/executor.ts mergePending, a computed field replaced the same field the user had entered.

  • K-1 box 7 royalties replaced entered Schedule E rentals (ac52add6). Citation: 2025 Instructions for Schedule E, Part I. Rows a node computes (K-1 royalty properties, Form 4952 royalty rows) are now appended to the rows the user entered. Single computed values still replace entered ones. Test: forms/f1040/e2e/income/rental/schedule_e_entered_and_k1.test.ts. A 6,000 rental plus a 1,000 K-1 royalty now gives Schedule 1 line 5 = 7,000.
  • W-2 box 17 replaced entered Schedule A line 5a (62733724, 4572dd90). Citation: 2025 Instructions for Schedule A, line 5a. The W-2 now sends w2_state_local_income_tax, and the user enters line 5a in one of two ways:
    • line_5a_state_income_tax is the full line 5a. It may not be below the W-2 withholding, and the return is rejected if it is. An existing return-hints test enters it this way.
    • The new line_5a_other_state_income_tax holds estimated payments and prior-year balances paid in 2025. It is added to the W-2 withholding.
    • Entering both is rejected. Schedule A keeps the combined line, so MeF and PDF read it unchanged.
    • Test: forms/f1040/e2e/deductions/itemized/schedule_a_state_tax_sources.test.ts. MFJ: 58,000 of other payments plus 500 from box 17 gives line 5a 58,500, SALT 40,000, and the return itemizes. A full 58,500 entered gives the same result, and a full line below the withholding is rejected.
  • Audit: I logged every case where a computed field replaced an entered one, across the e2e tests, the 374 MeF sample returns and the CLI returns. Four remain, and replacing is correct for each, so nothing else changed: schedule_a.line_8a_mortgage_interest_1098 (the issued 1098 is the source; adding would double count), and schedule_a.filing_status, schedule_a.agi, form8919.taxpayer_ssn (values derived from the return).

Later eval batches (merged into this branch)

Commit Fix IRS citation
4852aee3 Prior-year QBI / REIT-PTP loss carryforward input; Form 8995 lines 16–17 carry the remainder forward 2025 Instructions for Form 8995, lines 3, 7, 16, 17
677e53e5 Schedule 8812 Credit Limit Worksheet A is derived from the return instead of hand-entered 2025 Schedule 8812 instructions, Credit Limit Worksheets A/B
01a18d11 Schedule 8812 line 18a earned income for a wage-only return (line 1z plus combat pay) 2025 Schedule 8812 Earned Income Worksheet
d25136c0 A small 1099-DIV foreign tax (≤ $300 / $600 MFJ) can be claimed without Form 1116 2025 Form 1116 instructions, Election To Claim the Foreign Tax Credit Without Filing Form 1116
ca6ef144 Form 8863 takes MAGI and filing status from the return 2025 Form 8863 instructions, lines 3 and 14
17ac92d1 The force_standard election is honored IRC §63(e); §63(c)(6)(A)
6bd31957 Form 2210 applies Form 1040-ES payments by date in the regular-method penalty 2025 Instructions for Form 2210, Part III Sections A–B
23816da1 Form 8801 accepts a 2024 line 26 carryforward on its own and computes Part II 2025 Instructions for Form 8801, lines 19–26
43d97518 Form 1098 box 1 is limited with Pub. 936 Table 1 when there is no reviewed amount Pub. 936 (2025), Part II, Table 1
a78cafc0 Schedule H files Part I and Section A totals without per-employee rows 2025 Schedule H instructions, Part I and Section A
4da95ff2 W-2 code W counts as a 2025 HSA contribution without prior/next-year facts 2025 Form 8889 instructions, line 9
eace6dbc Passive K-1 box 1–3 losses are limited through Form 8582 2025 Instructions for Form 8582, Worksheet 3
66488072 Schedule E sends each property's whole-dollar net to Form 8582 and Form 8995 Reg. 1.199A-3(b)(1)(iv); 2025 Instructions for Form 8995
6aaad4ee Form 8829 handles an owned home: mortgage interest, taxes, depreciation, carryovers 2025 Instructions for Form 8829
95078cfc Form 4562 depreciates assets placed in service before 2025 using MACRS tables Pub. 946 (2025), Appendix A tables A-1 to A-7a

End-to-end eval result

Across 27 production TY2025 returns compared line by line with the tax software's printed 1040s:

  • main: 1 headline match, 44% of lines.
  • This branch: 3 headline matches, 50% of lines.
  • No line that matched on main regressed, except one line that is still under review.

Verification

Results at the merged tip 46cc40a8, compared with 4572dd90 (which passed CI unit-and-preflight):

  • check:structure: pass.
  • check:sandbox: pass (1,528 modules).
  • check:mef: pass, 0 problems.
  • check:cli: 18 returns, 0 problems.
  • check:oracle: 137 cases, no expected-value changes.
  • test:unit and test:forms: no new failures (6 and 57 failures on both commits). These suites exit non-zero locally because the IRS MeF schemas and the certificate setup are absent; CI is the authority.
  • bench --form f1040 --year 2025: identical output on all 109 cases (20 pass on both). No benchmark case was edited.

Not verified

  • The XSD/PDF export paths for the new joint K-1 Schedule SE sources and for whole-dollar line 23, because the IRS schemas aren't available locally. A full MFJ MeF build with Schedule C plus a K-1 loss stops earlier, in an unrelated Form 8995 export check (one identified Schedule C business required). So issue 1 is checked through the Schedule SE owner export check, not a full XML build.
  • The joint-return dependent export check (line12a-dependent-source.ts) still needs a hand-entered dependent_earned_income. Only W-2-only refund returns are supported there.
  • Code H with a nonzero box 2a: treated as nontaxable, on the assumption that box 2a is a payer error.
  • The issue 2 repro totals (taxable income 50,042, tax 5,920) came from returns with other income. The test uses wages alone, so its totals differ but follow the same worksheet.

Known gaps (not implemented)

Fixed since the first version of this PR: the Form 2210 penalty, the QBI loss carryforward, owned-home Form 8829, the Pub. 936 limit, the Schedule 8812 worksheets, and passive K-1 losses through Form 8582. Still open:

  • A K-1 box with no stated passive status is treated as nonpassive; the CLI warns.
  • MFS mortgage balances over $375,000 still need a reviewed deductible amount.
  • Form 8801 is refused alongside Form 3800, 8834 or 8912 credits until their joint ordering exists.

🤖 Generated with Claude Code

a7ul and others added 9 commits October 19, 2026 01:02
Schedule C and partnership K-1s both sent net_profit_schedule_c; the
executor merged them into an array, schedule_se failed Zod validation and
SE tax and the half-SE deduction silently became 0.

- schedule_se accepts one line 2 total per producer, adds them and retains
  the combined amount (i1040sse, Line 2: Schedule C line 31 and K-1 box 14
  code A).
- On a joint return each K-1 with SE earnings becomes an owner source for
  the spouse its recipient TIN names, so each spouse's Schedule SE nets only
  their own earnings (i1040sse, Who Must Pay SE Tax). The owned path rejects
  line 2 earnings with no owning spouse instead of dropping them, and the
  export reconciliation rebuilds K-1 sources too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
general threw unless dependent_earned_income was hand-entered, so a
dependent's return lost filing status downstream and computed no tax.
agi_aggregator now sends the worksheet's earned income (Form 1040 line 1z
plus Schedule 1 lines 3, 6 and 8r, minus Schedule 1 line 15; 2025 i1040,
Standard Deduction Worksheet for Dependents) and standard_deduction uses it
when no reviewed figure is supplied.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failing node never sends its outputs on, so every line after it reads
zero while return get still printed totals (a general failure left no
filing status, total tax 0 and a refund of all withholding). return get now
reports complete: false and the failed nodes, and leads its warnings with
[SUMMARY_INCOMPLETE]. Export blocking is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Code H (direct rollover of a designated Roth account distribution to a Roth
IRA) was taxed in full. It now has a zero taxable amount and checks line
5c rollover, per the 2025 Instructions for Forms 1099-R and 5498 (box 7
code H) and the 2025 Instructions for Form 1040, lines 5a and 5b.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without Form 2441 filing details, up to the section 129 limit of box 10
benefits was excluded even with no qualified expenses. 2025 Form 2441 Part
III limits the exclusion to the qualified expenses incurred (line 16, line
17), so with none entered all benefits are taxable on Form 1040 line 1e.
The limit tests now state ample expenses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When any W-2 lacked employer_ein, the fallback pooled all box 4
withholding across both spouses and invented a credit (two spouses each at
the 10,918 cap gave a false 10,918 excess). The fallback now groups by
employee SSN, as the Schedule 3 line 11 instructions require for joint
returns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The line 7 payment reached Schedule 3 line 10 only when the Drake print
flag produce_4868 was "X", so a paid extension silently vanished from the
return. produce_4868 only controls generating Form 4868; the payment (still
requiring its reviewed evidence) now routes either way, and the export
reconciliations no longer require the flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Line 23 kept Schedule 2 cents (Form 8960 line 17), so return get showed
e.g. 17,748.59, and the general Form 8995 route sent an unrounded line 15
(783.4). Form 1040 now retains its whole-dollar line 23, the general
Form 8995 calculation rounds line 15, and the Schedule 2 / line 23 export
check accepts the whole-dollar line (2025 i1040, Rounding Off to Whole
Dollars).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner-only Schedule SE deposits (no legacy line 2 scalar) tripped the new
guard. Compare only when a line 2 total was sent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@a7ul a7ul changed the title fix: eight TY2025 engine fixes from the production-return accuracy eval fix: eight TY2025 engine fixes for accuracy eval Oct 19, 2026
@a7ul a7ul changed the title fix: eight TY2025 engine fixes for accuracy eval fix: eight TY2025 engine fixes for accuracy Oct 19, 2026
a7ul and others added 19 commits October 19, 2026 04:04
… penalty

The Form 1040 route ignored Form 1040-ES payments and assumed every payment
was made on its due date. Form 1040-ES now hands each dated payment to
Form 1040, and the 2025 penalty worksheet applies each payment first to the
earliest unpaid installment, carrying the excess with the same date, and
charges each underpaid amount from its column date until paid or 4/15/26
(2025 Instructions for Form 2210, Part III Sections A-B, Table 2: 7% for
every rate period; a payment on Monday 6/16/25 is timely for the Sunday
6/15 column). Due dates and rate periods move to CONFIG_BY_YEAR. Line 4 is
now line 24 less refundable credits (Schedule 3 line 31 without lines 10
and 11), excess social security counts as withholding, and the 110% rule
uses $75,000 for married filing separately.

Synthetic regression: MFJ, line 4 tax 9,402, no withholding, 2024 tax 9,343
(AGI 115,177), four 2,400 payments on 4/19/25, 6/17/25, 9/22/25, 1/15/26:
penalty $4 by hand from the worksheet (base engine: $394).

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

There was no input for a prior-year qualified business or REIT/PTP loss
carryforward, so the QBI deduction was overstated. The new
qbi_loss_carryforward input feeds Form 8995 lines 3 and 7 (i8995 2025:
prior-year Form 8995 line 16/17 or 8995-A line 39/40). When the losses
exceed current QBI or REIT/PTP income, lines 16 and 17 now carry the
remainder to the next year instead of throwing. Above the threshold
Form 8995-A still rejects the carryforward explicitly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Schedule 8812 threw "needs complete Credit Limit Worksheet A and B answers"
unless the worksheet was keyed, because Schedule 3 only sent its lines when
it had a credit. Schedule 3 now always tells Schedule 8812 either its
Worksheet A lines (1-4, 5b, 6d, 6f, 6l, 6m) or that a late-settled credit
leaves them pending, and a return with no Schedule 3 enters zero on
Worksheet A line 2 with no Worksheet B (2025 Schedule 8812 instructions).
The keyed worksheet stays an optional override; Worksheet B (Forms 8396,
8839, 5695 Part I, 8859) still needs it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1099-DIV box 7 foreign tax always took the Form 1116 path, which needs a
per-item ex-dividend holding review and an MeF country code. A 1099-DIV can
now carry the election to claim the credit directly on Schedule 3 line 1.
Form 1116 enforces the election's conditions across the return (Form 1116
instructions 2025, "Election To Claim the Foreign Tax Credit Without Filing
Form 1116"): every foreign tax on a qualified payee statement, no Form 1116
carryover, total at most $300 ($600 MFJ), and a credit of the smaller of
the foreign tax or the regular tax. The 16-day holding period still applies
through the existing holdingPeriodDays check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Form 1098 box 1 was rejected unless a reviewed deductible amount and
workpaper reference were supplied. Without them the node now figures
deductible home mortgage interest across all Schedule A mortgages with
Pub. 936 (2025) Part II Table 1: each loan's average balance is the
average of its first (box 2) and last-day-secured principal, box 3 sorts
debt into lines 1, 2 and 7 ($1,000,000 before 12/16/2017, $750,000
after), line 14 is rounded to three places, and line 15 goes to Schedule
A line 8a. A reviewed amount stays an override, but applies to every
mortgage or none. MFS balances over $375,000 still need a reviewed
amount, since the node does not know the filing status; Schedule A and
the export checks reject them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A passive partnership or S corporation box 1-3 loss is held back from
Schedule E and sent to Form 8582 as its own activity, so it nets with
passive income and Schedule E rentals (2025 Instructions for Form 8582,
Worksheet 3). Form 8582 and the AGI aggregator now accept a current loss
from more than one source. A K-1 box with no stated passive status stays
nonpassive and the CLI warns that it was treated as nonpassive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds owned_home: lines 10-11 mortgage interest and real estate taxes
(itemizer) or lines 16-17 (standard deduction), operating expenses,
the line 15 and 28 income limits, Part III 39-year depreciation of the
building's business basis, and Part IV carryovers. The personal shares
of lines 10 and 11 go to Schedule A lines 8a and 5b (2025 Instructions
for Form 8829). Schedule A lines 5b and 8a accept several sources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
schedule_a accepted force_standard but never passed it on, so a return
still itemized whenever itemized deductions exceeded the standard
deduction. The standard deduction worksheet (and Form 8995's taxable
income estimate) now take the election (IRC §63(e)); an MFS return whose
spouse itemizes still must itemize (§63(c)(6)(A)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Schedule H Part II Section A required per-employee payroll rows, and the
native and PDF exports rejected Part I totals without a FICA-only payroll
inventory. The 2025 Schedule H instructions ask only for employer totals:
Part I lines 1a, 3, 5 and 7, and for a one-state employer who paid all
contributions on time, Section A lines 13-16 (state, contributions paid,
total FUTA wages, FUTA tax). Employee rows stay optional and, when given,
are still reconciled; a state payroll review still needs them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A computed field replaced the same field the user entered, so K-1 box 7
royalty rows deposited by k1_partnership (and Form 4952 royalty rows)
replaced every entered Schedule E property: a 6,000 rental plus a 1,000
K-1 royalty filed Schedule 1 line 5 as 1,000. Computed rows now append to
entered rows; scalar derived context still replaces (2025 Instructions for
Schedule E, Part I).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The W-2's computed line_5a_state_income_tax replaced the entered amount
(estimates and prior-year balance paid in 2025), so a 58,000 entry plus a
500 W-2 box 17 became 500 and the return fell to the standard deduction.
The W-2 now sends w2_state_local_income_tax; Schedule A adds it to the
entered line 5a and retains the combined line (2025 Instructions for
Schedule A, line 5a).

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

An employer HSA contribution in W-2 box 12 code W threw unless the
Employer Contribution Worksheet's prior- and next-year amounts were
given. Per the 2025 Form 8889 line 9 instructions, with no contribution
made in 2025 for 2024 or in 2026 for 2025, line 9 is the code W amount,
so the whole amount now counts for 2025.

The beneficiary identity also defaults to the W-2 employee, as the
taxpayer, when one employee's code W is the only owner evidence and no
spouse HSA is given; the native and PDF exports print the return's name
for that owner. A form with no HSA facts at all still files nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI: return-hints enters line_5a_state_income_tax as the full line 5a
(equal to its W-2 withholding), and adding the W-2 again double-counted
it. An entered line 5a is again the full amount and may not be below the
W-2 withholding; estimated payments and prior-year balances paid in 2025
go in the new line_5a_other_state_income_tax, which adds to the W-2
withholding (2025 Instructions for Schedule A, line 5a).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds prior_year_assets to Schedule E properties, Schedule C businesses
and Schedule F farms. Each asset's return-year MACRS deduction comes from
the Pub. 946 (2025) Appendix A tables: A-1 (half-year), A-2 to A-5
(mid-quarter), A-6 (27.5-year residential, mid-month) and A-7a (39-year
nonresidential), applied to the business-use basis less section 179 and
the special allowance, and capped at the basis not yet recovered. The
node adds it to the activity's depreciation line and finalizes the row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A prior-year minimum tax credit carryforward was rejected unless reviewed
2024 Forms 6251/8801 were entered, and the credit used entered regular tax
and TMT. A carryforward alone is 2025 Form 8801 line 19 = line 21, so it now
needs no prior evidence (entered evidence must still match). The node asks
Form 6251 for line 9 and Form 1040 finishes Part II from the final return:
line 22 = line 16 + Schedule 2 line 1z - line 19 - Schedule 3 lines 1-6z
other than 6b and 6k; line 23 = Form 6251 line 9; line 25 = smaller of
line 21 and line 22 - line 23, finalized on Schedule 3 line 6b; line 26
carries the rest (2025 Instructions for Form 8801). Form 3800, 8834 and
8912 credits beside this route are refused until joint ordering exists.

Synthetic regression: single, 250,000 wages, carryforward 86,216: regular
tax 52,023, TMT 42,094, credit 9,929, carryforward to 2026 76,287.

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

A property with cents or a fractional ownership share sent a non-whole
net to Form 8582, which then threw that activity amounts do not
reconcile. Form 8582, Schedule 1 line 5 and Form 8995 now take the
whole-dollar Schedule E line 21/22 net that the export files. A passive
K-1 loss that the K-1 reports as QBI is marked so its suspended part
leaves QBI until allowed (Reg. 1.199A-3(b)(1)(iv); Instructions for
Form 8995, Determining Your Qualified Business Income).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Form 8863 threw unless every student row carried filer_magi and
filing_status. General now sends the return's filing status and the AGI
aggregator sends MAGI (Form 1040 line 11 plus the Form 2555 exclusion,
2025 Form 8863 instructions lines 3 and 14); a student's keyed values
still override them.

So the new AGI-aggregator edge adds no import cycle, Form 8863's claimant
review no longer imports modules that reach the AGI aggregator: its MeF
caller passes the parsed W-2 copies, and the dependent scholarship review
schemas move to a schema-only module (re-exported from the original).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a7ul and others added 26 commits October 19, 2026 10:17
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps both changes to schedule_a line 8a: the 8829 branch's summed array of
deposits and the Pub. 936 branch's form1098_table1_average_balance field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	forms/f1040/nodes/inputs/income/other/education_income/dependent-scholarship-review.ts
…ry test

main renamed general's dual-status input (#156), so the old trigger no
longer failed the node. A spouse dependent on a single return still does.

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

A positive joint saver's credit threw inside the Form 1040 node when no
reviewed 2023-through-prefiling-2026 distribution ledger was entered, zeroing
every Form 1040 line. Form 8880 line 4 (2025 Instructions for Form 8880) is
the distributions received in the testing period; with none entered it is
zero, which the calculation already returned. A ledger, when entered, still
reduces each column.

Synthetic regression: MFJ, AGI 48,000, W-2 code D 2,000 per spouse: 20%
rate, credit 800, tax after credits 853 (base: f1040 node failure).

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

codeDExcessDeferral required an employee SSN for every code D W-2 before
checking whether any excess existed. Under the 2025 Form 1040 instructions
for line 1h, only elective deferrals over the 23,500 limit are income, so
when every W-2's code D total is within that limit there is no excess and no
owner or plan review is needed.

Synthetic regression: one W-2, wages 46,386, code D 18,000, no SSN: no line
1h excess (base: threw for the missing SSN).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nol_carryforward threw on any positive carryforward and never reached
Schedule 1 line 8a. The AGI aggregator now applies the carryforwards (IRC
§172(a); Pub. 536): pre-2018 losses first, oldest first, without the 80%
limit and within their 20-year period; then post-2017 losses up to 80% of
taxable income figured without the NOL and QBI deductions, less the
pre-2018 deduction. The unused remainder is reported as the 2026
carryforward. Taxable income is AGI before line 8a less the filing-status
standard deduction; current_year_taxable_income still overrides it, and
the standard deduction worksheet rejects a return whose actual deduction
differs from that assumption.

Not handled: carrybacks, the alternative tax NOL deduction (Form 6251
line 2f) and farming-loss carrybacks. Export still requires the Form 172
attachment.

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

Schedule C business interest threw unless a documented section 163(j)
exemption with prior-year receipts was given, dropping the whole
Schedule C and its SE tax. Per the 2025 Form 8990 instructions (Who Must
File), a taxpayer meeting the IRC 448(c) gross-receipts test ($31 million
for 2025) is exempt and files no Form 8990. Without the receipts history,
a sole proprietor's line 1 receipts at or under the threshold now count
as meeting the test; receipts above it still need the reviewed history.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An MFS return with benefits and no lived-apart answer made agi_aggregator
throw, so AGI never reached the standard deduction, tax, Form 8960 and
Form 6251 and the return showed no tax. Per the 2025 Form 1040
instructions, Social Security Benefits Worksheet, an MFS filer who lived
with their spouse has no base amount: line 16 is 85% of line 7 and the
taxable amount is the smaller of line 16 and 85% of benefits. That rule
now applies unless the filer says they lived apart all year, and the CLI
hints that it was assumed.

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

Form 461 refused to compute unless a preparer-entered scope review was
supplied, even though the node already had the return's Schedule C and F
lines. It now figures line 9 from those lines against the 2025 line 15
threshold (313,000; 626,000 joint) per the 2025 Instructions for Form 461;
an entered review must still match. Wages are not business income for the
limit (IRC 461(l)(3)(A)).

Synthetic regression: MFJ, Schedule C loss 700,000, W-2 50,000: line 16
-74,000, Schedule 1 line 8p 74,000, NOL carryforward 74,000.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a joint return, Schedule F threw "Joint Schedule SE needs each farm
proprietor and source activity" for a single farm owned by one spouse
when the row had no farm ID, even though it named its proprietor. The
2025 Schedule SE instructions put each spouse's farm profit or loss on
that spouse's own Schedule SE, so the row's proprietor_recipient routes
it, and the row's position stands in for a missing farm ID.

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

The passive K-1 fix (eace6db) warns when a K-1 box has no stated passive
status and is treated as nonpassive. The archived issue77 cases carry such
K-1s; the totals already reflect the default, so the smoke accepts that
advisory alongside the refund advisory and still fails on any other
warning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One year-comparison occurrence the baseline recorded was removed by the
merged eval branches (bun run check:structure --shrink-year-baseline).

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

a7ul commented Oct 19, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for putting together this broad TY2025 accuracy pass and for staying with the follow-up fixes. The added regression coverage made the final review much easier to verify.

@a7ul
a7ul merged commit 8303e0e into main Oct 19, 2026
1 check passed
@a7ul
a7ul deleted the codex/eval-fixes-2025 branch October 19, 2026 12:45
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.

1 participant