diff --git a/src-tauri/android/env.sh b/src-tauri/android/env.sh index a2acd4e..3e79513 100644 --- a/src-tauri/android/env.sh +++ b/src-tauri/android/env.sh @@ -20,4 +20,13 @@ export PATH="$SDK/platform-tools:$PATH" # module — ONLY when the CLI's variable names the project. Without it a new # plugin (the media session) compiled fine and never reached the APK. export TAURI_ANDROID_PROJECT_PATH="$(cygpath -w "$PWD/src-tauri/gen/android")" +# Gradle's AF_UNIX pipes die anywhere under the user profile on the work +# machine ("Unable to establish loopback connection" → "Invalid argument: +# connect"), and every gradlew invocation in build.sh, dev.sh and the prober +# went through it. Point its temp directory outside the profile when that +# directory exists; a machine without it (home) is untouched. +if [ -d /c/gradle-tmp ]; then + export TMP='C:\gradle-tmp' + export TEMP='C:\gradle-tmp' +fi ADB="$SDK/platform-tools/adb.exe" diff --git a/tests/mobile/smoke.mjs b/tests/mobile/smoke.mjs index 5327330..b2ea2b8 100644 --- a/tests/mobile/smoke.mjs +++ b/tests/mobile/smoke.mjs @@ -1614,7 +1614,10 @@ const MOCK_EXPECT = { "artist-more": (i) => i.half.includes("up") && /Choose hero photo/.test(i.halfText) && !/Remove custom hero/.test(i.halfText), "artist-hero-set": (i) => !i.half.includes("up") && /3840×2160/.test(i.notice), "artist-more-custom": (i) => i.half.includes("up") && /Remove custom hero/.test(i.halfText) && i.heroPix, - "artist-hero-cleared": (i) => !i.half.includes("up") && /photos are back/.test(i.notice), + /* the toast ("photos are back") is a transient the probe can land after + — it did on 2026-09-18 with the toast plainly in the still — so the + hero itself being gone (the monogram, no image) proves the same thing */ + "artist-hero-cleared": (i) => !i.half.includes("up") && (/photos are back/.test(i.notice) || !i.heroImg), /* the exhaustive page has NOT landed; the banner and the first four releases have — three albums on the Albums tab, a single on its own */ "artist-lanes": (i) => i.artFast === "loading:ready+art:ready:4" && i.heroPix && i.disco === 3 && i.tabs === 2, @@ -1654,7 +1657,10 @@ const MOCK_EXPECT = { deterministically the current file); xfnBad === 0 proves the call reached a handler instead of being swallowed */ "shade-note": (i) => i.xfnOn && i.xfnBad === 0 && i.xfnMax >= 5 && /^Saving \d+ files$/.test(i.xfnTitle) && /walk-a\.flac/.test(i.xfnLine) && i.xfnBtn && i.xfers >= 13, - "shade-gone": (i) => !i.xfnOn && i.xfnClr >= 1 && i.xfnBad === 0 && !i.xfnBtn, + /* the Save's notice is gone — or the shade is now carrying a "Keep + offline" pass, which shares the notice and the service (offline.svelte.js) + and is not the Save this step took down */ + "shade-gone": (i) => /^Keeping /.test(i.xfnTitle) || (!i.xfnOn && i.xfnClr >= 1 && i.xfnBad === 0 && !i.xfnBtn), gaps: (i) => i.title.startsWith("Your library") && i.gaplines >= 1, "gaps-open": (i) => i.gapCards >= 3, playlists: (i) => i.title.startsWith("Your library") && i.plcards === 3 && i.plpinned,