Files
OrbitTv/docs/VERIFICATION-0.99.13.md
pauljdandClaude Opus 5.5 3fa95b2afe
pauljd/davidson-ci: Davidson CI / quality (push) Failing after 2m4s
pauljd/davidson-ci: Davidson CI / ai-review (push) Failing after 1m37s
0.99.13 installation record
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-11-04 14:23:50 +00:00

8.4 KiB

Orbit TV 0.99.13: story-aware episode grouping on Paradox (Living Network Stage A)

Paul approved Stage A for implementation on 4 November 2026 at 13:38. Installing it needs its own approval. This release changes scheduling on Paradox (106) only. Playback, presentation, assets, the homepage, the Drive-In and the other 29 channels are unchanged. Committed bookings are never rewritten.

What's in it

  • Story detection (StoryGroups.kt, storiesOf). A run of episodes counts as one story only when:

    • every title ends with a part marker: "(1)", "(2)" or "Part One", "Part II" and so on;
    • the parts are numbered from 1 with no gaps;
    • there are 2 to 6 parts;
    • each part is the show's next episode, in the same season or running from a season's last episode into the next season's first. That second case covers The Best of Both Worlds and Redux.

    Anything less certain isn't a story and plays exactly as before. That includes:

    • orphan parts, such as The X-Files' The Blessing Way (2), whose part 1 Anasazi has no marker;
    • runs that aren't consecutive;
    • both halves in one file, such as Encounter at Farpoint;
    • serials of 7 parts or more.

    Story arcs with no part markers, such as Heaven Sent and the Monks trilogy, would need a hand-checked list. None is included until you approve one.

  • Mixed shows (Doctor Who, The X-Files, Star Trek: The Next Generation and the other daytime standalones) shuffle each story as a single card in their fixed deck (shuffledStories), so its parts sit together in order. The deck is still the same every time, and a saved place still works.

  • Booking (extendWeighted, switched on by ChannelProgramming.storyGrouping, which only Paradox sets):

    • A story is booked whole: part 1 opens it, and each later part follows straight after, ahead of normal rotation.

    • A story is only opened if:

      • every part starts inside the block;
      • no part clashes with the same show on another channel;
      • it ends before the next appointment.

      Otherwise another show takes the slot, and the story waits.

    • A mixed show never opens on a later part, so no isolated part 2 or 3 is booked to fill a slot. If a part was cut off before grouping, as in today's committed plans, its deck moves on to the next whole card.

    • In-order shows (Buffy, Supernatural, Fringe, Farscape and so on) keep their order. A story's parts follow on back to back instead of waiting for the show's next turn.

    • Tallies, tiers, rest rules, clash avoidance and cursors are unchanged. The booking reason says "story: part k of n".

  • Version: 0.99.13 (versionCode 143).

Checks before install

  • 436 unit tests pass (2 skipped: hand-run replays that need input files). Lint has no errors.
  • Nine new tests in StoryGroupingTest:
    • A Doctor Who-like series finds exactly its 2-, 3- and 6-part stories, including a cliffhanger across a season break.
    • Every kind of uncertain link is left alone: orphans, gaps, one-file doubles, mid-season breaks and a 7-part serial.
    • A mixed show airs every story whole, in order and inside its block, and every episode still comes round.
    • An in-order show keeps its progression.
    • A story that would meet the same show on another channel waits.
    • A top-up straight after a part 1 carries on with part 2.
    • A story cut off before grouping never restarts mid-way.
    • With no markers, grouping on and off book identically.
    • Only Paradox groups stories.
  • Four-week Paradox replay on copies of the box's files after the cutover (docs/replays/story-grouping-replay-0.99.13.txt, StoryGroupingReplayTest). It runs from the committed plan, tops up every six hours, and avoids every other channel's programmes.
0.99.12 0.99.13
Story parts booked 80 98
Parts stranded (not straight after or before their other parts) 80 0
Complete stories 0 47 (Doctor Who 16)
Doctor Who parts stranded 33 of 33 0 of 36
Daytime shares Doctor Who (2005) 14%, (2023) 14% the same
Same file within 24 h; same show twice running outside a story; in-order stepping back; off its deck; gaps; outside block; clashes; never aired 0 each 0 each
  • Stories found in Paradox's pool:
    • Doctor Who (2005): 25 (23 two-part, 1 three-part, 1 six-part)
    • Doctor Who (2023): 2
    • The X-Files: 18
    • Stargate SG-1: 19
    • Buffy: 9
    • Star Trek: The Next Generation: 8
    • Farscape: 3
    • Fringe, Sliders and Warehouse 13: 2 each
    • Supernatural and both Outer Limits: 1 each
    • Seven marked episodes were unverified and left as they are: TNG 2, Stargate 1, The X-Files 4.
  • A save and reload every 18 hours gives the identical four weeks.
  • Committed plan: kept exactly. Its 26 stranded parts, 13 of them Doctor Who, still air as booked, under the never-rewrite rule.
  • Every other channel: a four-week replay of all 30 channels was run on 0.99.12 (built from the commit before this change) and on 0.99.13 (docs/replays/replay-fingerprints-0.99.13.txt). Every committed fingerprint is identical. Only 106 differs, as intended.

Known limits

  • On air later: Paradox's committed plan runs to about 11 November 13:45, so grouping shows on air from then, as the plan rolls forward.
  • Not covered by the replays:
    • The replays use copies of the box's files from the cutover, 4 November 13:12.
    • Clash avoidance is against the other channels' replayed plans, which is close to, but not exactly, the box's top-up order.
    • Tested here as scheduling logic only. What airs needs checking on the box.
  • Unmarked arcs aren't grouped until a hand-checked list is approved.

Rollback

Install 0.99.12. The story rule exists only in code, and plan files have the same format, so saved plans load unchanged. Bookings made by 0.99.13 stay as booked.

Installation record (4 November 2026, 14:20 GMT)

Approved by Paul at 14:05, to be installed once the TV was idle. At 14:19 the box was on its home screen with nothing playing. Installed over 0.99.12 with adb install -r. The box reports versionCode 143, 0.99.13-story-grouping.

  • Snapshot and rollback:
    • All 191 schedule-folder files were copied off the box before install, to install-0.99.13-20261104-141955/before with SHA-256 sums.
    • A rollback copy is on the box in no_backup/schedule-rollback-0.99.12.
    • The 0.99.12 APK is in outputs/revision-0.99.12.
    • The coordinated cutover snapshots are kept.
  • Committed bookings: all 31 plans compared before and after two launches.
    • Nothing was added, and every plan's cursor is identical.
    • 4 live plans (202, 602, 605, 611) and some .prev copies dropped 1 to 6 programmes. Every one ended more than 24 hours earlier, which is the ordinary daily trim.
    • Every remaining entry is identical, including its presentation key.
    • Paradox's plan file is byte-identical. The week committed at the cutover is untouched, and grouping begins with its next new bookings.
  • Episode cursors: 12 aired places moved. Each is exactly the latest programme of that show already started in its plan, which is the normal record of what has gone out. No place moved anywhere else, and no field other than places, last show and films shown changed.
  • Shuffle decks:
    • Other channels: unchanged; their code path is untouched.
    • Paradox's mixed shows: they now use the grouped deck, with each story as one card, by design. Their saved places are kept and carry on from there in the new deck.
  • Top-up passes: all 30 channels topped up on both launches with added=0 and clashes=0. Plan times were 89 to 1,426 ms, which is reading committed plans with nothing to add. Paradox took 271 to 280 ms.
  • Other channels: their plans and presentation keys are unchanged. Story grouping is configured on Paradox only (StoryGroupingTest.onlyParadoxGroupsStories).
  • Playback: Orbit resumed playing (one player start, audio running). There were no player, decoder or crash errors in the log. I then returned the box to its home screen.

On-air verification (pending)

  • Paradox's first grouped top-up: about 5 November 13:45, when its plan drops under six days ahead. It books from about 11 November 13:45. Expect "story: part k of n" reasons on new Doctor Who and other multi-part bookings, every later part straight after the one before, and no lone later parts.
  • Not yet observed on the box: top-ups and restarts part-way through a story. These are covered by the unit tests and the save-and-reload replay only.
  • Your eyes and ears: Paradox's grouped stories on air from about 11 November.