External OAuth HTTP MCP proof for PR #19380 Head: f12b52dc4849404134813a0dcbb3ce5000116269 Pinned main: 1451e7cb23034d29774338608368a15d8845df36 Fresh isolated Node 24 server and SQLite state per run. OAuth client granted auto-accept-edits; no calling thread. Project creation and settings changes use real WebSocket RPC; tools use the real HTTP MCP transport. Before: only MCP launch handler and OrchestratorMcpService modules are substituted from pinned main; the rest of the server is the rebuilt head. This isolates the fallback behavior and is not a full base binary comparison. After: unmodified rebuilt head. No provider turn started; launches omit a message and return null runId. Persisted schedules are disabled and have zero runs. Owned child servers stopped after each run. BEFORE {"base":true,"externalOAuth":true,"callingThread":false,"tool":"t3_thread_launch","result":{"_tag":"OrchestratorMcpFailure","code":"invalid_request","message":"Pass modelSelection: the project has no default model. orchestrator_capabilities lists providers and models."}} {"base":true,"externalOAuth":true,"callingThread":false,"tool":"schedule_task","result":{"_tag":"OrchestratorMcpFailure","code":"invalid_request","message":"Project 911f1879-63bc-47ba-ba1b-e2dde812b093 has no default model, so this caller cannot pick one for it."}} AFTER {"base":false,"externalOAuth":true,"callingThread":false,"results":[{"label":"environment inherited","launchModel":{"instanceId":"codex","model":"gpt-6.1-sol"},"scheduleModel":{"instanceId":"codex","model":"gpt-6.1-sol"},"runtimeMode":"auto-accept-edits","enabled":false,"runCount":0},{"label":"project override","launchModel":{"instanceId":"codex","model":"gpt-6-sol"},"scheduleModel":{"instanceId":"codex","model":"gpt-6-sol"},"runtimeMode":"auto-accept-edits","enabled":false,"runCount":0}],"explicitModel":{"instanceId":"codex","model":"gpt-6-astra"},"schedulerTables":[{"name":"scheduled_tasks"},{"name":"scheduled_task_webhook_deliveries"},{"name":"scheduled_task_webhook_relay_deliveries"}]}