openclaw/openclaw · critical · Error
buzz account "${params.accountId}" did not become ready; las
Error message
buzz account "${params.accountId}" did not become ready; last status: ${JSON.stringify(lastStatus)} What it means
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.
Source
Thrown at extensions/buzz/src/qa/adapter.runtime.ts:47
const pollIntervalMs = params.pollIntervalMs ?? 500;
const startedAt = Date.now();
let lastStatus: unknown;
while (Date.now() - startedAt < timeoutMs) {
const payload = (await params.gateway.call(
"channels.status",
{ probe: false, timeoutMs: 2_000 },
{ timeoutMs: 5_000 },
)) as { channelAccounts?: Record<string, Array<Record<string, unknown>>> };
const status = payload.channelAccounts?.buzz?.find(
(entry) => entry.accountId === params.accountId,
);
lastStatus = status;
if (status?.running === true && status.restartPending !== true) {
return;
}
await sleep(pollIntervalMs);
}
throw new Error(
`buzz account "${params.accountId}" did not become ready; last status: ${JSON.stringify(lastStatus)}`,
);
}
export async function createBuzzQaTransportAdapter(
context: FactoryContext,
): Promise<AdapterDefinition> {
const options = context.adapterOptions ?? {};
const requestedCredentialSource = options.credentialSource?.trim().toLowerCase() || "file";
if (requestedCredentialSource !== "file" && requestedCredentialSource !== "convex") {
throw new Error('Buzz QA credential source must be "file" or "convex".');
}
const credentialFile = options.credentialFile?.trim();
if (requestedCredentialSource === "file" && !credentialFile) {
throw new Error("Buzz QA file credentials require --credential-file <path>.");
}
if (requestedCredentialSource === "file" && options.credentialRole?.trim()) {
throw new Error("Buzz QA --credential-role is only valid with --credential-source convex.");View on GitHub (pinned to 01804a7531)
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.
Defensive patterns
Strategy: retry
Try / catch
try {
await adapter.waitReady({ gateway, timeoutMs: 120_000 });
} catch (error) {
if (error instanceof Error && error.message.includes('did not become ready')) {
// Inspect last status, check relay connectivity, then retry with longer timeout
console.error('Buzz channel not ready:', error.message);
}
throw error;
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Buzz QA could not resolve the portable id for native message
- Buzz QA driver ${credentials.driverPublicKey} is not a membe
- Buzz QA SUT ${credentials.sutPublicKey} must have the Bot ro
- Timed out setting up Buzz relay session
- Timed out waiting for Buzz NIP-42 authentication challenge
AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12).
Data as JSON: /api/errors/c0f3b05f37bf23cc.
Report an issue: GitHub.