Latest results
210 of 210 automatic tests passed, and the independent math check passed 17165 checks with 0 failures. Generated 2026-10-17 14:07 UTC.
A passing test shows the app does what we intended under the rules as we read them. It does not prove the rules are modelled perfectly or that the plan suits you. This is an educational tool, not financial, tax or legal advice. Known simplifications are listed in the Limitations section of the manual.
1. The independent math check
A separate script re-does the key sums by hand from the published 2026 rules, without using the app's tax code, on seven very different households, and compares every year:
- A single renter with no Social Security living off a traditional IRA (RMDs, brackets, standard deduction).
- B couple who buy a home at 50 and sell at 75 (home-sale exclusion, mortgage).
- C early retiree at 50 with 72(t) payments and ACA premium credits (muni interest counted in the ACA income).
- D high earner with Roth conversions, IRMAA and estate tax (muni interest counted for IRMAA).
- E UK household (SIPP 25% tax-free, ISA, state pension).
- F yearly tax on dividends and interest: qualified dividends at 15%, interest as ordinary income, 3.8% NIIT, Treasury interest free of state tax, muni interest free of federal tax, and cost basis rising by what is reinvested.
- G a real saved plan (a couple in New Jersey with Roth conversions): federal tax for every year re-worked by hand (Social Security taxation, deductions, brackets, capital-gains rates, NIIT) and RMDs checked against the IRS Uniform Lifetime Table.
It also checks rules that must hold in every year of every plan: every number is a real number, no balance goes below zero, net worth equals assets minus debts, income plus withdrawals cover spending and tax (or a shortfall is reported), the same random seed gives the same Monte Carlo result, and with zero volatility the Monte Carlo matches the average-returns projection.
2. Official sources used
| Rule | Source |
|---|---|
| 2026 federal brackets, standard deduction, capital-gains brackets | IRS Revenue Procedure 2025-32 |
| 2026 retirement-plan limits (401(k) $24,500, total $72,000), Social Security wage base $184,500 | IRS Notice 2025-67 and SSA |
| Net investment income tax (3.8%) | IRS: Net investment income tax |
| Self-employment tax (15.3% on 92.35% of profit) | IRS: Self-employment tax |
| Qualified business income deduction (20%) | IRS: QBI deduction |
| Required minimum distributions and the Uniform Lifetime Table | IRS: RMDs |
| Taxation of Social Security benefits (provisional income, including muni interest) | IRS Publication 915 |
| Medicare IRMAA surcharges (MAGI includes tax-exempt interest) | Medicare.gov |
| ACA premium credit (MAGI includes tax-exempt interest) | HealthCare.gov |
| Treasury interest is free of state income tax; muni interest is free of federal tax | TreasuryDirect / Investor.gov |
| Substantially equal periodic payments (72(t)) | IRS: SEPP FAQ |
3. Every automatic test
Grouped by area. ✓ means it passed on the date above.
Add-on tools: 11/11 passed
- ✓ home bought in the past: friendly info note (not a warning) with the year, no down payment
- ✓ loan term counts from the buy age: years left = term − (age now − buy age)
- ✓ no buy age: the loan term is the years left from today
- ✓ loan term already over but a balance entered: warning, repaid in the first year
- ✓ survivor % > 0: pension pays for life, then that % to the spouse for life with the same COLA; End age ignored
- ✓ without a spouse, or with survivor 0%, End age still applies
- ✓ event schedule: one time, every N years M times, every year M times
- ✓ old "For years" events map to the same schedule (back-compat)
- ✓ car every 10 years, 3 times: charged at 60, 70, 80 only
- ✓ large repeating cost gives a gentle note, not a warning; one-time and college do not
- ✓ plain-language messages: no jargon like "out of range; using" or "sale ignored"
Batch 2 features: 15/15 passed
- ✓ escalation: +2 points of salary a year up to 15%, then held at 15%
- ✓ escalation: blank cap means 15%; no escalation = unchanged results
- ✓ escalation: already at/above the cap keeps the entered contribution
- ✓ escalation: never above the IRS limit; info note says when the limit is reached
- ✓ escalation: needs a salary (else the entered amount); nothing after retiring
- ✓ claimOptions: 1960+ has 9 ages with reduced / full / delayed / maximum labels
- ✓ claimOptions: 1959 FRA 66 y 10 m gets its own option; 1950 FRA 66
- ✓ quickCheck: math adds up and ON/NOT ON TRACK follows the target
- ✓ quickCheck: reasons when it cannot apply
- ✓ return presets: values, risk labels, Custom, Bank
- ✓ nextSteps: personalised, quantified, sorted and repeatable
- ✓ share: compressed link round-trips exactly, without progress history
- ✓ share: rejects junk links with a clear error
- ✓ Open Social Security link: identical to the example for the same couple
- ✓ Open Social Security link: single, unknown gender/date, SSDI, filed, working
Batch 3 features: 10/10 passed
- ✓ money lasts: whole plan, or years + months until it runs short
- ✓ spending quality: fixed spending is steady; % of portfolio swings
- ✓ data modes: year range for history and blocks, steady returns
- ✓ spending floor and ceiling work for variable methods (floor can be guaranteed income)
- ✓ Bernicke: phased spending falls a little every year (not below half)
- ✓ Roth check: tax now, bracket jump, pro-rata, verdict
- ✓ SS break-even: amounts follow claim factors; later claims catch up around 77–83
- ✓ RMD table rows match the projection
- ✓ save the max: limits, catch-up, paychecks
- ✓ solvers: savings needed and earliest retirement meet the target
Batch 4 features: 14/14 passed
- ✓ BETR reproduces the Vanguard paper (Fig 2, Fig 5, Fig 6b A vs B)
- ✓ BETR: Fig 1 values, the Jill example and the verdict
- ✓ tax torpedo: next-dollar rate equals the bracket for plain wage income; parts sum to the total
- ✓ tax torpedo: Social Security taxation pushes the real rate above the bracket (single retiree, SS only)
- ✓ tax torpedo: an IRMAA step shows as a spike two years later
- ✓ bracket fill: deduction + used brackets = income; room in the current bracket
- ✓ failure severity: fixed plans pay 100% unless short; guardrails "succeed" but pay less than planned
- ✓ ending stats and legacy chance; histogram counts all runs
- ✓ SSA 2023 period life table: survivors and life expectancy at 65 match the published table
- ✓ rich, broke or dead: bands sum to 100% each year; running out while alive ≤ running out by plan end
- ✓ survivor spending: living costs drop to the chosen % once one partner has died
- ✓ one-time windfalls are saved even when extra pay is spent (bug fix)
- ✓ death-in-every-year sweep: verdict, insurance need shrinks over time and makes the plan work
- ✓ Social Security trust-fund cut: benefits from the cut year are 17% lower, earlier ones unchanged
Roth clock, break-even and similar tools: 7/7 passed
- ✓ healthcare parts add up to the healthcare total every year
- ✓ long-term care: cost for the chosen years only, and can be paid by selling the home
- ✓ extra income rule: share saved changes savings, 0% saves nothing
- ✓ spending once retired (%) scales retirement expenses only
- ✓ what-ifs: each applies, leaves the original plan untouched, and moves results the expected way
- ✓ what-if: early/late retirement shifts retirement by 3 years; Roth what-if converts $150k over 3 years
- ✓ custom withdrawal order is honored
Core engine: taxes, Social Security, RMDs, withdrawals, Monte Carlo: 61/61 passed
- ✓ federal tax: single $50k wages (2026 brackets, std deduction 16,100)
- ✓ federal tax: MFJ $100k
- ✓ federal tax: top of 24% bracket single
- ✓ LTCG fully in 0% bracket and stacking into 15%
- ✓ NIIT applies above $200k single
- ✓ senior deductions (65+, OBBBA bonus 2026)
- ✓ Social Security taxation tiers
- ✓ state tax with retirement exemption
- ✓ IRMAA tiers
- ✓ RMD start ages and amounts (SECURE 2.0)
- ✓ Social Security FRA and claiming factors
- ✓ PIA bend-point formula
- ✓ spousal and survivor benefits
- ✓ SS optimizer: long life favors delay
- ✓ VPW rate
- ✓ simulation: deterministic plan runs, balances non-negative, taxes positive
- ✓ simulation: zero-return toy plan conserves money
- ✓ Roth conversion fills bracket and moves money to Roth
- ✓ Monte Carlo: reproducible with seed, success in [0,1], ordered percentiles
- ✓ Monte Carlo: zero volatility equals deterministic
- ✓ Monte Carlo: more spending lowers success
- ✓ historical backtest covers 1928-2025 cycles
- ✓ FIRE math
- ✓ budget CSV import
- ✓ SS earnings test reduces benefits while working before FRA
- ✓ block bootstrap and max-spending solver
- ✓ glide path and fees lower deterministic wealth vs none
- ✓ state brackets: California graduated + exemption credit; all 51 jurisdictions present
- ✓ federal itemized and non-itemizer charitable deduction
- ✓ non-US regimes: UK, Canada, Australia
- ✓ estate tax: federal with portability, state upper bound
- ✓ ACA premium tax credit and 400% FPL cliff
- ✓ IRS contribution limits (2026) and capping in simulation
- ✓ SS earnings test withholding is repaid via FRA recomputation
- ✓ 72(t) SEPP: amortization payment, fixed and penalty-free
- ✓ QCDs satisfy RMDs and reduce AGI
- ✓ HELOC and reverse mortgage act as last-resort funding
- ✓ capital-gains harvesting steps up basis tax-free in the 0% band
- ✓ tax optimizer explores 40 combinations and beats or ties current
- ✓ consumption smoothing finds max constant discretionary level
- ✓ assumption sets ordered pessimistic < base < optimistic
- ✓ holdings analysis: weighted expense ratio and fee drag
- ✓ progress vs plan: actual at start equals projection
- ✓ budgeting: rules, merge/dedupe, recurring, variance
- ✓ RE: buy age in the past = already owned, no purchase outflow, counted in starting net worth
- ✓ RE: future purchase pays down payment + closing costs from accounts, once
- ✓ RE: amortization with payment matches closed form; payment stops at payoff
- ✓ RE: sale at sell age — selling costs, mortgage payoff, proceeds to accounts, carrying costs stop
- ✓ RE: capital gain on sale with $250k exclusion (single) — hand-calculated federal tax
- ✓ RE: $500k exclusion when married; rental (non-primary) gets none
- ✓ RE: appreciation compounds until the sale year and stops after
- ✓ RE: sell age not after buy age → sale ignored with warning
- ✓ RE: sell age past life expectancy keeps the home in the estate
- ✓ RE: sale proceeds are saved even when surplus is set to "spend" while working
- ✓ RE: buy then sell — purchase cash, sale, no residual equity, Monte Carlo runs
- ✓ Roth "fill 22%" counts this year's 401(k) withdrawals: taxable income lands exactly at the 22% top
- ✓ Roth "stay under IRMAA tier 1" keeps MAGI under the tier after spending withdrawals
- ✓ surplus is never deposited into a 401(k): a taxable account is opened instead
- ✓ NJ retirement exclusion (62+): $100k MFJ under $100k income, phased 50%/25% to $150k, none above
- ✓ input sanity: already-retired salary warning; survivor pension pays for life (End age ignored); repeating cost note
- ✓ user NJ plan: hand-checked first year (wages, federal, NJ, mortgage, balances)
import.test.js: 5/5 passed
- ✓ opens the plan that was current in the file, not the first one
- ✓ same plan again is not duplicated; a changed one is added as a copy and nothing is overwritten
- ✓ normalize runs before comparing (an older file is still recognised as the same plan)
- ✓ a bare plan file, junk entries and empty files
- ✓ the user's fixture file opens its own plan
Runs the independent math check below: 1/1 passed
- ✓ independent math check (5 plans, key years + invariants) passes
Fixed reference plans (results must not drift): 11/11 passed
- ✓ huge life expectancy / birth year / start year: horizon capped, simulate fast, note shown
- ✓ SS optimizer does not hang with huge life expectancy or claim age
- ✓ huge / text returns, stock % and rates are clamped: no NaN or Infinity anywhere
- ✓ negative balance / contribution / match are treated as 0 (no negative balances)
- ✓ blank cost basis % means 100% basis (no phantom gains)
- ✓ default plan shows no warnings (college event no longer flagged as recurring)
- ✓ life expectancy below current age: person left out with a warning; everyone dead = 0 rows, no crash
- ✓ retire age beyond life expectancy is allowed (works whole plan) with a warning
- ✓ astronomical amounts (1e308) are capped at 1 trillion with a note; outputs stay finite
- ✓ analyzeHoldings sanitizes hostile holdings (no Infinity / negative values)
- ✓ seeded Monte Carlo is repeatable; zero volatility equals deterministic
Disability benefits and the saved test plan: 12/12 passed
- ✓ SSDI at 53: no claiming-age warning, full benefit paid now
- ✓ SSDI blank start age = already receiving; blank amount = PIA
- ✓ SSDI converts at FRA with no reduction and no delayed credits
- ✓ SSDI has no earnings test, but wages above SGA trigger a warning
- ✓ survivor benefit is based on the SSDI PIA; spousal top-up uses it too
- ✓ widowed SSDI recipient switches to the larger survivor benefit at FRA
- ✓ Medicare starts 24 months after SSDI begins (any age)
- ✓ SSDI is taxed like Social Security
- ✓ SS optimizer skips claiming-age search for SSDI recipients
- ✓ non-SSDI claim age under 62: helpful hint, 62 used, stored plan untouched (old JSON back-compat)
- ✓ non-US public pension may start at 60 (e.g. CPP) without a warning
- ✓ user's exported plan is unchanged (back-compat): key audited figures
Flexible (TPAW-style) spending: 20/20 passed
- ✓ TC-1 risk tolerance → RRA
- ✓ TC-2/3/4 Merton allocation and tilt
- ✓ TC-5 risk by age
- ✓ TC-6/7/8 amortization and present value (docs examples)
- ✓ TC-9 early career: allocation capped at 100%
- ✓ TC-10 SWR default rate
- ✓ TC-11 elasticity scaling
- ✓ TC-A retired, $1M, 30 years
- ✓ TC-B income counts as bonds
- ✓ TC-C working years then retirement
- ✓ TC-D essential spending and legacy
- ✓ TC-D2 a crash in year 0 lowers later spending proportionally
- ✓ TC-E spending floor until money runs out
- ✓ TC-F SPAW
- ✓ TC-G SWR runs out at year 25
- ✓ TC-P properties on a mixed case
- ✓ §8.3 sanity targets vs the live TPAW Planner (±12%, ±8 points for stocks)
- ✓ history sampling: adjusted means, no-wrap historical sequences, cycle and constant modes
- ✓ plan mapping: reuses Social Security, pensions, contributions; essentials only once withdrawals start
- ✓ plan mapping: extras, legacy, floor/ceiling per month, after-tax option, SWR modes
Variable percentage withdrawal: 4/4 passed
- ✓ VPW table matches the Bogleheads wiki at every checked age and mix (1 decimal)
- ✓ VPW: 60/40 return is 3.76%; cap 10% applies from the late 80s; $1.2M at 65 with 30/70 = $52,800
- ✓ VPW in the plan: first-year budget uses n = 100 − age and the account mix
- ✓ VPW income option spends more before Social Security starts, and no less afterwards in the first year
Wave 2 features: 11/11 passed
- ✓ 2026 limits: QCD $111,000 and QLAC $210,000
- ✓ annuity pricing from the SSA life table behaves sensibly
- ✓ annuity purchase: premium leaves savings, lifetime income follows, survivor share continues
- ✓ QLAC: capped at the IRS limit, comes from IRA money, lowers required withdrawals until it starts at 85
- ✓ stress tests: a crash at retirement hurts, switched-off rows do nothing, inflation shocks raise prices
- ✓ back-to-work rule: triggers once when savings fall, adds pay for N years, respects the age limit
- ✓ cost-of-living types
- ✓ pension: break-even age, average value and joint-and-survivor trade-off
- ✓ sensitivity map: inputs move results the right way and never change the plan
- ✓ optimizer: robust score, near-tie prefers the simpler plan, reasons in plain words
- ✓ new what-ifs: crash at retirement and buying an annuity
Wave 3 features (tax-loss harvesting and more): 11/11 passed
- ✓ inherited IRA: 10-year rule variants, stretch, no penalty, never converted
- ✓ divorced-spouse Social Security (single plans)
- ✓ tax-loss harvesting: losses carry forward, offset gains and $3,000 a year, basis drops
- ✓ charitable bunching: k years of gifts every k years, same total, not with QCD ages
- ✓ household-size smoothing: children leaving and a death lower the smoothed amount
- ✓ Roth 5-year clock: each conversion matures after 5 years or at 59½; early use flagged
- ✓ safe floor ≤ average-returns level; the stocks-to-zero path; legacy lowers the level
- ✓ lifetime balance sheet adds up
- ✓ safe withdrawal rate by start year: 1966 is a hard start; plan rate
- ✓ years to FI: a bigger target takes longer
- ✓ password-protected export: round trip, wrong password, no plain text
Wave 4: tax on dividends and interest, munis, bond ladders, self-employment, asset location: 17/17 passed
- ✓ dividends and interest: split into qualified and ordinary, counted in AGI
- ✓ basis rises by the reinvested amount (later sales realise smaller gains)
- ✓ federal tax: NIIT on interest above the threshold; qualified dividends at capital-gains rates
- ✓ munis: free of federal tax but counted in Social Security provisional income and MAGI
- ✓ Treasury interest is free of state tax
- ✓ bond ladder: cost is the present value of each rung; TIPS pay inflation-adjusted amounts
- ✓ Solo 401(k) and SE tax for $150k profit (2026)
- ✓ self-employed person: SE tax and QBI deduction appear; QBI phases out at high income
- ✓ asset location: same total stocks, options deduplicated, current first
- ✓ learn content: concepts have sources and figures; tours point at real tabs
- ✓ tax drill-down adds up to the year table
- ✓ On/off rows: a switched-off row is the same as deleting it
- ✓ withhold-the-COLA policies: help in bad markets, match the 4% rule with no losing years
- ✓ strategy check-in: on plan = steady; far behind = spend less
- ✓ required return: the found shift reaches the target
- ✓ calculators: freedom days, savings gap, payouts, early withdrawal, match loss
- ✓ AI summary: anonymized, rounded, includes results