Skip to content

iOS simulators boot pinned to Full Screen Apps (iPad capture-trust failures in queues 59 and 60) - #217

Merged
thejackshelton merged 7 commits into
masterfrom
ios-sim-fullscreen
Oct 8, 2026
Merged

thejackshelton merged 7 commits into
masterfrom
ios-sim-fullscreen

Conversation

@thejackshelton

Copy link
Copy Markdown
Contributor

Queue 59 (#214) and queue 60 (#91) failed judge-devices with the same three iPad (A16) capture-trust failures (color-border-sides@2, overflow-hidden-bfc@2, text-wrap-spaces@2). In those failures the OS screenshot showed wallpaper colors ([41,69,139], [2,15,76]) where the app's own capture showed the page.

Root cause

The iPad simulator runs iPadOS 26's default multitasking mode, Windowed Apps. In that mode SpringBoard reopens each app at the window size it last kept for the bundle, and it keeps that size across reinstalls, uninstalls and reboots.

#214's device-env lane rotates the host's scene with requestGeometryUpdate on a portrait iPad. SpringBoard's unified log from queue 59 shows what that did to the host's layout record (SBDisplayItemLayoutAttributes):

  • 04:22:54: portrait, FullWidthAndHeight → landscapeRight, FullWidth
  • 04:22:57: → portrait, {740, 1065}

From then on, every launch of dev.dragon.host opened as a 740x1065 pt window scaled onto the 820x1180 pt screen, with the wallpaper around it. Master's own app was affected too (reproduced on master's cached build, key f3dc30de…), which is why #91 failed. The in-app record still reports a 1640x2360 px window, so only the OS screenshot shows the problem.

Before this change the harness pinned the content size at boot but not the multitasking mode, so it relied on the host never having been resized.

Fix

bootIos now pins every simulator's SpringBoard to Full Screen Apps (SBMedusaMultitaskingEnabled and SBChamoisWindowingEnabled both NO).

  • SpringBoard reads the mode only when it starts, so a simulator that doesn't hold the pins gets them written and boots once more.
  • The pins persist, so this happens once per simulator.
  • If a pin doesn't read back after the reboot, the boot fails.

In Full Screen Apps mode the remembered window is ignored. #214's rotation also becomes a real interface rotation: a hand experiment with #214's build gave a 2360x1526 px landscape root, then portrait again, and the trust launch after it was full screen.

No tolerance, check or test changed.

Proof

  • Device proof: iOS device lane (DRAGON_LEASE=ios /tmp/device-lease.sh pnpm run parity:lanes -- --run-device --target ios) on this branch (origin/master 2c48409 + this commit). Before the run I deleted both pins, so the iPad was still in the broken state with the windowed layout remembered.
    • Both simulators pinned and rebooted at boot (12–13 s).
    • Capture trust: 280/280, 539/539, 352/352 on iPad (A16) and on iPhone 17.
    • device-pixels: {"pixel":29} on iPad and {"pixel":28} on iPhone, with the same compared counts as master's queue-59 evidence (land-211). device-hit and device-states clean.
  • vitest run packages/parity/test/device-run.test.ts: 38/38, including 2 new tests for the pins and the boot order.
  • packages/parity/test/chrome-ports.test.ts and both registry-claims.test.ts: 33/33.
  • pnpm typecheck: pass.

🤖 Generated with Claude Code

…Apps kept the host in the scaled window one scene rotation left, so capture trust's OS screenshot showed the wallpaper
# Conflicts:
#	packages/parity/test/device-run.test.ts
…t lanes rerun, so the device records await the landing driver's device run)
@thejackshelton thejackshelton added the landing-failed The landing driver stopped this PR; see its comment label Oct 6, 2026
@thejackshelton

Copy link
Copy Markdown
Contributor Author

Landing stopped at step check (pnpm land)

merge-train: ios-sim-fullscreen's PR head 79c141dc96c702c099c90065daf9d94ae3a06bcc holds 79c141dc96c702c099c90065daf9d94ae3a06bcc, which the train did not make ("Regenerate: pnpm regen --jobs 1 (after merging origin/master; the host lanes rer")

Fix the cause, then hand #217 back to the landing queue with the new clean head.

@thejackshelton
thejackshelton merged commit 48e091e into master Oct 8, 2026
5 checks passed
@thejackshelton
thejackshelton deleted the ios-sim-fullscreen branch October 8, 2026 06:55
@thejackshelton thejackshelton removed the landing-failed The landing driver stopped this PR; see its comment label Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant