fix(android): ignore emulator log lines in -list-avds output

AI
3h ago
+35-1

Summary

agent-device devices listed a phantom stopped emulator whose id and name were the emulator's crashdata banner (INFO | Storing crashdata in: …). emulator -list-avds prints that line on stdout with exit 0, and parseAndroidAvdList accepted every non-empty line.

The parser now keeps only lines made of the characters avdmanager allows in AVD names (A-Z a-z 0-9 . _ -). That rejects emulator logging without matching its text. 2 files changed. Fixes #3716.

Validation

Base 0149438fa, head b0277a7. New inventory.test.ts cases feed the real banner alone, and beside AVD names with CRLF line endings. Both fail on base with the banner listed as a device, and pass at head.

pnpm check:affected --run --head b0277a7 (exactCommit: true): format and lint passed. Typecheck failed at test/integration/command-coverage/declarations.ts:558 (linux.gap). That failure is inherited from main and fixed by #3740. Because the runner stops there, I ran the remaining stages separately on the same diff. Layering, fallow, build and provider-integration passed. Unit passed, including every platform-android test. The only unit failures were unrelated: a parallel-load timeout that passes alone, path-with-space failures in fuzz/webdriver tests that pass from a path without a space, and smoke hitting the same linux.gap error. scripts/__tests__/eager-closure-budgets.test.ts passed.

No live device run: this is a host-side stdout parser, and the evidence is unit tests on the real banner at the discovery boundary. Coverage and integration are left to CI.