Repository navigation
v2.0.0
✨ v2.0 is here: an event-driven planning workflow
v2 changes how you model the big timeline decisions. Retirement, Social Security claiming, and each person's modeled end of plan are no longer buried in per-person settings — they're explicit, editable events on one shared timeline, managed in a visual Events workspace.
The Scenario Setup panel grew from three tabs to six — Metadata · Social Security · Income & Contributions · Accounts · Events · Raw TOML — and now exposes the full supported settings surface: Social Security benefit tables, per-person income and contribution controls, accounts and liabilities, advanced tax/spending/RMD and simulation settings. For normal scenario setup, direct TOML editing is no longer required.
🛟 Migration assistance
Existing v1 scenarios keep running with legacy fallbacks, but to get full v2 behavior (Social Security income, modeled plan boundaries) they should be migrated. The Setup Panel shows a migration banner on any scenario still in the old format, listing exactly what's missing and linking to step-by-step instructions in the User Guide: back up your scenarios/ folder, run scripts/migrate_v2.py (preview safely with --dry-run), and verify in the Events tab. The script is idempotent, so re-running is harmless.
What's new
- Event-driven timeline —
Retire,SocialSecurity, andEndOfPlanevents replace the old per-person timeline fields; age-based forms compute the year for you - Events workspace — add, edit, delete, enable/disable, and sort every event from the Setup Panel
- Social Security tab — benefit-by-age table editor per person, with automatic benefit lookup at the claiming age (no more stored snapshots that silently go stale)
- Income & Contributions tab — per-person pay, contribution method (flat or percent-of-gross), employer match, IRA routing, 401(k) split, and ownership shares
- Liabilities CRUD — add, edit, and delete liabilities in the Accounts tab, with synthetic balances kept in sync
- Advanced settings — spending baseline, taxes and RMDs, assumptions, and full simulation/Monte Carlo controls (render modes, run count, seed, volatility, historical returns)
- Read-only sample scenarios — bundled samples can't be overwritten; clone them to make them yours
- Projection freshness — every projection page shows the version tag and a render timestamp
- Single-person support hardening — Person 2 settings can no longer leak into single-person scenarios; survivor-only controls are couple-only
Bug fixes since v1.8.4
- Single-person scenarios are no longer misdetected as couples by the Setup Panel
- Sample scenarios are write-protected server-side (every edit path rejected) while still allowing re-render
event.enablednow defaults consistently to true across the engine- Percentage inputs no longer show floating-point artifacts (e.g.
3.5000000000000004) - Removed the dark shadow artifact that scrolled across projection table headers
- Setup Panel API errors now show the real message instead of a generic failure
- Fixed the Setup Panel render subprocess using the wrong Python on Windows
- Removed dead editor fields (BuyHome mortgage fields, Education person scope) that the model never read
- Projection subtitle no longer implies Monarch data for synthetic or imported scenarios
- Stored Social Security benefit values no longer go stale — benefits are resolved live and validated before a run
Tests: 238 passing, 1 skipped; the CI test gate runs on every push to main and every pull request.