From 7f0601e42b9df979dab2a780ebaf1a19358bf072 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 8 Oct 2026 07:08:33 +0000 Subject: Record the approach-2 decision and the furniture toggle Approach 2 chosen, built in the phase order already proposed -- it is a superset of approach 1, so the ad-detection work still lands first and the library last. Advertising is always skipped; the show own intro, cue and credits obey a single preference defaulting to on, because that is what happens today. The toggle settles a bootstrapping question the design had left open. A furniture clip cannot be promoted until a second fetch occasion has passed, so until then there is nothing to label with. The zero-gap classification fills that gap: served length equal to declared means nothing was inserted, so every break is furniture and position decides which kind; otherwise a break is advertising unless a promoted clip says otherwise. Day one is correct on the 138 zero-gap episodes and identical to current behaviour everywhere else. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B --- .../specs/2026-10-08-furniture-and-cues-design.md | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) 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. -- cgit v1.2.3