zeroclaw-labs/zeroclaw · error · anyhow::Error
git channel `events` routing table ignores every event type;
Error message
git channel `events` routing table ignores every event type; nothing would ever be delivered
What it means
listen() compiles the channels.git.<alias>.events routing table into an event filter plan and checks plan.any(): if the table filters out every possible event type, no event could ever be delivered, which is treated as a misconfiguration and bails instead of silently polling forever.
Source
Thrown at crates/zeroclaw-channels/src/git/channel.rs:517
"issues": plan.issues,
"comments": plan.comments,
"review_comments": plan.review_comments,
"releases": plan.releases,
"workflow_runs": plan.workflow_runs,
"events_backbone": self.cfg.events_backbone,
},
})
),
"git channel polling"
);
if repos.is_empty() {
anyhow::bail!(
"git channel has no repositories to poll; set `repos` or grant the \
provider access to at least one repository"
);
}
if !plan.any() {
anyhow::bail!(
"git channel `events` routing table ignores every event type; \
nothing would ever be delivered"
);
}
let filter = EventFilter {
bot_login: &bot_login,
mention_handle: &mention_handle,
mention_only: self.cfg.mention_only,
listen_to_bots: self.cfg.listen_to_bots,
};
let mut state = PollState::new(chrono::Utc::now());
loop {
for repo in &repos {
match self.poll_repo(repo, &filter, &plan, &mut state, &tx).await {
Ok(true) => {}
Ok(false) => return Ok(()),View on GitHub (pinned to 88bb9c8533)
Solutions
- Enable at least one event type in the events table (use the channel's documented event keys, e.g. issues, pull_request, push)
- Check for a blanket ignore/disable entry overriding your selections
- Validate the events config against the documented schema before deploy
Example fix
# before [channels.git.mine.events] # every type disabled → listen() bails # after [channels.git.mine.events] issues = true pull_request = true
Defensive patterns
Strategy: validation
Validate before calling
// Rust — lint the routing table before listen()
let plan = EventFilterPlan::compile(&cfg.events)?;
if !plan.any() {
anyhow::bail!("events routing table enables no event types; nothing would be delivered");
} Prevention
- Config-lint event tables so an all-disabled table fails at load, not at listen
- Keep the recognized event keys documented next to config examples
When it happens
Trigger: An events table whose entries all resolve to ignore/none — every event type explicitly disabled, or a table using unrecognized keys so nothing matches.
Common situations: Copy-pasted events config that disables everything while intending to enable a subset; renamed event keys that no longer match the schema; a blanket ignore-all entry left in place.
Related errors
- unknown git channel provider `{other}` (supported: github, g
- 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/f8e76fc0fca0bfc6.
Report an issue: GitHub.