* origin/main: (28 commits)
feat(gesture): add gesture tap with 2 to 5 simultaneous contacts (callstack#3847)
chore: mark 0.21.29 as released
chore(diagnostics): trace Apple prepare phases and subprocess lifecycle (callstack#3846)
feat(sdk): start an embedded runtime from the main entry (callstack#3843)
fix(alert): align local Apple and Limrun button choices (callstack#3825)
docs(adr): drop the withdrawn host allocator design from ADR 0021 (callstack#3845)
feat(screenshot): support selector crops on CoreDevice iPhones (callstack#3839)
feat(scroll): support explicit budgets for long target searches (callstack#3837)
fix(apple): key the toolchain fingerprint memo on the resolved xcode-select dir (callstack#3726)
feat(android): hand rotation back to the sensor with orientation auto (callstack#3822)
fix(sdk): scope released entries and deferred provider calls (callstack#3833)
test(android): prepare the snapshot helper before landmark waits (callstack#3834)
perf(ci): overlap iOS simulator boot with the native build (callstack#3836)
docs(ios): record SpringBoard sessions as verified on a physical iPhone (callstack#3840)
feat(apple): admit two-finger gestures on physical iOS devices (callstack#3838)
perf(android): bound target readiness and confirm moved clears (callstack#3815)
perf(android): reuse live helper for input and capture (callstack#3811)
chore(gates): forbid process globals outside declared entry points (callstack#3753) (callstack#3823)
refactor(commands): resolve command inputs and output from the caller host (callstack#3753) (callstack#3829)
refactor(runtime): use the owning host environment at process boundaries (callstack#3753) (callstack#3828)
...
Summary
Follow up the SDK regression reported on #3828. Standalone APK package lookup now establishes its host before loading Android mechanics, so a manifest parse miss reaches
aaptinstead of silently caching its absence.Centralize default capture for Android ADB, artifacts, Limrun, Metro, and remote-config in
src/sdk/host.ts. Tighten R86 to that owner and document the entry boundary for #3753, pending #3759.The requested adapter audit also found deferred Limrun ZIP and plist calls losing their supplied host. Scope those callbacks to that host, including concurrent calls inside a foreign scope. Port reversal uses its injected executor; download has no ambient host reader.
12 files, 314 gross lines: production +70/-60, tests +161/-2, docs +7/-14.
Validation
507ef2376621d78aa76cf531bedc5abdf30e7a5a; head57dfc7889b0f6d051b92d96a16389aaa39588a6f.pnpm exec vitest run --project unit-core src/sdk/artifacts.test.ts src/sdk/limrun-host-scope.test.ts: base 3 failed, head 3 passed.pnpm check:affected --run --head 57dfc7889b0f6d051b92d96a16389aaa39588a6f: passed (36 checks, 386 affected tests). Receiptrun-enSRYl:exactCommit=true,checkoutChanged=false; 25 skipped, 2 deduplicated.undefined, head resolves the fallback package. Built shell/exec-out entries both read Android API 36 on Pixel_7_CI (emulator-5554).