buzz-acp channel discovery 404s — relay has no GET /api/channels route, and the harness reports the failure as `discovered 0 channel(s)`
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
buzz-acp channel discovery 404s — relay has no GET /api/channels route, and the harness reports the failure as `discovered 0 channel(s)`
## Summary
**Update:** root cause identified in the comments — `GET /api/channels` returns 404 on the relay; the harness reports this as zero channels rather than an error.
On a self-hosted relay built from `main`, managed agents never subscribe to any
channel. The harness logs `discovered 0 channel(s)` and
`no channel subscriptions resolved — agent will sit idle` on every start, even
though the relay itself confirms the agent is a relay member *and* a member of
the channel. @mentions are therefore silently dropped and no agent ever
responds.
The desktop app shows a non-zero channel count for the same agent, so the UI and
the harness's discovery query disagree.
## Environment
- Host: WSL2, Ubuntu 24.04.3 LTS (kernel 6.6.87.2-microsoft-standard-WSL2)
- Buzz: built from source, `main`, cloned 3 August 2026
- Relay: local, `just dev`, `ws://localhost:3000`
- Community: seeded `localhost:3000` at first start
- Agent: `Fizz` — one of the default Welcome Team agents created by onboarding
- Runtime: `claude-agent-acp` v0.64.2 (Claude Code, installed via the app's
harness setup page)
- Agent pubkey: `d00fe41a4d443c47fe7870f665f19a9c9d1e108c3cc4149c75d3c277f4044464`
## Expected
The harness discovers the channels the agent belongs to, subscribes, and
responds to @mentions from its owner.
## Actual
Every start ends with:
```
INFO buzz_acp: connected to relay at ws://127.0.0.1:3000
INFO buzz_acp: subscribed to membership notifications
INFO buzz_acp: owner resolved from BUZZ_AUTH_TAG: c26482b9…fd97
INFO buzz_acp: agent owner: c26482b9…fd97
INFO buzz_acp: relay observer enabled
INFO buzz_acp: discovered 0 channel(s)
WARN buzz_acp: no channel subscriptions resolved — agent will sit idle
INFO buzz_acp: presence set to online
```
The agent pool initialises cleanly (`agent_pool_ready agents=10`), the ACP
handshake succeeds for all ten subprocesses, the relay connection succeeds, and
the owner resolves. Only discovery returns nothing.
## Evidence that the memberships exist
Channel membership — the agent is present with `role: "bot"`:
```
$ buzz-cli channels members --channel adafd400-706c-5c13-bf02-bc2ebb45b1c7
[{"pubkey":"c26482b9…fd97","role":"owner"},
{"pubkey":"d00fe41a…4464","role":"bot"}]
```
Relay membership — added manually via buzz-admin:
```
$ buzz-admin list-members
pubkey role added_by created_at
d00fe41a…4464 member - 2026-08-03T12:30:11Z
```
Channel announcement events are present:
```
$ buzz-admin reconcile-channels
Reconciled 0 channels (3 already had events, 3 total).
```
Desktop UI: the agent's profile panel shows `Channels 2`.
## Steps to reproduce
1. Clone `main`, `just setup && just build`, `just dev`.
2. Complete onboarding: create identity, install the Claude Code ACP adapter,
join `ws://localhost:3000` via **Join a community**, accept the default
Welcome Team agents.
3. Start Fizz from the Agents panel.
4. Open the Harness Log.
Observed: `discovered 0 channel(s)` on every start.
## Things tried, each followed by a full agent restart
| Action | Result |
|---|---|
| Restart agent alone (×3) | `discovered 0` |
| Add agent to public `#general` via the desktop UI | `discovered 0` |
| `buzz-admin reconcile-channels` | 3 channels already had events; `discovered 0` |
| Set `BUZZ_RELAY_PRIVATE_KEY`, restart relay, `buzz-admin add-member` | `discovered 0` |
Timing was ruled out: relay membership was written at `12:30:11Z` and the
harness restarted at `12:30:54Z`, 43 seconds later, still reporting 0.
## Notes
- `respond_to=owner-only` is the default and the owner resolves correctly from
`BUZZ_AUTH_TAG`, so the author gate is not the cause — discovery fails before
any event reaches it.
- The relay was initially running on the hardcoded dev keypair. Setting a stable
`BUZZ_RELAY_PRIVATE_KEY` was required before `buzz-admin add-member` would run
at all, but did not change the outcome.
- The gap between the UI's channel count and the harness's discovery result
suggests the two read membership from different places.
## Related
Not a duplicate of #2270 (agents deaf to untagged thread replies) or #1743
(mentions lost when the agent is offline) — in both of those the agent has
resolved channel subscriptions. Here it has none.
Contributor guide
Research direction
Start at the relay HTTP API entry point for GET /api/channels and the harness channel-discovery call, then compare them with the desktop app's channel-count path. Done means the relay returns the agent's channel memberships and the harness reports and subscribes to them instead of treating discovery as zero.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100