Calculation catalog › Cash flow and summary

Sustainable spending result feasible base annual

Highest annual base spending the solver's search found feasible (no depletion, and an ending after-tax estate at or above the floor), a whole number of today's dollars: the level maxBaseAnnual is rounded down from to the nearest $100, and the one on which whether today's spending is sustained is judged.

Field: feasibleBaseAnnual Unit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chain

Appears in: mcp (solve_max_spending.feasibleBaseAnnual)

Calculation records

  • Sustainable spending bisection Model record, justified by derivation

    Purpose: Find a feasible lower bound for constant annual base spending within a simulation budget.

    Statement: decisions/spendingSolver.ts#solveMaxSustainableSpending finds a lower-bound maximum feasible annual base spending in today's dollars using deterministic integer-dollar bracketing and bisection, where feasibility means no depletion and nominal ending after-tax estate at least the inflated today-dollar floor. Each bisection probe is the half-sum of the bracket rounded to the nearest dollar, a half rounded up. The highest level that passed, a whole number of dollars, is published as feasibleBaseAnnual; the published answer maxBaseAnnual is that level rounded down to $100 when that level is known to pass (the record solved-spending-rounding), and spendingSlackDollars is measured from maxBaseAnnual.

    Formula: probe integer midpoint; keep feasible lower and infeasible upper until upper-lower <= resolution; feasibleBaseAnnual = best feasible lower; maxBaseAnnual = its $100 floor when that level is known to pass, else feasibleBaseAnnual

    • spending: Probed annual base spending (unit: today USD/year) (domain: nonnegative integer)
    • resolution: Maximum bracket width (unit: USD/year) (domain: positive)

    Timing: whole-plan deterministic evaluations

    Rounding: integer-dollar midpoint

    Limits:

    • simulationCount has its own record (sustainable-spending-result-simulation-count); the count enters the published result, so this record feeds its family rather than computing it.
    • The public API generates its own bracket. Evidence seeds 40000, brackets at 80000, and verifies the first two midpoints reach the worksheet bracket 60000/70000 before checking its four probes and 62500 result, then runs the same search at a $100 resolution, which probes three more levels and passes 62969. It isolates the stated feasible predicate with an evaluation double, not an invented ledger oracle. Monotone feasibility is assumed at fixed-target spending (under guardrails it does not hold; see below); budgets can stop convergence.
    • A Marketplace year whose premium tax credit the ledger could not price (aca.readiness nonActionable) counts its full premium, as the ledger funds it; the credit lies between 0 and that premium (26 U.S.C. 36B(b)(2)). The solver always evaluates its probes with nonActionableAca 'disclose' (its options leave callers no way to ask for 'refuse'), so such a year is a disclosed limit, not a refusal. Those years of the run the result rests on (the best feasible probe; with no answer, the probe the failure diagnostic describes: the floor probe when it ran, else the seed), the codes that blocked pricing (every code but the informational ones, INFORMATIONAL_ACA_SUPPORT_CODES, the list the ledger's readiness reads) and acaGrossPremiumDirection are published, and the last diagnostic names them.
    • acaGrossPremiumDirection is 'conservative' only at fixed-target spending: at fixed spending a lower premium lowers what that year must withdraw, so a credit would likely leave room to spend more. That is measured, not proven for every plan: an independent check priced the stand-in years in a counterfactual and re-solved the 20 fixed-target example answers at $1 resolution (about 6,700 grid points) without finding a credit-priced answer below the gross one (gaps 0 to $6,357 a year). Under guardrails it is 'uncertain': a lower cost keeps the withdrawal rate under the upper guardrail longer, so cuts start later, and the same check found credit-priced ledgers that solve lower (the aggressive-saver example under 125/90/20 guardrails with raises: $76,707 on the gross premium, $75,170 with the credit priced) or deplete at the gross answer (the barista-fire example under the same 125/90/20 guardrails with raises).
    • Under an adaptive spending policy (guardrails) feasibility is not monotone in the base amount, so the answer is a level the search found feasible and a higher feasible level can exist. Measured with no Marketplace year at all: the example-couple plan with no Marketplace premium or credit, withdrawal-rate guardrails (upper 125%) and an $86,400 required floor depletes in 2059 at a base of $164,391 and never depletes at $166,971, because the higher base makes its first cut a year earlier (2030 against 2031). The independent check of 2026-09-26 also found it on Marketplace plans, under both the gross-premium and the credit-priced ledgers.
    • The published answer is rounded down to $100 (owner decision R4, the record solved-spending-rounding). In this record's first evidence case the level that passed, $62,500, is already a whole $100, so it is both feasibleBaseAnnual and the published answer; in the second the level that passed is $62,969 and the published answer $62,900, so the two figures differ and each is asserted.
    • When the seed is infeasible the downward bracket starts at the required spending floor (expenses.requiredAnnual rounded up, 0 when the plan has none), the lowest level the plan checks accept; no probe goes below it, and a failure there is reported as the floor failing, naming the constraint that failed. The seed itself is raised to that floor when the base spending would round below it. zeroSpendingDepletes is true only when a probe at 0 ran and depleted.

    Provenance: derived by codex, implemented by claude-subagent.

    Independent review: grok

    Gates (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: sustainable-spending-bisection.md Mutation receipt: sustainable-spending-bisection.mutation.md

    Evidence tests: spendingSolver.evidence.test.ts

    Implemented in: spendingSolver.ts

    Is the number of: sustainable-spending-result-max-base-annual, sustainable-spending-result-spending-slack-dollars, sustainable-spending-result-feasible-base-annual

    Feeds: sustainable-spending-result-simulation-count, solved-initial-withdrawal-rate-pct, solved-spending-rounded-to-hundred

Engine source: engine/src/decisions/spendingSolver.ts (SustainableSpendingResult.feasibleBaseAnnual)

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.