fix(test-app): keep the inert surface control above the settings fold
Root cause
The scheduled iOS Conformance Differential has been red since 10-18 (#3944). Two signatures:
settle-after-tapstep 5,assertVisible "open-inert-surface": "Maestro visible condition did not match" (Maestro leg passes, agent-device leg fails — undeclared outcome divergence).tap-retry-if-no-changestep 3,tapOn "open-inert-surface": "did not match any element", which also violates the scenario'stapRetries >= 1invariant.
First red head is 4a8abed7b (10-18); the last green head, 4c1c78696 (10-17), does not contain 1089dba7a (#3786), and the first red head does. That commit added the Snapshot depth section card to the fixture's Settings screen, pushing the Inert surface card into the band the iOS 26 floating tab bar covers on a 402×874 phone. Local snapshot against the 10-25 tree confirms the mechanism: after the Settings tab tap, the visible tree ends at "Open accessory setup lab" followed by [content below scroll-area hidden] — open-inert-surface is genuinely not visible, so agent-device's refusal is honest, while Maestro's presence-based check keeps passing.
(The 10-17 red was a separate, one-off launchApp xcrun timeout on percent-swipe; it never reproduced again and has no code defect.)
Fix
The flows themselves are correct — the settle flow's guard test pins the assertVisible on this control and rejects an inserted scroll, so the fixture must restore the reachability the flows were written against. This reorders the Settings sections: the Inert surface card is the second section (right after Automation), ahead of the growth that followed it, with a comment at the site stating the constraint so the next section addition does not re-break the oracle.
Verification
pnpm vitest run --project unit-core packages/maestro— 488/488 pass (the flow guards and invariant pins stay green against the unchanged flows).- Device evidence, local simulator with the repacked fixture: before the reorder the settings tree hid the control; after it,
open-inert-surfaceresolves andclick id=open-inert-surfacenavigates to the inert screen (tap landed at (201, 609), the inert page is the resulting snapshot).
Fixes #3944