{"record":{"id":"87fcc75c2193c399","repo":"zeroclaw-labs/zeroclaw","slug":"channel-type-channel-alias-alias-is-not-conf","errorCode":null,"errorMessage":"{channel_type} channel alias `{alias}` is not configured. Run `zeroclaw config set channels.{channel_type}.{alias}.bot_token <token>` (see docs/book/src/channels/overview.md for the full field list).","messagePattern":"(.+?) channel alias `(.+?)` is not configured\\. Run `zeroclaw config set channels\\.(.+?)\\.(.+?)\\.bot_token <token>` \\(see docs/book/src/channels/overview\\.md for the full field list\\)\\.","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-channels/src/orchestrator/mod.rs","lineNumber":8674,"sourceCode":"\n    let Some(normalize) = channel_identity_normalizer(channel_type) else {\n        anyhow::bail!(\n            \"Channel type `{channel_type}` does not support identity binding \\\n             (supported: telegram, wechat, line).\"\n        );\n    };\n\n    let normalized = normalize(identity);\n    if normalized.is_empty() {\n        anyhow::bail!(\"{channel_type} identity cannot be empty\");\n    }\n\n    // The alias must name an existing `[channels.<type>.<alias>]` section.\n    // Binding into a phantom alias would mint a peer group the runtime never\n    // reads (it resolves authorization per the alias the channel actually\n    // runs under), so fail loudly instead of silently authorizing nobody.\n    if !channel_alias_configured(config, channel_type, alias) {\n        anyhow::bail!(\n            \"{channel_type} channel alias `{alias}` is not configured. Run \\\n             `zeroclaw config set channels.{channel_type}.{alias}.bot_token <token>` \\\n             (see docs/book/src/channels/overview.md for the full field list).\"\n        );\n    }\n\n    let group_name = format!(\"{channel_type}_{alias}\");\n    let channel_ref = format!(\"{channel_type}.{alias}\");\n    let group = config\n        .peer_groups\n        .entry(group_name)\n        .or_insert_with(|| PeerGroupConfig {\n            channel: ChannelRef::new(channel_ref),\n            ..PeerGroupConfig::default()\n        });\n\n    if group\n        .external_peers","sourceCodeStart":8656,"sourceCodeEnd":8692,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-channels/src/orchestrator/mod.rs#L8656-L8692","documentation":"Thrown by bind_channel_identity_into when channel_alias_configured() reports that no `[channels.<type>.<alias>]` section exists. Binding into a phantom alias would create a peer group scoped to `<type>.<alias>` that the running channel never reads (authorization resolves under the alias the channel actually runs as), so the code fails loudly instead of silently authorizing nobody.","triggerScenarios":"Calling bind_channel_identity_into(config, \"telegram\", \"work\", ...) when `[channels.telegram.work]` is absent — e.g. the channel was configured under alias `default`, or the section was removed. Alias matching is exact against the typed channel maps (config.channels.telegram/wechat/line).","commonSituations":"Binding to the wrong alias name (typo, or assuming `default` when the config uses `work`); channel section deleted after the bind command was drafted; forgetting to run `zeroclaw setup telegram` first so no channel section exists yet.","solutions":["List configured aliases of that type in zeroclaw.toml under `[channels.telegram]` (or wechat/line) and re-run the bind with the exact alias","If the alias should exist, create it: `zeroclaw config set channels.telegram.work.bot_token <token>` (plus the other required fields per docs/book/src/channels/overview.md)","Re-run the bind command with the corrected alias"],"exampleFix":"# before\nzeroclaw bind telegram work 123456789\n# error: telegram channel alias `work` is not configured.\n\n# after\nzeroclaw config set channels.telegram.work.bot_token \"123:ABC\"\nzeroclaw bind telegram work 123456789","handlingStrategy":"validation","validationCode":"use zeroclaw_channels::orchestrator::channel_alias_configured;\nif !channel_alias_configured(&config, channel_type, alias) {\n    return Ok(notify(format!(\"configure [channels.{channel_type}.{alias}] first\")));\n}\nbind_channel_identity_into(&mut config, channel_type, alias, identity)?;","typeGuard":null,"tryCatchPattern":"Err(err) if err.to_string().contains(\"is not configured\") => {\n    // offer to create the channel section or list existing aliases of that type\n}","preventionTips":["Run channel setup (`zeroclaw setup <type>`) before any bind commands","In automation, fetch the configured alias list from config.channels and validate the target alias first","Treat bind-alias typos as config errors: verify against zeroclaw.toml, not memory"],"tags":["identity-binding","channel-alias","configuration","zeroclaw"],"backgroundTag":"config-reference-not-found","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}