Repository navigation
Conversation
… UIScreen The generated AgentDeviceRunnerUITests-Runner.app has no launch screen, so the runner process can read UIScreen.main in compatibility mode (768x1024 on an iPad, a letterbox on an iPhone). The synthesized rotation then turned landscape touches about that box, and every press landed a fixed offset away while reporting ok. Read the display from the AXRuntime system application frame, the same screen the fills-screen proof already compares against. Fixes #4091 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
All reported issues were addressed across 5 files
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
Size Report
Startup median (7 runs, lower is better):
|
Apex SentinelVerdict: Since the last review: 2 new · 3 still open · 2 no longer raised 5 finding(s): 2 minor, 3 nit. Verdict: approve. 🟡 Minor (2)
🔵 Nit (3)
Reply under an inline comment with Earlier reviewsReview of
|
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:509 |
Sole-screen route now closes entirely when the AXRuntime display read fails, even for an app the admission rule proves full-screen |
🟡 Minor (1)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/UnitTests/RunnerTests+SynthesizedInteractionTests.swift:286 |
🆕 Compatibility-mode test no longer exercises anything: production reads no UIScreen |
🔵 Nit (3)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:539 |
🆕 Rotation basis comes from two different screen sources with no cross-check, contradicting the invariant the test documents |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:573 |
🆕 Gesture path has no log naming the unmeasured-display refusal |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:574 |
Gesture string literals passed to unmeasuredSoleDisplayOutcome are a hardcoded, drifting list |
Review of 3e2b1777 · 02.11.2026 14:44 UTC
Apex Sentinel
Verdict: approve
Since the last review: 5 new · 3 still open · 1 no longer raised
8 finding(s): 3 minor, 5 nit. Verdict: approve.
🟡 Minor (3)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:507 |
🆕 Sole-screen route now dies in portrait when the AXRuntime display read fails, where the old UIScreen.main read always answered |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:536 |
🆕 Unreadable display now refuses portrait taps for apps that are not full-screen-proven |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:538 |
Portrait turns now silently rotate about a placed iPad window when the display size cannot be read |
🔵 Nit (5)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerMainOwnedState.swift:12 |
🆕 Per-command reset lives in one call path while the cache is owned by shared state |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m:348 |
ObjC comment documents the per-command display-size cache inside RunnerResolveSoleScreen, which performs no such read |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:559 |
Per-command display-size cache can serve a stale box when the orientation changes inside one command |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:571 |
🆕 A 115-character line and a reflowed guard style disagree with the file's own convention |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:576 |
🆕 Gesture name in the refusal message is a hand-written string, and one call site says "gesture" |
Review of 4690ea7b · 02.11.2026 14:06 UTC
Apex Sentinel
Verdict: request_changes
Since the last review: 0 new · 4 still open · 6 no longer raised
4 finding(s): 1 major, 3 nit. Verdict: request_changes.
Required fixes
- iPhone sole-screen route now dies when the AXRuntime display read fails; the old UIScreen read answered
🟠 Major (1)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:562 |
iPhone sole-screen route now dies when the AXRuntime display read fails; the old UIScreen read answered |
🔵 Nit (3)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift:10 |
One AXRuntime system-application read per command on paths that never use its answer |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:508 |
soleScreenReferenceFrame(app:) lost the XCUIScreen.screens.count == 1 guard |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:537 |
Portrait synthesis silently switched its rotation basis from the display frame to the window fallback |
Review of 409188ee · 02.11.2026 13:43 UTC
Apex Sentinel
Verdict: approve
Since the last review: 7 new · 3 still open · 2 no longer raised
10 finding(s): 4 minor, 6 nit. Verdict: approve.
🟡 Minor (4)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:509 |
Sole-screen route now dies in portrait when the AXRuntime size read fails, though portrait needs no display box |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:532 |
🆕 portraitUpsideDown refuses a synthesized gesture it does not need to |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/UnitTests/RunnerTests+SynthesizedInteractionTests.swift:331 |
🆕 Per-command-cache assertion also passes when the size is merely not re-read |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:546 |
🆕 Windowed-iPad landscape gestures now refuse outright when the AXRuntime size read fails; the UIScreen.main source that served them is gone |
🔵 Nit (6)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift:13 |
Per-command display-size cache is cleared in only one of the runner's two command entry points |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:506 |
🆕 The single-screen condition now lives in one of the two sole-screen entry points |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:507 |
soleScreenReferenceFrame now needs the AXRuntime read twice per context, and closing admission is logged as resolved=none |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:521 |
🆕 appFillsSoleScreen discards the screen and display id the predecessor used |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:521 |
🆕 appFillsSoleScreen is the admission rule, not the fills-screen proof |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:537 |
🆕 New unguarded XCUIScreen.screens.count read on every landscape gesture, where the bridge wraps the same read in an exception catcher |
Review of 7ea0bb30 · 02.11.2026 12:05 UTC
Apex Sentinel
Verdict: request_changes
Since the last review: 3 new · 2 still open · 4 no longer raised
5 finding(s): 1 major, 2 minor, 2 nit. Verdict: request_changes.
Required fixes
- A single-screen tap now refuses when the display is unmeasurable, even in an orientation that never rotates
🟠 Major (1)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:528 |
A single-screen tap now refuses when the display is unmeasurable, even in an orientation that never rotates |
🟡 Minor (2)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerMainOwnedState.swift:12 |
🆕 Cached display size is never invalidated and contradicts the sibling probe's stated resize invariant |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m:348 |
🆕 Comment claims the display-size read is paid once, but it runs on the admission path before the read is cached |
🔵 Nit (2)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:203 |
Gesture name in the refusal is a loose string, and 'long press' disagrees with the command family's spelling |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m:254 |
🆕 RunnerSystemApplicationScreenSize is defined in .m without the TARGET_OS_IOS gate its header declaration has |
Review of b81d3cc4 · 02.11.2026 11:35 UTC
Apex Sentinel
Verdict: request_changes
Since the last review: 4 new · 2 still open · 5 no longer raised
6 finding(s): 1 major, 5 nit. Verdict: request_changes.
Required fixes
- Dropping the window fallback turns AX-read failures into refusals on single-screen devices (previously-working iPhone taps)
🟠 Major (1)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:528 |
🆕 Dropping the window fallback turns AX-read failures into refusals on single-screen devices (previously-working iPhone taps) |
🔵 Nit (5)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/UnitTests/RunnerTests+SynthesizedInteractionTests.swift:44 |
🆕 Refusal test depends on a side-effect pre-read having loaded AXRuntime before it swaps it |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:512 |
Every synthesized gesture now pays a redundant cross-process AXRuntime read on the hot path |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:542 |
New refusal paths bypass the AGENT_DEVICE_RUNNER_SYNTHESIZED_SOLE_SCREEN_ROUTE log the hint points at |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:543 |
🆕 Refusal message and hint restate the same cause |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:543 |
🆕 Gesture kind is a free-form string at the four new refusal call sites |
Review of 0fcd7270 · time not recorded
Apex Sentinel
Verdict: approve
Since the last review: 6 new · 1 still open · 8 no longer raised
7 finding(s): 3 minor, 4 nit. Verdict: approve. reached max rounds (1).
🟡 Minor (3)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/UnitTests/RunnerTests+SynthesizedInteractionTests.swift:234 |
🆕 testSynthesizedRotationFrameIsTheDisplayNotAPlacedWindow launches the app without invalidating the cached target |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:525 |
🆕 An unknown orientation still falls back to the placed window, which the new comment says never happens |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:527 |
🆕 iPhone sole-screen synthesis now hard-depends on the AXRuntime system-app read, which the idiom route deliberately avoided |
🔵 Nit (4)
| Where | Finding |
|---|---|
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:541 |
🆕 Hint points at a log line the failed read does not always emit |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:534 |
🆕 unmeasuredSoleDisplayOutcome is the only member of this cluster without an access modifier |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:550 |
🆕 The log tag is hand-copied into the user-facing hint, so a rename silently misleads users |
apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerXCTestEventBridge.m:254 |
Two new AXRuntime probes per gesture are undocumented and unmeasured |
There was a problem hiding this comment.
Apex Sentinel: 4 new findings on eb706bd. The verdict and the full list are in the summary comment.
Log AGENT_DEVICE_RUNNER_APP_SCREEN_UNRESOLVED stage=system-app when the AXRuntime read fails, rename the reference-frame size to portraitSize (it is points), resolve every UIScreen getter before swapping any, and skip the display test unless the host app fills the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Apex Sentinel: 5 new findings on f1e452f. The verdict and the full list are in the summary comment.
…l tolerance The gesture-viewport test now expects the host app's frame instead of the runner's UIScreen, and both display tests compare within the 0.5 pt the fills-screen proof allows. The sole-screen frame doc names its unit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e measured A sole display whose size AXRuntime would not report fell back to the resolved window's box, which on a placed iPad window is the #3899 basis. synthesizedRotationFrame now answers nil only for that case, and tap, long press, drag and planned gestures refuse with UNSUPPORTED_OPERATION before they log or dispatch. A multi-screen host keeps the window route. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Apex Sentinel: 6 new findings on 0fcd727. The verdict and the full list are in the summary comment.
…ey-free The system-app size read now logs an unavailable AXRuntime class too, the refusal hint points at the runner log without quoting its key, the rotation frame doc says an unknown orientation keeps the window box (no turn reads it), and the display test clears its cached target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
This needs physical-device evidence before merge. At c3deb5d the size fix looks right for the iPad Simulator case in #4091, but it adds a private AX read to every synthesized gesture on every single-screen iOS device, phones included.
Not blocking, and you can take or leave these: Could this be simpler? One static Of the earlier inline threads, the one on the AX read for every gesture still applies (#4157 (comment)); its UIScreen fallback is rightly rejected, and the points above answer it. These no longer apply and are already resolved: the test cleanup now calls CI is still pending: Smoke Tests is queued, not failed, and it builds this runner and drives synthesized press and scroll, so a failure there would likely relate to this change. I did not run the runner or the new unit tests, so the read cost, whether the AX read answers on physical iPhones, and the landed points are unverified. The PR body's validation section still names 0fcd727. |
…read Admission on an iPhone still skips the fills-screen probe, but every device now pays one AXRuntime read (~0.6-0.9 ms) when the caller sizes the display. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Apex Sentinel: 3 new findings on b81d3cc. The verdict and the full list are in the summary comment.
A device's display size does not change while the runner runs, so the first successful AXRuntime read (~0.6-0.9 ms) is kept on the main-owned state and later gestures reuse it; a failed read is not kept, so the refusal stays reachable and the next gesture reads again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 4 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
There was a problem hiding this comment.
Apex Sentinel: 2 new findings on 7ea0bb3. The verdict and the full list are in the summary comment.
…s life Display scaling can change the system application frame while the runner runs, so a size kept for the whole runner could turn later gestures about a stale box. Each command clears it and reads again; a command's gestures still share one successful read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… is unreadable A failed AXRuntime display read refused every synthesized gesture on a single-screen device, including iPhone taps that worked through the window before. When the sole-screen rule (RunnerResolveSoleScreen) proves the app fills the screen, its window is the display and stays the rotation basis; otherwise the gesture still refuses with UNSUPPORTED_OPERATION. Both routes log AGENT_DEVICE_RUNNER_APP_SCREEN_UNRESOLVED stage=rotation-basis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 3 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
Portrait and an unknown orientation never read the rotation box, so an unreadable display no longer refuses their gestures and they skip the AXRuntime read entirely. The AX-failure tap tests now run in landscape, where the box is read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The display-box test is stub-based and runs on the iPhone full suite, so the iPad leg keeps the refusal test, which only an iPad can exercise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 3 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
… setup Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Apex Sentinel: 3 new findings on 409188e. The verdict and the full list are in the summary comment.
… read the box Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Replies to the four findings Apex Sentinel still lists at
|
…eadable Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Apex Sentinel: 2 new findings on 3e2b177. The verdict and the full list are in the summary comment.
|
Thanks for the update. At 4690ea7 the code mostly addresses the earlier review: portrait and unknown orientations make no read, a windowed iPhone gesture falls back to its window when the read fails, and the windowless iPhone route now refuses when the read fails. One thing is still unproven, and it needs a physical device. Every landscape synthesized gesture on a physical iPhone or iPad now takes its rotation basis from the AXRuntime system-app frame instead of the base's UIScreen.main (:547, :562-568). A read that comes back wrong but non-zero would land presses off target and still report ok. A Simulator cannot rule that out. Physical and remote iPhones are the main target, and the PR body gives only a pass tally from Simulators. The required runs from the earlier review are still not posted. Please run the branch runner ( Not blocking, and fine to take or leave: the orientation switch in synthesizedRotationFrame repeats which cases of No open P1 or P2 thread still applies, and no lower-priority thread applies either. The cubic P3 and P2 threads on the bridge comment and the nightly job (r4442029047, r4442815286) are fixed at this head, as is the rename in r4443101235. These are already resolved, as addressed or by design: the The only check that is not passing is a review bot check (ACTION_REQUIRED). It reflects review findings and runs no build or test, so it looks unrelated to the code. The other 18 checks pass, including Smoke Tests, which builds this runner and runs the changed unit tests. I ran no runner, unit test or device. The mutation results, the read cost and the This review covers 4690ea7. The newer head 3e2b177 only adds a test pinning that a portrait tap dispatches when the display is unreadable, so the device runs above still apply. |
…press as the CLI does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I re-read 5c470cb. The new commits add a portrait-tap test and doc wording, and the code findings from the earlier reviews are addressed. The one open item is unchanged: the physical iPhone landscape run and the two iPad Simulator dispatch lines from my 4690ea7 review (#4157 (comment)). Every landscape synthesized gesture on a physical device now takes its rotation basis from the system-app frame, and a Simulator cannot show that the read is right there. Smoke Tests is still running at this head. Not blocking, take or leave: |
…s unreadable With the window query rejected and the AXRuntime display read failing there is no box at all. A portrait tap or long press keeps its point, so on an admitted sole screen it is now dispatched as given; any other turn still refuses with UNSUPPORTED_OPERATION. Both log stage=rotation-basis window=none. Tap and long press share one point-gesture resolver. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 2 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift">
<violation number="1" location="apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift:592">
P3: `referenceFrame: .null` is a sentinel that the dispatch log prints as `reference=(inf,inf,0.0,0.0)` on the new window-less path. Log an explicit marker for the no-window case, or pass a meaningful frame, so the diagnostic stays readable.</violation>
</file>
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Apex Sentinel: 1 new finding on 00d3643. The verdict and the full list are in the summary comment.
|
The delta to 00d3643 does not yet make this ready: one earlier finding is unchanged, and there is still no device evidence. CI is pending (Smoke Tests is still running at 00d3643), so there is no failure to attribute, and there are no conflicts. The earlier review (#4157 (comment)) asked for device runs. They are still missing. Every landscape and upside-down synthesized gesture on a single-screen device takes its rotation basis from the AXRuntime system-app frame (https://github.com/callstack/agent-device/blob/00d3643/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedInteraction.swift#L627). A wrong but non-zero size passes the Is the window-less portrait branch needed at all? The smallest change is to drop it (PointGestureResolution, SynthesizedPointGesture, the second arm of pointGestureTarget, unrotatedSoleScreenPoint) and keep the uniform refusal from 5c470cb. That refusal was accepted as by design, and the state this branch serves (iPhone, rejected window query, failing AXRuntime read, portrait) has not been observed. If you keep the dispatch, please make it one decision for every gesture: a single Not blocking, and you can take or leave these: unrotatedSoleScreenPoint (:614) tests On the open inline threads: the one on #4157 (comment) (refusal on Before merge, the physical iPhone landscape log and the two iPad Simulator dispatch lines need to be posted, and the window-less portrait branch needs a decision. |
|
Final replies to Apex Sentinel's summary at The rule when the AXRuntime display read fails on a single-screen device:
The old Replies to the individual items:
|
|
Thanks, that settles the design question from my 00d3643 review. Drag and scroll plan their path in a viewport, so refusing them when there is neither a window nor a measured display is the right call, and the table makes the rule clear. The window-less portrait branch can stay. The one open item is the device evidence: the physical iPhone landscape |
|
Device evidence for the 16:45 / 17:31 review, branch runner built from head iPad (A16) Simulator, 820x1180, iOS 27.0. Both requested lines appear. Note that the side names are mirrored: the agent-device CLI's The other two presses from the same run:
Physical iPhone (thymikee-iphone, iPhone 17 Pro): blocked, not run. The branch runner built and signed for the device, but
For reference only, not a hardware substitute: the iPhone 17 Simulator (874x402) runs logged landscape dispatches with |
|
Thanks. The iPad (A16) Simulator lines match exactly: point=(520.0,150.0) and point=(300.0,1060.0) against a 1180x820 reference, with no The only open item is the physical iPhone run, which did not reach the phone because it was locked. Once it is unlocked (Auto-Lock off for the run), the landscape |
Summary
Fixes #4091. Synthesized landscape presses landed a fixed offset away from the requested point and still reported
ok.soleDisplayFramereadUIScreen.mainin the runner process. The generatedAgentDeviceRunnerUITests-Runner.apphas no launch screen, so that read can come back in compatibility mode (768x1024 on an iPad).RunnerResolveSoleScreen) admits uses its window. With no window, or a placed iPad window (iOS: XCTest runner publishes window-relative frames and shifted taps for an iPad app that does not fill the screen (Windowed Apps / Stage Manager) #3899), the gesture returnsUNSUPPORTED_OPERATIONbefore dispatch. Each case logsAGENT_DEVICE_RUNNER_APP_SCREEN_UNRESOLVED stage=rotation-basis.Rejected: a launch-screen key for the runner, which would mean patching Xcode's runner template and could not be proven here.
Validation
Base
a42bc35282, head00d36437ba.check:affected --run --head bf0b1ca48dpassed all runnable checks,exactCommit=true(run-jWH5SD). The head00d36437bachanges only two Swift test comments, which the gate does not compile. Gate reruns on that head failed only in unrelated TS unit tests, hit by strayGET /traffic on the host. CI is green on00d36437ba. Swift runner gates run in CI.Unverified: the live compatibility-mode offset did not reproduce on these runtimes. Possible follow-up: a unit test that fakes a two-screen
XCUIScreen.screens; the single-screen guard is enforced inRunnerResolveSoleScreenandsynthesizedRotationFrame.🤖 Generated with Claude Code