docs: restructure TASKS.md into a catalog — one file per task in TASKS/
TASKS.md is now the index (status table, open items, research pointer). 33 files: 32 task files + 1 research facts file. The full take-saga narrative and all design decisions are preserved verbatim; the catalog makes the queue readable without opening every task body. Schema and AGENTS.md updated to reflect the new layout.
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
# TASK 34 — Scheduled streams, Text-drawer version (queued 2026-09-01; option (b) with the creator's placement)
|
||||
|
||||
> Catalog: [`TASKS.md`](../TASKS.md) — status and requirements live here.
|
||||
|
||||
|
||||
**Scope ruling (2026-09-01):** this is the whole scheduling story — announce a LIVE show (countdown
|
||||
watch-page + subscriber notifications), then the creator shows up and pushes. "Going live is our
|
||||
schedule." Scheduled *playout* of pre-recorded files: discussed and DECLINED by the creator.
|
||||
Premiere/upload scheduling: out of product (see closed list).
|
||||
|
||||
**Goal:** announce "Friday 8pm" from inside the app — YouTube notifies subscribers and runs the
|
||||
channel countdown; come Friday, one click goes live into the scheduled broadcast. Scheduling is a
|
||||
"my channel" concern, so it lives in the always-visible **Text drawer**, not the go-live modal.
|
||||
|
||||
1. ☐ Drawer gains ☑ *Scheduled livestream* + date/time (replacing the read-only "Scheduled Start"
|
||||
row). Checking + Save **creates** the broadcast: insert `liveBroadcasts` with a future
|
||||
`scheduledStartTime`, bound to the cached reusable stream — the drawer's Save path grows its first
|
||||
create operation (today it can only update an existing broadcast).
|
||||
2. ☐ Invariant: **at most one open scheduled broadcast**; unchecking before airtime →
|
||||
`liveBroadcasts.delete` (legal in created/ready).
|
||||
3. ☐ **Adoption:** go-live checks for the open scheduled broadcast and pushes into it instead of
|
||||
inserting a new one. Mid-stream title/desc edits ride the existing Update path (unchanged).
|
||||
4. ☐ `LiveBroadcastFormViewModel` owns `IsScheduled` + `ScheduledStart` (nullable), persisted with the
|
||||
other `Broadcast.*` keys; local time in, RFC3339 offset on the wire — the timezone edge is where the
|
||||
bugs will live: test it (DST boundary, non-UTC creator).
|
||||
5. ☐ **Research flags (cite before building — spin guard):** (a) pushing *before* the scheduled start
|
||||
with `enableAutoStart` — live immediately or held? Decides a "starting early — it goes live NOW"
|
||||
confirmation. (b) delete semantics for a ready broadcast bound to a reusable stream.
|
||||
6. ☐ Test (the ONE): schedule → persists + inserts (fake service captures a future scheduledStartTime
|
||||
+ boundStreamId); start → adopts instead of inserting; uncheck → delete called.
|
||||
- **Test-phase note:** dark by design while the visibility lock holds (Private notifies nobody); the
|
||||
creator can still exercise insert/adopt/cancel. Full shine arrives with TASK 36's unlock — pleasing
|
||||
coupling, deliberate.
|
||||
|
||||
Reference in New Issue
Block a user