openclaw/openclaw · error · Error

Could not refresh Buzz room membership for ${channelId}

Error message

Could not refresh Buzz room membership for ${channelId}

What it means

Thrown when all retry attempts in MEMBERSHIP_REFRESH_DELAYS_MS are exhausted for a channel and the refresh generation is still current (not superseded by a newer refresh). The room is marked blocked. It means the tracker could not obtain a valid, newer membership after every backoff delay.

Source

Thrown at extensions/buzz/src/room-membership-tracker.ts:213

      if (
        refreshed.roles.get(params.botPublicKey) !== "bot" ||
        !refreshed.members.has(params.botPublicKey)
      ) {
        blockedRooms.add(channelId);
        throw new Error(`Buzz bot no longer has the Bot role in room ${channelId}`);
      }
      memberships.set(channelId, refreshed);
      pendingMemberships.delete(channelId);
      deniedMembers.delete(channelId);
      blockedRooms.delete(channelId);
      params.onMembershipsChanged?.(effectiveMemberships());
      return;
    }
    if (state.generation !== state.lastAttemptedGeneration) {
      return;
    }
    blockedRooms.add(channelId);
    throw new Error(`Could not refresh Buzz room membership for ${channelId}`);
  };

  const refreshMembershipOnce = (channelId: string): Promise<void> => {
    const current = refreshes.get(channelId);
    if (current) {
      current.generation += 1;
      return current.promise;
    }
    const state = {
      generation: 1,
      lastAttemptedGeneration: 0,
      promise: Promise.resolve(),
    } satisfies RefreshState;
    state.promise = refreshMembership(channelId, state).finally(() => {
      if (refreshes.get(channelId) === state) {
        refreshes.delete(channelId);
      }
      if (

View on GitHub (pinned to 01804a7531)

Solutions

  1. Check relay connectivity and queryMembership health for the channel.
  2. Increase or extend MEMBERSHIP_REFRESH_DELAYS_MS if convergence is known to be slow.
  3. Retry the refresh later via refreshMembershipOnce once the relay stabilizes.
  4. Confirm the channel still exists and the bot still holds the Bot role upstream.
Defensive patterns

Strategy: retry

Try / catch

try {
  await refreshMembershipOnce(channelId);
} catch (error) {
  if (/Could not refresh Buzz room membership/.test(String(error))) {
    await sleep(LONG_BACKOFF_MS);
    void refreshMembershipOnce(channelId);
    return;
  }
  throw error;
}

Prevention

When it happens

Trigger: Relay repeatedly returns stale/pending membership, network errors during queryMembership across all retries, or the membership data never converges to a non-pending newer state within the configured delay schedule.

Common situations: Relay instability, transient query failures, relay serving cached pending state, or membership propagation lag longer than the total retry window.

Related errors


AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12). Data as JSON: /api/errors/066a668081a15da7. Report an issue: GitHub.