Files
Michał Pierzchała 33084c7748 perf(ios): decide Simulator AX bridge viability (GO, Node-direct guest reader) (#2237)
* test(ios): add guest simulator AX bridge evidence

* test(ios): make alert cleanup selector unique

* test(ios): admit recovered alert cleanup surface

* test(ios): narrow AX spike to guest evidence path

* docs(ios): record guest AX bridge decision

* chore(ios): remove unused spike import

* docs(ios): correct simulator bridge verdict

* test(ios): drive the guest Simulator AX bridge directly from Node

Replace the idb companion + Python reader in the #2192 spike with a Node client
for idb v1.5.2's in-Simulator SimulatorFrameworkBridge: one private guest per
session spawned through simctl, 4-byte length-prefixed JSON over a UNIX socket,
single-fetch traversal with automation mode asserted per request, nested trees
flattened to parent-linked raw nodes with XCTest type names, and typed
crash/timeout/cancel/stale-generation failures.

The targeted harness now observes app readiness with a throwaway probe instead
of admitting on pid presence, relaunches the app per bootstrap sample, records
host load per sample, and runs recovery probes through the adapter. Hard tiers
follow the corrected #2192 contract (warm 300/500 ms, relaunch 500 ms); the
former 75/150 ms and 250 ms values are reported as stretch findings. Preboot
preference edits are optional and unused by the guest path.

The prototype's targeted artifact is preserved under a -python-prototype name;
its bootstrap and recovery samples measured the packaging, not the mechanism.

* test(ios): narrow Simulator bridge decision evidence

* docs: publish Simulator bridge evidence out of tree

* fix: tighten iOS bridge evidence gates

* docs: publish corrected bridge evidence

* docs: point to post-rebase bridge evidence
2026-09-04 07:38:36 +02:00
..

iOS Simulator AX bridge decision verifier

This narrow harness supplies the decisive live evidence for #2192. It drives idb v1.5.2's in-Simulator Resources/SimulatorFrameworkBridge directly from Node over a private UNIX socket. It does not use idb_companion, gRPC, or Python, and it does not change production routing.

The September 1 broad corpus is retained for its warm measurements and diagnostics. Its one-off Python runner and generated NO-GO reports were removed after the corrected contract made them obsolete. The corrected relaunch corpus is Node-direct. Raw artifacts are kept off-tree at immutable tag evidence/ios-snapshot/44995806ea (commit f8b2fab28b8604f20094785c16e16a79fdc651a3); their SHA-256 hashes are recorded in the evidence branch README.

Obtain the guest executable from the official arm64 idb v1.5.2 release. The archive SHA-256 is f17b718a513931705542a7fbfa9cfc11895ee191562c9ffd2343cf7f8254bc08; Resources/SimulatorFrameworkBridge is 3545621d2dc98de32879ebac55e8b0c33dc8eb7cc2bfbc2d0d2d21a002c8de58. The verifier hashes the supplied --guest-bridge before launching it and fails if it is not that binary.

Fetch the broad input before rerunning:

git fetch origin refs/tags/evidence/ios-snapshot/44995806ea
git show evidence/ios-snapshot/44995806ea:ios-simulator-ax-bridge-broad-268a90275.json.gz \
  > docs/evidence/ios-simulator-ax-bridge-2026-09-01-final.json.gz
shasum -a 256 docs/evidence/ios-simulator-ax-bridge-2026-09-01-final.json.gz

The expected broad artifact hash is 309f974b1dcb90768548a189f6af58b493b5d7b9d56a5bfad060d4335139eb7b.

Run the verifier from a clean commit using the dedicated Simulator with the fixture app installed:

pnpm bench:ios-ax-bridge:targeted -- \
  --udid SIMULATOR_UDID \
  --guest-bridge /path/to/Resources/SimulatorFrameworkBridge

It captures five nonresident bootstrap samples after independently observing application readiness. It then captures 20 relaunches on each of the six representative screens through the Node-direct route; every timed read is paired with a separate readiness probe for the exact relaunched PID and expected screen anchor. Finally it exercises crash, timeout, cancellation, and stale-generation recovery. Successful reads record guest CPU time and resident memory, and the corrected report fails closed if those metrics are missing or exceed the declared bounds.