zeroclaw-labs/zeroclaw · error · anyhow::Error
unknown git channel provider `{other}` (supported: github, g
Error message
unknown git channel provider `{other}` (supported: github, gitea, forgejo) What it means
The provider value in channels.git.<alias>.provider matched none of github, gitea, forgejo (the match fell through to the `other` arm), so build_provider rejects the channel at construction with the supported list inline. Values are case-sensitive.
Source
Thrown at crates/zeroclaw-channels/src/git/channel.rs:135
(or `https://gitea.com/api/v1` for the public Gitea service). \
No default host is assumed because API requests carry the \
access token"
);
};
Ok(Box::new(super::providers::gitea::GiteaProvider::new(
api_base_url.to_string(),
cfg.access_token.clone(),
cfg.proxy_url.clone(),
)))
}
#[cfg(not(feature = "provider-gitea"))]
{
anyhow::bail!(
"git channel provider `{provider}` requires the `provider-gitea` feature"
);
}
}
other => anyhow::bail!(
"unknown git channel provider `{other}` (supported: github, gitea, forgejo)"
),
}
}
pub struct GitChannel {
cfg: GitConfig,
/// The alias key under `[channels.git.<alias>]` this handle is bound
/// to. Used to scope peer-group lookups and session keys.
alias: String,
/// Resolves inbound external peers from canonical state at message-time.
/// No cache (see AGENTS.md "ABSOLUTE RULE — SINGLE SOURCE OF TRUTH").
peer_resolver: Arc<dyn Fn() -> Vec<String> + Send + Sync>,
/// The forge driver. Owns its own auth/token/identity caches.
provider: Box<dyn GitProvider>,
/// Bot identity (mention handle + bot login) resolved from the
/// provider, cached for the sync `self_handle`/`self_addressed_mention`
/// accessors. The provider remains the source of truth; this is aView on GitHub (pinned to 88bb9c8533)
Solutions
- Use exactly one of: github, gitea, forgejo (lowercase)
- GitLab is not supported — use one of the supported providers or request support upstream
- Trim stray whitespace and fix casing in the config value
Example fix
# before [channels.git.mine] provider = "GitLab" # after [channels.git.mine] provider = "forgejo" # one of github | gitea | forgejo
Defensive patterns
Strategy: type-guard
Validate before calling
if !known_git_provider(&cfg.provider) {
anyhow::bail!(
"unsupported git provider '{}' (supported: github, gitea, forgejo)",
cfg.provider
);
} Type guard
// Rust — accept only known providers before building the channel
fn known_git_provider(value: &str) -> bool {
matches!(value.trim(), "github" | "gitea" | "forgejo")
} Prevention
- Validate provider names in config linting before deploy
- Provider values are case-sensitive and lowercase
When it happens
Trigger: Typing the provider: "gitlab", "gitee", "GitHub" (wrong case), or an empty string.
Common situations: Trying to point the git channel at GitLab (unsupported); case mismatches; trailing whitespace in config values.
Related errors
- git channel `events` routing table ignores every event type;
- git channel: reading private_key_path `{path}` failed: {e}
- git channel provider `{provider}` requires channels.git.<ali
- git channel has no repositories to poll; set `repos` or gran
- invalid forge HTTP method `{}` (expected GET/POST/PATCH/PUT/
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/999234a40af42222.
Report an issue: GitHub.