Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
d2acf0b
Mobile parity groundwork: shared launcher/storage commands, desktop h…
bryanroscoe Oct 6, 2026
bbd87d1
Mobile parity: Optimize search and app sheet, Health suggestions, sna…
bryanroscoe Oct 6, 2026
77f8d3d
Mobile Launcher: Setup Wraith card, set any app as Home, separate sto…
bryanroscoe Oct 6, 2026
4e054c1
Mobile Files: app-backup finder and TV-side delete, shared with desktop
bryanroscoe Oct 6, 2026
65acf44
Mobile Apps: list recognised apps with search, details, report and lo…
bryanroscoe Oct 6, 2026
bbb7d21
Mobile Tweaks tab reaches desktop parity; Dashboard Optimize CTA and …
bryanroscoe Oct 6, 2026
0f364bd
Mobile: open links in the phone's browser, align types with core, ref…
bryanroscoe Oct 6, 2026
f4e2513
Docs: record the 2026-10-06 desktop parity pass on mobile and the des…
bryanroscoe Oct 6, 2026
ec7ad23
Mobile: regenerate Android capability schemas for the opener plugin
bryanroscoe Oct 6, 2026
b23c46c
Drop the Back button from the Apps and More tab roots
bryanroscoe Oct 6, 2026
eee6344
Bind mobile file operations to the active connection generation
bryanroscoe Oct 8, 2026
94079cc
Merge pull request #164 from bryanroscoe/fix/mobile-file-session-safety
bryanroscoe Oct 9, 2026
de5dda6
Bind mobile launcher intent and screensaver restore to device sessions
bryanroscoe Oct 15, 2026
c21342e
Record final mobile reconnect validation results
bryanroscoe Oct 15, 2026
49a0946
Keep stale snapshot completion from unlocking a newer launcher action
bryanroscoe Oct 16, 2026
f7897c1
Merge pull request #167 from bryanroscoe/fix/mobile-reconnect-safety-…
bryanroscoe Oct 16, 2026
7a4036e
Prepare mobile release gates, artifact checks and factual disclosures
bryanroscoe Oct 16, 2026
44758d3
Merge remote-tracking branch 'origin/mobile-parity-pass' into chore/m…
bryanroscoe Oct 16, 2026
7586cb6
Preserve reviewed mobile ancestry and document open release gates
bryanroscoe Oct 16, 2026
3b021fd
Scope APK alignment checks by ABI and correct disclosure guidance
bryanroscoe Oct 16, 2026
834548a
Correct Android notices against the locked published Tauri crate
bryanroscoe Oct 16, 2026
1aa7e16
Plan one-time Play Pro billing with free recovery and honest restore
bryanroscoe Oct 16, 2026
e404572
Plan supporter Play promos and post-Android iOS roadmap
bryanroscoe Oct 16, 2026
2ea2c1c
Refresh reviewed APK verifier test count
bryanroscoe Oct 16, 2026
7fe0e6a
Merge pull request #169 from bryanroscoe/chore/mobile-release-prep-20…
bryanroscoe Oct 16, 2026
45d82d1
Audit mobile entitlement gates and test isolated purchase states with…
bryanroscoe Oct 16, 2026
a75605c
Merge remote-tracking branch 'origin/mobile-parity-pass' into feat/mo…
bryanroscoe Oct 16, 2026
69e70bc
Preserve reviewed release ancestry and record integrated entitlement …
bryanroscoe Oct 16, 2026
53050bd
Design bounded Free screensaver undo and characterize Pro-loss gap
bryanroscoe Oct 16, 2026
c34bb89
Merge pull request #170 from bryanroscoe/docs/mobile-billing-plan-202…
bryanroscoe Oct 16, 2026
ff7d2e1
Merge pull request #171 from bryanroscoe/feat/mobile-entitlement-mode…
bryanroscoe Oct 16, 2026
0b1b471
Bind undo design to native previews and shared mutation provenance
bryanroscoe Oct 16, 2026
4ca89e7
Remove unused font peer chain and patch compatible frontend dependencies
bryanroscoe Oct 16, 2026
d120b8c
Merge remote-tracking branch 'origin/mobile-parity-pass' into fix/mob…
bryanroscoe Oct 16, 2026
1c3f2b1
Record integrated dependency audit and typography validation
bryanroscoe Oct 16, 2026
4b7e13b
Merge current mobile branch into Free undo design
bryanroscoe Oct 16, 2026
06fb192
Merge pull request #172 from bryanroscoe/docs/mobile-free-undo-design…
bryanroscoe Oct 16, 2026
5f4fc14
Merge pull request #173 from bryanroscoe/fix/mobile-dependency-audit-…
bryanroscoe Oct 16, 2026
6f3deef
Fix mobile settings readback and protect system-bar insets (#181)
bryanroscoe Oct 17, 2026
4d18b24
Lock mobile background scroll through nested app dialogs (#182)
bryanroscoe Oct 17, 2026
cd2244b
Invalidate app-sheet openings when the TV connection changes (#183)
bryanroscoe Oct 17, 2026
3a1881e
Clarify used capacity and sensor-aware thermal context (#184)
bryanroscoe Oct 17, 2026
56aa7c5
Improve mobile diagnostic report readability (#185)
bryanroscoe Oct 17, 2026
83f69b7
Fix mobile modal handoff focus and stock takeover ownership (#186)
bryanroscoe Oct 17, 2026
0136c34
Write the Daydream component before enabling it (#187)
bryanroscoe Oct 17, 2026
557247e
Document mobile export destinations and narrow-header follow-up (#189)
bryanroscoe Oct 17, 2026
e05891d
Keep mobile thermal threshold wording conservative (#188)
bryanroscoe Oct 17, 2026
dccfe99
Clarify private saves and clipboard-only report actions (#190)
bryanroscoe Oct 17, 2026
5e80c0e
Keep the mobile Diagnostics header usable at narrow widths (#191)
bryanroscoe Oct 17, 2026
9265e5f
Preserve explicit Android RAM accounting in mobile diagnostics (#192)
bryanroscoe Oct 17, 2026
b095f69
Retain screenshot captures with atomic non-overwriting saves (#193)
bryanroscoe Oct 17, 2026
35b5dea
Show density-only overrides truthfully in mobile scaling summary (#194)
bryanroscoe Oct 17, 2026
ba7c9d7
Name mobile screensavers from the catalog and retain raw details (#195)
bryanroscoe Oct 17, 2026
a73787a
Wrap mobile scaling presets at narrow widths and enlarged text (#196)
bryanroscoe Oct 17, 2026
4148f03
Route mobile setup-helper row disables through Home verification (#197)
bryanroscoe Oct 17, 2026
60a1934
Carry scoped APK storage measurements into mobile app reports (#198)
bryanroscoe Oct 17, 2026
13973d8
Merge reviewed desktop main into mobile integration
bryanroscoe Oct 17, 2026
93e9d46
Merge reviewed installer admission hardening into mobile integration
bryanroscoe Oct 17, 2026
d14363b
Merge pull request #201 from bryanroscoe/integration/mobile-main-pr16…
bryanroscoe Oct 17, 2026
b4546e8
Fix mobile Restore details and inconclusive removal selections (#202)
bryanroscoe Oct 17, 2026
0c78c06
Reconcile mobile release polish with final merge receipts (#203)
bryanroscoe Oct 17, 2026
d388cad
Preserve failed fresh safety lookups in mobile app reports (#204)
bryanroscoe Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/mobile-release-preflight.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Mobile release preflight tools
on:
pull_request:
paths: ['v2/mobile/scripts/**', '.github/workflows/mobile-release-preflight.yml']
push:
branches: [main]
paths: ['v2/mobile/scripts/**', '.github/workflows/mobile-release-preflight.yml']
workflow_dispatch:
permissions:
contents: read
jobs:
artifact-verifier-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Test fail-closed APK validation
run: python -m unittest discover -s v2/mobile/scripts -p 'test_*.py'
27 changes: 27 additions & 0 deletions docs/INTEGRATION-MOBILE-MAIN-2026-10-17.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Reviewed main integration into mobile

The original integration draft combined mobile `60a1934c5e4c575a81bd124698b9a9f6203e5fe8` with reviewed main `ae0436e4e2809e4fa677542b41d0e09b29532f60`, including PR168 desktop quit behavior and PR200 installer admission hardening. Original contributor commits remain in the ancestry. No release, device installation, signing configuration change, or physical device operation occurred.

The first normal merge is `13973d823c162815b46321442e9b1de636c7858d`, with parents mobile `60a1934` and main `40ba983`. Its only textual conflict was the Unreleased changelog: both branches' entries were retained, and the quit setting was explicitly labeled Desktop. The second normal merge of `ae0436e4` was automatic. Installer and quit production sources match reviewed main exactly. The mobile tracked tree remains unchanged from its parent.

Shared driver compatibility was inspected: leased drivers retain mobile byte-stream forwarding; unsupported spawn remains the default; WirelessAdb inherits the no-server stop default. A core regression checks both state and snapshot stop paths skip dispatch for a driver without a server. Desktop owns the quit hook and setting; Android has no shared-server stop hook.

## Historical local validation

On the combined source, workspace formatting and clippy with warnings denied passed. Full serial workspace tests passed: core 489, desktop 109 (one preexisting live test ignored), mobile Rust 26, license 2, registry 9. Mobile Svelte check had zero errors/warnings, production build passed, and all 326 tests passed. Desktop Svelte check had zero errors/warnings, production build passed, and all 24 frontend test scripts passed. All 34 real-command-layer E2E scenarios passed against SimulatedAdb only; opener/install/update effects are stubbed. No physical devices were queried.

The ARM64 Android debug APK compiled with existing JDK 17, SDK, NDK 28.2.13676358 and offline cached dependencies. APK SHA256: `9688e6a76902bca3bf0bef445693ba3396c341b72906c0c730e56da554c8d139`. The ignored local APK is not published. Upstream Kotlin/Gradle deprecation warnings remain.

Rust used two build jobs, incremental compilation off, and dev/test debug info disabled after the initial parallel build exhausted disk. Only this checkout's generated target cache was removed. Two existing fake-process PID preconditions failed under initial parallel load; the final combined workspace passed unchanged serially, including all eight `adb::driver::tests::process_lifetimes` fixtures recorded in [`rust.txt`](evidence/mobile-main-integration-2026-10-17/rust.txt). No deadlines were relaxed. Vendor tests passed 54 with one ignored after allowing their loopback mock listeners; vendor code is unchanged by the final main merge.

Desktop validation used an existing installed cache copied locally without installing dependencies: Kit 2.61.1 versus locked 2.70.3 and Vite 6.4.2 versus locked 6.4.4. Svelte 5.55.9 and TypeScript 5.6.3 match. Mobile cache versions match its lock. At the time of local validation, exact-lock CI and cross-platform checks remained required; these local results alone did not establish Windows/Linux success. The subsequent exact-head CI receipt below closes that gate without changing the local environment receipt.

Both gallery GIFs were regenerated (16 frames per theme) for the desktop setting. Representative [dark Devices](evidence/mobile-main-integration-2026-10-17/devices-dark.png), [light Devices](evidence/mobile-main-integration-2026-10-17/devices-light.png), and [Logs](evidence/mobile-main-integration-2026-10-17/logs-dark.png) frames use simulated data. PR200 changes no frontend source, so these remain current. [Validation logs](evidence/mobile-main-integration-2026-10-17/) contain the combined checks; inherited PR200 raw evidence is preserved verbatim, including trailing blank lines.

## Subsequent review and merge receipt

The preceding local validation is a historical receipt for integration head `93e9d46bed9935cd60ac84f0f0535fae320f58ea`, not a fresh run on later mobile commits. [Final independent source review](https://github.com/bryanroscoe/shield_optimizer/pull/201#issuecomment-6233713669) approved that exact head; [all six exact-lock/platform CI jobs](https://github.com/bryanroscoe/shield_optimizer/actions/runs/39030576353) passed. [PR201](https://github.com/bryanroscoe/shield_optimizer/pull/201) merged as `d14363bc76c05f2342289d9503e95175b2d44da2`. This closes its review/exact-lock gate while preserving the disclosed local-cache provenance. Documentation reconciliation does not rerun or replace those logs.

## Remaining acceptance gates

Independent review and exact-lock CI were completed for PR201 as linked above. Real phone/TV authentication, reconnect, remote and Android lifecycle checks remain physical-device gates. Desktop opt-in shutdown with real ADB, other clients, updater/restart, custom servers, and Windows/macOS/Linux remains a physical/platform acceptance gate. Simulated tests and a successful debug compile do not prove those behaviors.
51 changes: 51 additions & 0 deletions docs/evidence/mobile-main-integration-2026-10-17/android-build.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
Info Using installed NDK: /Users/bryanroscoe/Android/sdk/ndk/28.2.13676358
Info Looking up installed tauri packages to check mismatched versions...
Running beforeBuildCommand `npm run build`
npm notice run atv-optimizer-mobile@0.1.0 build
npm notice run vite build
vite v6.4.3 building for production...
transforming...
✓ 196 modules transformed.
rendering chunks...
computing gzip size...
build/index.html 0.47 kB │ gzip: 0.30 kB
build/assets/Geist-Variable-Bj2R_7yk.woff2 69.65 kB
build/assets/GeistMono-Variable-Dispecij.woff2 71.37 kB
build/assets/material-symbols-rounded-BwUW-B6-.woff2 123.34 kB
build/assets/index-CESwICGG.css 115.17 kB │ gzip: 17.35 kB
build/assets/notices.generated-B-XobKCb.js 338.84 kB │ gzip: 33.32 kB
build/assets/index-D-BjJy4N.js 379.86 kB │ gzip: 121.03 kB
✓ built in 1.38s
 Blocking waiting for file lock on build directory
 Compiling shield-optimizer-core v2.3.0 (/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/crates/core)
 Compiling atv-optimizer-mobile v0.1.0 (/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/mobile/src-tauri)
 Finished `dev` profile [unoptimized] target(s) in 21.85s
Info symlinking lib "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" in jniLibs dir "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/mobile/src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a"
Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libandroid.so"
Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libdl.so"
Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "liblog.so"
Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libm.so"
Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libc.so"
Info symlink at "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/mobile/src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a/libatv_optimizer_mobile_lib.so" points to "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so"
ATV Optimizer: release signing is not configured — the release APK/AAB will be UNSIGNED and Play will reject it. Create gen/android/keystore.properties (storeFile/storePassword/keyAlias/keyPassword) or set ATVOPT_KEYSTORE_PATH, ATVOPT_KEYSTORE_PASSWORD, ATVOPT_KEYSTORE_ALIAS and ATVOPT_KEYSTORE_KEY_PASSWORD. See mobile/RELEASE.md.
npm notice run atv-optimizer-mobile@0.1.0 tauri
npm notice run tauri android android-studio-script --target aarch64
Info connection; remote_addr=127.0.0.1:62382 conn_id=0
 Info Using installed NDK: /Users/bryanroscoe/Android/sdk/ndk/28.2.13676358
 Finished `dev` profile [unoptimized] target(s) in 0.51s
 Info symlinking lib "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" in jniLibs dir "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/mobile/src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a"
 Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libandroid.so"
 Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libdl.so"
 Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "liblog.so"
 Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libm.so"
 Info "/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/target/aarch64-linux-android/debug/libatv_optimizer_mobile_lib.so" requires shared lib "libc.so"

[Incubating] Problems report is available at: file:///Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/mobile/src-tauri/gen/android/build/reports/problems/problems-report.html

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.14.3/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
Finished 1 APK at:
/Users/bryanroscoe/Documents/Codex/2026-09-30/task/shield-mobile-report-readability-20261017/v2/mobile/src-tauri/gen/android/app/build/outputs/apk/universal/debug/app-universal-debug.apk
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
[
{
"name": "test:app-files-catalog",
"code": 0
},
{
"name": "test:pairing-flow",
"code": 0
},
{
"name": "test:adb-errors",
"code": 0
},
{
"name": "test:sideload-scan",
"code": 0
},
{
"name": "test:device-list-rows",
"code": 0
},
{
"name": "test:stop-adb-on-quit",
"code": 0
},
{
"name": "test:release-notes",
"code": 0
},
{
"name": "test:version-compare",
"code": 0
},
{
"name": "test:update-notes-dialog",
"code": 0
},
{
"name": "test:notes-seen",
"code": 0
},
{
"name": "test:report-bug",
"code": 0
},
{
"name": "test:app-report",
"code": 0
},
{
"name": "test:remote-paste",
"code": 0
},
{
"name": "test:memory-safety",
"code": 0
},
{
"name": "test:recommendation-labels",
"code": 0
},
{
"name": "test:optimize-plan",
"code": 0
},
{
"name": "test:playback-shell",
"code": 0
},
{
"name": "test:optimize-safety-all-rows",
"code": 0
},
{
"name": "test:shell-acknowledge",
"code": 0
},
{
"name": "test:icon-alignment",
"code": 0
},
{
"name": "test:launcher-rows",
"code": 0
},
{
"name": "test:files-drop",
"code": 0
},
{
"name": "test:context-menu",
"code": 0
},
{
"name": "test:device-logs",
"code": 0
}
]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading