fix(ios): report an unreadable system prompt as ALERT_UNRESOLVED, not absence
Merged
TH
4d ago+331+331+012345678901234567890123456789-68-68-01234567890123456789
Problem
A visible SpringBoard modal whose remote host can't be read resolved to .unresolved, which resolveAlert turned into nil. Dispatch then answered ALERT_NOT_FOUND, and the host retried it as absence. So a blocking prompt on screen was reported as no prompt.
Change (21 files)
- Runner:
resolveAlertreturns a typedAlertResolution(resolved, absent, unresolved). Unresolved repliesALERT_UNRESOLVEDwithdispatched: noand a hint (screenshot, thensnapshot -i,press @ref). The system-modal mapping is a pure staticalertResolution(forSystemModal:resolved:), unit-tested without the resolution override. - Contract: the new code is in the alert contract, the runner dispatch table and
contracts/fixtures/dispatch-disclosure.json. platform-apple/alert.ts: unresolved is never absence.alert getreports it at once.accept,dismissandalert waitretry it in their existing windows and reportALERT_UNRESOLVEDwhen the last check still sees it.- Help and docs: "no alert" now says
alertdidn't recognize the prompt, so usesnapshot -iandpress @ref.ALERT_UNRESOLVEDis documented incommands.md.
Validation
pnpm check:affected --run --head 72edac8cd3passed,exactCommit=true.- iPhone 17 simulator, unit variant:
testSystemModalAlertResolutionKeepsAnUnreadableModalUnresolvedpasses, and fails when the.unresolvedmapping returns.absent. - Live CLI on a runner built from
72edac8cd3: a permission prompt resolves (get,accept); no prompt givesALERT_NOT_FOUND. The unreadable-SpringBoard-modal case could not be raised on a simulator (see the PR comment); it needs a physical device with the AccessorySetupKit picker.
š¤ Generated with Claude Code