fix(ios): support remote-hosted alerts on physical devices#1232
Conversation
|
Review at
Also, No fixer was dispatched. An external Claude pass was not run because export was not separately authorized. |
…est probe routing Addresses review on callstack#1232: - Gate the remote-host probe to a foreground host (RemoteHostedSystemModalPolicy.isEligibleHostState); background/unknown hosts fail closed instead of substituting an unrelated action tree. - Wrap the alert-resolution fallback query in safeElementsQuery so a dismissed remote host raising kAXErrorServerNotFound is absorbed. - Extract routing/gating into RemoteHostedSystemModalPolicy and add simulator-free unit tests under AGENT_DEVICE_RUNNER_UNIT_TESTS.
|
Pushed 1. Dismissal re-query throwing 2. 3. Foreground not proven before substituting the tree. Now fails closed to 4. Executable coverage for routing/fail-closed. Extracted the routing + gating into a pure Also switched |
On-device evidenceTo back the fixes with something concrete rather than a "will attach later": below are the on-device observations behind each branch. Captured on a physical iPhone 14 / iOS 26.5, picker on screen (one discovered accessory, Host process is foreground — backs the SpringBoard mirror is present but its actions are unusable — backs The mirror reports 3 buttons, but Direct host-scope query sees and can act on the real elements — backs the probe path: Query completed in ~0.92s. Dismissal raises Re-querying the host immediately after it dismisses throws — exactly what the wrapped SpringBoard path can itself yield the modal snapshot when the mirror is momentarily hittable: an interactive snapshot at one point returned the picker as a 5-node To be precise about what this is and isn't: these are observations from the stock runner + a probe test, mapping 1:1 to the patch's four branches (foreground gate, zero-action probe trigger, direct-scope readability, post-dismiss |
|
Re-review at Readiness is still withheld because the attached device evidence explicitly uses the stock
The added policy tests compile, but CI's |
14eb8a5 to
d15613b
Compare
…est probe routing Addresses review on callstack#1232: - Gate the remote-host probe to a foreground host (RemoteHostedSystemModalPolicy.isEligibleHostState); background/unknown hosts fail closed instead of substituting an unrelated action tree. - Wrap the alert-resolution fallback query in safeElementsQuery so a dismissed remote host raising kAXErrorServerNotFound is absorbed. - Extract routing/gating into RemoteHostedSystemModalPolicy and add simulator-free unit tests under AGENT_DEVICE_RUNNER_UNIT_TESTS.
…) when the springboard mirror yields no hittable actions
…est probe routing Addresses review on callstack#1232: - Gate the remote-host probe to a foreground host (RemoteHostedSystemModalPolicy.isEligibleHostState); background/unknown hosts fail closed instead of substituting an unrelated action tree. - Wrap the alert-resolution fallback query in safeElementsQuery so a dismissed remote host raising kAXErrorServerNotFound is absorbed. - Extract routing/gating into RemoteHostedSystemModalPolicy and add simulator-free unit tests under AGENT_DEVICE_RUNNER_UNIT_TESTS.
d15613b to
c556500
Compare
|
Rebased onto Reconciliation
Validation
Fresh physical-device verificationTarget: Agent Device Tester was freshly bundled from Metro on port 8091 and verified by
Cleanup: closed session |
|
Re-review of rebased head The fresh physical-device run is useful, but it exercises an app-owned native alert. It does not exercise the changed AccessorySetupUI fallback after SpringBoard reports a modal with zero actionable elements, so the previously requested patched One additional implementation blocker emerged from the #1248 integration: snapshots call the shared resolver through I am not reopening Readiness remains withheld. No fixer was dispatched. |
|
Pushed Fix
Validation
The physical ASK fallback evidence remains honestly outstanding. CI is running on the new head. |
|
Exact-head re-review of
Give The new runner deadline wiring itself looks coherent and CI is green. The previously requested physical ASK production-route evidence is still outstanding. |
|
Revalidated on The generic contract I used here is:
The test app now has a dedicated Settings → Accessory setup lab screen with a fixed Physical-device evidence with a nearby synthetic BLE advertiser (
Validation:
This covers both interaction routes requested by the issue without specializing production behavior to AccessorySetupKit beyond the known remote-host bundle probe. |
Fixes #1231.
Summary
Make physical-iOS system alerts reliable, including AccessorySetupKit pickers hosted by
com.apple.AccessorySetupUI.alerton physical iOS while keeping physical iPadOS, visionOS, tvOS, clipboard, and settings gated pending separate verification.Validation
thymikee-iphone:alert get,alert wait,alert dismiss, andalert acceptagainst the current Agent Device Tester app.alertis capability-gated — queryingcom.apple.AccessorySetupUIdirectly works reliably #1231: direct host queries reliably expose and dismiss the picker; the host is never activated.pnpm build:xcuitest(iOS Simulator and macOS build-for-testing).pnpm check:affected --base origin/main --run(4,035 related/unit tests and 121 provider-integration tests, plus coverage, build, formatting, lint, typecheck, layering, and fallow).