diff options
| -rw-r--r-- | docs/superpowers/specs/2026-10-08-furniture-and-cues-design.md | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/superpowers/specs/2026-10-08-furniture-and-cues-design.md b/docs/superpowers/specs/2026-10-08-furniture-and-cues-design.md index 2e91362..0451a9b 100644 --- a/docs/superpowers/specs/2026-10-08-furniture-and-cues-design.md +++ b/docs/superpowers/specs/2026-10-08-furniture-and-cues-design.md @@ -140,3 +140,50 @@ for. The alternative is to skip only inserted advertising and merely mark the fu against real shows before it moves a playhead. 3. The cue prior, validated against the length gap. 4. Approach 2's library, if D3 is wanted. + +--- + +## Decisions, 2026-10-08 + +**Approach 2, built in the phase order above.** Approach 2 is a superset of approach 1, so the +sequencing recommendation stands: the ad-detection improvements land first and the library last. + +**Furniture skipping is a setting; advertising is not.** Advertising is always skipped. The show's +own intro, break cue and credits are skipped according to a single preference, default on -- +default on because that is what happens today, so defaulting it off would be an unrequested +behaviour change. + +### What this adds to the design + +**Breaks carry a kind.** `ad`, `intro`, `cue`, `outro`. The server decides it; the phone stores it +alongside the range and filters on it at playback. + +**The kind is decided by a rule that works before the library has anything in it**, which matters +because a clip cannot be promoted until a second fetch occasion has passed: + +1. If the episode's served length equals its declared length, nothing was inserted, so every + break is furniture. Position decides which: opening, closing, or `cue` in between. +2. Otherwise the episode does carry advertising, so a break is `ad` unless it matches a promoted + furniture clip. + +So day one gives correct labels for the 138 zero-gap episodes and treats everything else as +advertising -- exactly today's behaviour, which is the safe default -- and the labels get finer as +the library fills. + +**The cue stays skippable even with furniture skipping off.** A cue sits immediately before an +advertisement, so hearing it is a useful signal that something was cut. It is furniture, it obeys +the setting, and nothing special is needed. + +### Where each part lives + +- Server: `kind` on `store.Break`, decided in `skips.DetectAds` plus the zero-gap rule, carried in + the API's break objects. +- Phone: a `kind` column on `episode_midrolls` (Room schema 13), a boolean in the existing + preferences, and a filter in `MidrollSkip` and `PlayheadPolicy`. +- Readout: the episode screen names each break by kind and shows whether it will be skipped, so + the setting's effect is visible rather than inferred. + +### Open, deliberately + +How the library's clips are chosen for eviction when a show exceeds eight, beyond +least-recently-seen. Not worth settling before there is a real library to watch fill. |
