Keep season episode reels chronological when next-up is near the end #78

Closed
justinzeus wants to merge 0 commits from fm/tv-bug-season-reel into fm/tv-round2
Owner

Outcome

Keep the season episode reel chronological and open the episode under the user's focus, independently of the Play/Resume target.

Cause

TitleReadFacade.read stores the series, explicitly opened episode and rich playback target before the season list, deduplicated by ID. build reused that storage order for the reel. With 24 season-five episodes and next-up at E24, the first tile opened E24 instead of E1. Changing the opened/next-up target also reordered cards under a remembered index: an E13 selection became E12 on refresh. This is data reordering, not a native focus-index jump; the episode count is not a special-case trigger.

Change and universal audit

Sort the selected season by its SDK episode number in the shared live/saved projection, retaining rich metadata and exact play/watch identities. This covers series title pages, explicit episode pages and existing saved snapshots without a cache migration.

Checked the other reels: cast maps the item's people list; related titles map the provider's list; performer credits exclude their person header and preserve provider order; the upstream season pager already requests INDEX_NUMBER ordering. None prepends a playback target, so none needs an analogous change. No focus/scroll/navigation code or lane-D cache/motion code changes.

Verification

Native Compose/Robolectric TitleSeasonReelTest, SDK 34 and 36: 4 failures before, 4 passes after. Fixture: 24 Desperate Housewives-shaped season-five episodes, E1–E23 watched and next-up E24. Real remote input exercises first-tile activation, Left/Right, row return, Android focus, visible selected tiles, disk reload, explicit-episode play/watch identity, and E13 stability across refresh.

docker/gradle.sh debug :wolfskin-design:cacheRobolectricSdk :app:testDefaultDebugUnitTest -x :wolfskin-design:testDebugUnitTest --tests org.justinvisser.wolfskin.tv.TitleSeasonReelTest

Only the targeted class ran; no full suite, APK build, TV or emulator. Before/after XML and cause/audit notes are preserved under /root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-bug-season-reel/. One after-fix attempt exhausted its deadline after lock wait/compilation before tests; the targeted retry passed.

Risk

Small ordering-only change at the data boundary. Play/Resume and watched targets remain unchanged. The separately reported lane-D cached first-frame paint discrepancy is not claimed fixed by this change.

AI assistance was used for investigation, implementation, tests and this description.

## Outcome Keep the season episode reel chronological and open the episode under the user's focus, independently of the Play/Resume target. ## Cause `TitleReadFacade.read` stores the series, explicitly opened episode and rich playback target before the season list, deduplicated by ID. `build` reused that storage order for the reel. With 24 season-five episodes and next-up at E24, the first tile opened E24 instead of E1. Changing the opened/next-up target also reordered cards under a remembered index: an E13 selection became E12 on refresh. This is data reordering, not a native focus-index jump; the episode count is not a special-case trigger. ## Change and universal audit Sort the selected season by its SDK episode number in the shared live/saved projection, retaining rich metadata and exact play/watch identities. This covers series title pages, explicit episode pages and existing saved snapshots without a cache migration. Checked the other reels: cast maps the item's people list; related titles map the provider's list; performer credits exclude their person header and preserve provider order; the upstream season pager already requests INDEX_NUMBER ordering. None prepends a playback target, so none needs an analogous change. No focus/scroll/navigation code or lane-D cache/motion code changes. ## Verification Native Compose/Robolectric `TitleSeasonReelTest`, SDK 34 and 36: **4 failures before, 4 passes after**. Fixture: 24 Desperate Housewives-shaped season-five episodes, E1–E23 watched and next-up E24. Real remote input exercises first-tile activation, Left/Right, row return, Android focus, visible selected tiles, disk reload, explicit-episode play/watch identity, and E13 stability across refresh. ```sh docker/gradle.sh debug :wolfskin-design:cacheRobolectricSdk :app:testDefaultDebugUnitTest -x :wolfskin-design:testDebugUnitTest --tests org.justinvisser.wolfskin.tv.TitleSeasonReelTest ``` Only the targeted class ran; no full suite, APK build, TV or emulator. Before/after XML and cause/audit notes are preserved under `/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-bug-season-reel/`. One after-fix attempt exhausted its deadline after lock wait/compilation before tests; the targeted retry passed. ## Risk Small ordering-only change at the data boundary. Play/Resume and watched targets remain unchanged. The separately reported lane-D cached first-frame paint discrepancy is not claimed fixed by this change. AI assistance was used for investigation, implementation, tests and this description.
justinzeus added 1 commit 2026-11-08 03:15:24 +01:00
Author
Owner

Landed through the round 2 candidate #82 (merged into fm/tv-round2 as c21d17df). Closing as superseded; nothing from this branch is lost.

Landed through the round 2 candidate https://git.justinvisser.org/justinzeus/wolfskin/pulls/82 (merged into fm/tv-round2 as c21d17df). Closing as superseded; nothing from this branch is lost.
justinzeus closed this pull request 2026-11-08 13:59:34 +01:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
exploring
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: justinzeus/wolfskin#78
No description provided.