{"record":{"id":"c0f3b05f37bf23cc","repo":"openclaw/openclaw","slug":"buzz-account-params-accountid-did-not-become","errorCode":null,"errorMessage":"buzz account \"${params.accountId}\" did not become ready; last status: ${JSON.stringify(lastStatus)}","messagePattern":"buzz account \"(.+?)\" did not become ready; last status: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"critical","filePath":"extensions/buzz/src/qa/adapter.runtime.ts","lineNumber":47,"sourceCode":"  const pollIntervalMs = params.pollIntervalMs ?? 500;\n  const startedAt = Date.now();\n  let lastStatus: unknown;\n  while (Date.now() - startedAt < timeoutMs) {\n    const payload = (await params.gateway.call(\n      \"channels.status\",\n      { probe: false, timeoutMs: 2_000 },\n      { timeoutMs: 5_000 },\n    )) as { channelAccounts?: Record<string, Array<Record<string, unknown>>> };\n    const status = payload.channelAccounts?.buzz?.find(\n      (entry) => entry.accountId === params.accountId,\n    );\n    lastStatus = status;\n    if (status?.running === true && status.restartPending !== true) {\n      return;\n    }\n    await sleep(pollIntervalMs);\n  }\n  throw new Error(\n    `buzz account \"${params.accountId}\" did not become ready; last status: ${JSON.stringify(lastStatus)}`,\n  );\n}\n\nexport async function createBuzzQaTransportAdapter(\n  context: FactoryContext,\n): Promise<AdapterDefinition> {\n  const options = context.adapterOptions ?? {};\n  const requestedCredentialSource = options.credentialSource?.trim().toLowerCase() || \"file\";\n  if (requestedCredentialSource !== \"file\" && requestedCredentialSource !== \"convex\") {\n    throw new Error('Buzz QA credential source must be \"file\" or \"convex\".');\n  }\n  const credentialFile = options.credentialFile?.trim();\n  if (requestedCredentialSource === \"file\" && !credentialFile) {\n    throw new Error(\"Buzz QA file credentials require --credential-file <path>.\");\n  }\n  if (requestedCredentialSource === \"file\" && options.credentialRole?.trim()) {\n    throw new Error(\"Buzz QA --credential-role is only valid with --credential-source convex.\");","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/openclaw/openclaw/blob/01804a75319da4b69c9ab98ceaa30477e22b8c0b/extensions/buzz/src/qa/adapter.runtime.ts#L29-L65","documentation":"Thrown by waitForBuzzChannelRunning after polling channels.status for up to 60 seconds (default) without the Buzz account reaching running===true and restartPending!==true. This is a readiness gate in the Buzz QA adapter's waitReady hook — the relay-connected SUT account must be live before QA scenarios can exchange messages.","triggerScenarios":"Gateway starts but the Buzz channel plugin fails to connect to the relay (auth failure, network error, bad private key); the account is in a restart loop (restartPending stays true); the configured account id never appears in channelAccounts.buzz.","commonSituations":"Wrong relay URL in QA credentials; SUT private key rejected by relay; relay is down or unreachable during a QA run; Gateway process crashed or channel plugin errored during startup.","solutions":["Inspect the last status JSON in the error message to see the account's running/restartPending state.","Check Gateway logs for Buzz channel startup errors (relay connection, auth challenge, NIP-11 resolution).","Verify the relay URL and SUT private key/auth tag in the QA credential file are correct and the relay is reachable.","Increase the timeout via the QA runner's waitReady timeoutMs if the relay is slow to accept the connection."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  await adapter.waitReady({ gateway, timeoutMs: 120_000 });\n} catch (error) {\n  if (error instanceof Error && error.message.includes('did not become ready')) {\n    // Inspect last status, check relay connectivity, then retry with longer timeout\n    console.error('Buzz channel not ready:', error.message);\n  }\n  throw error;\n}","preventionTips":["Verify relay URL and SUT credentials before starting a QA run.","Monitor Gateway startup logs for Buzz channel errors.","Use a longer waitReady timeout for slow or remote relays."],"tags":["buzz","qa","gateway","readiness","timeout","relay"],"backgroundTag":null,"analyzedSha":"01804a75319da4b69c9ab98ceaa30477e22b8c0b","analyzedAt":"2026-08-12T04:37:58.197Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}