Round 2 release candidate 3: polish lanes A-E, season reel and trailer return #82

Merged
justinzeus merged 27 commits from fm/tv-round2-candidate3 into fm/tv-round2 2026-11-08 13:58:41 +01:00
Owner

Trailer-return decision: correction pending

With Sign in automatically off, ordinary warm returns must show the profile picker. Only the first valid trailer handoff return may retain the same unprotected person/title (same boot, strictly under ten minutes); a second ordinary return shows the picker again. Automatic sign-in on and protected/cold-launch gates stay unchanged.

The correction is ready for review at #83, targeting fm/tv-round2-candidate3. This candidate branch has not been updated: its exact head and existing build evidence below still refer to the original candidate. Do not treat this candidate as carrying the narrowed rule until that correction is accepted. The original trailer-return branch at #81 now contains the same correction at 98db417ca29ddb1b8684007abc11d98007958670. Scoped verification passed 85 tests on the candidate correction and 77 on the original trailer branch, with zero failures/errors/skips in both runs. No release or TV installation is authorized by these changes.


Round 2 release candidate 3: the seven open polish and bug-fix PRs merged together on top of fm/tv-round2 (12a81ca8), plus two candidate-only test-infra/test-side commits. Exact commit: 3a315eb809e8fe0cb928b36f574006295b3fedb6. Nothing here has been merged into fm/tv-round2 yet.

PRs contained, merged in this order

Order PR Head merged
1 #76 (polish lane E) fa08235ac4d4a986aae18882c714306080fbc62d (first merged at 6f54bae3, then re-merged at this head)
2 #75 (polish lane A) 2572da00fde67194019308e137d4f75bb3e3f65f
3 #77 (polish lane B) 9a0ce25a27e84859b7e62ade10bf7f8bf042bc5d
4 #79 (polish lane D) f05b0de156fe5be05f6f8c5b6a5285d61c904fd0
5 #80 (polish lane C) bfa9fbc941c43336b7eaa8959a7b9ea88af23980
6 #78 (season reel bug) d418a89a2535778ee6353a2125073131d164a878
7 #81 (trailer return bug, tier C identity change) 1bdae30e11cff6195f8d4379333d45eb2bd10eee

The library-up bug is not included (no fix exists). The lane heads carried no commit statuses at merge time.

Candidate-only commits (must be carried into fm/tv-round2 when this merges)

  1. Test-side merge fix (3da8a31c): test-only constructor-call fixes caused by merging the lanes together (NavigationCutTest, TitleEntryBackTest, TitlePolishTest; plus resolving two test-file conflicts in PersonSwitchThreadingTest and TitlePlaybackNavigationTest, keeping both sides' constructor changes). Product code unchanged.
  2. Give the app test JVM a 2g heap (da003d9e): maxHeapSize = "2g" on the app test task in app/build.gradle.kts. Test-infra only. Without it the first full run died with an OutOfMemoryError in the Robolectric test worker after 671 tests (the 512 MB Gradle default). This commit is a candidate-only addition that must be carried into fm/tv-round2 when the candidate merges.

Test evidence (read this carefully)

  • Full suite, run through docker/gradle.sh debug --continue testDefaultDebugUnitTest: design 295/295 pass; app suite with the 2g heap: 946 tests, 945 pass, 1 failed. That result is from da003d9e (merge plus the two commits above). The 1 failure was UpdatesKeysTest.classicRequiresEveryRetainedRowAndTheRealScroller (expected first visible Settings index 4, was 3), which failed on polish lane E's earlier head 6f54bae3 alone: lane E replaced the Settings scroll tween with animateFrameScroll, and main's UpdatesKeysTest still waited a fixed 320 ms.
  • Lane E then pushed a test-only commit (fa08235a: the test waits for scroll idle, assertion at index 4 unchanged). This candidate head 3a315eb8 differs from da003d9e only by that lane E commit. Verified by a targeted run, not a second full run: UpdatesKeysTest 6/6 and ScrollMomentumTest 6/6 pass on 3a315eb8.
  • The earlier first full run had one other failure and one skipped test: the failed one was the OOM-killed NavigationCutTest.reducedMotionKeepsOpaqueCutsAndRetiresOutgoingByFourFrames, which passes in the rerun (and alone); no skipped test appears in the rerun (0 skipped).

Opt build (this commit)

bash docker/gradle.sh optimized --offline -PtvVersion=1.1.1 -PtvVersionCode=70 ... :app:assembleDefaultOptimized, all four APKs in one run: package org.justinvisser.wolfskin.tv.opt, label Wolfskin (Opt), not debuggable, versionCode 70, versionName 1.1.1, signer SHA-256 182bac72e292b9ea4d3d4e6383f92eb2161fa28ba5afcff0337cb7d5a9d5341d (matches), baseline.prof/.profm present, no fixture assets, no missing_rules.txt. A debug build of the same commit was made for the emulator walk.

## Trailer-return decision: correction pending With **Sign in automatically** off, ordinary warm returns must show the profile picker. Only the first valid trailer handoff return may retain the same unprotected person/title (same boot, strictly under ten minutes); a second ordinary return shows the picker again. Automatic sign-in on and protected/cold-launch gates stay unchanged. The correction is ready for review at https://git.justinvisser.org/justinzeus/wolfskin/pulls/83, targeting `fm/tv-round2-candidate3`. **This candidate branch has not been updated**: its exact head and existing build evidence below still refer to the original candidate. Do not treat this candidate as carrying the narrowed rule until that correction is accepted. The original trailer-return branch at https://git.justinvisser.org/justinzeus/wolfskin/pulls/81 now contains the same correction at `98db417ca29ddb1b8684007abc11d98007958670`. Scoped verification passed 85 tests on the candidate correction and 77 on the original trailer branch, with zero failures/errors/skips in both runs. No release or TV installation is authorized by these changes. --- Round 2 release candidate 3: the seven open polish and bug-fix PRs merged together on top of `fm/tv-round2` (`12a81ca8`), plus two candidate-only test-infra/test-side commits. Exact commit: `3a315eb809e8fe0cb928b36f574006295b3fedb6`. Nothing here has been merged into `fm/tv-round2` yet. ## PRs contained, merged in this order | Order | PR | Head merged | |---|---|---| | 1 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/76 (polish lane E) | `fa08235ac4d4a986aae18882c714306080fbc62d` (first merged at `6f54bae3`, then re-merged at this head) | | 2 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/75 (polish lane A) | `2572da00fde67194019308e137d4f75bb3e3f65f` | | 3 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/77 (polish lane B) | `9a0ce25a27e84859b7e62ade10bf7f8bf042bc5d` | | 4 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/79 (polish lane D) | `f05b0de156fe5be05f6f8c5b6a5285d61c904fd0` | | 5 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/80 (polish lane C) | `bfa9fbc941c43336b7eaa8959a7b9ea88af23980` | | 6 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/78 (season reel bug) | `d418a89a2535778ee6353a2125073131d164a878` | | 7 | https://git.justinvisser.org/justinzeus/wolfskin/pulls/81 (trailer return bug, tier C identity change) | `1bdae30e11cff6195f8d4379333d45eb2bd10eee` | The library-up bug is not included (no fix exists). The lane heads carried no commit statuses at merge time. ## Candidate-only commits (must be carried into `fm/tv-round2` when this merges) 1. **Test-side merge fix** (`3da8a31c`): test-only constructor-call fixes caused by merging the lanes together (`NavigationCutTest`, `TitleEntryBackTest`, `TitlePolishTest`; plus resolving two test-file conflicts in `PersonSwitchThreadingTest` and `TitlePlaybackNavigationTest`, keeping both sides' constructor changes). Product code unchanged. 2. **`Give the app test JVM a 2g heap`** (`da003d9e`): `maxHeapSize = "2g"` on the app test task in `app/build.gradle.kts`. Test-infra only. Without it the first full run died with an OutOfMemoryError in the Robolectric test worker after 671 tests (the 512 MB Gradle default). **This commit is a candidate-only addition that must be carried into `fm/tv-round2` when the candidate merges.** ## Test evidence (read this carefully) - Full suite, run through `docker/gradle.sh debug --continue testDefaultDebugUnitTest`: design **295/295 pass**; app suite with the 2g heap: **946 tests, 945 pass, 1 failed**. That result is from `da003d9e` (merge plus the two commits above). The 1 failure was `UpdatesKeysTest.classicRequiresEveryRetainedRowAndTheRealScroller` (expected first visible Settings index 4, was 3), which failed on polish lane E's earlier head `6f54bae3` alone: lane E replaced the Settings scroll tween with `animateFrameScroll`, and main's `UpdatesKeysTest` still waited a fixed 320 ms. - Lane E then pushed a test-only commit (`fa08235a`: the test waits for scroll idle, assertion at index 4 unchanged). This candidate head `3a315eb8` differs from `da003d9e` only by that lane E commit. Verified by a targeted run, not a second full run: `UpdatesKeysTest` 6/6 and `ScrollMomentumTest` 6/6 pass on `3a315eb8`. - The earlier first full run had one other failure and one skipped test: the failed one was the OOM-killed `NavigationCutTest.reducedMotionKeepsOpaqueCutsAndRetiresOutgoingByFourFrames`, which passes in the rerun (and alone); no skipped test appears in the rerun (0 skipped). ## Opt build (this commit) `bash docker/gradle.sh optimized --offline -PtvVersion=1.1.1 -PtvVersionCode=70 ... :app:assembleDefaultOptimized`, all four APKs in one run: package `org.justinvisser.wolfskin.tv.opt`, label `Wolfskin (Opt)`, not debuggable, versionCode 70, versionName `1.1.1`, signer SHA-256 `182bac72e292b9ea4d3d4e6383f92eb2161fa28ba5afcff0337cb7d5a9d5341d` (matches), baseline.prof/.profm present, no fixture assets, no `missing_rules.txt`. A debug build of the same commit was made for the emulator walk.
justinzeus added 25 commits 2026-11-08 08:18:19 +01:00
Test-only; product code is unchanged.
NavigationCutTest passes the new liveSession to MainContent and trailerReturn to the shell view model; TitleEntryBackTest passes the session to the Home view model; TitlePolishTest passes trailerReturn to the title view model.
Candidate 3: merge new polish-lane-e head
All checks were successful
gate/round2-candidate full suite on da003d9e: design 295/295, app 945/946; the 1 failure (UpdatesKeysTest, lane E) fixed test-only in 3a315eb8 and verified by targeted run 12/12; Opt vc70 signer ok
review/round2-candidate No blocker; 1 decision for Justin (warm return), 9 minor findings
3a315eb809
justinzeus added 2 commits 2026-11-08 13:30:44 +01:00
Limit auto-off warm continuation to trailer handoffs
All checks were successful
review/delta-claude Delta check: trailer-only narrowing correct, no safeguard weakened, 0 blockers
4a6d318f8f
Merge pull request 'Limit auto-off warm continuation to trailer handoffs' (#83) from fm/tv-trailer-narrow into fm/tv-round2-candidate3
All checks were successful
gate/round2-candidate Full suite 1282/1282 and Opt 1.1.2/71 checks on this exact head (data/tv-r2-gate4/result.json)
review/round2-candidate Combined round review at 3a315eb8 success, plus delta safety check of the trailer-only narrowing (PR 83) PASS with no blockers
01ab781d23
justinzeus merged commit c21d17dfdf into fm/tv-round2 2026-11-08 13:58:41 +01:00
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#82
No description provided.