docs: archive event-comms (Concord + Cordn) idea for later evaluation
No decision, no code — parked with the protocol facts, recommended default (Concord, zero-infra) vs optional Cordn/MLS upgrade, and the open questions.
This commit is contained in:
parent
e1a2b91241
commit
45d021fedb
1 changed files with 41 additions and 0 deletions
41
AGENTS.md
41
AGENTS.md
|
|
@ -1892,6 +1892,47 @@ keeps `stateRef` in sync cross-tab; the backup flag is per-account
|
|||
(partial — schema + notice done); a few i18n leftovers (some StashPage
|
||||
literals) and gray-500/600 contrast.
|
||||
|
||||
## Event comms — Concord + Cordn (idea only, NOT started — 2026-10-03)
|
||||
|
||||
Parked for later evaluation; **no decision, no code.** The idea: a **host tool**
|
||||
for running each event's communications, split by **event visibility** (public
|
||||
vs private) — *not* a "staff room". Owner = the event's main host; per event,
|
||||
plus a host console that lists/manages them. We likely run **no infrastructure**.
|
||||
|
||||
**Recommended default → Concord** (`concordprotocol.org`, MIT; Discord-shaped
|
||||
E2EE over Nostr; relays only, no server):
|
||||
- CORD-01 private streams · CORD-02 communities (key possession = membership;
|
||||
owner-rooted roster; `community_id`; `community_root`/`control_root`; epochs;
|
||||
Control/Chat/Guestbook planes) · CORD-03 public **and private** channels (each
|
||||
its own key) · CORD-04 roles · CORD-05 invites (revocable links + kind-`3313`
|
||||
direct invites) · CORD-06 rekeys/refoundings (removal = rotate) · CORD-07 A/V ·
|
||||
CORD-08 disappearing messages.
|
||||
- ⚠️ Concord "public" is **still E2EE** (open membership, not world-readable) —
|
||||
world-readable chatter is plain Nostr (kind 1/`1111` on the event). Relays must
|
||||
NOT enforce NIP-59's `p` guard (members subscribe by stream author).
|
||||
- Kinds: 1059/20013/20014/21059 envelopes; 9/1111/7/5/3302 chat; 3308 control;
|
||||
3303 rekey; 3306/3309/3312 guestbook; 33301 invite bundle; 13303 invite list;
|
||||
33302 community list; 3313 direct invite.
|
||||
- ⚠️ **No official JS SDK** (`vector_sdk` is Rust). TS references: **Armada**
|
||||
(Capacitor/TS) and **Accordion** (browser TS). Writing one is a real project
|
||||
(frozen HKDF derivations, the Control-plane **fold**, epochs, byte-identical
|
||||
encoding; interop failures are silent empty rooms).
|
||||
|
||||
**Optional upgrade (private events only) → Cordn/MLS**
|
||||
(`github.com/Cordn-msg/cordn`; ts-mls coordinator + ContextVM server; per-group
|
||||
cursors; KeyPackages; Docker `ghcr.io/cordn-msg/cordn`). Gives **forward secrecy
|
||||
+ post-compromise security + true member removal**. ⚠️ **Requires a coordinator**
|
||||
— if we don't run one, the host supplies one (public default on
|
||||
`relay.contextvm.org`, or self-host). Cordn has **no A/V**. We already ship a
|
||||
Coordinator settings card + `src/lib/cordn/*` + a crew `coordinator` tag, but the
|
||||
app currently uses a Cordn URL **as a relay** and does NOT do coordinator RPC —
|
||||
real MLS + RPC is new work.
|
||||
|
||||
**Open questions on revisit:** (1) public event = open-join E2EE (Concord) vs
|
||||
world-readable (plain Nostr) vs both; (2) one host community with a channel per
|
||||
event vs a community per event; (3) is a Concord **private channel** (zero infra)
|
||||
enough for private events, or is MLS worth requiring a coordinator?
|
||||
|
||||
## Nostr Protocol Integration
|
||||
|
||||
This project comes with custom hooks for querying and publishing events on the Nostr network.
|
||||
|
|
|
|||
Loading…
Reference in a new issue