Record Phase A evidence, brief and roadmap status
pauljd/davidson-ci: Davidson CI / quality (push) Failing after 1m46s
pauljd/davidson-ci: Davidson CI / ai-review (push) Failing after 1m27s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-11-02 00:26:14 +00:00
co-authored by Claude Opus 5.5
parent cef9e74d88
commit 10f0c90136
3 changed files with 68 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
# Orbit TV 0.39.0 verification
Smart Channels Phase A, Paradox only. Full report for Paul: https://claude.ai/artifact/N5QipynfmMu3uUtaXouaAg
## Changed
- A shared scheduling engine (ChannelSchedule.kt) with channel configuration. Paradox is the only channel configured.
- Whole series read in bounded pages, cached. Seven days planned ahead, appended to and never rewritten.
- Three versioned files in no_backup/schedule: episodes, schedule and aired progress. Atomic writes, validation, last good copy. catalogue.db isn't touched.
- The channel falls back to its existing loop outside its plan, or when switched off.
- The guide reaches seven days ahead, for every channel.
## Checked on the box, 2 November 2026
- 688 episodes read in 12 requests and 3.07 s. First plan 276 ms, 231 programmes. Extension from 5.5 to 7 days 585 ms, 0 requests. 78,119 bytes stored, plus backup copies.
- Tuning: 338 to 512 ms for the provider, then 1.4 to 2.3 s to ready, 4 timed tunes. One earlier tune was still waiting at 25 s, not reproduced, cause unknown.
- Schedule file fingerprint unchanged across restarts. catalogue.db fingerprint unchanged (b630828b...).
- Extension kept every committed programme and continued the sequence.
- Damaged and deleted schedule files recovered from the saved place with no provider requests.
- An unavailable programme showed a message, and the next programme played by itself.
- The guide reached Mon 9 Nov 01:57.
## Unit tests
- assembleDebug, testDebugUnitTest and lintDebug pass; 174 tests, 0 failures, 23 new.
## Not checked
- Join-in-progress on Paradox by eye. A unit test covers it, and the seek code is unchanged.
- Emby offline on the box, and a daylight saving change on the box. Unit tests cover keeping a plan with no provider.
- A show finishing and restarting on air. Unit test only.
- Several days of real running, including hourly top-ups.
- Memory has no pre-engine baseline.
@@ -0,0 +1,35 @@
Orbit TV — Smart Channels Foundation & Controlled Rollout
Paul's brief, 1 November 2026. Approval is for Phase A only; Phases B to D need separate review.
Context
We've reached an important milestone with Orbit. The Android TV application now has a working home screen, EPG, picture-in-picture, channel branding, remote navigation, animated idents and clock-driven playback.
Although we have approximately 25 planned and branded channels, only around 3–4 are currently broadcasting real programmes. This is intentional. Before activating the rest of the network, I want to establish a reliable, scalable scheduling foundation. The goal is to build one dependable broadcasting engine that can support 25 or more channels, each with its own programming personality. We are not rebuilding Orbit or redesigning the interface.
1. Primary objective: replace the small repeating playlists with persistent, clock-driven schedules from larger pools. Complete TV series, sequential progression across seasons, multiple shows rotating, movie and documentary programming, about seven days planned ahead, repeat cooldowns, local-time blocks, stable EPG, recovery from restarts and provider interruptions, efficient with a very large catalogue. A programme that started 18 minutes ago plays from about 18 minutes in. Do not change this behaviour.
2. Preserve the existing application: interface and navigation, home and categories, EPG, picture-in-picture, channel numbers, idents and logos, information bar, remote shortcuts, Media3 playback, existing working channels. Smallest changes needed. No regressions.
3. One universal scheduling engine with channel-specific configuration: eligible series and films, preferred genres and curated titles, rotation rules, ordering, cooldowns, time-of-day and weekday programming, events and marathons, priorities and exclusions. No channel-specific logic in the core. Design for extension, implement incrementally.
4. Controlled rollout.
Phase A, Paradox: full-series metadata, sequential progression, rotation, persistent rolling seven-day scheduling, correct start and end times, EPG integration, correct playback offsets, restart and recovery. Measure actual performance. Stop for review.
Phase B, Terra and After Dark: documentary series and varied runtimes; feature films, long-form scheduling, film cooldowns. Same engine.
Phase C, Vortex: hundreds of episodes, ordering, avoiding premature repeats, continuity, efficient metadata. No repeated fetching.
Phase D, remaining channels progressively, reusing the engine. Do not activate all 25 at once.
5. Storage and data safety: approved separately from catalogue.db. Do not modify or migrate catalogue.db. App-private, versioned format, atomic writes, validation, last known good where practical, progression independent of schedule, explicit fallback to the loop engine, no clearing app data to recover. Rollback must not destroy catalogue, connection or channel configuration. Keep loops until fully verified.
6. Schedule stability: a committed programme doesn't change on restart, channel change, Emby disconnect, new metadata or window extension. Append rather than recreate. Stable timestamps, local time for display and rules, daylight saving handled. EPG and player always agree. Unavailable media handled without corrupting the schedule or losing progression.
7. Performance: do not import every episode. Episodes only for active pools. Bounded requests, reasonable concurrency, caching, incremental generation, background work, small records. Measure initial generation, episode fetch, provider requests, storage size, memory, extension time, tuning latency. Actual measurements rather than estimates.
8. Programming intelligence: eventually explicit selections and exclusions, curated rules, reliable metadata, supporting genre and category, optional preferences. Weak matches must not silently populate channels. Users review, accept, reject, override. For now, manually configured pools.
9. Acceptance before leaving Paradox: sequential progression through complete series, stable rotation, useful seven-day EPG, correct join-in-progress, no schedule changes after restart, progression persistence, recovery from missing media, recovery from missing or corrupted storage, no changes to catalogue.db, no regressions, no changes to unrelated channels, real measurements. Test on actual hardware where possible.
10. Working agreement: inspect the repository first, smallest safe Phase A, keep docs consistent with verified changes, no unnecessary abstractions, services, dependencies or migrations, no silent scope growth. After Phase A provide: summary, files changed, tests and results, actual measurements, limitations, rollback, next-phase recommendation.
Guiding principle: build the broadcasting foundation once, prove it properly, then let each channel develop its own identity. Local-first, lightweight, modular and under the user's control. Preserve what works. No unnecessary rewrites.
+4
View File
@@ -69,6 +69,10 @@ Profiles and PINs, more providers, authorised IPTV and external guide data, them
Audit and phased plan are in review, from `docs/briefs/indexing-programming-engine-2026-11-01.md`: https://claude.ai/artifact/YYGHnyn7fhxfM1NctEtexw. Nothing from it is approved or built yet.
## Smart channels status
Phase A of [the Smart Channels Foundation brief](briefs/smart-channels-foundation-2026-11-01.md) is built and on the box as 0.39, on Paradox only, awaiting Paul's review. See VERIFICATION-0.39.0.md. Phases B to D (Terra and After Dark, Vortex, the remaining channels) need separate approval. Animated idents are design files only and aren't in the app yet.
## Future polish ideas
Paul's ideas, 1 November 2026. Not fixes and not scheduled.