feat(perf): time every Android command against the fixture app
Merged
TH
17h ago+1103+1103+0123456789012345678901234567890123456789-784-784-012345678901234567890123456789
Summary
Android now runs the iOS command suite against the fixture app. One shared suite.ts holds the steps, and platform deltas are data (only, on.android). One harness, suite-harness.ts, owns rounds, sessions, and daemon restarts. The Settings tour is removed. 30 files changed.
- Platform-only steps: Android has
hardware-button,push, andtelephony. iOS hasaction-button,prepare,clipboard, andhome-reads/snapshot-forced-tree. - Heavy feed: raw depth must be ≥56.
snapshot-raw-one-shotrestarts the daemon withAGENT_DEVICE_ANDROID_SNAPSHOT_HELPER_SESSION=0and must be served byinstrumentation(ADR 0002). - Profiles: each Android helper capture timer records its typed
transport, and the session timer also recordsanswered.profile.tsreads these fields and no longer infers the transport from event order. - Nightly: Android runs on schedule and uploads summary and raw artifacts.
perf:comparegains--platform.
Validation
- At 1fddbe9d0f, heavy-feed ran twice on an API 35 emulator (3 rounds + 1 warmup), with 0 failed samples. In run 2, the session steps were served by
persistent-session×3 and the one-shot step byinstrumentation×3. In every sample, the profile matches the response. - At 70faef463c, Android
heavy-feed,automationand iOShome-reads,heavy-feedran clean, apart from the 3 known iOS heavy-feed gaps. vitest scripts/perfpassed 45/45. The platform-androidsnapshot*tests passed 190/190.pnpm check:affected --run --head 1fddbe9d0fpassed (exactCommit: true, 37 passed, 22 GitHub-authoritative skips).- Risk: the nightly Android route runs only on schedule or workflow_dispatch.
🤖 Generated with Claude Code