{"record":{"id":"7fb32bfb5a4cb8de","repo":"zeroclaw-labs/zeroclaw","slug":"nextcloud-talk-channel-requires-the-channel-nextc","errorCode":null,"errorMessage":"Nextcloud Talk channel requires the `channel-nextcloud` feature","messagePattern":"Nextcloud Talk channel requires the `channel-nextcloud` feature","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-channels/src/orchestrator/mod.rs","lineNumber":9387,"sourceCode":"                                module_path!(),\n                                ::zeroclaw_log::Action::Note\n                            )\n                            .with_outcome(::zeroclaw_log::EventOutcome::Failure),\n                            &e.to_string()\n                        );\n                        None\n                    }),\n                    nc.bot_name.clone().unwrap_or_default(),\n                    alias,\n                    peer_resolver,\n                    nc.proxy_url.clone(),\n                )\n                .with_streaming(nc.stream_mode, nc.draft_update_interval_ms),\n            ))\n        }\n        #[cfg(not(feature = \"channel-nextcloud\"))]\n        \"nextcloud_talk\" | \"nextcloud-talk\" => {\n            anyhow::bail!(\"Nextcloud Talk channel requires the `channel-nextcloud` feature\");\n        }\n        #[cfg(feature = \"channel-linq\")]\n        \"linq\" => {\n            let lq = config\n                .channels\n                .linq\n                .get(\"default\")\n                .context(\"Linq 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(\"linq\", &alias))\n            };\n            Ok(Arc::new(LinqChannel::new(\n                lq.api_token.clone(),\n                lq.from_phone.clone(),\n                alias,","sourceCodeStart":9369,"sourceCodeEnd":9405,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-channels/src/orchestrator/mod.rs#L9369-L9405","documentation":"Raised by build_channel_by_id when the channel id is \"nextcloud_talk\" or \"nextcloud-talk\" and the binary was compiled without the `channel-nextcloud` feature. Both spellings share one arm (the underscore form is the canonical config key, the hyphen form a legacy alias), so either id produces this exact bail. The enabled arm wires streaming (stream_mode, draft_update_interval_ms) from [channels.nextcloud_talk].","triggerScenarios":"start_channels / build_channel_by_id with channel_id \"nextcloud_talk\" or \"nextcloud-talk\" in a build lacking channel-nextcloud — typically a default-feature build or a hand-picked feature list that omitted it.","commonSituations":"Default builds (nextcloud is in channels-full only); self-hosted setups where the admin copied a config from a channels-full install onto a minimal self-compiled daemon; hyphen vs underscore confusion in bindings both map to the same missing-feature bail.","solutions":["Rebuild with cargo build --release --features channel-nextcloud","Or use --features channels-full (includes it)","Or remove the [channels.nextcloud_talk] block and both id spellings from agent bindings","Check zeroclaw_channels::listing::is_channel_type_compiled(\"nextcloud_talk\") first"],"exampleFix":"# before\n cargo build --release\n\n # after\n cargo build --release --features channel-nextcloud","handlingStrategy":"validation","validationCode":"use zeroclaw_channels::listing::is_channel_type_compiled;\n\n// both spellings map to the same feature gate\nif !is_channel_type_compiled(\"nextcloud_talk\") {\n    eprintln!(\"rebuild with --features channel-nextcloud or drop [channels.nextcloud_talk]\");\n}","typeGuard":"fn nextcloud_available() -> bool {\n    zeroclaw_channels::listing::is_channel_type_compiled(\"nextcloud_talk\")\n}","tryCatchPattern":"match build_channel_by_id(&config_arc, \"nextcloud-talk\") {\n    Ok(ch) => { /* use */ }\n    Err(e) if e.to_string().contains(\"requires the `channel-nextcloud` feature\") => {\n        // skip; rebuild hint\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Normalize the two spellings (nextcloud_talk / nextcloud-talk) in your config layer so pre-checks and logs are unambiguous","Use configured_uncompiled_channels() to catch every missing-feature channel in one pass"],"tags":["rust","cargo-features","feature-gate","zeroclaw","channels","nextcloud"],"backgroundTag":"cargo-feature-not-enabled","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}