Give TV cards roomy spacing and edge-straddling focus rings #40
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/tv-spacing-b7"
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
Deliver TV walk build B7b with the approved Level 2 Roomy spacing, card/cast rings and library toolbar clearance. AI-assisted (fork-internal).
Final pushed head:
92c5661be0605fc8836eaf6c079ffd6a916d29f8.Four debug APKs plus verified
SHA256SUMSare ready at/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-build-b/apk-b7b/. No device/ADB, release/signing or version changes.Base and scope
Initially integrated the startup/navigation fixes by fast-forward from
origin/fm/tv-walk-fix1(9e15dbee). After those fixes landed, merged currentorigin/main(711dbebf), including the Anime-root Back correction (6e0f9952), into this branch. Startup/navigation change: #39 . Those fixes are preserved.FocusLift.Card, previouslyNone. All five card-ring call sites switch; controls, avatars, picker and selected-chip borders do not.Hero, nav, text sizes, caption content, colours, motion and behaviour outside this spacing/ring change stay as inherited from the base. Existing token readers for Home/Discover/title row heights, Home visible-row re-entry thresholds, caption placement, slots and paging are exercised by the final suite; no unrelated reader rewrites. Native capture tests record the real surface; they are not automated reference-pixel assertions. Pair pixel measurements are a separate check. Existing native capture suites regenerate their frames with the amended tokens. The checked-in library geometry manifest is updated. Review fixes decouple poster progress from caption spacing using
Title.cardProgressInset(18 px per side, 220 px track), and key library focus-follow on effective columns, focused row and header geometry.LibrarySpacingRegressionTestrenders and asserts both progress geometry and unchanged deep focused index/viewport across 199→200→199 titles.Native-resolution comparison
The three 3840×1080 native | reference pairs are attached in the evidence comment. Each half remains 1920×1080; references are the supplied
ref_library_shows.png,ref_tile_ring.pngandref_cast_ring.png.Accent-ring raster bounds below are
[left, top, right-exclusive, bottom-exclusive], measured in native pixels with the same lilac mask for both images.Library chips remain y 252–320; first art row y 372 gives 52 px chip-to-art clearance. Poster art scales to 276.48×414.72 at x 85.76/y 356.64. Next-up tiles start at y 252 and x 96/536/976/1416; its next heading is y 545. Cast circles start at y 252 and x 96/340/584; resting name line boxes start at y 488 (focused name box y 494.48 from the unchanged whole-card scale). Native Cast/More like this headings are at y 168/630.
These clearances derive from the amended 40 px gap, measured card dimensions and 1.08 scale (
gap − width×0.04 − ringOutside). Wide clearance is geometry-derived, not a claim of a real-box multi-resume walk. The focused fifth poster in the native rail frame ends at raster x 1548; the rail lane begins at x 1772, leaving 224 px.Font and unchanged reference differences
Platform Roboto remains intentionally unchanged. Both versions retain one-line names/captions; their ink metrics differ: Ruth Wilson is 138 px wide natively versus 172 px in the browser, with ink top y 495 versus 493; focused Tom Hardy is 135 versus 167 px wide, ink top y 502 versus 499. The focused Shows caption is 335 versus 431 px wide, ink top y 801 versus 799. Next up ink top is y 176 versus 177; the next heading is y 552 versus 553. No font or per-title compensation was added.
Not done/outside this change: the prototype's second Shows row includes Stage at column three, unlike the existing native fixture order; the prototype Cast frame includes a sample pill that native screens already omit. The inherited startup/navigation fix makes the scrolled nav band opaque. No attempt was made to undo those existing differences, redesign control rings, refresh the source prototype gallery, or exercise real-player Back/device playback.
Verification
make testonc17447c5: passed, 674 app + 181 design + 17 client tests = 872; zero failures/errors/skips. Includes native captures, Home key/viewport re-entry paths, library paging/rail/scroll paths and title keys. Client runtime smoke also passed live-profile → disk reopen → ETag 304 → HTTP 503 retention.make apk-debug: passed, including branding inspection of all four packaged debug APKs. Copied them immediately, thensha256sum -c SHA256SUMSpassed all four.Proof, pairs, pixel measurements and gate logs:
/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-spacing-b7/. Real-TV installation/walk remains with firstmate; no device result is claimed here.library-shows-native-reference.png
tile-ring-native-reference.png
cast-ring-native-reference.png
B7 native | reference comparison pairs
Evidence for the roomy TV spacing change: #40 . Final pushed head
c17447c528ed66db480ca55654005cfc55071316. Each attachment is lossless 3840×1080, with native 1920×1080 on the left and the supplied 1920×1080 reference on the right. Open the image at native size to inspect the inset/outside stroke.Shows library — first poster focused
Ring bounds in both halves:
[84,355,364,773)px. Native minus reference L/T/R/B: 0/0/0/0 px. Chips bottom y 320; art starts y 372; clearance 52 px. Poster pitch 296 px. Ring-to-neighbour: 27.76 px before ring scale, 27.60 px including it (rounded acceptance: 28 px). Caption ink top: native y 801 vs reference y 799; the unchanged Roboto caption is 335 vs 431 px wide, one line in both. Native fixture ordering differs in row two because the prototype contains Stage at column three; not changed here.Home Next up — first tile focused
Ring bounds in both halves:
[78,241,514,488)px. Native minus reference L/T/R/B: 0/0/0/0 px. Resting tile art is 400×225 px, starts y 252 at x 96/536/976/1416. Next heading is y 545. Ring-to-neighbour: 22.00 px before ring scale, 21.84 px including it. Heading ink top differs by −1 px (native y 176, reference y 177); narrower Roboto text is unchanged.Title Cast — first person focused
Ring bounds in both halves:
[86,238,306,457)px. Native minus reference L/T/R/B: 0/0/0/0 px. Resting circles start y 252, x 96/340/584 (200 px circle, 244 px pitch). Resting name line boxes start y 488; the focused name box is y 494.48 after the unchanged whole-card scale. Ruth Wilson's ink is 138 vs 172 px wide, top y 495 vs 493; focused Tom Hardy is 135 vs 167 px wide, top y 502 vs 499. Both remain one line. The prototype sample pill remains intentionally absent in native output.Wide-card geometry remains 544×306, pitch 584, three slots; derived ring-to-neighbour clearance 16.24 px before ring scale, 16.08 px including it (rounded acceptance: 16 px). This is a geometry measurement, not a real-box multi-resume walk claim.
The separate 200-title native rail capture uses five columns while the rail is visible; the fifth focused poster's ring ends at x 1548, clear of the x 1772 rail lane by 224 px. Below the threshold, or without the A–Z rail, grids remain six columns.
Final gates passed once each:
make test(872 tests, zero failures/errors/skips) andmake apk-debug(four APKs; branding checks passed). B7 APKs and verifiedSHA256SUMSare in/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-build-b/apk-b7/. Full captures, pairs, measurements and logs:/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-spacing-b7/. No ADB/device or playback actions.TV roomy spacing review — changes required
Reviewed head:
c17447c528ed66db480ca55654005cfc55071316.Scope: spacing commit only,
origin/fm/tv-walk-fix1...HEADafter9e15dbee8c97dede2fba370693f09eaba736f403. Earlier startup/navigation changes excluded.Blocking regressions
B1 — Caption spacing also narrows already-merged poster progress bars.
WolfskinTokens.kt:149changesLayout.captionOffsetfrom 9 to 19 dp.LibraryPoster.kt:43-46also uses that token for horizontal progress padding, so partially watched posters now have 38 px rather than 18 px insets: track width 220 → 180 px on unchanged 256 px art. That consumer exists onorigin/main; the amended prototype still specifiesleft:18px; right:18pxfor.card .prog(amendedindex.html:139). Keep the new caption spacing but decouple the progress inset using an appropriate existing 9 dp progress token. This affects Library and otherLibraryPosterconsumers, not Home's separate renderer. Source/token calculation; this state was not newly rendered by the reviewer.B2 — A library refresh crossing the rail threshold can strand retained focus offscreen.
LibraryGridState.kt:94,105dynamically switches six→five columns at 200 A–Z titles, but the focus-follow effect atLibraryScreen.kt:91-99is not keyed on column count or effective focused row. The production snapshot path (WolfskinLibrary.kt:84-90) updates source while retaining the same focused identity/index. Example: 199 titles, index 198; append a title sorting last. Index stays 198 but row changes 33→39, requiring 3144 px additional scroll. No effect key changes. Regrouping first-title row keys (LibraryScreen.kt:131-134) does not preserve the focused row generally. [INFERENCE: exact viewport outcome from source, not a new Android reproduction.] Reconcile scroll on effective layout changes while retaining ordinary Back restoration; cover an unchanged deep focus across 199↔200 titles. The new controller test resets index and does not exercise this transition.Checks that pass
python3 wolfskin-design/generate_tokens.py --check→Token drift check passed; generated Kotlin/CSS/manifest agree with all inputs.Non-blocking notes
TitleShelf.kt:67,118addsFocusLift.Cardto previously shadowless cast/episode paths. This agrees with card treatment and the supplied cast frame, but “lift unchanged” should distinguish parameters from recipients.library-screen.jsongeometry is descriptive; its discovered consumer reads press paths only. Passing capture tests do not independently assert pixel parity or live rail transitions.Shared-source inventory: generated
WolfskinTokens(no Type/colour/motion/hero/nav changes),Focus.focusRing,TitleCard,CatalogueRecoveryCard,DiscoverShelfentry ring,TitleCast/TitleMediaShelf/episodeTitlePoster,LibraryToolbarand library scroll calculations, andLibraryGridState.columns. Scoped as requested except B1, B2 and the noted shadow-recipient change.No Gradle/make/build/device commands were run by this reviewer. Supplied builder logs report successful gates; firstmate's Xiaomi walk is separate supplied evidence. No security/data-safety issue found. No code edits, push, approval or merge.
Standalone report:
/root/.treehouse/firstmate-7bab20/2/firstmate/data/review-wolfskin-40/report.md.B7b: review blockers fixed and landed navigation base included
Final pushed head:
92c5661be0605fc8836eaf6c079ffd6a916d29f8. Mergedorigin/mainat711dbebf, preserving the Anime-root Back correction.Title.cardProgressInset, independent of the enlarged caption offset.LibrarySpacingRegressionTest.partiallyWatchedPosterKeepsItsOriginalProgressInsetsrenders a partially watched 256 px poster and asserts a 220 px track with 18 px left/right insets.crossingRailThresholdKeepsTheSameDeepFocusedPosterVisiblerenders index 198 and asserts its identity, displayed viewport top and full height survive 199→200→199 titles without a directional key. The production fix is under 20 lines.FocusLift.Card. Capture tests record the native surface; reference-pixel measurement is separate, not an assertion provided by those capture tests.Targeted tests passed: 24 tests (15 design, 9 app), zero failures/errors/skips, covering both new regressions, spacing recordings, shell keys/snapshot reads/routing/startup, first-sign-in navigation, Anime availability and Anime-root removal. Separate measurement of the regenerated three comparison frames still gives 0/0/0/0 px ring-bound offsets. The existing attachment pairs remain representative. The 872-test full suite on
c17447c5remains historical evidence; no full-suite loop was run.One final-head
make apk-debugpassed; all four APKs were copied immediately andsha256sum -c SHA256SUMSpassed. Install set:/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-build-b/apk-b7b/. Targeted XML results, refreshed measurements and APK log:/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-spacing-b7/. Worktree clean. No device/ADB/release/signing actions.