{"record":{"id":"32fdfd821c6e162f","repo":"farion1231/cc-switch","slug":"grok-build-official-provider-was-not-created","errorCode":null,"errorMessage":"Grok Build official provider was not created","messagePattern":"Grok Build official provider was not created","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/lib/query/mutations.ts","lineNumber":56,"sourceCode":"        ...rest\n      } = providerInput;\n\n      if (appId === \"claude-desktop\" && ensureClaudeDesktopOfficialSeed) {\n        await providersApi.ensureClaudeDesktopOfficialProvider();\n        const providers = await providersApi.getAll(appId);\n        const officialProvider = providers[\"claude-desktop-official\"];\n        if (!officialProvider) {\n          throw new Error(\"Claude Desktop official provider was not created\");\n        }\n        return officialProvider;\n      }\n\n      if (appId === \"grokbuild\" && ensureGrokBuildOfficialSeed) {\n        await providersApi.ensureGrokBuildOfficialProvider();\n        const providers = await providersApi.getAll(appId);\n        const officialProvider = providers[GROKBUILD_OFFICIAL_PROVIDER_ID];\n        if (!officialProvider) {\n          throw new Error(\"Grok Build official provider was not created\");\n        }\n        return officialProvider;\n      }\n\n      let id: string;\n\n      if (\n        appId === \"opencode\" ||\n        appId === \"openclaw\" ||\n        appId === \"hermes\" ||\n        appId === \"pi\"\n      ) {\n        if (\n          providerInput.category === \"omo\" ||\n          providerInput.category === \"omo-slim\"\n        ) {\n          const prefix = providerInput.category === \"omo\" ? \"omo\" : \"omo-slim\";\n          id = `${prefix}-${generateUUID()}`;","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/farion1231/cc-switch/blob/0b5da510168914b251481654a568c3ffacd62cf4/src/lib/query/mutations.ts#L38-L74","documentation":"The grokbuild twin of the Claude Desktop seed check: when appId === 'grokbuild' and ensureGrokBuildOfficialSeed is set, the mutation calls providersApi.ensureGrokBuildOfficialProvider(), re-reads all providers, and requires the entry keyed by GROKBUILD_OFFICIAL_PROVIDER_ID. The throw means the seed command completed but the official provider record still is not in the returned map.","triggerScenarios":"ensureGrokBuildOfficialProvider() resolves but providersApi.getAll('grokbuild') has no entry under GROKBUILD_OFFICIAL_PROVIDER_ID — mismatched constant vs persisted ID, rolled-back write, or stale cached read.","commonSituations":"GROKBUILD_OFFICIAL_PROVIDER_ID constant changed without migrating stored data; backend seed filters by a different appId; query cache serving pre-seed data.","solutions":["Inspect the persisted grokbuild providers and verify the record's ID equals GROKBUILD_OFFICIAL_PROVIDER_ID","Align the backend ensure command's written ID with the frontend constant (and migrate old records if it changed)","Invalidate the providers query after seeding before the verification read"],"exampleFix":"// before\nawait providersApi.ensureGrokBuildOfficialProvider();\nconst providers = await providersApi.getAll(appId);\n\n// after\nawait providersApi.ensureGrokBuildOfficialProvider();\nawait queryClient.invalidateQueries({ queryKey: ['providers', appId] });\nconst providers = await providersApi.getAll(appId);","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  await createProvider({\n    appId: 'grokbuild',\n    providerInput: { ensureGrokBuildOfficialSeed: true } as ProviderInput,\n  });\n} catch (error) {\n  if (error instanceof Error && error.message.includes('Grok Build official provider')) {\n    // reload providers and retry once; inspect persisted store if it repeats\n  } else {\n    throw error;\n  }\n}","preventionTips":["Invalidate the providers query after ensureGrokBuildOfficialProvider","Keep GROKBUILD_OFFICIAL_PROVIDER_ID in one shared module","Add a migration whenever the official provider ID changes"],"tags":["providers","seed","invariant","grokbuild","react-query"],"backgroundTag":"missing-seed-data","analyzedSha":"0b5da510168914b251481654a568c3ffacd62cf4","analyzedAt":"2026-08-20T14:29:00.113Z","contentChangedAt":"2026-08-20T14:29:00.113Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}