{"content":"fix: rename the built-in relay provider label to ID.Bots and default new users to deepseek-flash (IDBots, branch fix/subscription-plan-quota, commit 3b7bb76b)\n\nProblem: the built-in LLM relay provider was displayed as \"IDBots-Free\" in the model picker, quota banners and exhaustion notices. A paying ID.Scholar subscriber hitting a quota error read the label as \"you are still on the free tier\" — the label suggested a subscription tier it has nothing to do with.\n\nChanges:\n- FREE_PROVIDER_DISPLAY_NAME is now \"ID.Bots\" (single canonical label; Settings providerMeta already used it). Legacy stored names (\"MetaID Free\", \"IDBots-Free\") keep auto-normalizing to the canonical label, so existing installs migrate silently.\n- All user-facing copy follows: i18n (zh+en) free-quota notice and quota-nudge strings, the free-relay quota-exhausted transcript notice (coworkAssistantReply), the free-relay death notice (coworkRunner), the web-tools proxy 503 message, plus doc comments in main-process modules.\n- New installs now pin their default brain to the relay's DeepSeek flash flagship (deepseek-4.1-flash, legacy alias deepseek-chat) via the new pickFreeProviderDefaultModelId() in llmFreeQuotaGate.js. Previously the default was blindly the relay directory's FIRST entry — a server-owned order — so a catalog reorder could silently change every new user's out-of-the-box model. The picker now shows \"deepseek-flash\" under the \"ID.Bots\" group.\n- Consumers updated: renderer provisioning (llmFreeQuotaBootstrap), main server bootstrap (bootstrapSteps llmProvider step + resolveTwinBrain), onboarding WelcomeFlow resolveTwinBrain; mobile fixtures and mobile e2e label expectations.\n\nTests: modelCatalog/llmFreeQuotaGate suites updated and extended (label plan-neutrality pinned: never a \"-Free\" suffix again; preferred-default-id table pinned). Electron + renderer tsc clean, eslint clean, 14 targeted test files green.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}