fire-planner/tests
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
..
fixtures/reddit examples: 5 hand-curated fixtures + parametrized regression suite 2026-05-28 22:36:49 +00:00
__init__.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
conftest.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_actualbudget.py whatif: live data refresh, inflation-adjusted spending, legend fix 2026-05-10 11:27:22 +00:00
test_api_cashflow.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
test_api_examples.py examples: /api/examples + /api/examples/summary router 2026-05-28 22:39:47 +00:00
test_api_life_events_goals.py api: expand FastAPI surface for scenarios, networth, life-events, goals, simulate 2026-05-09 21:48:36 +00:00
test_api_networth.py fire-planner: filterable date range on the home-page history chart 2026-05-28 09:04:58 +00:00
test_api_networth_refresh.py fire-planner: lazy-refresh /networth from wf_sync (default TTL 1d) 2026-05-27 18:21:12 +00:00
test_api_progress.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
test_api_scenarios.py fire-planner: UX review pass 1 — fix sidebar/route/PATCH/badges issues 2026-05-10 17:17:55 +00:00
test_api_simulate.py examples: simulator response gains examples_overlay block 2026-05-28 22:45:15 +00:00
test_api_spending.py whatif: live data refresh, inflation-adjusted spending, legend fix 2026-05-10 11:27:22 +00:00
test_api_spending_profile.py fire-planner: Wave 2 chart-first — flex spending, categorised life 2026-05-10 16:49:04 +00:00
test_api_year_stats.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
test_cli.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_col.py col: simulator auto-adjusts spending to local prices via Numbeo+Expatistan 2026-05-22 14:14:57 +00:00
test_db_schema.py schema: add life_event, retirement_goal; extend scenario with kind/parent 2026-05-09 21:36:58 +00:00
test_e2e.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_examples_cli.py examples: orchestrator + click CLI (ingest sub-command) 2026-05-28 22:33:41 +00:00
test_examples_filters.py examples: regex pre-filter (MONEY_RE + LOCATION_RE) 2026-05-28 22:14:59 +00:00
test_examples_fixtures.py examples: 5 hand-curated fixtures + parametrized regression suite 2026-05-28 22:36:49 +00:00
test_examples_llm_extract.py examples: disable qwen3 thinking output in llama-swap requests 2026-06-05 08:40:25 +00:00
test_examples_models.py examples: FireExample ORM class + round-trip test 2026-05-28 22:09:23 +00:00
test_examples_praw_source.py examples: async PRAW wrapper → RawPost 2026-05-28 22:16:53 +00:00
test_examples_service.py examples: service.upsert_example + summary_for_country 2026-05-28 22:28:53 +00:00
test_fire_target.py fix(fire-target): Family/home targets monotonic (kills Family==Household) 2026-07-01 22:42:34 +00:00
test_fire_target_writer.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
test_fire_targets_cli_helpers.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
test_flex_spending.py fire-planner: Wave 2 chart-first — flex spending, categorised life 2026-05-10 16:49:04 +00:00
test_geo.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
test_goals_eval.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
test_income_streams.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
test_ingest_wealthfolio_pg.py ingest: switch wealthfolio to pg-sync mirror reads 2026-05-09 21:33:48 +00:00
test_life_events.py engine+api: plumb life events into the simulator 2026-05-09 22:30:33 +00:00
test_reporters_pg.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_returns.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_returns_wealthfolio.py returns: 3 models — Shiller bootstrap (default), manual %, Wealthfolio history 2026-05-10 01:04:25 +00:00
test_scenarios.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_simulator.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_simulator_col_integration.py col: simulator auto-adjusts spending to local prices via Numbeo+Expatistan 2026-05-22 14:14:57 +00:00
test_simulator_events.py fire-planner: life-event spending bumps now reflected in fan + auto- 2026-05-10 19:17:57 +00:00
test_simulator_fixed_rates.py fire-planner: ProjectionLab parity Wave 1 — tabbed shell, year stats, goals, 2026-05-10 12:49:44 +00:00
test_simulator_flex.py fire-planner: Wave 2 chart-first — flex spending, categorised life 2026-05-10 16:49:04 +00:00
test_spend_model.py feat(fire-target): per-Case FIRE-number solver for the retirement countdown 2026-06-28 11:49:23 +00:00
test_spending_plan.py strategies: spending input is honoured + new "Custom" preset with guardrails 2026-05-10 01:21:55 +00:00
test_strategies.py strategies: spending input is honoured + new "Custom" preset with guardrails 2026-05-10 01:21:55 +00:00
test_tax_base.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_tax_other_regimes.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
test_tax_uk.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00