Calculation catalog › Optimizer and comparisons
Simple candidate evaluation executed conversion total
Roth-conversion dollars actually executed for the evaluated candidate.
Field: executedConversionTotal Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain
Appears in: optimize-page (executed conversions); report (modeled-findings validation "Executed conversions")
Calculation records
-
Simple candidate evaluation comparison Formula record, justified by derivation
Purpose: Compare one simple conversion candidate with the shared baseline on the full year-by-year projection.
Statement: projection/optimizePlan.ts#evaluateSimpleConversionCandidates publishes each SimpleCandidateEvaluation as the sum of the candidate result's YearResult.rothConversion, the candidate-minus-baseline differences of summarizeProjection's endingAfterTaxEstate and lifetimeTaxesAndPenalties, the candidate-minus-baseline difference of lastFundedYear (a result's depletionYear - 1, or its endYear when it never depletes), and the ascending sorted union across both results of the years whose taxComputation.status or hecmComputation.status is incomplete.
Formula:
executedConversionTotal = sum(candidate.years.rothConversion); afterTaxEstateDelta = candidate.endingAfterTaxEstate - baseline.endingAfterTaxEstate; lifetimeTaxDelta = candidate.lifetimeTaxesAndPenalties - baseline.lifetimeTaxesAndPenalties; moneyLastsYearsDelta = lastFundedYear(candidate) - lastFundedYear(baseline); incompleteComputationYears = sorted union of the incomplete years of both results-
lastFundedYear(result): Last fully funded year: the result's depletionYear - 1, or its endYear when it never depletes (projection/moneyLasts.ts) (unit: calendar year) (domain: integer) -
candidate.endingAfterTaxEstate: Candidate result summary ending after-tax estate (unit: nominal USD at horizon) (domain: finite) -
candidate.lifetimeTaxesAndPenalties: Candidate result summary lifetime taxes and penalties (unit: nominal USD over projection) (domain: finite) -
incomplete(result): Years whose taxComputation.status or hecmComputation.status is incomplete (unit: calendar years) (domain: set of integers)
Timing: one simple conversion candidate against the plan's shared baseline run
Rounding: none; the dollar sum and the dollar differences carry binary floating-point representation
Limits:
- Every difference is candidate minus baseline, the conversion sum is the candidate result's rows alone, a non-depleting result is funded through its endYear and a depleting one through its depletionYear - 1 (owner decision R15, 2026-09-25; restated 2026-09-26; it replaced the earlier count of depletionYear or endYear + 1, and both shift every result by one year, so every delta is unchanged), and the incomplete years are a de-duplicated ascending union across both results rather than a concatenation. Beyond the worksheet's inputs the smallest exported entry that publishes these fields generates its own fixed set of fill-to-target candidates and runs each one through the ledger, so the test supplies the candidate result at the simulate seam and the baseline result directly; it also assumes a validated plan whose only estate-discounted holding is one non-inherited traditional account at a 20 percent flat heir rate, so each result's final-year balance for that account is what turns its ending net worth into the worksheet's after-tax estate. In the no-incomplete-status branch the optional incompleteComputationYears key is omitted, not set to an empty list, as the worksheet states since its 2026-09-18 revision (the first derivation expected an empty list, which the test found); the test asserts the omission and the empty union it stands for. recommendationState has no census family this round and is not published by this record.
Provenance: derived by
codex, implemented byclaude-subagent.Independent review:
grokGates (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: simple-candidate-evaluation-comparison.md Mutation receipt: simple-candidate-evaluation-comparison.mutation.md
Evidence tests: optimizePlan.evidence.test.ts
Implemented in: optimizePlan.ts; evaluateCandidate.ts; moneyLasts.ts
Is the number of: simple-candidate-evaluation-after-tax-estate-delta, simple-candidate-evaluation-executed-conversion-total, simple-candidate-evaluation-incomplete-computation-years, simple-candidate-evaluation-lifetime-tax-delta, simple-candidate-evaluation-money-lasts-years-delta
-
Engine source: engine/src/projection/optimizePlan.ts
(SimpleCandidateEvaluation.executedConversionTotal)
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.