fix(ios): alert dismiss picks a listed decline, never a guessed one

Merged
TH
5h ago
+351-45

Summary

Closes #3627. On the Apple XCUITest runner, alert dismiss chooses a recognized decline action, including "Ask App Not to Track", or refuses with ALERT_BUTTON_NOT_FOUND and details.dispatched: no. Unknown and localized choices receive no guessed tap. The exact "dismiss popup" marker retains its close-element behavior; accept-side vocabulary is unchanged.

Validation

Published head: 9203a7a4066fec99f54ef32710350bfa6462f9d7, rebased onto f633525b1, mergeable.

  • The rebase preserves this issue's alert-choice source, native choice tests and shared alert contract byte-for-byte against 2ab0df6d0, so the live proof below transfers to this commit by construction. Conflicts retain both upstream text-input refusal codes and this branch's alert refusal code. A fresh isolated full-access Apex review in its own checkout at 9203a7a40: approve, no blocking findings; it independently verified union fidelity, the frozen decline-only/accept vocabularies, the exact-marker exception, and contract coherence after the upstream reason-table refactor.
  • Direct exact-head gate run-LlH55N is queued behind live repository validation; no passing receipt is claimed yet. The owner runs the 11 alert XCTests on-device after the broad gate; that receipt will be appended here.
  • Three new XCTests are named-mutation invariant pins of the choice rule, not revert-fail pins; the revert path is covered by the e2e canaries.
  • Historical full CLI/system ATT evidence remains attributed to 2ab0df6d0: one decline activation, TCC denied and the disposable app's denied callback. The affirmative-only fixture refused through CLI/daemon/runner with dispatched: no, preserved its hint and logged zero activations. No global privacy reset was used.

The readiness label remains present, but the exact-head gate, native tests and current-head CI are pending. The earlier head's green CI and gate do not certify this rebased commit.