Skip to content

Add SWIP-draft: BPS-lite — single-publisher brokered broadcast - #111

Open
acud wants to merge 1 commit into
masterfrom
swip-bps-lite
Open

acud wants to merge 1 commit into
masterfrom
swip-bps-lite

Conversation

@acud

@acud acud commented Sep 15, 2026

Copy link
Copy Markdown
Collaborator

A standalone single-publisher profile of the design space SWIP-60 (PR #104) covers: one broker, one publisher, N subscribers, one hop.

A cohort is a topic and a topic is a SOC address, so authorship needs no credential, no publisher list and no authenticated handshake — the ANCHOR address check re-establishes it from the signature on every message. The publisher role is bound to the opening stream and transfers on re-Open; the cohort's lifetime is that stream, which removes orphan cohorts and bounds Open as an allocation primitive.

Specified standalone rather than as a profile of SWIP-60, with the protobuf inline and no compatibility claimed in either direction. It answers three questions SWIP-60 leaves open (dedup horizon, cohort lifetime, Open as an unbounded allocation primitive) and drops closed rather than restating a confidentiality claim an unauthenticated handshake cannot support.

The two specs share the pubsub/1.0.0 protocol id, so the handshake carries the compatibility story: SWIP-60's field numbers are reserved, not reused, which is what lets a BPS-lite broker refuse a full-spec Open outright instead of silently decoding it with fields dropped.

Note the one divergence that can fail silently for implementers: BPS-lite's ANCHOR applies its address constraint unconditionally, where SWIP-60 relaxes it under an explicit publisher regime.

A standalone single-publisher profile of the design space SWIP-60 (PR #104)
covers: one broker, one publisher, N subscribers, one hop.

A cohort is a topic and a topic is a SOC address, so authorship needs no
credential, no publisher list and no authenticated handshake — the ANCHOR
address check re-establishes it from the signature on every message. The
publisher role is bound to the opening stream and transfers on re-Open; the
cohort's lifetime is that stream, which removes orphan cohorts and bounds Open
as an allocation primitive.

Specified standalone rather than as a profile of SWIP-60, with the protobuf
inline and no compatibility claimed in either direction. It answers three
questions SWIP-60 leaves open (dedup horizon, cohort lifetime, Open as an
unbounded allocation primitive) and drops `closed` rather than restating a
confidentiality claim an unauthenticated handshake cannot support.

The two specs share the pubsub/1.0.0 protocol id, so the handshake carries the
compatibility story: SWIP-60's field numbers are reserved, not reused, which is
what lets a BPS-lite broker refuse a full-spec Open outright instead of
silently decoding it with fields dropped.

Note the one divergence that can fail silently for implementers: BPS-lite's
ANCHOR applies its address constraint unconditionally, where SWIP-60 relaxes it
under an explicit publisher regime.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E99KGsCW7dyKudy2WbpRco
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.

1 participant