Remove the competing Discover title preview #72
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/tv-details-flash-2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Outcome
Remove the remaining Discover Details content → skeleton → content flash. This is a shared production path, not a fixture-only loader issue.
Cause and change
The candidate recording at https://pages.justinvisser.org/wolfskin/tv-round2-walk#cand2 shows the old Discover preview before the skeleton: its distinctive controls are Request / For someone else / Not interested, with no shared-title kicker.
DiscoverState.openTitlesynchronously selected a title;DiscoverScreenimmediately paintedDiscoverTitleDestinationbefore navigation opened the sharedTitleDestinationand its first Loading state. That branch had no fixture gate, so real catalogue titles, including titles later resolved to held Jellyfin identities, could take it too.Delete that obsolete renderer and its branch. The outgoing entry stays Discover until navigation replaces it; the shared title destination alone owns loading and content. Existing same-title Ready refresh guards and authorization-loss handling remain unchanged. Update title/navigation documentation.
Verification
Final focused app run: 9 cases, zero failures/errors:
Design viewport run:
Native proof and XML:
/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-details-flash-2/verification.mdand sibling captures. Refresh artwork is static/injected for deterministic frame comparison. No APK build, TV/emulator operation, or live authenticated Conductarr/Jellyfin walk. Initial app invocations pulled the existing transitive design-test dependency; the final app command explicitly excludes it.Remaining watch: 72 px after Back
The supplied emulator screenshots move Continue watching from y=168 to y=240; that observation is real. It does not reproduce in the native actual-navigation cases above, which retain the exact scroll and card bounds. No speculative viewport correction is included. The screenshots lack scroller offsets, viewport constraints and activation-time measurements, so their cause remains unestablished. An instrumented capture by the emulator owner is needed to explain this remaining watch; this PR does not claim to close it.
AI assistance was used for investigation, implementation and tests.
Verification note: the additional loader-only re-run (
*TitleEntryBackTest.*ExactPreOpenViewport*) exhausted its 20-minute wall deadline after waiting for the shared Gradle lock and reaching unit-test resource packaging; it did not produce another test result. The preceding focused run remains the verification result: nine passing native cases, including all four SDK 34/36 normal/reduced-motion viewport cases, with its XML and frames preserved in the proof directory. No source changes followed that passing run; only the documentation/commit metadata changed. The remaining 72 px emulator watch is still explicitly unclaimed.Review of the Details-flash follow-up at head
c80afb98a20141fab6f58e869da2e318ec9e8eb2(basefm/tv-round2).Code verdict: APPROVE (
review/code-claude= success).Design verdict: PASS (
review/design-claude= success). No blocking finding.The fix is at the shown cause.
DiscoverTitleDestination(the Request / For someone else / Not interested stub) and the oneDiscoverScreenline that painted it as soon asopenTitlesettitle.No dependence on the stub.
openTitlestill setstitleand pushestitle/...synchronously.titleis cleared when the route returns todiscover.Earlier work intact.
Readyon every rendered composition.No approved pixels change. The outgoing hero frame before and after
openTitleis pixel-identical (0 pixels differ by more than 8, checked by me). Details stays and the old stub controls never appear.Tests.
DiscoverTitleTimingTestcase failed before the fix and passes after.NavDisplayand decorators on sdk 34 and 36, animated and reduced motion. It asserts the exact scroll offset and card bounds. It does not cover Discover's own Back.Merge. A merge-tree check against current
fm/tv-round2(60bc59c8) is clean.72 px Back watch. The PR leaves it open. I agree that no speculative viewport correction should be added. The instrumented capture it requests (first visible index, offset, viewport and route at open, deactivation, reactivation and settle) is the right next step, and the emulator owner has to run it.
Non-blocking notes:
DiscoverState.title,titleButtonandtitleKeynow have no production UI.DiscoverKeysTestandDiscoverCaptureTeststill exercise them, and the request and hidden-receipt captures (for example st-058 and st-059) now sit over the Discover hero instead of the stub. A follow-up could delete the dead state or re-home those tests.DiscoverStatestill reads the route-scopedshell.view. For a lane card (not the hero), the outgoing page may show a hero focus ring for the length of the push animation. The hero Details case is pixel-stable, but that test uses a single shell withoutNavDisplay. [INFERENCE] Check it on the next emulator walk, and usescreenView(shell)if it flashes.sameAsbitmap comparison would be stronger. I checked by hand that the frames are identical.Full report (review 10):
/root/.treehouse/firstmate-7bab20/2/firstmate/data/round2-review/report.md. Not run: Gradle/make, nothing on the box.