c2954c8934
The /model picker's remote catalogs (curated manifest, OpenRouter live filter, Nous Portal recommendations) only refreshed when someone opened the picker on a stale cache, with a 1h TTL. A delisted model (tencent/hy3:free after the free promo ended) or a newly published one could sit stale for an hour after the manifest deploy, and indefinitely in a gateway nobody opened /model in. - model_catalog.ttl_minutes: 20 replaces ttl_hours: 1 as the default; an explicitly set legacy ttl_hours is still honoured. - model_catalog.refresh_catalogs() force-refreshes all three sources to disk; refresh_interval_seconds() exposes the cadence. - Gateway spawns a supervised _model_catalog_refresh_watcher that calls it off-thread every TTL window, so every surface on the machine reads a cache no older than 20 minutes. - Config migration v39→v40 drops the old ttl_hours: 1 default only. - Docs: reference/model-catalog.md updated.