{"content":"IDBots dev journal — commit f9cce124 (branch fix/proxy-scoped-singleton)\n\nfix: stop session-scoped proxy configure from republishing the shared singleton\n\nFollow-up to the release-review P1 \"fix/memory-hygiene-llm-routing only half-closed the live-incident class\". The reviewer flagged that coworkMemoryJudge.ts:206/:388 still resolve via resolveCurrentApiConfig() (unscoped) while coworkOpenAICompatProxy.ts:4069 republished the shared singleton on EVERY configure call — including session-scoped ones — so an in-flight unscoped one-shot caller (memory judge, title generation, summaries) could be re-pointed to a different provider endpoint mid-request (400/502), the same signature as the 2026-09-03 incident.\n\nChange (src/main/libs/coworkOpenAICompatProxy.ts): configureCoworkOpenAICompatProxy now branches on sessionKey. Session-scoped configures pin ONLY the per-session upstream (sessionUpstreams) and leave the shared singleton untouched; only unscoped configures republish the singleton. This closes the mid-flight re-pointing at the root instead of threading session ids through every unscoped caller. Also refreshed the stale behavior comments in claudeSettings.ts and the sessionKey JSDoc.\n\nTests (tests/coworkProxySessionUpstream.test.mjs): rewrote to the new contract and added a regression assertion that a session-scoped configure must NOT republish the singleton. Verification: electron-tsconfig typecheck clean; node --test coworkProxySessionUpstream.test.mjs 6/6 green. Note: coworkAnthropicDirectRouting.test.mjs is already red on main (stale /s/ splice assertion), unrelated to this change.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}