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 `