| Not run yet. |
| Not run yet. |
yapft-history, capped at 40 snapshots / ~2 MB, oldest automatics evicted first). Diff vs now lists exactly which settings differ; Restore checkpoints the current state first, so restoring is itself undoable.yapft-license). Everything that existed before the Pro tier is free forever and never passes through this gate. If a key lapses, your saved plans and history remain listed, loadable, restorable, and exportable — only creating new Pro artifacts locks.docs/recipes/FORMAT.md.FEDERAL TY2026 (OBBBA): MFJ std deduction (indexed) · brackets indexed · SALT cap per current law: +1%/yr through 2029, unindexed $10,000 from 2030 · mortgage interest + PMI deductible on acquisition debt up to the cap (prorated) · PMI auto 0.6% of balance while LTV > 80%, appreciation counts toward escape · CTC per child (indexed), −$50 per $1k MAGI over the threshold (unindexed, as in law) · addl Medicare over threshold (unindexed) · SE tax to wage base + Medicare; LLC owned by Person 1 · QBI, thresholds indexed, no-W-2 phase-out · charitable: AGI floor itemizing, above-the-line otherwise · 401k limit/person; deferral per earner per job · employer match per job, tiered: tier-1 rate on pay up to a % ceiling, tier-2 rate on the band above it, optional annual $ cap (indexed), matched on actual deferral (total-limit interaction ignored) · up to 5 sequential jobs per earner, month-granular: each phase has wages (nominal at its first month; raises compound on job anniversaries), deferral, plan return, and match; phases start and optionally end at an age+month, jobs after the first toggle on/off, uncovered months are gaps (no wages, no contributions; the balance keeps compounding at the most recent plan's return), overlapping phases resolve later-start-wins with no fall-back, and the statutory deferral limit is prorated across same-year plans · IRA limit/person as Roth (traditional nondeductible here; assume backdoor if over MAGI limits) · RMDs per SECURE 2.0, Uniform Lifetime Table, per traditional 401k, max(skim, RMD); Roth exempt; current-year balance approximation · Roth conversions: retirement→RMD window, proportional, ordinary income · Social Security 85% federally taxable, COLA = inflation; auto mode estimates the household benefit from the modeled wage history — real covered wages (CPI-deflated, wage-base-capped) plus assumed pre-plan years at the year-1 real wage from age 22, top 35 → AIME → PIA bend points (editable), claim-age adjustment (5/9%/mo reduction, 8%/yr delayed credit to 70), household = P1 + max(P2, 50% spousal; spousal takes the early reduction but no delayed credit) · NIIT: 3.8% on dividends + realized gains above the unindexed MAGI threshold ($250k MFJ / $200k single / 2×$200k unmarried partners), MAGI approximated as AGI + that income · AMT: parallel calculation adding back SALT and the standard deduction (mortgage interest, charity, medical, QBI survive), 26/28% rates, exemption with 50% phase-out; the excess over regular tax lands in the federal bill · Medicare from 65: Part B+D per person plus IRMAA surcharges tiered on current-year MAGI (real IRMAA looks back two years) · dependent-care FSA: up to $7,500 excluded from income tax and FICA while both earn and kids are in care; CDCTC at 20% on expenses past it, caps reduced by FSA dollars · kiddie tax: first tier free, second tier @10%, rest @ parents' marginal (indexed, realized annually, paid from account; LTCG rates simplified to ordinary).
STATE: MA flat rate + Fair Share surtax over threshold (indexed); exemption + FICA-paid deduction (capped); taxes 401k/IRA distributions and conversions; SS exempt; 529 deduction capped/return · NH: no wage tax, I&D repealed 2025 · VT (2025 figs, indexed): 3.35–8.75% MFJ brackets, $14,850 std + $5,100/person exemption, SS taxed above $75k AGI (phased from $65k), 3%-of-AGI minimum over $150k, 5% charitable credit (first $20k), 10% VHEIP 529 credit (first $2,500/kid) · ME (2025 figs, indexed): 5.8/6.75/7.15% MFJ brackets, federal-matching std deduction + $5,150/person exemption, SS fully exempt, pension deduction $48,216/person on 401k/IRA distributions (phaseout >$250k AGI modeled linearly to $350k) · LLC annual report fees per state (editable above) · State withholding auto-estimate applies to State A only.
LIFECYCLE: up to five children, child 1 born at plan start + its own offset, each later child offset from the previous, all per Children section; CTC to 16, 529/custodial contributions to 17, 529 spent 18–21, custodial exits household NW at 18 · withdrawals = % of remaining balance per retired account · home appreciation drives equity and property tax · home maintenance: editable % of value per year (default 1%) charged monthly while owning, primary + second home; renters exempt · job-loss stress: zeroes the chosen earner's months in the window — wages, deferral, and match scale with months worked · term-life sizing: bisection for the smallest death-year payout keeping the survivor sim's savings non-negative, worst-case death next year, rounded up to $25k · goal-seek: bisection over one lever's slider range; assumes the output is monotonic in the lever · autosave: full parameter set + assumptions to browser localStorage on every change, restored on load; the JSON file remains the export format.
ESTATE/TRUST: federal exemption $15M/person (not binding); state exemptions editable above, non-portable; schedules approximated; credit shelter modeled as 2× exemption at second death; revocable trust = grantor trust, no tax effect; non-grantor trust income brackets compressed (37% ≈ $16k) — shown as warning, not modeled as a strategy.
BUDGET/CASH: eight spending categories (groceries, utilities, transport, medical, auto/life/home insurance, misc), each with a % and a fixed-$ setting; %s apply to the budget base (discretionary minus car/debt payments and child care) · child care: fixed $/mo per kid from birth to age 13, CPI-inflated, charged off the top like a loan payment · charity subtracted from cash flow; surplus compounds in a basis-tracked brokerage: a dividend slice (1.8%) taxed annually at 15% (0% in low-income years), the rest unrealized until withdrawals sell proportionally (15%/0%), and years under the 0%-LTCG ceiling harvest gains — stepping basis up to the bracket top for free · HSA: family limit (indexed), above-the-line fed+state, tax-free skim in retirement (assumed medical; FICA exemption via cafeteria plan not modeled) · ACA gap: retired pre-65, benchmark premium/person, 2026 post-enhancement rules with the 400% FPL subsidy cliff (9.5% cap) — conversions and subsidies compete for MAGI · QCD: from age 71, charity ≤ withdrawals routed AGI-free (assumes 401k→IRA rollover; $108k/person limit not binding) · Conversions: fixed $ or fill-to-bracket-top (12/22/24), sized per year; cliff-aware modes fill the 22% bracket but stop under the next IRMAA MAGI tier from age 63, or under the 400% FPL ACA cliff while anyone is retired pre-65 — note these caps are year-local: converting less leaves a bigger traditional balance, and the RMDs it forces later can land in higher IRMAA tiers anyway (§8B and the tornado show the net) · Downsize: sale at E1 retirement, 6% costs, §121 $500k shield, 15% LTCG on excess, proceeds → savings, rent thereafter · Tuition: per kid ages 18–21, inflates CPI+2pts, 529 first then cash; at $0 the 529 simply holds · Monte Carlo: see the MONTE CARLO paragraph below · Inheritance: income-tax-free lump (today's $, inflated to receipt year), routed to savings or mortgage-first; stepped-up basis assumed · Cars: up to five amortized loans (payments end at term; freed payment reabsorbed by surplus, fully so in fixed-budget mode), values depreciate 12%/yr and sit in net worth · Other debts: up to five fixed-payment lines (balance, rate, payment/mo) charged against the budget like car loans; remaining balances net against net worth; a payment below monthly interest never amortizes — the balance grows · Financial goals: up to five named targets, one-time (paid from savings at the target year, today's $ CPI-inflated) or yearly (recurring from the start year to end of plan); required-saving figures use FV-of-annuity math at the after-drag savings return; the §2E budget optimizer trims spending categories (flexibility-weighted, floor = half the current setting, FIXED-locked categories excluded; insurance lines lock by default) until the simulated savings balance covers every goal · Rent-then-buy: pre-purchase years pay rent (today's $, CPI-inflated) with no property tax or equity; the down payment exits savings at the appreciated purchase-year price and the mortgage schedule starts at the buy year (inheritance→mortgage routing applies only once the loan exists) · Budget modes: % of base (post-housing, post-car) or fixed $ inflated at CPI; negative surplus = under budget, drains savings · Lifetime withholding model: W-4 pct method on wages, 10% on 401k distributions, none on conversions — refund chart and era suggestions built from it.
SURVIVOR: spousal rollover merges accounts, SS ×0.67, filing single thereafter (single brackets/std exact; state exemptions and bracket widths halved as approximation) · Catch-ups at 50 and 60–63 (indexed); forced Roth above the wage floor (SECURE 2.0); Roth-split slider routes base deferral (taxed at entry, no RMD) · Guardrails: real target = rate × pool at first withdrawal; ±20% rate bands trigger ∓10% spending steps; RMD floors still enforced · LTC: final N years, CPI+2 inflation, deductible medical above 7.5% AGI · Spending smile: ×1.1 first 10 retirement yrs, ×0.9 next 10, ×0.8 after · 2nd home: bought at appreciated price, down from savings, interest deductible under the COMBINED acquisition cap (balance-based approximation), property tax at State rate into SALT, equity in NW · Savings rate = (401k both types + IRA + HSA + 529 + custodial + positive surplus)/gross · Standard-of-living ratios = real living spend vs year 1 · Offshore section is educational; FEIE illustration assumes E1's wages fully qualify.
FILING & STATES: all 50 states + DC — MA/NH/VT/ME and NY with bespoke detail, everything else via a filing-status-aware engine rebuilt from each state's own published TY2026 schedules: its actual single AND married-filing-jointly brackets (so doubled, separate-MFJ, and same-schedule marriage-penalty states are each represented, not assumed to double), per-status standard deductions, personal AND dependent exemptions or credits, high-income phase-outs and deduction addbacks, and retirement/senior rules (full exclusions, per-person caps, AFAGI age deductions, Social-Security interactions). NY is bespoke for its tax-benefit recapture; validated case-by-case against published tables for CA/CO/IL/MD/NC/NJ/NY/OH/PA/VA (36 checks in test/states.test.js, sourced in docs/state-validation.md). Still not modeled: city income taxes (NYC/Yonkers, Ohio/Alabama municipalities), state AMTs, AGI-phased standard deductions (AL), federal-income-tax deductibility (AL/LA/MO/MT/OR), most narrow state credits, and partial Social-Security taxation for under-65 filers in a few states · estate tax schedules for the 13 jurisdictions that levy one · unmarried-partners mode files two real returns (E1 HoH with kids/house-share/business, E2 single), shared costs split by income share, each with their own SALT and $750k caps; the wedding-year slider switches to a joint return at year N · withdrawal draw order (both retired, fixed-% rule): proportional, traditional-first, Roth-first, or smart, RMD floors always enforced; the §8B comparison holds real spending constant — under a %-of-income budget the three alternate-order sims are pinned to the current order's realized real spending path (fixed-$ budgets are already order-invariant), so legacy deltas reflect tax location, not consumption response · smart order, one ordered pass per year (no search): tier 1 draws traditional up to the standard deduction + top of the 12% bracket for that year's filing status (CPI-indexed; RMDs already forced out count first, and fill-to-bracket Roth conversions claim the headroom before discretionary draws), tier 2 sells taxable brokerage (gains through the basis tracking, 0% whenever the LTCG window is open), tier 3 traditional above the cheap brackets, tier 4 Roth — known simplifications: tiering keys on federal ordinary brackets only (state tax, IRMAA, and NIIT are still priced in the resulting year but don't steer the tiers), no multi-year lookahead or lifetime optimization, no asset-location advice; those are future iterations.
MONTE CARLO: each path re-runs the full lifecycle sim with one standardized shock per year, correlated across every account (a single equity-style factor — no bond/inflation stochastics, no fat tails or regime switching) and scaled by the σ slider. Draw modes: iid samples each year's shock independently from a normal — clean statistics, but it shuffles away sequence-of-returns clustering; history blocks replays contiguous windows of standardized 1928–2024 S&P annual returns, preserving how bad decades arrive as decades (at the cost of only ~97 distinct starting points, so paths reuse history). Funded % = share of paths whose savings never go negative; it is a sample proportion, so the readout carries a binomial 95% confidence interval of ±1.96·√(p(1−p)/n) — about ±5pp at 250 runs, ±1.9pp at 1,000, ±0.6pp at 10,000; run more paths when two plans differ by less than the interval. The fan chart shows per-year 10/25/50/75/90th percentiles of real net worth across paths (pointwise percentiles, not sample trajectories — no single path traces a band). Randomness: mulberry32 PRNG, one independent stream per path keyed by (seed, path index), so results are identical whether paths run chunked on the main thread or split across workers; seed 0 draws a fresh session seed per page load, a nonzero seed reproduces the exact funded % and fan chart across reloads. A 250-run pass auto-refreshes after input changes; bigger batches run on demand, chunked (or on http(s), fanned out to web workers) with cancel-on-input.
SRR CRASH STRESS TEST: one extra deterministic lifecycle sim with a crafted shock vector — zero everywhere except the crash window, which starts the first year both earners are retired (the later of the two retirement ages). The crash-year shock is −(drop + 7) percentage points on every account's return, where 7% is a nominal reference equity return, so a typical ~7%-return account returns ≈ −drop% that year; each recovery year applies half the shock. The card prices the crash path against the base path in end-of-plan legacy wealth (today's $) and counts underwater budget years. Limits: a single deterministic path, not a distribution; the shock hits every account's return uniformly (equities-style — no bond allocation, glidepath, or interest-rate modeling); crash timing is fixed at retirement, the classic worst case for sequence-of-returns risk but not the only one.
TERMINAL WEALTH GOAL — DIE WITH ZERO: Perkins' Die With Zero argument: an unspent estate is life energy earned and never used, so unless bequests are the goal, the optimum is to spend the wealth down to a small safety margin. The toggle never mutates the plan; it runs a solver and presents a suggestion. Lever: retirement spending in this model is the budget target, not the withdrawal rate — the %-of-base budget can never overspend (surplus ≥ 0 by construction), so the solver works on the fixed-$ budget scale, bisecting one multiplier across the eight categories (≤ 25 iterations) at the current withdrawal settings until the plan just satisfies two constraints: minimum real spendable assets (401k + IRA + HSA + brokerage, pre-estate-tax — at near-zero terminal wealth estate tax is moot, and the house isn't spendable without selling it) over the final decade ≥ the safety floor, and savings never negative in any year — the LTC tail lives in that final decade, so a plan that dips underwater at 82 and recovers on paper fails. The floor (default 2× the final year's annual spending, editable) exists because the deterministic path is roughly the median: a plan tuned to end at literal $0 fails about half of Monte Carlo paths, which is why the card re-measures the funded % at the solved spending level — every dollar of buffer spent is a dollar not absorbing a bad return sequence. APPLY writes the solved level to the actual budget category levers (switching the budget to Fixed $ if needed). Honest limits: a %-of-balance (or guardrail) withdrawal rule cannot annuitize the pool to zero — pushing the rate up mostly prepays tax and moves assets to the lower-return taxable account (the sim prices this; it destroys far more than it unlocks), so a residue usually remains and the card reports it. The textbook die-with-zero instrument — converting the estate into a lifetime annuity — is not modeled and is the natural next step.
CONSTRAINTS: the plan is checked against a set of floors it must never breach, distinct from targets it should hit. Solvency (the savings account never goes negative in any year) is always on — it is the same feasibility test the goal, die-with-zero, and insurance-sizing solvers use. Two more are user-settable and default to off: an emergency fund (liquid savings ≥ N months of that year's spending, every year) and a disposable-income floor (real monthly surplus ≥ a set amount, in working years). Each constraint reports not just pass/fail but the tightest year, the amount required vs. on hand, and the shortfall; when several are breached the binding one (the worst relative slack) is named. A constraint is a floor, not a goal: setting a 6-month emergency fund does not make the plan save toward it — it flags the years the plan would fall below it. Because the two optional constraints default off, turning them on is the only thing that changes a plan's feasibility verdict.
WHEN CAN I AFFORD IT (§12D): a financed purchase (price, down %, rate, term, all-in carrying cost %, appreciation %) is injected into the plan as a second house at a candidate year — down payment out of savings at the buy year, its own mortgage P&I, carrying cost as a flat % of the appreciating value, appreciating equity into net worth. "Feasible" means the constraint set (§1) holds every year the purchase is held: it is a floor test against your constraints, not a prediction. The solver bisects for a candidate earliest year, then confirms it against a full year-by-year scan and never returns a bisection root the scan would beat — if the scan finds an earlier feasible year it reports the plan non-monotone and shows a window that can close (a purchase affordable at 45 can be infeasible at 70 once wages stop). In this engine feasibility is monotone in the buy year in practice (savings compound, so a later year means a bigger buffer), so the window rarely closes, but the guard is there. A "no" always carries the shortfall in the closest year — a number you can act on. The deterministic path is used: a feasible year is not a safe year — funded % under market variation is §13's job. Not modeled: rent-vs-buy, property-specific tax beyond the flat carrying cost, more than three purchases.
WHEN SHOULD I? — TIMING OPTIMIZER (§13): once §12 has the feasible years, this ranks them by one of four objectives and returns the whole curve, not just the winner. Max legacy (terminal wealth after estate tax, today's $) and Max lifetime spending usually favour buying late — the down payment stays invested longer. Min lifetime tax often favours buying early — draining the taxable brokerage sooner cuts years of dividend/gains/NIIT drag. Max funded % runs Monte Carlo (100 seeded paths per candidate year, a fixed seed so the recommendation replays across clicks), because a feasible year on the deterministic path is not a safe year. The objectives genuinely disagree — the point is not that one is right, it is that you must choose which question you're asking. The most important output is the flat flag: if the best and worst feasible years land within 2% of each other (or, for funded %, within the ±5pp Monte-Carlo noise floor at 100 paths), the tool reports a window and says timing barely matters — a solver that reports false precision is worse than no solver, because the user acts on it. Compute is capped at 400 lifecycle sims: past that the year granularity coarsens to 2 then 5 and the readout says so, rather than freezing the tab or returning a coarse answer as though it were exact.
ROTH CONVERSION PLAN (§8C): the autopilot scans a conversions-off run of the plan for gap years — both earners retired, a traditional balance still under the RMD start age, and Social Security not yet flowing (SS from the first retired year means no quiet-bracket window, and the card says so) — then sizes every eligible pre-RMD year individually: convert up to the top of the 22% bracket (ordinary income measured as wages + taxable withdrawals + 85% of SS, same stack as the engine's fill-to-bracket modes), capped by the distance to the next IRMAA MAGI tier from age 63 (IRMAA prices this year's MAGI into Medicare premiums two years later, so the lookback arms two years before 65) and by the ACA 400% FPL cliff with $1k of margin while any retiree is pre-65 — but only when baseline income sits under the cliff: a household already past 400% FPL has no subsidy left to lose, so the cliff doesn't bind there. Post-SS years stay in the schedule with the benefit income shrinking their headroom — the taper the acceptance chart shows — and the schedule ends when RMDs take over. The schedule is scored by re-simulating it (legacy wealth vs converting nothing); a negative delta suggests nothing. Applied schedules are nominal per-year dollars stored with the parameters and re-capped by the engine at the eligible balance. Staleness detection: an applied schedule is a snapshot of the plan at apply time, so while one is active every recalc re-derives what the scanner would now suggest and compares year by year — material drift (any year off by more than 5% or $2k, or years added/removed) surfaces a nudge with the legacy delta of re-deriving and a one-click re-apply; the applied schedule's own run is also asserted against the three ceilings the scanner sizes with (top of the 22% bracket, the next IRMAA tier from 63, the ACA 400% FPL cliff, same wages + taxable withdrawals + 85%-of-SS income stack) and a breach escalates the wording with the offending year. Nothing is ever auto-mutated — nudge and one click only; if the re-derived plan is now empty or unprofitable, the one click removes the stale schedule instead. Honest limits: each year is sized against the baseline path, not jointly optimized — no lifetime-tax search, no state-tax-aware sizing, no heir-bracket modeling; it is the bracket/cliff heuristic made year-aware.
LIFE EVENTS: user-defined cash-flow events (up to 20 on the card, 50 in the model), evaluated in one additive pass per simulated year — they compose with, and never replace, the built-in kid/college/second-home/downsize/inheritance machinery. Three kinds: expense — a recurring outflow charged against that year's cash flow (pre-tax spending, so it shrinks the budget base and the surplus), or, when funded from savings, sold out of the taxable brokerage through the same basis-tracked machinery as goals (realized gains taxed honestly); income — a recurring inflow that, when marked ordinary income, stacks into the year's return through the full tax engine (federal brackets, state tax, credits, IRMAA and ACA MAGI — so it prices marginally, not at a flat rate; no FICA, like retirement distributions), or lands tax-free straight in savings; windfall — a one-time inflow to taxable savings, income-tax-free at receipt, compounding thereafter. Amounts are today's $ (optionally held nominal); start is a plan year or either earner's age; duration in years, windfalls always one. Diamond markers on the §10 net-worth chart flag every active event year. Not modeled in v1: conditional triggers ("when kid 1 turns 18…"), funding from retirement accounts, and any per-event tax treatment beyond the ordinary-income/tax-free flag (no capital-gain events).
STRATEGY RECIPES: shareable plan modules are declarative JSON only — whitelisted §1 input values, assumption-registry overrides, and life events; no recipe code is ever executed and no recipe string is ever rendered as HTML. Validation rejects unknown top-level keys and prototype-pollution keys outright, skips unknown section keys with a per-key warning (forward compatibility), and caps string and list sizes; the preview diff lists every change before anything applies, and revert restores the exact pre-apply state (one level). Applied recipes are recorded with the saved parameters and disclosed here.
COMPARE (§15): each side is one full deterministic lifetime simulation (no Monte Carlo shocks) of a saved plan or the working plan, run off a plain-data snapshot exactly the way the Monte Carlo workers run theirs. The target plan is applied to the global state silently and synchronously — no recalculation, no chart redraw, no autosave — flattened, and the working copy restored in a finally, so a failure mid-swap can never leave the wrong plan in your session; an isolation assertion re-checks the working copy after every compare. Delta metrics use the cockpit's own formulas: legacy = terminal net worth minus estate tax in today's dollars, lifetime tax = the sum of every simulated year's total tax, goal funding = the savings balance surviving through each goal's horizon. Auto-Social-Security plans re-derive their benefit estimate from each side's own wage history.
PLAN VAULT: saved plans are explicit named snapshots of the full configuration — the exact object the JSON download writes (single serialization path; a saved-then-reloaded plan is byte-identical to a file export at save time). They live only in this browser's localStorage (yapft-plans): no cloud, no account, nothing leaves the machine. The autosaved working copy is a separate layer — loading a plan overwrites it (after a confirm), saving never touches it. If browser storage is full, the vault operation fails with a message and the working copy is unaffected. Deleting all plans is its own control with its own confirm; clearing the autosave never touches the vault.
PLAN HISTORY: automatic restore points for the working copy — at most one snapshot per calendar day, triggered by the first change of the day that actually differs from the newest snapshot (no-op saves never snapshot) and storing the pre-edit state, so the day's snapshot preserves yesterday's end state before today's edits pile up; plus manual checkpoints with optional labels. Snapshots are the same full-configuration object the JSON download writes (single serialization path), stored only in this browser's localStorage (yapft-history). Caps: 40 snapshots and ~2 MB serialized, evicting oldest automatics first — manual checkpoints outlive automatics until only manuals remain — because history must never be the reason a save fails. Restore always checkpoints the pre-restore state first ("before restore"), so restore is itself undoable. History tracks the working copy only; vault plans are their own explicit layer.
PDF EXPORT: "Export PDF" assembles a print-only report — plan name, verdict summary and snapshot-year tax cards (the cockpit's own values, cloned, never recomputed), the headline charts captured at 2× resolution, a grouped key-inputs summary, edited-assumption deltas, this methodology text, and a disclaimer — and hands it to the browser's print engine (window.print() → "save as PDF"). No PDF library: the browser already does pagination and vector text, so the document stays searchable and copyable. The Monte Carlo fan is included when a batch has completed this session and omitted with a note otherwise. Nothing is uploaded anywhere; the report is built and printed entirely on this machine.
PRO TIER & LICENSE: four features are Pro — the plan vault, plan history, compare, and PDF export; during the alpha they are free and badged as such. Everything else in the app is free forever and structurally cannot be gated (features outside the Pro registry never reach the license check's false branch). The license is a signed key verified offline: an Ed25519 signature checked against an embedded public key via WebCrypto on this machine — the app makes zero network requests it didn't make before, holds no accounts, and sends nothing anywhere. A missing or expired key locks only the creation of new Pro artifacts (save-as, new checkpoints, compare runs, PDF export); existing vault plans stay listed, loadable, and JSON-exportable, and history stays restorable — your data is never hostage to a key.
NOT MODELED: city/municipal income taxes (NYC/Yonkers, Ohio & Alabama cities), state AMTs, narrow state credits beyond the personal/dependent/senior exemptions and credits now in the engine, AGI-phased standard deductions (AL), federal-income-tax deductibility (AL/LA/MO/MT/OR), partial Social-Security taxation for under-65 filers in a few states, VT property-tax income adjustment, MA senior circuit breaker, sequence-of-returns risk beyond Monte Carlo and the §13 crash stress test, 20% top LTCG rate. Planning sketch, not tax advice.