v2.22.0
v2.22.0
Sidebar pick-on-map — the map no longer sets route points on every click. Arm a Pick on map button in the sidebar (From / To, or Add stop on map once a route exists); the next single map click sets that point and disarms. Escape cancels. Route drag-to-reshape is unchanged.
Stale-while-revalidate cache — TTLCache now serves the cached value instantly when a key's TTL lapses and refreshes it in the background, so /api/stats and /api/mapdata (and the MCP feeds) never block ~1.5–2s on an upstream refetch. Only a cold key still fetches on the request path (covered by the boot prewarm); a failed refresh keeps serving the last good value, flagged stale, until max_serve.
Verified: full suite 238 passing (incl. 2 new SWR tests), ruff clean, Playwright pick-on-map smoke 6/6.