From c5f91ce68308329960bed6538bcad347fd7b6b4a Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Wed, 1 Jul 2026 12:48:58 -0400 Subject: [PATCH] [docs] Review pass on shorts + live plans: fix stale/contradictory bits, close gaps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shorts: - Status now "decisions locked"; intro lists the real scope (exclusion + publish). - Remove stale "candidate signals / confirm in Phase 0" preamble (D4 locked). - Fix inaccuracy: native shorts are kind-30078 + isShort, not kind-22. - Moderation section says locked + notes the NSFW no-autoplay rule. - Rewrite Risks to the locked decisions: main-feed-exclusion regression risk, native-marker-must-round-trip risk, WebTorrent-swarm-storm on autoplay, search scope sub-decision. Drop the now-inverted double-listing/aspect-ratio risks. Live: - Status "decisions locked"; scope reads read→post chat + host zaps. - Config flags corrected: introduces FEATURE_LIVE_INGEST *and* FEATURE_LIVE_CHAT_POST (Phase 3b); "two flags" footprint fixed; chat-post UI gated on both. - Phase 0 now "confirm field mapping + default relays + zap target" (not "lock decisions", already locked). - Moderation: read-chat WoT-mute filtering + post-chat rate/stance as design items. - Add risks: high-volume chat buffering, planned/scheduled streams, multiple streaming renditions, private/token-gated streams. Zap-target resolution noted. Co-Authored-By: Claude Opus 4.8 --- docs/live-ingest-plan.md | 73 ++++++++++++++++++++++++++++---------- docs/shorts-plan.md | 75 ++++++++++++++++++++++++++-------------- 2 files changed, 104 insertions(+), 44 deletions(-) diff --git a/docs/live-ingest-plan.md b/docs/live-ingest-plan.md index 3e89f94f..def50e33 100644 --- a/docs/live-ingest-plan.md +++ b/docs/live-ingest-plan.md @@ -3,16 +3,17 @@ TODO ref: **#16** in `todo/TODO_2026-06-20_pre-launch.md` (watch-only). Publishing / "Go Live" is **#16c** — a separate, larger effort with its **own** config flag; it is explicitly **out of scope** for this doc. -Status: **PLANNING → needs a research spike (Phase 0)**. Not started. +Status: **DECISIONS LOCKED (D1–D5)** — Phase 0 research spike first (confirm tag +shapes + hls.js/CORS + default relays), then build. Not started. Live streams are **NIP-53 Live Activities** — a *different* NIP from short-form video (#16b / NIP-71). Kind **30311** is the live event (addressable, carries the `streaming` URL — usually HLS `.m3u8` — plus `status`, title, host `p` tags); kind **1311** is live chat. zap.stream and shosho.live publish these. -Scope of this feature: **discover live events, play the HLS stream, optionally -show read-only chat.** No broadcasting, no media hosting. Everything ships behind -a config flag that leaves **no trace** when off. +Scope of this feature: **discover live streams, play the HLS stream, chat +(read → post, phased), and zap the host.** No broadcasting, no media hosting. +Everything ships behind a config flag that leaves **no trace** when off. --- @@ -73,9 +74,15 @@ a config flag that leaves **no trace** when off. ## Config flags (off = no trace) -Add **`FEATURE_LIVE_INGEST`** to `config/instance-config.js` (default `false`), -threaded through `js/config.js` → `js/constants.js` like `FEATURE_NIP71_INGEST`. -(The separate `FEATURE_LIVE_PUBLISH` for #16c is **not** part of this doc.) +Flags introduced by this doc (both default `false`, threaded through +`js/config.js` → `js/constants.js` like `FEATURE_NIP71_INGEST`): +- **`FEATURE_LIVE_INGEST`** — the whole watch-only feature (tab, discovery, + playback, read chat, host zaps). +- **`FEATURE_LIVE_CHAT_POST`** — the Phase 3b write path (posting chat); only + meaningful when ingest is also on. Kept separate so an instance can allow + watching + reading chat without enabling outbound posting. + +(The `FEATURE_LIVE_PUBLISH` "Go Live" flag belongs to **#16c**, a separate doc.) When `FEATURE_LIVE_INGEST` is off, all of the following must be absent: 1. **Sidebar tab** — the "Live" link is not rendered in `components/sidebar.html`. @@ -85,7 +92,9 @@ When `FEATURE_LIVE_INGEST` is off, all of the following must be absent: 4. **Route** — `#view=live` falls back to the default view. 5. **HLS library** — hls.js is dynamically imported only inside the live player, so it never loads when the flag is off (keeps the bundle/network clean). -6. **Config surface** — the two flags are the only footprint. +6. **Chat-post UI** — the compose box (Phase 3b) is absent unless BOTH + `FEATURE_LIVE_INGEST` and `FEATURE_LIVE_CHAT_POST` are on. +7. **Config surface** — the flags above are the only footprint. > **Management UI note:** a **"Live" sub-tab in profile → My Videos** (alongside > Videos / Shorts, reusing the admin sub-tab pattern) is for managing the user's @@ -141,8 +150,9 @@ chat message. Read-only ingest = subscribe by `#a`, render newest. (`js/services/playbackService.js`) sets `videoEl.src` for URL/WebTorrent; HLS needs hls.js attached to the `