fire-planner/fire_planner
Viktor Barzin 1b8809a01b
Some checks failed
Build and Push / lint-and-test (push) Has been cancelled
Build and Push / build (push) Has been cancelled
Build and Push / deploy (push) Has been cancelled
Build and Push / notify-failure (push) Has been cancelled
fix(fire-target): Family/home targets monotonic (kills Family==Household)
The recompute solved each Case's FIRE number with an independent binary search,
so Monte-Carlo path noise + the coarse £15k tolerance made Family (Household + 2
kids) tie or even UNDERCUT Household (6 hard inversions + 5 exact ties across the
22 countries) — the ~£20k kids cost quantised to ~£0.

Now solve the Cases in increasing-cost order and lower-bound each by the previous
Case's target on the SAME return paths: a heavier Case (more spend / +kids /
+home) can never need less net worth than a lighter one, so
Solo <= Household <= Family <= Family+home holds by construction. tol tightened
15k -> 1k so the genuine but small kids/home increment resolves instead of
snapping to the previous grid step. Kids/home were already modelled correctly
(verified) — this is purely a solver-resolution + monotonicity fix.

Found + verified via the fire-countdown flaw-hunt workflow. 346 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 22:42:34 +00:00
..
api examples: simulator response gains examples_overlay block 2026-05-28 22:45:15 +00:00
col col: simulator auto-adjusts spending to local prices via Numbeo+Expatistan 2026-05-22 14:14:57 +00:00
examples examples: disable qwen3 thinking output in llama-swap requests 2026-06-05 08:40:25 +00:00
ingest fire-planner: lazy-refresh /networth from wf_sync (default TTL 1d) 2026-05-27 18:21:12 +00:00
reporters feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
returns returns: 3 models — Shiller bootstrap (default), manual %, Wealthfolio history 2026-05-10 01:04:25 +00:00
strategies strategies: spending input is honoured + new "Custom" preset with guardrails 2026-05-10 01:21:55 +00:00
tax Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
__init__.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
__main__.py fix(fire-target): Family/home targets monotonic (kills Family==Household) 2026-07-01 22:42:34 +00:00
actualbudget.py whatif: live data refresh, inflation-adjusted spending, legend fix 2026-05-10 11:27:22 +00:00
app.py examples: /api/examples + /api/examples/summary router 2026-05-28 22:39:47 +00:00
db.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
fire_target.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
flex_spending.py fire-planner: Wave 2 chart-first — flex spending, categorised life 2026-05-10 16:49:04 +00:00
fx.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
geo.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
glide_path.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
goals_eval.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
income_streams.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
life_events.py fire-planner: Wave 2 chart-first — flex spending, categorised life 2026-05-10 16:49:04 +00:00
scenarios.py strategies: spending input is honoured + new "Custom" preset with guardrails 2026-05-10 01:21:55 +00:00
simulator.py fire-planner: life-event spending bumps now reflected in fan + auto- 2026-05-10 19:17:57 +00:00
spend_model.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00