openclaw/openclaw · error · Error
ClickClack discussions require exactly one enabled discussio
Error message
ClickClack discussions require exactly one enabled discussion account
What it means
Thrown by DiscussionService.open when discussionAccounts(config) returns more than one enabled ClickClack account. The discussion subsystem supports exactly one enabled discussion account at a time to avoid ambiguity in channel binding ownership.
Source
Thrown at extensions/clickclack/src/discussions/service.ts:187
return { state: "none" };
}
this.#finalizePendingBinding(sessionKey, existing);
await this.#reconcileBinding(sessionKey, existing, resolved.account);
const current = this.#store.get(sessionKey);
if (!current) {
return { state: this.hasEnabledAccount() ? "available" : "none" };
}
return discussionInfoForBinding(current, resolved.account);
}
return { state: "available" };
});
}
async open(sessionKey: string): Promise<SessionDiscussionInfo> {
return await this.#withSessionLock(sessionKey, async () => {
const accounts = discussionAccounts(this.#currentConfig());
if (accounts.length > 1) {
throw new Error("ClickClack discussions require exactly one enabled discussion account");
}
const account = accounts[0];
if (!account) {
return { state: "none" };
}
const existing = this.#store.get(sessionKey);
if (existing) {
const resolved = await this.#resolveBindingForUse(existing);
if (resolved.state === "retargeted") {
this.#revokeAndDeleteBinding(sessionKey, existing);
} else if (resolved.state === "stale") {
await this.#releaseStaleBinding(sessionKey, existing);
} else if (resolved.state === "active") {
this.#finalizePendingBinding(sessionKey, existing);
await this.#reconcileBinding(sessionKey, existing, resolved.account);
const current = this.#store.get(sessionKey);
if (current) {
return discussionInfoForBinding(current, resolved.account);View on GitHub (pinned to 01804a7531)
Solutions
- Edit openclaw config to set enabled: true on exactly one ClickClack account that owns discussions.
- Disable or remove the extra ClickClaw account entries from config.
- Run openclaw configure to interactively select the single discussion account.
- Run openclaw doctor --fix to detect and report the multi-account discussion conflict.
Example fix
// before: two accounts enabled
{
"clickclack": {
"accounts": [
{ "accountId": "prod", "enabled": true, "discussions": { "enabled": true } },
{ "accountId": "staging", "enabled": true, "discussions": { "enabled": true } }
]
}
}
// after: exactly one discussion account
{
"clickclack": {
"accounts": [
{ "accountId": "prod", "enabled": true, "discussions": { "enabled": true } },
{ "accountId": "staging", "enabled": false }
]
}
} Defensive patterns
Strategy: validation
Validate before calling
import { discussionAccounts } from "./discussions/eligibility.js";
function validateSingleDiscussionAccount(cfg: CoreConfig): void {
const accounts = discussionAccounts(cfg);
if (accounts.length > 1) {
throw new Error(
`Expected exactly one enabled ClickClack discussion account, found ${accounts.length}: ${accounts.map((a) => a.accountId).join(", ")}`,
);
}
} Prevention
- Before calling DiscussionService.open, validate that exactly one ClickClack account has discussions enabled.
- Use openclaw configure to manage accounts interactively and avoid accidental multi-enable.
- Run openclaw doctor to detect multi-account discussion configuration conflicts.
When it happens
Trigger: Calling DiscussionService.open when the ClickClaw config has two or more accounts with discussions enabled (enabled: true). Each account would produce a different binding destination, so the service refuses to pick.
Common situations: Operator adds a second ClickClaw account for testing or migration but forgets to disable the old one; config merge or environment override accidentally enables a second account; multi-account config intended for gateway use but discussions only supports one.
Related errors
- ReleaseSigning.json must pin apkCertificateSha256 as 64 lowe
- profile "${name}" does not exist
- browser.profiles.${profileName}.cdpUrl must be a valid URL.
- browser.profiles.${profileName}.cdpUrl must use http, https,
- Derived CDP port (${derivedPort}) is too high; check gateway
AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12).
Data as JSON: /api/errors/dd6a0ef290ea93a5.
Report an issue: GitHub.