Skip to content

Add SWIP-87: BPS explicit multi-publisher — roster and end of stream over BPS-lite - #114

Open
zelig wants to merge 4 commits into
swip-bps-litefrom
swip-87-bps-multipublisher
Open

zelig wants to merge 4 commits into
swip-bps-litefrom
swip-87-bps-multipublisher

Conversation

@zelig

@zelig zelig commented Oct 13, 2026 •

Copy link
Copy Markdown
Member

SWIP-87: BPS explicit multi-publisher — the admin's roster and end of stream over BPS-lite.

Stacked on SWIP-74 BPS-lite (#111): this PR's base is swip-bps-lite, so the diff is SWIPs/swip-87.md alone.

The admin of a BPS-lite channel names who else may publish by publishing a roster on a feed of its own, and can end the channel with an EOS. It is the roster slice of SWIP-60 (#104), with nothing else of it: two more Kind values (EOS = 3, ROSTER = 4) and one payload message (Roster). No new frame, and no change to Join, Ack or the cohort spec. A cohort is multi-publisher iff its admin ever publishes a roster.

What the SWIP specifies:

  • the roster and EOS feeds: owned by the admin alone, verified end to end, full state rather than deltas;
  • pending streams for rostered addresses, with the roster as the grantee's cue;
  • roles that change only by rejoining;
  • a cursor per publisher and per service kind;
  • publisher streams that receive what the others publish;
  • revocation by roster: the revoked streams are written the roster and closed, and what they send meanwhile is dropped, never punished;
  • the EOS as the one signed, final end;
  • bounds, outcomes, replay rows, the WebSocket bridge, and conformance.

Three rules are to be carried back to SWIP-60: roles change only by rejoining; revocation closes the revoked streams with no grace period and no punishment; and the cursor table is bounded by the roster.

Implementation: ethersphere/bee#5661 (draft, stacked on bee #5626).

Open points are marked (?) in the text.

🤖 Generated with Claude Code

zelig and others added 4 commits October 12, 2026 06:43
…m over BPS-lite

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cue roster is not sent twice

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stream and drops its frames unpunished

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he owner's alone, kind and owner on every delivery

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 13, 2026 08:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

It introduces a large, intricate protocol specification with multiple deliberate open design points and cross-SWIP dependencies that warrant final human editorial and technical review.

0 open findings

What changed in this PR

This PR adds SWIP-87, the second step of the Broadcast Pub/Sub (BPS) family, specified as a strict extension of SWIP-74 (BPS-lite). It gives a BPS-lite channel's admin a signed control plane: a roster feed naming additional publishers and an end-of-stream (EOS) feed to close the channel attributably. It is the "roster slice" of SWIP-60, lifted out so it can be implemented and conformance-tested independently. The change is purely a new specification document — no code.

Changes:

  • Adds two Kind values (EOS = 3, ROSTER = 4) and one payload message (Roster) on the existing Broadcast frame, with no change to Join, Ack, or CohortSpec.
  • Defines broker/subscriber rules: pending streams for rostered addresses, per-publisher and per-service-kind cursors, delivery to publisher streams, roster-based revocation (no grace period, dropped-not-punished), and channel end via signed EOS.
  • States three rules to be carried back to SWIP-60 (roles change only by rejoining; revocation closes streams without punishment; cursor table bounded by the roster).
File Description
SWIPs/​swip-87.md New Draft Standards Track SWIP specifying the admin roster and EOS control plane over BPS-lite, including wire format, validation, revocation, bounds, outcomes, WebSocket bridge, and conformance.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants