fix(sdk): scope released entries and deferred provider calls

TH
2h ago
+238-76

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 aapt instead 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

  • Base 507ef2376621d78aa76cf531bedc5abdf30e7a5a; head 57dfc7889b0f6d051b92d96a16389aaa39588a6f.
  • Same isolated command on both: 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). Receipt run-enSRYl: exactCommit=true, checkoutChanged=false; 25 skipped, 2 deduplicated.
  • Built public artifacts entry: base returns undefined, head resolves the fallback package. Built shell/exec-out entries both read Android API 36 on Pixel_7_CI (emulator-5554).
  • Independent review at head: no findings; the guidance finding was corrected before rebase review.
  • CI owns coverage and device lanes. No remote Limrun or Windows live run; subprocess regression fixtures skip Windows.