{"record":{"id":"b626d8b4ed9450aa","repo":"zeroclaw-labs/zeroclaw","slug":"irc-channel-requires-the-channel-irc-feature","errorCode":null,"errorMessage":"IRC channel requires the `channel-irc` feature","messagePattern":"IRC channel requires the `channel-irc` feature","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-channels/src/orchestrator/mod.rs","lineNumber":9509,"sourceCode":"            };\n            Ok(Arc::new(IrcChannel::new(crate::irc::IrcChannelConfig {\n                server: irc_cfg.server.clone(),\n                port: irc_cfg.port,\n                nickname: irc_cfg.nickname.clone(),\n                username: irc_cfg.username.clone(),\n                channels: irc_cfg.channels.clone(),\n                alias,\n                peer_resolver,\n                server_password: irc_cfg.server_password.clone(),\n                nickserv_password: irc_cfg.nickserv_password.clone(),\n                sasl_password: irc_cfg.sasl_password.clone(),\n                verify_tls: irc_cfg.verify_tls.unwrap_or(true),\n                mention_only: irc_cfg.mention_only,\n            })))\n        }\n        #[cfg(not(feature = \"channel-irc\"))]\n        \"irc\" => {\n            anyhow::bail!(\"IRC channel requires the `channel-irc` feature\");\n        }\n        #[cfg(feature = \"channel-twitch\")]\n        \"twitch\" => {\n            let tw_cfg = config\n                .channels\n                .twitch\n                .get(\"default\")\n                .context(\"Twitch channel is not configured\")?;\n            let alias = \"default\".to_string();\n            let peer_resolver: Arc<dyn Fn() -> Vec<String> + Send + Sync> = {\n                let cfg_arc = config_arc.clone();\n                let alias = alias.clone();\n                Arc::new(move || cfg_arc.read().channel_external_peers(\"twitch\", &alias))\n            };\n            Ok(Arc::new(TwitchChannel::new(\n                tw_cfg.bot_username.clone(),\n                tw_cfg.oauth_token.clone(),\n                tw_cfg.channels.clone(),","sourceCodeStart":9491,"sourceCodeEnd":9527,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-channels/src/orchestrator/mod.rs#L9491-L9527","documentation":"Raised by build_channel_by_id when channel_id = \"irc\" is requested but the binary lacks the `channel-irc` feature. The enabled arm reads config.channels.irc (verify_tls defaults to true, mention_only passthrough); without the feature only the bail arm is compiled. Note channel-twitch depends on channel-irc, so any twitch-enabled build also has IRC compiled in.","triggerScenarios":"start_channels / build_channel_by_id selecting \"irc\" from an [channels.irc] block or agent binding in a build without --features channel-irc.","commonSituations":"Default-feature builds (irc is in channels-full only); slim daemon builds where IRC was excluded to trim the dependency footprint; configs carried over from a full build.","solutions":["Rebuild with cargo build --release --features channel-irc","Or use --features channels-full","Or remove [channels.irc] and \"irc\" bindings from config","Check zeroclaw_channels::listing::is_channel_type_compiled(\"irc\") before startup"],"exampleFix":"# before\n cargo build --release\n\n # after\n cargo build --release --features channel-irc","handlingStrategy":"validation","validationCode":"use zeroclaw_channels::listing::is_channel_type_compiled;\n\nif !is_channel_type_compiled(\"irc\") {\n    eprintln!(\"rebuild with --features channel-irc or remove [channels.irc]\");\n}","typeGuard":"fn irc_available() -> bool {\n    zeroclaw_channels::listing::is_channel_type_compiled(\"irc\")\n}","tryCatchPattern":"match build_channel_by_id(&config_arc, \"irc\") {\n    Ok(ch) => { /* use */ }\n    Err(e) if e.to_string().contains(\"requires the `channel-irc` feature\") => {\n        // skip; rebuild hint\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Note the dependency direction: channel-twitch implies channel-irc, never the reverse","Use the compiled-channel listing after any feature-list change"],"tags":["rust","cargo-features","feature-gate","zeroclaw","channels","irc"],"backgroundTag":"cargo-feature-not-enabled","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}