9c0cd1add2
Portal reasoning capabilities were held only in memory, so a process that had not yet fetched them answered "unknown" — and on that answer the Nous profile drops the disable rather than risk a 400. A short-lived process (`hermes -p`, a cron job, a freshly booted gateway) is always in that state, so every one of those runs silently ignored "thinking off" and billed the user for reasoning they had turned off. The parsed catalog is now mirrored to `cache/reasoning_caps.json`, keyed by the URL it came from, and hydrated on a cold lookup without touching the network. Every picker and pricing fetch already pulls that same document, so they seed the mirror for free. The catalog URL itself now resolves through the same ladder as the rest of the Nous catalog reads (`NOUS_INFERENCE_BASE_URL` → credential base → production) instead of being pinned to production, which had a staging profile deciding the reasoning-mandatory question from prod's answers. Keying the mirror by URL keeps those deployments apart.