Add approved roadmap, programming bible and references
Roadmap, programming bible, metadata and matching design and asset inventory, as approved by Paul on 1 November 2026. Keeps both source briefs and the line-up concept sheet in the project, since their only copies were in Codex's working folders. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
A native Android TV prototype for review on Paul's Xiaomi TV Box S 3rd Gen.
|
||||
|
||||
Roadmap and plans: [docs/roadmap.md](docs/roadmap.md), [programming bible](docs/programming-bible.md), [metadata and matching](docs/metadata-and-matching.md), [asset inventory](docs/asset-inventory.md).
|
||||
|
||||
## Revision 0.6.0 — one scheduled Emby channel
|
||||
|
||||
Paul confirmed the 0.5.0 strip hides and displays correctly. The next increment adds a
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.1 MiB |
@@ -0,0 +1,43 @@
|
||||
# Orbit TV asset inventory
|
||||
|
||||
As of 1 November 2026.
|
||||
|
||||
After Dark is the only channel with production assets, and even it has no in-app playback bug or ident yet. One concept sheet covers 17 channels. The boards for the eight new channels haven't arrived, so only their written direction is available.
|
||||
|
||||
### Concept references
|
||||
|
||||
| Reference | Covers | Status |
|
||||
| --- | --- | --- |
|
||||
| Your line-up concept sheet | Vortex, ToonZ, Rewind, Orbit X, Heroes, Wonder, Orbit VHS, Orbit Gold, Orbit Three, Orbit 1, Orbit 2, Orbit Sci-Fi, Orbit Horror, After Dark, Orbit Premiere, Orbit Romance, Orbit Action, plus an Orbit logo and astronaut bee | Saved as `design/references/orbit-lineup-concept-sheet.png`. Reference only. |
|
||||
| Eight new boards | Ring X, Riot, Dark Files, Terra, Odyssey, PixelZ, Evidence, Paradox | Not received yet. |
|
||||
|
||||
The sheet is visual direction only, with nothing to be embedded in the app. Its After Dark line says "uncut classics", which the app doesn't claim.
|
||||
|
||||
### After Dark: what exists
|
||||
|
||||
| Asset | State | Where |
|
||||
| --- | --- | --- |
|
||||
| Primary logo | Designed, not used in the app | `design/channels/orbit-after-dark-v02/exports` |
|
||||
| Compact guide logo | In the app | `orbit_after_dark_epg.webp` |
|
||||
| Background with lit windows | In the app | `orbit_after_dark_background.webp` |
|
||||
| Playback bug | Exported, not in the app | `orbit_after_dark_bug_app.webp` |
|
||||
| Ident, 1.6 seconds | Motion test, not in the app | `orbit-after-dark-v02` |
|
||||
| Ident, 4.2 seconds, night windows | Proof, not in the app | `orbit-after-dark-motion-03` |
|
||||
| Editable sources | Kept | VectorCraft, PhotoCraft and EffectCraft files in those folders |
|
||||
|
||||
The other network assets are the Orbit wordmark, the banner, the drive-in ticket concept and the OrbOffice artwork, whose name is still to change.
|
||||
|
||||
### Still required
|
||||
|
||||
The remaining 24 channels each need the full set below, using After Dark's sizes unless testing shows otherwise.
|
||||
|
||||
| Asset | Tool | Target |
|
||||
| --- | --- | --- |
|
||||
| Primary logo | VectorCraft | SVG source, 1600 x 640 transparent export |
|
||||
| Compact guide logo | VectorCraft | 256 x 80 transparent WebP |
|
||||
| Playback bug | VectorCraft | About 144 x 48 at 1080p, transparent |
|
||||
| Static background | PhotoCraft | 1920 x 1080 WebP |
|
||||
| Animated ident | EffectCraft | Silent H.264 at 720p and 25 fps, about 1 to 1.5 seconds for a first test |
|
||||
| Palette and type rules | Manifest | Yellow stays reserved for remote focus |
|
||||
|
||||
Make assets only as each channel goes live, to keep APK size down and avoid art for channels nobody has built. Check Riot and Orbit Action against photosensitivity guidance before use, because their idents call for fast cuts or flashes.
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,98 @@
|
||||
# Orbit TV metadata and matching
|
||||
|
||||
Approved direction, 1 November 2026. This is a design: none of it is built yet except the coverage check described in [the roadmap](roadmap.md).
|
||||
|
||||
## Metadata and tagging strategy
|
||||
|
||||
Orbit keeps only a thin record per title today, so the plan is to widen it and keep Orbit's own tags in a separate layer. The Emby data itself is never edited.
|
||||
|
||||
### What the code keeps now
|
||||
|
||||
| Record | Fields held | Used for |
|
||||
| --- | --- | --- |
|
||||
| `SampleItem` | ID, title, type, minutes, format, duration | Everything scheduled |
|
||||
| `AfterDarkMovie` | Item, year, rating, up to 8 genres | Film review for 102 |
|
||||
| `SeriesCandidate` | ID, title, year, rating, variant label | Series review for 103 |
|
||||
| `EpisodeCandidate` | ID, title, season, episode, duration, media label | Episode order |
|
||||
| `ScheduledMedia` | Item, locked source ID, locked duration | The timeline |
|
||||
|
||||
### What to add
|
||||
|
||||
| Need | Field | Status |
|
||||
| --- | --- | --- |
|
||||
| Better identification | Original title, stable external IDs, collections | Not requested today |
|
||||
| Classification | Genres on all types, tags, studios, overview | Genres on films only |
|
||||
| Era and order | Year, original air date, season, episode | Partly held |
|
||||
| Suitability | Content rating | Held on films and series, not used for any filtering |
|
||||
| Curation | Cast, director | Not requested today |
|
||||
|
||||
Emby's documentation has to confirm each field's request name, and the coverage check in the roadmap shows how often the provider fills them.
|
||||
|
||||
### Orbit's own tag layer
|
||||
|
||||
Each tag records its value, where it came from and how sure Orbit is. Sources rank in this order: user-confirmed, curated title rule, provider metadata, then inferred. Only user-confirmed tags count as settled, and an unknown value stays unknown.
|
||||
|
||||
| Example | Format and genre tags | Primary preset | Possible crossover |
|
||||
| --- | --- | --- | --- |
|
||||
| The X-Files | Scripted, science fiction, supernatural mystery, cult, 1990s | Paradox | Orbit Sci-Fi |
|
||||
| CSI | Scripted, crime, procedural, forensic | Evidence | None |
|
||||
| Blue Planet | Documentary, wildlife, ocean, natural history | Terra | Odyssey |
|
||||
| The 'Burbs | Film, horror comedy, cult, 1980s | Orbit VHS | After Dark |
|
||||
| Dragon Ball Z | Animated series, action anime, fantasy | Vortex | None |
|
||||
|
||||
Documentary versus scripted, and traditional versus CGI, need explicit values including "unknown". Ring X adds promotion, show type, event date and PPV status.
|
||||
|
||||
### Three limits in today's code
|
||||
|
||||
- **Saved data cap:** saved setup is capped at 512 KiB in one encrypted file, too small for a real library. The catalogue needs its own encrypted local store, chosen after the audit gives real record sizes.
|
||||
- **Hardcoded channels:** saved state has fixed slots for `one`, `toonami` and `afterDark`, and only accepts 101 to 103. Adding channel 26 needs a generic channel list with a tested migration.
|
||||
- **Listed isn't playable:** a catalogue entry only proves a title is listed. Keep separate states for listed, source checked and failed, and recheck when tuning, as Orbit does now.
|
||||
|
||||
## Recommendation engine design
|
||||
|
||||
The engine should behave like a TV programmer who proposes and waits: it suggests from rules it can explain, and nothing reaches a channel until the viewer accepts it. It runs on the box, with no AI or cloud service.
|
||||
|
||||
### Pipeline
|
||||
|
||||
Each stage builds on what Orbit has, and the existing clock schedule stays as the last step.
|
||||
|
||||
| Stage | What happens | What it reuses or needs |
|
||||
| --- | --- | --- |
|
||||
| A. Discovery | Paged read of what this account can see | `EmbyClient`, with new paging and rate-limit handling |
|
||||
| B. Normalise | Map provider data to one internal record, keeping provider IDs separate | Existing validation and text limits |
|
||||
| C. Identify | Match by stable ID first, then title and year. Handle remakes, alternate titles and duplicates. | `labelSeriesVariants` already flags duplicate entries |
|
||||
| D. Tag | Add Orbit tags with source and confidence | New, from the tag layer above |
|
||||
| E. Match | Rank titles against each preset | New |
|
||||
| F. Review | Show a short list with ticks and reasons | Existing review screens as the pattern |
|
||||
| G. Schedule | Feed confirmed titles to the clock engine | `SampleChannel`, with new limits |
|
||||
| H. Repeats | Rotation and cooldowns scaled to library size | New |
|
||||
|
||||
### How matching decides
|
||||
|
||||
Titles are ranked in tiers, because exact weights shouldn't be picked before the audit shows real data.
|
||||
|
||||
1. **User decisions:** explicit picks and exclusions always win.
|
||||
2. **Hard filters:** rating, playability and low-confidence identity can remove a title, whatever else matches.
|
||||
3. **Curated title match:** the preset's own list and verified aliases.
|
||||
4. **Strong signals:** format or subgenre, such as documentary or police procedural.
|
||||
5. **Medium signals:** genre, era and stated preference.
|
||||
6. **Context signals:** cast, studio or franchise, where they make sense for that preset.
|
||||
7. **Weak signals:** keyword similarity can add a candidate but never justify one alone.
|
||||
|
||||
Every suggestion stores the reasons behind it, so "why recommended" reads directly from them. A three-film channel can't follow the repeat rules of a large one, and Orbit shouldn't create empty schedules to satisfy a rule.
|
||||
|
||||
### What the viewer sees
|
||||
|
||||
A suggestion is short and gives its reason: "Paradox: 8 matching series found. These match your interest in cult science fiction and supernatural mysteries."
|
||||
|
||||
- **Controls:** add, remove, replace, ignore and view why.
|
||||
- **Missing titles:** shown unticked and marked unavailable, never implied as playable.
|
||||
- **Dismissals:** remembered, so a dismissed idea doesn't keep returning without a new reason.
|
||||
- **Discovery:** familiar favourites, balanced discovery or surprise me. This is a possible later preference.
|
||||
- **Remote use:** a few items per screen, since the viewer is using a D-pad from the sofa.
|
||||
|
||||
### Privacy and control
|
||||
|
||||
Orbit learns only from what the viewer chooses or enables: favourite genres and decades, accepted and rejected suggestions, explicit exclusions, and optional local watch history. Personalisation can be turned off, its history cleared, and it never adds channels or titles by itself after setup. There are no engagement goals.
|
||||
|
||||
OrbitOffice uses the same matching for events such as an Arnie Triple Bill or a Wrestling PPV Night. Events are optional, never scheduled automatically, name missing films honestly and can be switched off entirely.
|
||||
@@ -0,0 +1,81 @@
|
||||
# Orbit TV programming bible
|
||||
|
||||
Approved by Paul on 1 November 2026. Channels are presets matched against each viewer's own library, never bundled content.
|
||||
|
||||
The bible holds 25 presets, and only three have numbers: 101, 102 and 103. The rest stay unnumbered until you map them, as you said on 1 November. Example titles guide matching, and no user is expected to own them all. Users can accept, remove, edit, rename or replace any preset.
|
||||
|
||||
### Entertainment and comedy
|
||||
|
||||
| Channel | Identity | Example titles | Look |
|
||||
| --- | --- | --- | --- |
|
||||
| Orbit 1 (101) | Family favourites and relaxed entertainment | Sitcoms, comfort TV, familiar classics | Orbit blue, silver, soft cyan |
|
||||
| Orbit 2 | Discovery, cult TV, forgotten favourites | Game shows, documentaries, cult TV | Silver, purple, dark blue |
|
||||
| Orbit Three | BBC Three-era and Scottish comedy | Still Game, Limmy's Show, Mighty Boosh, Two Pints, Gary: Tank Commander, Family Guy; from your earlier list, Gavin & Stacey, Little Britain | Magenta, purple, geometric type |
|
||||
| Orbit Gold | Classic British comedy | Only Fools and Horses, Father Ted, Blackadder, Fawlty Towers; from your earlier list, Ghosts, The Good Life, The Green Green Grass, Vicar of Dibley, Porridge, Taskmaster, 8 Out of 10 Cats | Warm gold, charcoal |
|
||||
| Riot | Adult animation, North American sitcoms, alternative comedy | South Park, The Simpsons, It's Always Sunny, Trailer Park Boys, Friends, How I Met Your Mother | Lime, hot pink, cyan, purple, torn-paper collage |
|
||||
|
||||
### Animation
|
||||
|
||||
| Channel | Identity | Example titles | Look |
|
||||
| --- | --- | --- | --- |
|
||||
| Vortex (103, shown today as Toonami) | Action anime and Toonami-style blocks | DBZ, Naruto, Gundam Wing, Yu Yu Hakusho, Samurai Jack | Brushed chrome, blue, electric purple |
|
||||
| ToonZ | Traditional cartoons across generations | Looney Tunes, Tom & Jerry, Flintstones, Jetsons, Popeye | Yellow, cyan, pink graffiti Z |
|
||||
| Rewind | 90s and 2000s after-school animation | Dexter's Laboratory, Johnny Bravo, Scooby-Doo, Courage, Ed Edd n Eddy, Recess, The Powerpuff Girls | Orange, yellow, purple, CRT and VHS |
|
||||
| Orbit X | 80s and 90s action cartoons | Digimon, Gargoyles, Transformers, Power Rangers, He-Man, ThunderCats, Biker Mice from Mars | Silver, red X, black |
|
||||
| Heroes | Superhero animation | Batman TAS, Superman TAS, Spider-Man 1994, X-Men, Batman Beyond, Spider-Man Unlimited | Silver, deep red, royal blue, skyline |
|
||||
|
||||
### Films
|
||||
|
||||
| Channel | Identity | Example titles | Look |
|
||||
| --- | --- | --- | --- |
|
||||
| Wonder | Traditional animated family films and fairy tales | Aladdin, The Lion King, Beauty and the Beast | Midnight blue, lavender, gold |
|
||||
| PixelZ | CGI family films | Toy Story, Monsters Inc., A Bug's Life, Shrek, The Incredibles | Cyan, lime, purple, rounded 3D type |
|
||||
| Orbit VHS | Nostalgic 80s and 90s films | Back to the Future, The Goonies, Gremlins, The Lost Boys | Tape labels, rainbow stripes |
|
||||
| Orbit Sci-Fi | Science fiction films and series | Space, time travel, futuristic adventures | Chrome, blue, cyan, planets |
|
||||
| Orbit Horror | Horror cinema | Slashers, supernatural, creature features | Crimson, black, moonlight |
|
||||
| Orbit After Dark (102) | Late-night cult cinema and mature programming | Horror, cult films, midnight selections | Silver crescent, magenta orbit, lit skyline (approved) |
|
||||
| Orbit Action | Action and adventure films | Thrillers, martial arts, blockbusters | Red, orange, steel |
|
||||
| Orbit Romance | Romance and feel-good films | Romantic comedies | Pink, rose, sunset gold |
|
||||
| Orbit Premiere | Featured films and special presentations | Movie nights, themed weekends | Gold, black, marquee lights |
|
||||
|
||||
### Factual, drama and wrestling
|
||||
|
||||
| Channel | Identity | Example titles | Look |
|
||||
| --- | --- | --- | --- |
|
||||
| Dark Files | Non-fiction crime, mystery and paranormal | Cold cases, forensic documentaries, unexplained phenomena | Midnight navy, steel grey, evidence red |
|
||||
| Terra | Nature and wildlife | Blue Planet, Planet Earth, Frozen Planet | Ocean blue, forest green, turquoise |
|
||||
| Odyssey | Science, history, exploration | Engineering, geography, astronomy documentaries | Expedition blue, teal, silver, gold |
|
||||
| Evidence | Scripted crime and procedurals | CSI, NCIS | Navy, steel blue, forensic cyan, evidence yellow |
|
||||
| Paradox | Cult sci-fi, supernatural and mystery series | The X-Files, Buffy, Supernatural, Fringe, modern Doctor Who | Indigo, purple, magenta, teal, VHS distortion |
|
||||
| Ring X | Wrestling television and events | WWF/WWE, WCW, ECW, TNA, AEW, classic PPVs | Chrome, red X, dark arena, trusses |
|
||||
|
||||
### Keeping similar channels apart
|
||||
|
||||
Overlap is allowed, with one primary channel per title by default. Explicit user placement always wins.
|
||||
|
||||
| Pair | The dividing line |
|
||||
| --- | --- |
|
||||
| Dark Files, Evidence, Paradox | Non-fiction, scripted crime, and fictional supernatural or mystery series |
|
||||
| Paradox, Orbit Sci-Fi | Cult mystery series, and broader science fiction |
|
||||
| Orbit Horror, After Dark | Horror films, and wider late-night cult films |
|
||||
| Orbit Three, Riot | British and Scottish comedy, and North American or adult animation |
|
||||
| Wonder, PixelZ | Traditional animation, and CGI. Any film can be reassigned. |
|
||||
| Terra, Odyssey | Natural world, and human discovery. Blue Planet may cross over. |
|
||||
|
||||
If metadata can't separate documentary from fiction, the title goes to the user for review and isn't classified silently.
|
||||
|
||||
### Suggested programming rules
|
||||
|
||||
These are defaults that can be changed or turned off. None of them can run on today's schedule engine, as the roadmap explains.
|
||||
|
||||
| Channel | When | Programming |
|
||||
| --- | --- | --- |
|
||||
| Ring X | Monday | Monday Night Wars: Attitude Era and Nitro, chronological where metadata supports it |
|
||||
| Ring X | Tuesday | Impact Night: classic TNA and Impact |
|
||||
| Ring X | Wednesday | AEW television and specials |
|
||||
| Ring X | Thursday to Sunday | Wrestling Vault: PPVs, ECW, historic matches, themed marathons |
|
||||
| Dark Files | Daytime | Crime documentaries and investigations |
|
||||
| Dark Files | Early evening | Unsolved mysteries and unusual historical cases |
|
||||
| Dark Files | Mid-evening to late night | Paranormal and darker documentaries |
|
||||
|
||||
Ring X shouldn't claim a chronological match without enough promotion, date or event metadata to prove it. Clock times stay undefined until the engine work is designed.
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
# Orbit TV roadmap
|
||||
|
||||
Approved by Paul on 1 November 2026. Companion documents: [programming bible](programming-bible.md), [metadata and matching](metadata-and-matching.md), [asset inventory](asset-inventory.md). Source briefs are in [briefs](briefs/).
|
||||
|
||||
## Decisions
|
||||
|
||||
Paul approved these on 1 November 2026.
|
||||
|
||||
| Conflict found | What the sources say | Decision |
|
||||
| --- | --- | --- |
|
||||
| 103 name | Installed as "Toonami". The bible has Vortex, and 103's search list also holds titles the bible now gives to Heroes and Orbit X. | Rename the display to Vortex, keep 103 and its lineup. Toonami is a third-party brand, and the creative brief bars those as default branding. |
|
||||
| 101 name | Installed as "Orbit One", bible says "Orbit 1". | Use Orbit 1 on screen, keep 101. |
|
||||
| Box office and game names | The app and its artwork say OrbOffice and OrbHive. Both briefs say OrbitOffice and OrbitHive. | Use OrbitOffice and OrbitHive going forward. Rename the app and artwork in a later build. |
|
||||
| Orbit X and Ring X look | Both call for silver or chrome with an aggressive red X, and the bugs will sit on the same screen. | Keep the red X for Orbit X's cartoon slash. Give Ring X a distinct silhouette, decided when its board arrives. |
|
||||
| 102 content | Built from Horror, Thriller and Science Fiction film searches. The bible separates Orbit Horror and defines After Dark as cult and late-night. | Keep 102 as built. Change its rules when presets arrive, and don't claim adult controls before profiles exist. |
|
||||
| Title moves | Toy Story moves from Wonder to PixelZ. Batman Beyond and The Powerpuff Girls drop off Vortex in the new table. | Latest table wins. Batman Beyond stays a permitted crossover and The Powerpuff Girls moves to Rewind. Existing 103 choices stay. |
|
||||
| Order of work | Your earlier order had controlled refresh and the grid guide. The new priority list names neither. | Keep both, as shown in section E. |
|
||||
| Profiles | Listed as a later priority, yet matching treats audience suitability as a required filter. | Capture ratings early and show them. Treat real enforcement as a gate before anyone outside your household uses mature channels. |
|
||||
|
||||
## Current status
|
||||
|
||||
The status below comes from the source code, the verification notes and Paul's reports from the box. The roadmap update's list of working features is right in spirit, but discovery and channel generation are much narrower than it implies.
|
||||
|
||||
### Implemented
|
||||
|
||||
These are working, with Paul's confirmation noted where given.
|
||||
|
||||
| Feature | Actual extent | Confirmed by |
|
||||
| --- | --- | --- |
|
||||
| Emby sign-in and remembered login | One fixed provider. Encrypted saved token, no saved password. | Paul, on 0.14 |
|
||||
| Metadata access | Hand-triggered, small queries: 20 items per page, 10 series per search, 5 episodes per series. No full library read. | Paul, on 0.3 |
|
||||
| Clock-driven channels | Repeating UTC timeline. Joins in progress, real Now and Next, automatic rollover. | Paul, on 103 |
|
||||
| 101 Orbit One | Built from the checked sample, up to three titles. | Partly: built and saved |
|
||||
| 103 Toonami | One to three approved series, up to five episodes each, from a 23-title search list. | Paul |
|
||||
| 102 Orbit After Dark | Two or three approved films from genre searches. | Paul: played, with a tuning-screen issue |
|
||||
| After Dark artwork in the app | Compact logo and lit-window background, on the review and guide screens. | Paul |
|
||||
| Programme strip and channel switching | Strip hides after five seconds. Switching works between built channels. | Paul for the strip; switching not separately reported |
|
||||
| Demo guide grid, ticket previews, Services page | Fictional data, not connected to Emby. | Paul, on 0.2 |
|
||||
|
||||
0.16 replaces the blue tuning panel and passes 87 tests and lint. It was installed on the box on 1 November 2026, and Paul's test of it is outstanding.
|
||||
|
||||
### Approved direction
|
||||
|
||||
- The 25-channel lineup in section A, as presets matched against each user's library, never bundled content.
|
||||
- Tick-based selection: available titles can be ticked, and missing titles stay visible, unticked and marked unavailable.
|
||||
- The clock-driven schedule stays, and new work plugs into it.
|
||||
- Original Orbit assets only. Concept art is reference, and After Dark is the reference workflow.
|
||||
- Optional, explainable personalisation, with no mandatory AI or cloud service.
|
||||
- OrbitOffice as occasions, not a catalogue.
|
||||
|
||||
### Proposed
|
||||
|
||||
These need technical review: sections B, C and F, time-of-day and weekly programming, repeat rules, and the catalogue storage choice.
|
||||
|
||||
### Future
|
||||
|
||||
Profiles and PINs, more providers, authorised IPTV and external guide data, themes, Catch Up, OrbitHive Bedlam, OrbText, first-run onboarding, self-hosting and public distribution.
|
||||
|
||||
### Blocked or uncertain
|
||||
|
||||
- **Metadata quality:** unknown until tested. Nobody has measured how much of it the provider returns.
|
||||
- **Provider load:** the provider's rate limits and any rules on full library reads are unknown.
|
||||
- **Playability at scale:** each title needs its own playback check, and only direct-play sources work because transcoding is off.
|
||||
- **Names and rights:** clearance isn't established for Orbit or any channel name. Curated title lists and references to other brands need review before public release.
|
||||
- **Transparent video idents:** support is unproven on the box, and current idents are opaque H.264.
|
||||
- **New concept boards:** the eight new boards haven't been received.
|
||||
|
||||
## Roadmap changes
|
||||
|
||||
The roadmap gains two steps the update doesn't name, the metadata audit and a generic channel list, and keeps every earlier milestone. P1 to P6 are your priorities, and arrows show what must exist first. Branding can run alongside the other work once channels exist.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
fix["Now: 0.16 tuning fix, test on 102"] --> audit["Metadata audit"] --> cat["P1 Catalogue and refresh"]
|
||||
cat --> preset["P2 Preset matching"]
|
||||
cat --> list["Generic channel list"]
|
||||
preset --> rec["P5 Recommendations"]
|
||||
list --> grid["Grid guide restored"] --> brand["P4 Branding rollout"]
|
||||
list --> sched["P3 Schedule quality"] --> office["P6 OrbitOffice"]
|
||||
```
|
||||
|
||||
Gate before mature channels reach other households: profiles and enforced ratings.
|
||||
|
||||
Later: more providers, IPTV, themes, Catch Up, OrbitHive Bedlam, OrbText, public release.
|
||||
|
||||
The grid guide comes before most new channels, because switching one at a time gets unwieldy past a handful. That follows your earlier request to bring the guide back as channels grow.
|
||||
|
||||
### What each step needs from today's code
|
||||
|
||||
The clock engine stays. These limits are the parts that have to change, and only the last row changes how the clock behaves.
|
||||
|
||||
| Today | Why it matters | Needed for |
|
||||
| --- | --- | --- |
|
||||
| Queries capped at 20 items, by hand | No library-wide view | P1 |
|
||||
| 512 KiB saved state, fixed channel slots, numbers 101 to 103 only | Can't store a catalogue or a fourth channel | P1, channel list |
|
||||
| Channel lineups of 2 to 15 unique titles | Too small for real channels, and blocks intentional repeats | P3 |
|
||||
| One repeating loop anchored to UTC | No concept of weekday, evening, local time or daylight saving | Dark Files, Ring X, OrbitOffice |
|
||||
|
||||
For that last row, I'd keep the loop as the default and add an optional local-time block layer that hands each block a lineup. It needs its own design and your approval before any work starts. That also meets your rule against replacing the engine.
|
||||
|
||||
### Earlier milestones kept
|
||||
|
||||
| Milestone | Where it now sits |
|
||||
| --- | --- |
|
||||
| Original channel set: 101, 102, 103 | Done, pending the 0.16 test |
|
||||
| Controlled refresh, previewing additions and removals without shifting what's playing | P1 |
|
||||
| Reusable and custom channel creation with ticks | P2 and channel list |
|
||||
| Grid guide with real Now and Next | After channel list |
|
||||
| Bottom-left bug, off by default | P4 |
|
||||
| Optional idents with reduced-motion setting, never delaying the clock | P4 |
|
||||
| Dashboard: On now, Coming up, OrbitOffice presents | With P5 and P6 |
|
||||
| First-run onboarding and more providers | Later, Emby preserved |
|
||||
| Profiles, Kids, PIN | Later, with the gate shown above |
|
||||
| Themes, Catch Up, Games, OrbText | Later, unchanged |
|
||||
| Seasonal programming and themed weekends | P3 and P6 |
|
||||
|
||||
The gate only applies once someone else's household is involved, so it doesn't hold up your own box. Until then, Orbit shouldn't describe any channel as age-protected.
|
||||
|
||||
## Next development step
|
||||
|
||||
I recommend a read-only metadata coverage check as 0.17, after you've confirmed 0.16 on the box. It answers the question every later decision depends on: how much usable metadata does your provider return? Nothing gets built on guesses, and your channels are untouched.
|
||||
|
||||
### Scope
|
||||
|
||||
- **Entry point:** a new "Check metadata coverage" action under Menu, Connect Emby.
|
||||
- **Requests:** one sample each of films, series and episodes, at most 20 items each, and only when you press it.
|
||||
- **Result:** counts only, such as "Genres 18 of 20", for each field in section B. No titles are shown.
|
||||
- **Sampling:** existing queries sort by name, which favours titles starting with A. This one should take a spread across the library and label itself a sample.
|
||||
|
||||
It won't save anything, change a channel or schedule, classify titles, or build the catalogue.
|
||||
|
||||
### Files likely to be involved
|
||||
|
||||
| File | Change |
|
||||
| --- | --- |
|
||||
| `MetadataAudit.kt` (new) | Build the requests, count field coverage |
|
||||
| `EmbyConnectionScreen.kt` | The action and the results screen |
|
||||
| `MetadataAuditTest.kt` (new) | Fixture tests |
|
||||
| `app/build.gradle.kts`, `EmbyClient.kt`, `SecureMediaDataSource.kt` | Version bump, as in past releases |
|
||||
| `VERIFICATION-0.17.0.md` (new) | Release notes and evidence |
|
||||
|
||||
### Risks
|
||||
|
||||
| Risk | Handling |
|
||||
| --- | --- |
|
||||
| Provider load or rate limits | Three small requests, only on demand. Existing cooldown applies, and a rate-limit reply stops the check. |
|
||||
| Oversized replies from extra fields | Existing 2 MiB response cap, with a clear message if hit |
|
||||
| Sample misleads | Label results as a sample, not a library total |
|
||||
| A field name differs from Emby's documentation | Check the documentation first, and report a missing field as zero, not as an error |
|
||||
| Private catalogue exposure | Counts only, nothing saved or logged |
|
||||
|
||||
### Acceptance criteria
|
||||
|
||||
- [ ] One press sends at most three requests, each capped at 20 items.
|
||||
- [ ] The screen shows coverage counts for each item type and field, with no titles.
|
||||
- [ ] 101, 102 and 103 keep their lineups and timing, and saved setup is byte-for-byte unaffected by the check.
|
||||
- [ ] An expired login or rate limit gives a clear message and stops.
|
||||
- [ ] You can run it with the remote, then read or photograph the result for me.
|
||||
|
||||
### Tests
|
||||
|
||||
Fixture tests cover the request limits and the token staying in the header, not the URL. They also cover missing and malformed fields, a server ignoring the limit, rate-limit and expired-login stops, and no saved-state writes. The full 87 existing tests and lint must still pass, and you then run it on the box.
|
||||
|
||||
### Rollback
|
||||
|
||||
Reinstall the 0.16 APK kept in `outputs/revision-0.16.0`. The saved data format doesn't change, so your login and channels should survive, which I'd confirm during the test.
|
||||
|
||||
The project is now in git, so each release can also be rolled back from its commit, which the channel-list migration will need later.
|
||||
Reference in New Issue
Block a user