Skip to content

v2.0.0

Choose a tag to compare

@LemurTech LemurTech released this 10 Aug 23:58
· 15 commits to main since this release

✨ 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, and EndOfPlan events 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.enabled now 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.