fire-planner/CONTEXT.md
Viktor Barzin edb4d11352
Some checks are pending
Build and Push / lint-and-test (push) Waiting to run
Build and Push / build (push) Blocked by required conditions
Build and Push / deploy (push) Blocked by required conditions
Build and Push / notify-failure (push) Blocked by required conditions
feat(fire-target): per-Case FIRE-number solver for the retirement countdown
Add a Monte-Carlo "FIRE number" solver so the wealth dashboard can show a £
countdown to retirement across life-stage cases, in today's money.

Viktor wants to see, per country, how far his net worth is from being able to
retire for good under three cases — Solo (his spend ×1.5), Household (+Anca
×1.5), Family (+2 kids) — with cost-of-living re-scaling per country and a 99%
Guyton-Klinger success bar.

- spend_model: per-Case real-GBP spend, COL-scaled (rent + non-rent essentials
  scale by country; Holidays fixed), ×1.5 safety. Constants sourced live from
  actualbudget (Viktor) / on-record (Anca).
- geo: city -> tax jurisdiction (nomad fallback).
- fire_target: binary-search the smallest LIQUID net worth where GK reaches the
  bar; pension modelled as a tranche unlocking at ~57, kids ramp + optional home
  as cashflows. New fire_target table (migration 0007) + idempotent upsert.
- recompute-fire-targets CLI: solve every Case x country and persist for Grafana.
- CONTEXT.md glossary + ADR-0001 (why MC-threshold on liquid NW, not 25x spend).

Reuses the existing simulator unchanged (its cashflow hooks already supported
pension/kids/home). 345 tests pass; mypy + ruff clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 11:49:23 +00:00

43 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FIRE Planner — Context
A personal FIRE engine: a Monte-Carlo retirement-success simulator plus a live
"can I retire yet?" countdown that tracks net worth against per-life-stage targets.
## Language
**Case**:
A named life-stage the countdown tracks. Solo (Viktor only), Household (Viktor +
Anca), Family (Household + 2 kids). Each Case is a real-GBP annual spend.
_Avoid_: scenario (reserved for the Cartesian simulator row — jurisdiction ×
strategy × leave-year × glide).
**FIRE number / Target NW**:
The smallest liquid net worth (real GBP, country-specific) at which a Case's
Guyton-Klinger plan reaches the bar. Computed by Monte-Carlo threshold, not a
fixed SWR multiple.
_Avoid_: goal, magic number, the number.
**The bar**:
The Monte-Carlo success probability that counts as "can retire" — 99%.
**Countdown**:
Target NW current liquid NW, in real GBP (today's money). Rendered with
progress %, projected date, and runway.
**Bridge pot / liquid NW**:
Assets spendable before the workplace pension unlocks (~57). Funds the early
sequence-risk years. The pension is excluded from it and modelled as a tranche
that joins later.
_Avoid_: net worth (which includes the locked pension).
**COL-driven spend**:
Spend that re-scales by a country's cost of living — rent (by 1-bed rent ratio)
and non-rent essentials (by the no-rent basket ratio), plus kids' costs.
_Contrast_: **Fixed spend** — Holidays, globally priced, unchanged by country.
**Safety multiplier**:
The ×1.5 padding Viktor applies on top of measured real spend.
**Re-entry trigger**:
The written rule — take paid work if the portfolio is below £1.0M for two
consecutive quarters. A guardrail, surfaced on the dashboard, not a failure.