Merge upstream Wholphin v1.1.1 #53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/wolfskin-upstream-1-1-1"
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 and approval gate
Merge Wholphin v1.1.1 into current Wolfskin main as a real two-parent merge. Wait for Justin's explicit GO before merging. Unit validation is RED (missing offline Robolectric runtimes); details and every failing name below. No release, asset upload, tag, optimized-variant build, installation, ADB or device/box action was performed.
AI-assisted (fork-internal). Ready for firstmate's independently arranged cross-family review; this worker posts no review status and performs no merge.
332fc6476d00264a573864f9bcf8c0569d95d36b(includes the image-sizing/lean-read, DNS/saved-people and picker-test synchronization work).159edc875d10a667c25598a2cbfac8c123fe5bff.b80b67f7363562da57ce2815216a7f23272eeb21; parents are the base above and upstream tag commit.00e8e83bb64d7a3ea57310846ed106c9fd621f53. The only subsequent commit documents the integration; compiled source is identical to the APK build head.Conflicts, behavior and fork preservation
No conflicts. No ours/theirs override, rebase, history rewrite or force-push. The sole upstream source change imports unchanged. Every existing Wolfskin implementation and assertion is retained.
app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/SwitchSeerrViewModel.ktdocker/README.mdThe three initialization paths, checked against the code:
initialUrlstays null, retaining Wolfskin's default URL and Jellyfin-first login choice.finallysets Success so manual setup is available.finally→ Success; manual setup remains available. A successful response still prefills its plugin URL.No existing app/design test directly references
SwitchSeerrViewModelorSwitchSeerrState. Build plus the existing suite provide integration/regression coverage, not direct runtime proof of these three paths. Two attempts to register an isolated external smoke never executed an application test (source discovery, then read-only Groovy property); firstmate explicitly directed dropping that disproportionate harness. Its source/configuration/runner were removed; there was no third attempt and no new or weakened permanent test.Preservation: baseline
v1.1.0→ frozen Wolfskin main contains 2,832 paths. All 2,832 still differ from upstreamv1.1.1; 2,831 are byte-identical to the frozen main. The remaining file is the additive build README note. No Wolfskin-modified source/resource/test file changes behavior through an upstream edit. The upstream Seerr setup fix affects the legacy setup dialog; the owned Conductarr Discover/request path is unchanged.Application ID/branding, original
com.github.damontecres.wholphinnamespace/packages, GPL notices, Conductarr integration and all rating badges, Seerr defaults, TV layouts, Forgejo updater, image sizing/lean reads, saved-person/session fixes, DNS/OkHttp graph, Docker wrapper, Makefile and CI choices survive unchanged. No upstream workflows were enabled.Restricted
git diff --stat 332fc6476d00264a573864f9bcf8c0569d95d36b HEAD -- <all Wolfskin baseline paths>:The full PR delta is two files, twelve insertions, zero deletions. Baseline inventories, input refs, patches, stats and identity/build logs are retained at
/root/.treehouse/firstmate-7bab20/2/firstmate/data/wolfskin-upstream-1-1-1/.Database, tokens and toolchain
app/schemas/*.jsonchange. No conflicting fork migration or database decision is introduced. The older 35→40→41 install migration already in main remains unchanged.:wolfskin-design:checkTokenDrifttask passed; no token regeneration was needed.developtags; none was forced. Git cannot independently verify the signed upstream tag without anallowedSignersFile; this PR makes no signature-verification claim and changes no shared trust settings.Build, identity and final-head test evidence
Unit gate is RED, not merge-ready: the sole final-head
make testinvocation failed during Robolectric SDK startup for 109 tests. These are new failures observed in this lane, not asserted to be baseline failures. No second suite run, assertion weakening, test exclusion or unrelated tooling fix was performed.make apk→bash docker/gradle.sh release clean assembleDefaultReleaseBUILD SUCCESSFUL in 5m 48s; 111 tasks executed. Standard default release variant, not the separate optimized variant.make apk-debug→bash docker/gradle.sh debug assembleDefaultDebugBUILD SUCCESSFUL in 3m 6s; 97 tasks. Existing packaged branding check passed on all four debug APKs, including legal attribution. Debug uses the existing MPV stub; it is identity proof, not native-playback proof.make test→bash docker/gradle.sh debug testDefaultDebugUnitTest, exactly once on00e8e83bb64d7a3ea57310846ed106c9fd621f53BUILD FAILED in 3m 58s. App: 111 suites, 714 tests, 109 failures, 0 errors/skipped. Design: 27 suites, 194 tests, 0 failures/errors/skipped. Total: 908 tests, 799 pass, 109 fail.apksigner verify --verbose --print-certs+aapt2 dump badgingin the build imageorg.justinvisser.wolfskin.tv, labelWolfskin, code65. Debug: existingorg.justinvisser.wolfskin.tv.debug, labelWolfskin (Debug), code65. Neither package became Wholphin.5cd708ffa94cc22fa41648377a305af3afe0f6da394c57e67024df43c1fcb5a0— unchanged from the v1.1.0 release-build evidence.182bac72e292b9ea4d3d4e6383f92eb2161fa28ba5afcff0337cb7d5a9d5341d— matches the existing persistent debug keystore certificate. Keystore bytes unchanged before/after, SHA-2569b3030cb7e5c19a3a7e498c5ad16f4a9d5ac80ffbce8dd7ad9def6680f339d35.make apkintentionally signs with the release key, not the persistent debug key. The extra standard debug build proves the debug signer separately; Makefile/signing semantics were not changed.APK version metadata is
1.1.1-153-gb80b67f7from the committed merge. The later final-head commit is documentation only. All eight exact names (local proof only; not published):The source package and artifact filename convention remain upstream-compatible; the installed application IDs/labels remain Wolfskin.
Exact test failure evidence
All 109 failures have
IllegalArgumentException: Path is not a filebefore their test bodies, naming one of these absent offline runtimes:Observed prepared directory contains only
android-all-instrumented-14-robolectric-10818077-i7.jar, despite all three versions being declared on the singlerobolectricSdkconfiguration. [INFERENCE] Gradle resolves that configuration to one module version, so the clean build lacks the older SDK files that another checkout may have retained. This merge does not alter that configuration. The missing-file exception is observed; no application regression or baseline-green equivalence is claimed, and no rerun was used to confirm it.The unchanged existing picker/identity/ratings/updater tests that did run include
PersonPickerSessionTest(7 pass),SavedPeoplePickerTest(1 pass),ServerSavedSessionTest(5 pass),SeerrRatingsServiceTest(12 pass), andTestUpdateChecker(17 pass). These do not directly test the changed Seerr view-model initializer.Every failing test name, exactly as reported (109)
Full test log, archived XML/binary results, six failing-suite XML files, counts, exact failure inventory and APK checksums are retained under
/root/.treehouse/firstmate-7bab20/2/firstmate/data/wolfskin-upstream-1-1-1/. Generated build/capture scratch outputs are removed after evidence collection to keep disk use lean.Release scope in plain words
Wholphin v1.1.1 release notes explicitly call this a quick release fixing one bug. The page repeats the v1.1.0 feature list; those earlier changes already landed through the v1.1.0 integration.
Per-file overlap with work in flight
Upstream changes only
app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/SwitchSeerrViewModel.kt, by adding three lines. Both live-lane snapshots were inspected read-only; neither branch was checked out or changed. The motion snapshot and available card-branch tip currently point to the same commit,166844541821b155673b8d3a4e06af7b76f2c231; no uncommitted sibling-worktree content was inspected. The upstream one-file delta does not overlap either snapshot or any named planned card surface.Paths below are individual filenames within the stated source directories; every named file is unchanged by this tag.
wolfskin-design/src/main/java/org/justinvisser/wolfskin/design/WolfskinImages.ktui/CoilConfig.ktLoadingSurface.ktNetworkArtTransition.ktMotion.ktHeroMotion.ktHomeHeader.ktHomeScreen.ktHomeShelf.ktDiscoverScreen.ktDiscoverShelf.ktTitleHeader.ktTitleShelf.ktFocus.ktFrameScroll.ktShelfScroll.ktTitleCard.ktCaption.ktLibraryScreen.ktLibraryGridState.ktui/components/ItemGrid.ktui/components/CollectionFolderGrid.ktui/components/CollectionFolderList.ktui/main/settings/HomeRowPresets.ktdata/ServerRepository.ktMainActivity.ktWhosWatching.ktShellState.ktapp/src/wolfskin/java/org/justinvisser/wolfskin/tv/WolfskinApp.ktShellPeople.ktPersonPickerSessionTest.ktSavedPeoplePickerTest.ktservices/hilt/AppModule.ktui/setup/seerr/SwitchSeerrViewModel.ktThis tag introduces no direct merge conflict for the motion/shaped-loading lane (ready motion review) or the stacked card metadata/caption/progress/grid lane. Those branches may already conflict with each other or moving main independently of this tag; that is not assessed or changed here.
Verification limit and next approval
Not smoke-tested on the TV. No live Jellyfin/Conductarr/Seerr calls or companion-plugin configuration were performed. Source inspection plus builds/existing suites do not prove the no-plugin dialog, decoder behavior or physical focus/layout.
A later explicitly authorized device window should open manual Seerr setup without the plugin and reach the existing Jellyfin-first chooser/default URL; inspect plugin-prefilled setup if used, current-person Conductarr identity/ratings, saved-person cold/hot launch, Home/Libraries/Discover and focus, Forgejo updater metadata, and existing ExoPlayer/MPV playback. The carried-forward HDR/Dolby Vision and database-install risks are unchanged by this patch.
This PR is ready for review, not permission to merge or publish. Hold for Justin's GO; the local unit gate is RED and must be accounted for before any merge decision. Firstmate arranges the separate cross-family review. Nothing is published or installed.
Cross-family review (Claude) of the v1.1.1 merge, head
00e8e83bb6: PASS, no blocking finding. NOT to be merged before Justin's go.Read the whole PR delta: 2 files, +12. The only upstream source change is three lines in
SwitchSeerrViewModel.kt: when the Seerr companion plugin is absent the setup state is now marked Success immediately instead of staying Pending (the loading dialog never cleared). The plugin-present, empty-response and error paths are unchanged (existingfinallysets Success).docker/README.mdgets nine documentation lines. Real two-parent merge, no conflicts, no Room change, no tokens, dependency, wrapper or workflow change; all Wolfskin paths preserved (restricted diff against the base shows only the README note). make apk and make apk-debug pass; release and persistent debug signers unchanged; packages remain org.justinvisser.wolfskin.tv(.debug).On the red unit gate: all 109 failures are
IllegalArgumentException: Path is not a filefor the offline Robolectric Android 9 and 11 runtime jars that the fresh lane worktree lacks (the same infrastructure artifact the motion lane hit and cured by copying the jars; main itself is green at 714/714 since PR 52). None executes application code, and the diff cannot influence them. I did not require a rerun for three lines in a legacy dialog; it is cheap to do before a merge if Justin wants the number green.Non-blocking: no existing test exercises SwitchSeerrViewModel (build plus suite only); the no-plugin dialog should be looked at once on the TV.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.