Files
OrbitTv/docs/VERIFICATION-0.99.7.md
pauljdandClaude Opus 5.5 f42e30be31
pauljd/davidson-ci: Davidson CI / quality (push) Failing after 1m49s
pauljd/davidson-ci: Davidson CI / ai-review (push) Failing after 1m29s
0.99.7 installation record
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-11-04 10:05:47 +00:00

3.7 KiB

Orbit TV 0.99.7: faster top-ups and pool diagnostics

This release prepares for the final audit (4 November 2026). It changes no scheduling decision; the same programmes are booked. It includes 0.99.6.

What's in it

  • Clash avoidance reads less.

    • Before: each time a channel tops up, it parsed every other channel's whole plan file to avoid clashes, about 30 files and several megabytes on the box. A full scheduling pass did that once per growing channel.
    • Now: the scheduler keeps just what clash avoidance needs from each plan (title key, start and end, as Airing and clashesWithAirings). It keeps them together with the plan file's modified time and size, and reads a file again only when it has changed.
    • The log line gains othersMs= when it builds this index, so its cost on the box can be seen.
  • Weighted planning looks each show's next episode up once. extendWeighted worked out every eligible show's next episode several times per pick, by searching its episode list. It now keeps the answer until that show plays.

  • Pool diagnostics, counts only, never titles. When a listed series isn't added to a pool, the log names its position in the list and the reason:

    • listed=N unmatched candidates=C exact=E: the server's search found no exact title.
    • listed=N matched copies=C playableEpisodes=0: it was found, but none of its episodes can play on the box.

    This is how Vortex's Tenchi Muyo! Tenchi Universe will be traced at its next refresh. The library holds it (1995, TV-PG); the pool reader drops it, for a reason not yet known.

Checks before install

  • 415 unit tests pass, including the hand-run replays. Lint has no errors.
  • The same programmes are booked: a four-week replay of all 30 channels on box copies taken at 09:40 gives exactly the same fingerprint as 0.99.6 on every channel (docs/replays/replay-fingerprints-0.99.7.txt).
  • Where the time went, measured on box copies on this machine:
    • A weighted top-up of Orbit X takes about 0.2 seconds of planning.
    • Reading the 30 other plans takes about 0.07 seconds.
    • The box took 41 seconds, so most of that time is most likely its slower JSON parsing and the pools refreshing alongside. That isn't proven. othersMs= will show the split on the box.

Rollback

Install 0.99.6. No saved data changes.

Installation record (4 November 2026, about 10:04 GMT)

Paul approved this release at 09:43; the box was on, but nothing was being watched. The first install attempt hit the box's adb connection dropping and didn't install, though it did open Orbit. I then took a snapshot of all 96 schedule files and installed over 0.99.6. The box reports 0.99.7-planning-speed. Orbit relaunched, and when the checks were done I returned the TV to its home screen with a launcher intent. There was no crash in the log. The rollback APK is in outputs/revision-0.99.6.

  • Plans: every plan kept every remaining entry. No cursor was reset.
  • New bookings: After Dark topped up on its own, adding 15 programmes from 10 November 09:54, in its day and late blocks, with clashes=0. These are its first bookings without the withdrawn films.
  • Speed, measured on the box:
    • After Dark's top-up took 10.6 seconds, of which 9.4 seconds (othersMs) was reading the other 30 plans the first time.
    • Every later channel in the pass planned in 64 to 560 ms, reusing the kept airings.
    • So the slow top-ups were reading the other plans, not the weighted rule. Under 0.99.6, Orbit X took 41 seconds and Vortex 17. That cost is now paid once per pass, not once per growing channel.
  • Pool diagnostics: no channel re-read its pool this pass, because none was due. Vortex's next refresh, about 11 November, will log the Tenchi Universe reason.