From a1eb87873d04f6e0e31f697f9a03a642704e6d96 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Wed, 1 Jul 2026 12:44:23 -0400 Subject: [PATCH] [docs] Lock all live-ingest plan decisions (1-5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - D1 whitelisted hosts only (empty-when-nobody-live accepted). - D2 read + post + zaps as the end state, phased: Phase 3 read chat + host zaps, Phase 3b post chat (own sub-flag + moderation stance). - D3 hls.js, lazy-loaded + vendored behind the flag (native HLS is Safari-only). - D4 one Live tab: live first, then recent ended (VOD) — also mitigates the sparse-live empty-tab concern. - D5 user read relays + a configurable set of live-discovery relays (widens where, not who). Co-Authored-By: Claude Opus 4.8 --- docs/live-ingest-plan.md | 86 +++++++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 32 deletions(-) diff --git a/docs/live-ingest-plan.md b/docs/live-ingest-plan.md index 8d14cc6a..3e89f94f 100644 --- a/docs/live-ingest-plan.md +++ b/docs/live-ingest-plan.md @@ -18,37 +18,56 @@ a config flag that leaves **no trace** when off. ## Decisions needed -> **DECISION 1 — Listing scope.** List only **whitelisted hosts** (reuse the -> existing whitelist/WoT filter on the host `p`/author), or **all** `status=live` -> events discovered on the read relays (capped)? -> *Recommendation: whitelisted hosts for v1 — consistent with the rest of bitvid's -> trust model and avoids surfacing arbitrary/abusive streams.* +> **DECISION 1 — Listing scope. ✅ LOCKED: Option A (whitelisted hosts only).** +> The Live tab lists only kind-30311 events whose host is a whitelisted/trusted +> author, reusing the existing whitelist/WoT filter — no new moderation surface, +> consistent with the main feed + Shorts. Accepted trade-off (maintainer): live +> is sparse, so the tab may be empty when no whitelisted creator is streaming; +> that's expected with a whitelist (ship a clear "no one you follow is live right +> now" empty state). A broader "discover live" surface can come later. -> **DECISION 2 — Chat level (read-only vs read + post).** Chat is **committed to -> the roadmap** (Phase 3), the only open question is how far: **read-only** (kind -> 1311 ingest — stays cleanly inside "ingest"), or **read + post** (signing/ -> publishing 1311 events — a write path, likely its own sub-flag + moderation -> stance). *Recommendation: read-only in Phase 3, then read + post as Phase 3b if -> wanted. Playback (Phases 1–2) ships before chat regardless.* +> **DECISION 2 — Chat level. ✅ LOCKED: read + post + zaps as the end state, +> reached in phases.** Target is full participation (read chat, post chat, zap the +> host). Phased so playback ships first and posting (a write path) lands cleanly: +> - **Phase 3** — read-only kind-1311 chat **+ host zaps** (zaps via the existing +> NWC/zap system; active participation from day one of chat). +> - **Phase 3b** — **post chat**: sign/publish kind-1311 into the stream, behind +> its own sub-flag (`FEATURE_LIVE_CHAT_POST` or similar), with a moderation +> stance (rate-limit; you're publishing into someone else's stream — decide how +> blocked/muted authors and your own outbound spam are handled). +> Rationale (maintainer): end up at read+post+zaps; phasing keeps the write path +> and its moderation questions out of the initial playback release. -> **DECISION 3 — HLS playback dependency.** OK to lazy-load a small HLS library -> (**hls.js**, ~cdn/vendored) ONLY when the flag is on, or must playback stay -> dependency-free (native `