docs(fire-planner): document FIRE countdown; flag stale playbook
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

README: add spend_model/geo/fire_target modules, the recompute-fire-targets
command, and the fire_target table. PLAYBOOK_VIKTOR.md: add a superseded-notice
header — it anchors on Cyprus/£1.5M/£60k, but the base case moved to Bulgaria,
real NW is ~£1.13M, and the simulator now drains tax (so its regime-invariant
claim is false). Point readers to the live FIRE Countdown dashboard.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Viktor Barzin 2026-06-28 11:53:41 +00:00
parent edb4d11352
commit 6efe3b0c31
2 changed files with 25 additions and 2 deletions

View file

@ -1,5 +1,17 @@
# Viktor's UK-exit playbook — derived from fire-planner runs
> ⚠️ **Partially superseded (2026-06).** This 2026-04-26 run anchors on
> Cyprus, NW £1.5M, and £60k spend. Later decisions moved the base case to
> **Bulgaria**, the real measured NW is **~£1.13M** (not the aspirational
> £1.5M), and the real spend floor is **~£40k** (the £60k was padding). Also,
> the simulator now **drains tax from the portfolio** (since 2026-05), so the
> old "success rate is regime-invariant" claim below is **no longer true**
> jurisdiction now moves the FIRE number. The live, current view is the
> **"FIRE Countdown"** section of the wealth Grafana dashboard, backed by the
> `fire_target` table (see `CONTEXT.md` + `docs/adr/0001`). Treat the tax-
> optimisation playbook (§3) as still useful, but re-validate the headline
> numbers against the dashboard.
**Run date**: 2026-04-26
**Working anchor**: NW £1.5M today, £60k/yr real spending target,
£40k floor, target departure 20272028 (year 1 or 2 from today),

View file

@ -17,9 +17,14 @@ strategy, and "year you break UK tax residency".
- `simulator.py` — vectorised NumPy MC engine
- `scenarios.py` — Cartesian product over (jurisdiction × strategy ×
leave-UK-year × glide)
- `spend_model.py` — per-Case real-GBP spend, COL-scaled per country (the
FIRE-countdown cases: Solo / Household / Family)
- `geo.py` — COL city → tax jurisdiction
- `fire_target.py` — solves each Case's "FIRE number" (smallest liquid NW
where Guyton-Klinger hits the 99% bar); see `docs/adr/0001`
- `app.py` — FastAPI on-demand `/recompute`
- `__main__.py``click` CLI: `ingest`, `simulate`, `recompute-all`,
`migrate`
`recompute-fire-targets`, `migrate`
## Common commands
@ -37,11 +42,15 @@ DB_CONNECTION_STRING=postgresql+asyncpg://... alembic upgrade head
DB_CONNECTION_STRING=... python -m fire_planner ingest
DB_CONNECTION_STRING=... python -m fire_planner simulate --scenario=cyprus-vpw-leave-y3
DB_CONNECTION_STRING=... python -m fire_planner recompute-all
# Solve the FIRE-countdown targets (per Case × country) for the wealth
# Grafana dashboard's "FIRE Countdown" section:
DB_CONNECTION_STRING=... python -m fire_planner recompute-fire-targets --countries all
```
## Schema
Six tables in `fire_planner` schema on `pg-cluster-rw`:
Core tables in `fire_planner` schema on `pg-cluster-rw`:
- `account_snapshot` — daily NW per account (Wealthfolio)
- `scenario` — Cartesian-product scenario definition
@ -49,3 +58,5 @@ Six tables in `fire_planner` schema on `pg-cluster-rw`:
- `mc_path` — sparse storage (top decile, bottom decile, median)
- `projection_yearly` — deterministic point projection per scenario
- `scenario_summary` — denormalised fast-read for Grafana
- `fire_target` — solved FIRE number per (Case × country × with-home) for the
"FIRE Countdown" section of the wealth Grafana dashboard