Build Discover TV picks, hidden titles and request flows #33
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/tv-slice6-discover"
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?
Discover TV slice
AI-assisted (fork-internal).
Implements Discover picks, filters, complete lane order, service pages, See all, Hidden picks, Not interested/restore/Undo, recipient selection, request sheets and receipts. Reuses the shipped shell, one Android key/hold adapter, shared poster/caption/grid/header/focus primitives and debug-only fixture provider. Main includes the shell, Libraries and Requests; this PR targets
mainafter preserving all three through an additive merge.Refs: approved TV spec, sections6.3/6.7/7.6/7.7/8/9/10; locked Opus prototype.
Design review corrections and additive main integration
Merged
origin/mainadditively (merge commitbfd4002d), including shipped Requests head1c77f21df3383e2af7684a047dfeb2675f4f8bc6. Both screen families remain: the actual Coming-in Requests sheet replaces the old shell placeholder, Discover overlay still draws after nav, both destination branches and glyph sets survive, and shared avatarletterColor/caption separator tokens are reused. No force push or rebase.measure-review-layout.pyrecords the exact RGB thresholds, bounds and border-versus-fill definitions; its JSON retains all measured values and six passing acceptance checks. The 273px Restore target is the outer focus ring, not its white fill, which begins282px in the frozen image too. Panel bottom reports both border rows instead of obscuring the 2px difference.Three permanent native geometry guards now cover Restore negative-margin layout, full-sized retry despite row overflow, and hero CSS allocation. The hero guard failed on a99px paragraph with
LineHeightStyle.Mode.Tight; explicit layout allocation passed at86px. No existing assertion was weakened.Non-blocking review observations N1/N2 remain outside this three-blocker pass: request/receipt stacks and shared page-header/caption facts have measured3–4px offsets. Those are now explicitly identified per affected capture and not attributed to font rasterisation. Other non-blocking observations (unused live adapter coverage, debug per-person fixture persistence, rare empty-hero focus, live Upcoming projection and Show-again/Undo toast wording) were not expanded into unrelated changes. The capture suite now guards these three layout boundaries; it is not a universal pixel-equality test.
Safety and integration
Upstream files touched
None. No files under upstream
app/src/main,app/src/default, upstream Gradle configuration or version/signing/default resources changed relative to main. Existing hook remains unchanged. Changes are confined to fork-ownedwolfskin-design,app/src/wolfskin, debug assets/tests and the fork documentation. Shared focus/caption/grid/header/scroll primitives were extended to reuse one convention, not duplicate the shell or Libraries.Verification at
130697c2eb0e79c6257be20362c27572dd374eabmake testmake apk-debugAfter design review, firstmate explicitly authorized one final make test / make apk-debug pair after the additive main merge and these three blocker corrections. The table above is that final pair at the pushed head. No runtime edits or extra full gate runs followed. The task-owned offline init hook was removed; shared dependency caches were left intact. No release/tag/asset/signing/version change, device operation or install.
Deliberately not done / integration boundaries
discover-title-destination-stub, with request/hide actions but no cast/playback/version fidelity claim. The high whole-frame differences behind sheets and st-059 reflect that authorized stub, not a finished title page.Exit-check evidence
All28 final pairs were visually audited. Final proof archive contains per-capture text metrics, review-target pixel measurements, full final logs, scripts, decisions and before/after hash manifests. All28 pairs were regenerated; only st-029/032/036/037/038 changed and have new head-suffixed attachments. The other23 are byte-identical to the previously audited set. Source/native files and heatmaps remain under
/root/.treehouse/firstmate-7bab20/2/firstmate/data/tv-slice6-discover/. Each pair shows prototype left and native right, each half1920×1080. Numeric errors include approved font/layout differences and explicitly scoped title stubs; they are not pixel-equality assertions.Discover acceptance comparison
Commit:
130697c2eb0e79c6257be20362c27572dd374eab. Every half is 1920×1080 at density2.0; prototype left, native Compose right. SDK34/Roborazzi renders the actual surface with offline fixture art. All pairs were visually audited; these measurements are not pixel-equality claims.Approved differences: platform Roboto (no bundled font or per-title/width compensation); source600/650 maps to platform Bold700; focus scales fold source buttons1.06→approved1.05 and sheet rows1.03→1.02. Hero/Restore text explicitly allocates CSS line boxes; other Discover text retains its source leading. Merged shell/library line-height styles are unchanged. Prototype-only sample/Simulated labels do not ship. Authorized title stubs are not title-family fidelity claims. Native Gaussian shadows/blur, glyph rasterisation and JPEG compression are not browser-identical (spec10.2). Non-blocking review observations N1/N2 (3–4px request/header/caption offsets) remain explicitly identified below, not disguised as font-only differences.
Mean RGB error averages every channel/pixel on a 0–255 scale. >12 counts pixels whose maximum absolute channel error exceeds12. Nav error includes the underlying top150px background, not an isolated geometry mask. Sheet error covers x1120–1919 only; the whole-frame diff also includes its outside shadow. Text metrics are actual composed TextLayoutResult values, including any transparent composed plates; the linked JSON contains line strings and bounds.
Design review (Claude Sonnet, cross-family): CHANGES REQUESTED
Reviewed head
12990349913f96bbd5723cd08040bccc1898279f. Compared all 28 pairs against the locked frames at 1920x1080 with pixel measurements, and read the Discover code, the four press-path tests and the async-focus test. No Gradle run.Blocking (visible, not font-caused):
.submargin (-8 above, +14 below) is applied in the Request sheet but not in the Restore sheet (DiscoverOverlay.kt:57-58).row_state) that caps its Column, so the two-line body squeezes the button (DiscoverScreen.kt:166-181). This is the screen every release build shows. The one-line variant (st-041) fits.DiscoverType.hero, Trim.None), so the bottom-anchored stack carries about 14 px extra. It applies with Roboto too, so ruling (a) does not cover it.Measured numbers and crops are in the review report. Fix suggestions: give the Restore sub the same offset as the Request sheet, let the state panel overflow its row, and clamp the hero title to the CSS line box; then re-measure st-029/037, 032 and 036.
Non-blocking: request/receipt sheets sit 3-4 px high from the "For" label down; shared headers and caption facts lines are 3-4 px high (inherited shared code); the real Conductarr adapter is unwired and untested and omits
poster_path; debug-fixture hides/receipts reset on person switch; capture tests assert nothing.Checks that passed: the four press paths (4/7/9/8) are real key-event replays through the shell focus path and fail if behaviour breaks; held OK files 0 requests; no double-submit (uncertain outcome does a forced read, never a POST); the real async skeleton-to-loaded focus path is tested; receipts and Shared wording follow 3.5; no upstream file touched; the fixture host constructs no network client; hygiene clean (plain commits, no trailers, no test deleted or weakened, GPL headers present, no public design API removed). The Trailer press path is a stated gap (no trailer field in the generated client), which is acceptable.