Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
3.2 KiB
Orbit TV 0.99.12: a failed show no longer costs a whole pool refresh
This answers Paul's item 6 of 4 November 2026 at 12:37: whether a single failed series read can be handled safely without throwing away an otherwise valid refreshed pool. It changes how pools are read, not how programmes are scheduled. It includes 0.99.11.
The problem
Under 0.99.10, Heroes' refresh failed twice at its 6th list entry, X-Men: The Animated Series, after about 18 seconds with no HTTP status. That's a transient timeout: the third attempt at 12:31 succeeded. Vortex, Terra and Riot had failed the same way once. One failed read abandoned the whole refresh, so every other show's fresh read was thrown away and the channel kept its old pool.
What's in it
PartialRead and readChannelPool(previous = …). When one listed show's search or episode read fails with a retryable error such as a timeout, that show keeps its copy from the previous pool and the rest of the refresh stands. Film channels work the same way, film by film.
Safeguards (nothing is ever dropped because a read failed):
- A show with no previous copy abandons the refresh, and the whole previous pool is kept, exactly as before.
- So does a failure that isn't worth retrying, such as an authorisation error.
- More than 3 failures in one refresh is treated as a provider outage and also abandons it.
Retry. A refresh that kept previous copies is saved as due again in 6 hours rather than a week, so the failed shows are retried soon.
Logging. The log notes poolRefreshPartial carried=N. Each failure is already logged by list position, step and kind.
Checks before install
- 426 unit tests pass, including the hand-run replays. Lint has no errors.
- New PartialPoolReadTest:
- A failed show keeps its previous copy (series, or a film named with its year).
- Nothing is dropped when no previous copy exists, or when the failure isn't retryable.
- More than three failures abandons the refresh.
- Scheduling is unchanged: a four-week replay of all 30 channels on box copies taken after 0.99.11 was installed gives the same fingerprints as the scheduling code before this change.
Rollback
Install 0.99.11. Pools saved with an earlier retry time are simply read again, as 0.99.11 would anyway.
Installation record (4 November 2026, about 12:57 GMT)
Paul approved this release at 12:56. Orbit wasn't playing; the TV was on its developer settings, where wireless debugging had just been switched back on. I took a snapshot of all 96 schedule files and installed over 0.99.11. The box reports 0.99.12-safe-pool-refresh.
Orbit ran a full scheduling pass, logging all 30 channels with clashes=0, and I then returned the TV to its home screen. There was no crash and no player error. No channel was due a top-up or a pool refresh, so no partial refresh occurred. The rollback APK is in outputs/revision-0.99.11.
- Bookings, episode cursors and shuffle decks are unchanged: every plan and progress file kept every entry.
- Booking fingerprints: a four-week replay of all 30 channels on box copies taken after this install gives the same fingerprint under 0.99.11's code and 0.99.12's on every channel.