1987b5e461
Main no longer clears credentials in web_server's _apply_main_model_assignment; every /model surface (CLI, gateway, TUI, dashboard) persists through model_selection_config_updates(), which only dropped api_key/api on a route change. Custom-endpoint activation writes model.key_env with NO inline key, so a pointer-only model block survived every provider switch and routed the new provider's requests to the old endpoint's env var (the PR's Bug 5) — live repro on main: activate custom_myep -> /api/model/set openrouter left key_env: CUSTOM_MYEP_API_KEY on disk. Port the PR's web_server hunk to the one shape function: key_env/api_key_env clear under the same route-changed rule as api_key (same-route re-pick keeps them). The dashboard's _resolve_assignment_credentials re-adds the TARGET provider's own pointer after this, so custom->custom still ends with the new endpoint's key_env. One invariant test in the one-shape suite.