MCP batch cumulative tax objective
Sum of each evaluated candidate projection's taxes and penalties, published as batch_evaluate's cumulative_tax objective.
Field: Batch cumulative tax objective Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain
Appears in: mcp (batch_evaluate.results[].objective)
Calculation records
-
MCP batch cumulative tax objective Composition record, justified by derivation
Purpose: The figure RetireGolden-MCP's batch_evaluate ranks candidates on under objective cumulative_tax: each candidate plan's lifetime tax plus penalties.
Statement: For objective=cumulative_tax, RetireGolden-MCP's batch_evaluate reports, for each candidate plan it projects, projection/compare.ts#summarizeProjection's lifetimeTaxesAndPenalties: the sum over every projection year, in ledger order from 0, of that year's YearResult.tax plus YearResult.penalties, each in that year's nominal dollars, undiscounted. tax already holds the federal AMT, penalties (early-withdrawal penalties and the IRC 4974 excise) are not in tax, and Medicare premiums and their IRMAA surcharges are in neither. The engine publishes the figure and the adapter selects it, since RetireGolden-MCP 0.11.0 (#81) and so at b2c7f717 (0.12.0, the census's MCP pin until 2026-10-11); through mcp-v0.10.0 (3197d359) the adapter reduced the same two fields itself. On the worksheet's four-year ledger the objective is 67,191.52. Units: nominal USD. Rounding: none.
Formula:
objective = Σ_y (tax_y + penalties_y), added in ledger order from 0-
tax_y: Year y published tax, AMT included (unit: nominal USD of year y) (domain: finite, nonnegative) -
penalties_y: Year y early-withdrawal penalties and IRC 4974 excise, not in tax (unit: nominal USD of year y) (domain: finite, nonnegative)
Timing: once per evaluated candidate, over every projection year
Rounding: none
Limits:
- Nominal and undiscounted, as the name cumulative says: a tax dollar paid in the last year counts the same as one paid in the first, so candidates that shift tax in time are ranked on nominal totals, not present values.
- The mcp-v0.10.0 adapter (3197d359) added each year's tax and then its penalties to the running total; the engine adds each year's tax plus penalties as one term. The two orders can differ in the last binary digit, never by a cent on ledger-sized figures; on the worksheet's ledger they give the same double, which the evidence asserts, and RetireGolden-MCP #81's parity test holds them within a cent on its plans.
- The engine function is the figure; which objective name selects it is RetireGolden-MCP code, covered by that repository's wiring test, not by this record.
Provenance: derived by
claude, implemented byclaude.Independent review:
codexGates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass
Worksheet: mcp-batch-cumulative-tax-objective.md Mutation receipt: mcp-batch-cumulative-tax-objective.mutation.md
Evidence tests: compareSummary.mcpObjectives.evidence.test.ts
Implemented in: compare.ts
Is the number of: mcp-batch-cumulative-tax-objective
-
Engine source: engine/src/projection/compare.ts
(ProjectionSummary.lifetimeTaxesAndPenalties)
The evidence links on this page (each record's worksheet, mutation receipt, evidence tests
and implementation, and the source links) are pinned to engine commit
2624dbdba9fd, committed 2026-10-11.
The live calculation index and
output-family census links point at the repository's main
branch, so you can check this snapshot against them.