Skip to content

fix(buzz): subscribe to newly joined channels - #76823

Draft
bricelb wants to merge 1 commit into
NousResearch:mainfrom
bricelb:agent/buzz-live-channel-membership
Draft

fix(buzz): subscribe to newly joined channels#76823
bricelb wants to merge 1 commit into
NousResearch:mainfrom
bricelb:agent/buzz-live-channel-membership

Conversation

@bricelb

@bricelb bricelb commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

What changed

  • Extract the channel UUID from relay-signed Buzz kind:44100 membership events.
  • Subscribe the WebSocket transport to a newly joined community channel immediately.
  • Keep an explicit BUZZ_CHANNELS list authoritative; automatic discovery only applies when that list is empty.
  • Start the new subscription at the membership timestamp so prior channel history is not replayed.

Root cause

_handle_membership_event() called _discover_dms() and subscribed anything it added. That helper intentionally excludes real community channels to avoid misclassifying them as mention-free DMs, so a channel joined after gateway startup never entered _channel_state. The gateway only saw it after a restart rebuilt the initial channel list.

User impact

With automatic Buzz channel discovery enabled, adding the Hermes identity to a public, private, or ephemeral channel now makes the running gateway listen immediately. Users no longer need to restart the gateway after each channel addition.

Validation

  • scripts/run_tests.sh tests/gateway/test_buzz_adapter.py tests/gateway/test_buzz_websocket.py -q (30 passed)
  • .venv/bin/ruff check plugins/platforms/buzz/adapter.py tests/gateway/test_buzz_websocket.py
  • git diff --check

@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have comp/plugins Plugin system and bundled plugins needs-decision Awaiting maintainer decision before any implementation labels Aug 2, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

This was generated by AI during triage.

Related to #74823 and #76156. This is the narrow event-driven join-subscription repair; #74823 expands startup discovery and #76156 adds broader membership reconciliation and addressing behavior. The overlap is real, but the scopes are not identical; please choose or consolidate the intended membership policy.

@teknium1

teknium1 commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Thanks for the narrow Buzz delivery repair. The current-main premise is verified: plugins/platforms/buzz/adapter.py:801-813 only subscribes conversations added by _discover_dms(), while _discover_dms() excludes real community channels at plugins/platforms/buzz/adapter.py:958 through _may_reclassify_as_dm() (plugins/platforms/buzz/adapter.py:1063-1076).

Commit 1f1dae22a9c3139af3ea9b4e198ff78f7ffff4de addresses that exact gap by extracting the membership event's h channel tag, respecting the explicit channel list, and issuing a subscription with the membership boundary as the high-water mark. Its scope remains limited to the Buzz plugin and its WebSocket tests.

Automated hermes-sweeper review.

@teknium1 teknium1 added sweeper:risk-message-delivery Sweeper risk: may drop, duplicate, misroute, or suppress messages sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform labels Aug 2, 2026
@bricelb

bricelb commented Aug 2, 2026 via email

Copy link
Copy Markdown
Contributor Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/plugins Plugin system and bundled plugins needs-decision Awaiting maintainer decision before any implementation P3 Low — cosmetic, nice to have sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:risk-message-delivery Sweeper risk: may drop, duplicate, misroute, or suppress messages type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants