diff --git a/AGENTS.md b/AGENTS.md index 86ab744..d2220dc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -148,7 +148,10 @@ Open maps and search a place. *DoD:* the Hub calls `/act` and the phone responds. **Phase 7 — Resilience** -Wake the screen, reconnect after a drop, fail cleanly on a missing element. +Wake the screen, reconnect after a drop, fail cleanly on a missing element, and +handle an app that stops consuming input (a memory-starved phone can deliver a +tap that the app never acts on — see `docs/phase-3-spotify-recipe.md`, attempts +9, 10 and 13). *DoD:* a dropped ADB session recovers without a restart. **Phase 8 — Documentation** diff --git a/docs/phase-3-spotify-recipe.md b/docs/phase-3-spotify-recipe.md index e8ebd8d..187b286 100644 --- a/docs/phase-3-spotify-recipe.md +++ b/docs/phase-3-spotify-recipe.md @@ -345,6 +345,36 @@ Artemis made this worse than it needed to be: `uiautomator dump` starts a JVM on the phone, and the wait helpers were polling every 400ms. `ui.PollInterval` is now 1500ms, which cuts that load by roughly two thirds. +13. **A second query met the wedged app again.** Straight after the successful + run, `spotify_play query="Beatles Hey Jude"` failed at the clear-the-search-box + step: the app never acted on the tap, and a 90-second rest did not clear it. + Not a recipe fault — the same wedge as attempts 9 and 10, and this time the + evidence is complete: + + ``` + $ adb shell input motionevent DOWN 993 186 + $ adb shell dumpsys input | sed -n '/Input Dispatcher State/,/Input Reader State/p' + TouchStatesByDisplay: + LogicalDisplayId 0: + TouchedWindows: + 0: name='44f7f5b com.spotify.music/com.spotify.music.MainActivity', + targetFlags=FOREGROUND | SPLIT ... FINGER + + $ adb shell dumpsys activity lastanr | tail -2 + + $ adb shell ps -A -o PID,NAME,%CPU | grep spotify + 11987 com.spotify.music 41.5 + $ adb shell grep -E 'MemFree|SwapFree' /proc/meminfo + MemFree: 253508 kB + SwapFree: 338264 kB + ``` + + The touch reaches Spotify's window; the app does not consume it; Android has + not declared an ANR; the phone has 250MB free and has used 3.5GB of its 3.9GB + swap. The first run of the heartbeat, from a quieter phone, completed in 35 + seconds. This is the phone's resource state, not the recipe, and detecting + "the app has stopped taking input" belongs to Phase 7 (resilience). + ### Reproducing it ```sh