Build the Wolfskin TV title, episode and person pages #34
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/tv-slice5-titles"
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?
Build native title, episode and person pages
AI-assisted (fork-internal)
Builds held/not-held film, series and explicit episode pages, playback-option sheets, cast/person pages and continuous filmography on the existing Wolfskin TV shell. All13 requested review fixes are implemented and measured below. All34 required title-family pairs are original1920×1080 at density2.0; all four complete native-Home launch paths now pass. Ready for re-review, not a release or device install.
Refs: approved TV specification, locked Opus v2 prototype. Scope: sections6.5,6.6,6.8–6.10,7.2 and title/person endpoints in3.6.
Base
main; exact validated sourcecd625b4227ce8baa57512df50c8e74e57f5b42a9onfm/tv-slice5-titles. Native Home main9dd321f07e82393bd7afc2f470e4b61789907e13is merged additively. Real Home, Discover, Requests and Library surfaces remain present; no unmerged sibling branch was imported.Behaviour and integration
All13 requested fixes — measured final result
[96,245,327,349]is104px high and is NOT claimed to be its surrounding89.76px CSS line box. No fontflow excuse remains for stack geometry.[96,539,457,573], source row y538.7. Native TMDB x578–625 → Ep x633–663 →7.8 x671–709. Source corresponding x645.6/700.4/744.8 differs because the Roboto progress string is361px wide versus DejaVu415.4px; order, weight and line box are fixed.[200,234],[260,352],[376,410],[440,550],[584,660], exactly the declared CSS geometry. JPEG thresholding yields441–549 and585–660 for the last two interiors. No spinner, loading copy or stale shelves.Complete response: review-response.md. Native pixels/DOM/text/element details and residuals are retained in the evidence bundle; these numbers do not self-approve design fidelity.
Full launch paths — no deferred prefixes
The four TitleLaunchKeysTest cases use the actual Who's watching, native Home hero/shelves, title/person components and production focus handling. Every fixture key is replayed, including Home navigation. No direct row/focus assignment substitutes for input.
The Home prefix reaches Locke through its real current ordering: three Down events then four Right events in Your movies. No fixture reordering or placeholder hero remains. The older suffix-only tests are retained as additional coverage.
Commands and complete results
807 tests;0 failures,0 errors,0 skipped. Existing tests retained; no assertion weakened. One final-head
make testpassed in2m51 and onemake apk-debugpassed in1m14 after source was committed; no source edits followed. Debug artifact remains local only.Before the final pair, targeted shared-design smoke passed in1m03 and complete title-family smoke in2m43. All34 title captures and all four full launch cases are included in the unfiltered final XML. Tests use local artwork/debug fixtures and mocked SDK boundaries; no live Conductarr/Jellyfin calls. The inherited generated-client contract smoke uses a local fixture HTTP server, not Conductarr.
Evidence: test-results.md, final-cd625b42-make-test-and-apk.log, title-review-evidence.zip.
Required per-screen fidelity evidence
Frozen left / Compose right, each half1920×1080. MAE is mean absolute RGB error0–255; changed pixels have any channel >12. All34 full-resolution pairs were visually inspected in nine contact sheets. These are measurements, not an automatic pass.
Approved fonts are native platform Roboto versus frozen DejaVu Sans. No bundled font or per-title/row compensation. Native glyph widths can change wrapping; Spider-Man is two browser lines versus one native line,984.2px in1060px with no ellipsis. CSS stack geometry is explicit, not excused as fontflow. Residual ink baselines are1–3px. Approved focus scales1.05 buttons/1.02 rows differ from frozen1.06/1.03. Canonical shadows/rings are present; native/Chromium kernels and JPEG AA are not claimed identical.
Approved product exceptions are identified per frame: no sample/simulated labels or handoff screens, fake biography/credit filler, signed-out ratings or unheld trailer before Conductarr addition5. Frozen069 avatar and109 ratings take precedence over inconsistent metadata/filenames.
Reports: capture-diffs.md, native-measurements.md, review-gates.md, review-response.md, sibling-captures.md, title-review-evidence.zip.
Shared sibling surfaces and APIs
measure_siblings.pyselects freshhome/,library/,discover/captures and the actual root Requests/shell outputs. It deliberately ignores stale flat root Library/Discover staging copies. Before is each sibling lane's published native PNG; all full hashes, baseline paths, thresholded pixel deltas and locked-reference errors are insibling-captures.jsonand.md. The92-file pre-review flat staging hash record is preserved separately and its exact-match flags are explicit. Published-baseline identity is not misrepresented as a particular source-commit guarantee.All48 changed before/after pairs were visually inspected in eight contact sheets; all34 title-family pairs were inspected in nine sheets. Shared changes are not claimed absent: poster captions/fade bands, regular progress/episode-mark ordering and canonical focused-button lift are visible corrections. The Requests published baseline also differs in the Settings-header initials and row text/readiness wrapping; its largest delta is the expanded Downloading row in086. These differences remain numeric and visible, not hidden under an unchanged-hash claim or an assertion of pixel identity. Nav-only shell fixtures are distinct from the actual Home captures.
request(context, source: Any, width: Int, height: Int, poster: Boolean)accepts file/local-art sources with pixel dimensions; the old LibraryImages class is gone, not resurrected as an alias. The owner-isolated cache remainswolfskin-images.exactLineBox(style, top, bottom)now uses one fractional CSS layout engine; type sizes/fonts are unchanged. SourceRatings fixes episode order and inherits the canonical plate descender. Shared focused-button lift is intentionally visible on Home/recovery surfaces too.Upstream files touched
app/src/default/AndroidManifest.xmlvnd.youtubehandlers. This is an upstream default-flavour file, NOT one of the section2.7 hook files; appstore/firetv visibility is not asserted covered. The earlier body's “none” statement was wrong and is corrected here.All other changed production paths are fork-owned app source sets/debug assets or
wolfskin-design; existing fork build documentation is indocker/README.md. The existing single upstream hook is reused, not duplicated. GPL notices remain intact. No version/signing/release configuration or tracked offline workaround changed.Not done / residual limitations
Native Roboto versus frozen DejaVu glyph widths/ink and line breaks remain approved platform differences; per-title offsets or fake copy were not added. Unheld trailers remain omitted until Conductarr addition5; held trailers use the installed YouTube-family app intent or calm unavailable-app fallback, never the prototype's sample hand-off screen. Conductarr TV sign-in is not built, so its reads use the debug fixture seam, not handwritten HTTP or live tests. Device performance and blur below Android31 were not proven here.
The review's nonblocking observations remain: releasing a held OK outside the title can leave okHeld true; Play has no in-flight guard; non-UUID release IDs remain loading until their Conductarr read exists; duplicate cast-person IDs can collide in LazyRow keys; signed-in Request/household CTAs still show the current toast rather than dispatching into slice6; production Hide/More like this remain unavailable without the Conductarr integration; pre31 blur is a no-op; debug fixture assets are about67MB; the locked recovery copy names Conductarr even for a Jellyfin failure. The unreachable duplicate glyph branches and seven obsolete resources were removed during this merge cleanup.
The13 requested findings have no unimplemented item. The remaining observations above are disclosed rather than silently expanded into this revision. Full launch replay is DONE, not deferred. No ADB/device access, install, release/tag/asset/signing/version change, merge, shared-service administration or Forgejo status manipulation. Firstmate arranges re-review/merge; release and TV installation still require Justin's word.
Design review (Claude Sonnet, cross-family): CHANGES REQUESTED. Reviewed head
e243894a209a11eed96a9843fb1a26455b796b6a. Commit statusreview/design-claude= failure on that SHA.Press-count suffix tests, async title focus test, hold guard (7.1), back ladder (7.2), ratings timing (7.8), data boundaries and hygiene check out. Blocking findings, all measured at native 1920x1080 against the locked frames and the prototype DOM (px, ref -> native):
Design (not font-caused; fixed CSS line-heights make box positions font-independent)
[284,542,380,638] -> [280,550,376,646]), series action row +18. Cause:TitleHeader.kt:49-69uses default token text styles, notTitleTextStyles;offset(progressLift)does not reclaim layout height.TitleControlnever passesFocusLift.Button; ref 40px blur +12y 50%): st-058, 062 and every focused control..sheet .btn): st-050 -9/-10, st-058 -10/-12, st-047 Close clearance 32 -> 20.st-055 has no non-font blocker. Font-caused wrap/width items are accepted but the PR only gives heading widths: add the pill/chip/caption/panel numbers (e.g. st-062 panel 299.6 -> 264).
Behaviour
11. Subtitle Off is saved as
-1(UNSPECIFIED) instead ofTrackIndex.DISABLED(-2); playback re-enables preferred subtitles. No test.12. Tracks/Media info sheets never scroll the focused row/Done into view; real files with many subtitles put focus off-screen.
13. Person page async path: the Loading title state focuses nav and nothing resets it when the person loads (
TitleDestination.kt:235-237, ready-only); spec entry is the first credit. Untested (the async test covers titles only).Non-blocking (details in the report): OK key-up lost after trailer/player leaves
okHeldstuck; no in-flight guard on Play; non-UUID ids sit on the skeleton forever in release; duplicate cast ids would crash the LazyRow; Request buttons toast "needs sign in" while signed in; duplicate Glyph labels; newapp/src/default/AndroidManifest.xmlis an undisclosed addition outside spec 2.7's list (the PR says none);LibraryImages.requestsignature changed; no before/after evidence for sibling-slice frames though Caption/LibraryPoster/rating plate changed.Full report:
data/review-wolfskin-34/report.mdin the firstmate home. No Gradle was run; native captures are the lane's saved ones.Design re-review (round 2) of head
cd625b4227ce8baa57512df50c8e74e57f5b42a9: no blockers; commit statusreview/design-claude= success. I do not merge or approve; merge stays with Justin.All 13 round-1 blockers are fixed. I re-measured the refreshed native captures against the locked frames myself (native 1920x1080 px, ref -> native):
TrackIndex.DISABLED, covered by a facade test. F2: real D-pad test over 3 audio + Off + 15 subtitles + Done stays inside the viewport. F3: real async person test lands on the first credit, not the nav. Home press counts 4/8/15/11 replay through real keys.Scope: no public design API removed or renamed,
WolfskinImagesis used (noLibraryImages), no test deleted or weakened, upstream files onlydocker/README.mdand the disclosedapp/src/default/AndroidManifest.xml. Shared Caption/exactLineBox/plate changes move sibling Home/Library/Discover pixels toward the locked frames (e.g. Library facts ink ref 782-800, before 779-797, after 784-800). The Requests pairs differ from the lane's published baseline althoughComingInSheetis untouched; I read that as baseline drift, not this PR (inference, not rendered).Non-blocking: (1) a tall Media info list opens scrolled to the bottom (Close is focused first) with no way to scroll up; (2) add numbers for st-062 to the PR: ref body 2 lines, native 1, Try again fill top 357.6 -> 322 = -35.6 px = one body line; (3) the round-1 non-blockers listed in the PR stay open.
Full report:
data/review-wolfskin-34-r2/report.md(firstmate data dir).View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.