The first three dispatches of api37-debug.yml came back with every watchdog sample reading boot=? surfaceflinger=none zygote64=none dma_aborts=0, on runs where the device demonstrably booted (Emulator booted. in the action log) and the action's own adb was working two steps away.
The emulator action puts platform-tools on PATH with core.addPath, which writes GITHUB_PATH and so only affects later steps. The watchdog starts before the action — that is the point of it — and inherits the runner's own PATH, where a bare adb need not resolve. Every call failed into 2>/dev/null and the sampler recorded the silence as zero.
It now resolves adb by path (preferring ANDROID_HOME), re-resolves each iteration in case platform-tools arrives later, and echoes the path it settled on. The launch step prints ANDROID_HOME and command -v adb so a repeat is one line to spot.
Same file, same dispatch-only trigger, same admin merge rationale: it cannot be exercised until it is on the default branch and nothing else triggers it.
The first three dispatches of `api37-debug.yml` came back with every watchdog sample reading `boot=? surfaceflinger=none zygote64=none dma_aborts=0`, on runs where the device demonstrably booted (`Emulator booted.` in the action log) and the action's own adb was working two steps away.
The emulator action puts platform-tools on PATH with `core.addPath`, which writes `GITHUB_PATH` and so only affects **later** steps. The watchdog starts before the action — that is the point of it — and inherits the runner's own PATH, where a bare `adb` need not resolve. Every call failed into `2>/dev/null` and the sampler recorded the silence as zero.
It now resolves adb by path (preferring `ANDROID_HOME`), re-resolves each iteration in case platform-tools arrives later, and echoes the path it settled on. The launch step prints `ANDROID_HOME` and `command -v adb` so a repeat is one line to spot.
Same file, same dispatch-only trigger, same admin merge rationale: it cannot be exercised until it is on the default branch and nothing else triggers it.
actionlint 1.7.12 exit 0; PyYAML parse OK; both embedded helpers pass `bash -n`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The first three dispatches of
api37-debug.ymlcame back with every watchdog sample readingboot=? surfaceflinger=none zygote64=none dma_aborts=0, on runs where the device demonstrably booted (Emulator booted.in the action log) and the action's own adb was working two steps away.The emulator action puts platform-tools on PATH with
core.addPath, which writesGITHUB_PATHand so only affects later steps. The watchdog starts before the action — that is the point of it — and inherits the runner's own PATH, where a bareadbneed not resolve. Every call failed into2>/dev/nulland the sampler recorded the silence as zero.It now resolves adb by path (preferring
ANDROID_HOME), re-resolves each iteration in case platform-tools arrives later, and echoes the path it settled on. The launch step printsANDROID_HOMEandcommand -v adbso a repeat is one line to spot.Same file, same dispatch-only trigger, same admin merge rationale: it cannot be exercised until it is on the default branch and nothing else triggers it.
actionlint 1.7.12 exit 0; PyYAML parse OK; both embedded helpers pass
bash -n.🤖 Generated with Claude Code