Roadmap¶
Beep runs on stock upstream Galene, end to end, verified against a production container image and Postgres. What follows is what isn't done.
Where things stand¶
| Area | State |
|---|---|
| Meeting flow (join, media, chat, kick) | Works. make e2e-all — 3 specs |
| Contract portability | Proven. make e2e-alt — the ~220-line alt-backend passes the guest specs |
| Presence | Works. Operator /ws connection; join and leave times persisted |
| Admin surface | Works. Server-rendered UI, audit rows, kick, force-end |
| Deploy kit | Works. compose.prod.yml + Caddy; SFU image builds pinned upstream |
| Recording | Not wired up. See below |
| Plugins | Scaffolded (Pluggy); no reference plugin |
| Metrics | Nothing |
1. Recording¶
The largest genuine gap. Galene can record to disk, and the operator
connection can issue groupaction/record — but upstream emits no
signal when the diskwriter finishes, so the backend can't learn that a
recording is ready without polling the recordings directory.
Needed: start/stop through the operator, a completion strategy, storage
(the recordings table and Artifact model already exist), and a
retention policy.
2. Multi-room scale¶
The backend holds one WebSocket per active room. Fine at meeting scale, unmeasured beyond it. Measure at ~100 concurrent rooms before promising anything; the cheap mitigation is to hold a connection only for rooms that actually need presence or moderation.
3. Per-room configuration¶
Every room under the meetings/ parent inherits the same description —
same max-clients, same recording policy. Per-user permissions still
vary, because they come from the token. If per-room settings become a
requirement, that means writableGroups plus upstream's
/galene-api/v0/ CRUD surface — or reviving the descriptionStore
patch, which is the one scenario where that work would earn its place.
4. Metrics¶
Nothing today. Upstream's .stats is coarse and explicitly unstable, so
anything real would be instrumented in the backend: meetings started,
participant-minutes, operator socket health (already surfaced on
/admin/status), chat throughput.
5. Plugins¶
Pluggy hookspecs exist and the dispatcher fires them on
participant_joined / participant_left. No reference plugin ships, so
the extension story is unproven end to end. A transcription or
attendance-export plugin would be the honest test.
6. Upstream contribution¶
An 11-test patch against upstream Galene is prepared and green —
stats/ and limit/ had no tests at all. See
notes/v3/patches/upstream-0001-tests.patch. Beyond that, the LiveKit
BUNDLE finding in notes/v3/report-m3.md is worth sending regardless of
whether any code is.
Not planned¶
- Forking Galene. Settled; see
notes/v3/upstream-gap-check.md. - LiveKit client-SDK compatibility. Architecturally blocked at the WebRTC transport layer — one peer connection per stream (Galene) versus one bundled subscriber PC (LiveKit), which RFC 8843 BUNDLE won't let you bridge. Would require a Galene core refactor.