Repository navigation
refactor(ios): bind surface geometry and synthesis orientation - #4189
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Size Report
Startup median (7 runs, lower is better):
|
|
At a76b6bf a repeated press can use a stale orientation, two regressions no longer test the production boundary, and live evidence is missing. The branch also conflicts with its base now, so please rebase. Could each sequence step refresh the complete surface geometry when orientation changes, or refuse a stale surface, and pass that same orientation to native record creation? A repeated press can rotate the app on its first step, while tap conversion and long-press conversion retain the initial orientation and the event record reads the current one. Later presses or holds can hit the wrong control or miss while synthesis reports success. Cover a production sequence whose first action changes orientation. Please restore the production rotation-basis assertion for a prepared scroll with a keyboard-clipped viewport. This test now rotates using its own viewport constant, so it can pass when dispatch uses the clipped band. Capture the synthesized endpoint through the native boundary and assert the full-panel basis and clipped planning and evidence band independently. Please exercise production surface geometry construction with a placed-window single-display iPad fixture and assert that the emitted landscape point uses the measured whole display. The moved test supplies the expected panel size directly, so it cannot detect a missing sole display or a window-sized basis. The changes to live geometry and dispatch still need live evidence: the reported Duo and iPhone runs did not complete, and the composed tap test substitutes synthesis. After rebuilding the runner and restarting the daemon, please provide source-SHA-attributed commands, display and point logs, and fresh visible outcomes for Duo closed, half-open and open in default and scoped simulator sets, including hinge readback and lit-panel capture. On an offset inner-panel window, cover prepared selector and coordinate taps through synthesized and XCTest dispatch, a hold, landscape keyboard-clipped scroll, a sampled gesture, and an orientation-changing repeated press. On a single-display iPhone, cover normal interaction and AX-unavailable window-less synthesized tap, hold and sampled routes, with the sole-screen marker and visible outcomes. Preserve the placed-window iPad coverage and rerun the composed native harness at this head. Could the existing measured-context boundary own the resolved window and surface geometry, with tagged-point adapters and native records consuming the same orientation, one sole-display size reader shared with the window-less route, and clipping confined to the planner? Would changing the native synthesis interface first, defining refresh or refusal at sequence boundaries, and retargeting the two regressions keep the existing window and full-panel invariant without a new ADR? The packet reports all 13 hosted checks passing, while the exact-head affected gate failed and its unit stage did not run. The substituted providers in the reported timeout test do not execute the edited Swift, and without receipt logs its cause remains unproven. Before merge, fix the sequence behavior and restore both production-boundary regressions, then provide current-head native and live evidence and a passing exact-head affected receipt including the unit stage. |
a76b6bf to
b45b4c5
Compare
|
Review update at The sequence now refuses after an orientation change before a later action dispatches. Conversion and native record construction use the same orientation. Prepared keyboard-clipped scroll and measured placed-iPad dispatch assertions now cross the production native boundary. The parent's explicit Current-head validation: unit-enabled iOS build and incremental isolation scan passed; 15 method-selected native tests passed, including retargeted fallback and alert stubs. Sanitized local receipt results[
{
"status": "passed",
"exactCommit": true,
"refs": {
"base": "origin/main",
"head": "HEAD",
"resolvedHead": "b45b4c5a2171f1c8a376fe142f3303ae1278c07a"
},
"checkoutChanged": false,
"receipt": "run-bBnaUs",
"results": [
{
"id": "check:tooling",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "check:fallow",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "check:unit",
"status": "passed",
"exitCode": 0,
"reason": null
}
]
},
{
"status": "passed",
"exactCommit": true,
"refs": {
"base": "origin/main",
"head": "b45b4c5a2171f1c8a376fe142f3303ae1278c07a",
"resolvedBase": "c8ad8fb1257787ce0973cf74271cb9a4fafb51d9",
"resolvedHead": "b45b4c5a2171f1c8a376fe142f3303ae1278c07a",
"mergeBase": "c8ad8fb1257787ce0973cf74271cb9a4fafb51d9"
},
"checkoutChanged": false,
"receipt": "run-gwvX1M",
"results": [
{
"id": "format",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "lint",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "typecheck",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "layering",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "fallow",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "native-dupes",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "build",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "ios-snapshot-differential",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
},
{
"id": "vitest-related",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "unit",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "coverage",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Coverage)"
},
{
"id": "provider-integration",
"status": "deduplicated",
"exitCode": null,
"reason": "covered by related tests"
},
{
"id": "swift-runner-ios",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Conformance Differential / iOS Conformance Differential, Perf Nightly / iOS Command Perf, XCTest Nightly / iOS Runner Full XCTest Suite (${{ matrix.leg.name }}))"
},
{
"id": "swift-runner-macos",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
},
{
"id": "web-smoke",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Integration Tests, Lint, Typecheck & Package, Perf Nightly / Android Command Perf, Perf Nightly / iOS Command Perf)"
},
{
"id": "command-docs",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "docs-links",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "docs-prose",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "xctest-selection",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "packaged-runner-swift",
"status": "passed",
"exitCode": 0,
"reason": null
},
{
"id": "replay-ios",
"status": "skipped",
"exitCode": null,
"reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
},
{
"id": "replay-ios-device",
"status": "skipped",
"exitCode": null,
"reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
},
{
"id": "replay-macos",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
},
{
"id": "replay-linux",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
},
{
"id": "linux-command-evidence",
"status": "skipped",
"exitCode": null,
"reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
},
{
"id": "replay-android",
"status": "skipped",
"exitCode": null,
"reason": "parked, workflow_dispatch only (Replay Manual / Android Full Emulator Suite)"
}
]
}
]The initial full run Final-head live: the exact Duo commands: On the assigned iPhone, Still draft: the requested verified orientation/default/scoped/half-open matrix, explicit XCTest fallback, hold, sampled gesture, rotation-changing repeat and live AX-unavailable routes are incomplete. Initial rotation attempts did not consistently match the application's observed orientation; they are not credited as three-orientation proof. No extra scoped simulator or iPad was used. Native/mutation and earlier live evidence is attributed to its original SHA. Range-diff compared old |
|
The code at b45b4c5 addresses the earlier design concern: geometry is shared and measured, native orientation is explicit, there is one measurement reader, and a sequence refuses to continue after rotation. I found no new defect. All 16 checks pass and there are no conflicts. The live device matrix still needs completion before merge. The evidence record leaves changed native delivery routes unvalidated, so offset and multi-panel delivery, fallback, holds, sampled contacts, rotation during repetition, and AX-unavailable sole-screen dispatch remain unproven. After rebuilding the current runner and restarting its daemon, please post SHA-attributed commands, verified app orientations, hinge readback, lit-panel captures, native display/point/orientation logs, and fresh visible outcomes for Duo closed, half-open, and open in default and scoped sets. For an offset inner-panel window, cover prepared selector and coordinate taps through synthesized and XCTest dispatch, hold, sampled gesture, and a repeated press that visibly performs its first action and refuses further dispatch after rotation. On a single-display iPhone, cover AX-unavailable windowless synthesized tap, hold, and sampled routes with the sole-screen marker and visible outcomes. Please retain the clipped landscape scroll, placed-iPad native regression, and current-head composed-harness evidence; substituted synthesis confirms geometry arguments but does not prove contact delivery. |
|
Publication evidence for The accepted P2 spans both the 20-step and time-budget chunk boundaries. The first response captures orientation, the host pins it onto remaining chunks, and native execution checks it before dispatch. Missing/invalid bindings refuse with completed-action disclosure and global indices. The production request drive now goes through real Exact-head gateI read and verified the parent's
Earlier complexity ( Same-method native regression proofOnly my tool-provided isolated checkout was changed. I recorded clean Device: host Fresh unit-enabled base and head builds both passed, including isolation scans: AGENT_DEVICE_XCUITEST_INCLUDE_UNIT_TESTS=1 \
AGENT_DEVICE_XCUITEST_DESTINATION='platform=iOS Simulator,id=8F0B51BD-1B55-4B5E-A579-92959A027C2F' \
AGENT_DEVICE_IOS_RUNNER_DERIVED_PATH='<private lane-specific DerivedData>' \
pnpm build:xcuitest:iosFor each lane I found the actual xcodebuild test-without-building -xctestrun '<actual lane xctestrun>' \
-destination 'platform=iOS Simulator,id=8F0B51BD-1B55-4B5E-A579-92959A027C2F' \
-only-testing:AgentDeviceRunnerUITests/RunnerTests/testRepeatedPressCarriesOrientationAcrossStepAndBudgetChunkBoundaries \
-collect-test-diagnostics never -resultBundlePath '<unique lane xcresult>'
A third fresh, private DerivedData build at head, with Cleanup: Attribution and remaining gapsPrior b45 evidence owns the earlier full gate, 15 native methods, snapshot-presentation results and live Duo/iPhone evidence. Those results are not credited to The new native fixture intercepts synthesis. It proves the dispatch/refusal contract, not live hit delivery or natural app rotation. The verified orientation/default/scoped/half-open matrix, forced XCTest fallback, hold, sampled gestures, natural rotation-changing repeat and live AX-unavailable routes remain incomplete. CI coverage/device/compatibility checks and approval remain pending. This draft is published, not merge-ready. |
|
At fea9dbd the continuation binding and missing-binding validation address the earlier review, and I found no new defect. All checks pass and there are no conflicts. The current runner still needs the live delivery matrix described in the evidence. The cross-chunk fixture changes a stub orientation and intercepts synthesis, so it cannot prove natural rotation or actual hit delivery. Offset-window, multi-panel, fallback, and AX-unavailable delivery remain unproven. After rebuilding the current runner and restarting its daemon, could you post SHA-attributed commands and fresh visible outcomes for Duo closed, half-open, and open in default and scoped sets, with verified app orientations, hinge readback, and lit captures? Please cover offset inner-window selector and coordinate taps through synthesis and XCTest fallback, hold, clipped landscape scroll, sampled gesture, and a repeated press that performs its first action then refuses after natural rotation across both chunk boundaries. On a sole-display iPhone, please cover normal and AX-unavailable windowless tap, hold, and sampled delivery with sole-screen markers. Include native display, point, and orientation logs, and retain the placed-iPad, clipped-scroll, and composed-harness regression evidence. |
fea9dbd to
2a77509
Compare
|
Partial live evidence at On local Duo
In open landscape, A sampled Still unproved: the scoped-set pose matrix, explicit forced XCTest fallback, verified offset inner-window selector/coordinate routes across orientations, successful sampled gesture, natural rotation refusal at both chunk boundaries, and sole-display iPhone normal/AX-unavailable routes. Current Exact-head affected gate Cleanup: reopened Preferences, left Duo open and landscape, closed this session, stopped its private daemon with |
|
Continuation at On default Duo In landscape, after filling the form with the SHA marker, Two natural-rotation attempts did not prove refusal. On sole-display iPhone 18 Pro A private scoped set was provisioned at All UI used each |
|
Live evidence at
Raw command/exit/timestamp logs, captures, private patch/source/binary hashes, runner identities and cleanup records are retained in |
|
Follow-up to the prior SHA-attributed matrix, still at
Raw commands, JSON, captures, window/panel logs, fixture hashes and cleanup are retained in |
|
Combined inset-window + XCTest fallback evidence at
Inner portrait remains unproved after the prior mode-specific UIKit refusal; scoped T3 binding remains blocked and scoped SSH authorization pending; natural AX failure and early rejected-tree route remain unproved. The previous exact-head gate receipt |
|
Scoped Duo live follow-up at Current Scoped Raw SSH-scoped commands, JSON, captures, runner identity and cleanup are retained in |
|
Scoped inset-window + controlled XCTest fallback at
The scoped portrait command remains refused |
|
Readiness assessment requested for
Please assess whether these explicit limitations are acceptable or require further evidence. No waiver, readiness designation, draft change, or merge is assumed. |
|
At 2a77509, the code looks good: no defect or design issue. On the readiness question, two of the three limitations are fine and one still needs a short run. Accepted: the default inner portrait that UIKit refuses in that windowing mode, and the scoped portrait that returns a typed Could you validate the early rejected-query route before merge? The controlled resolver returns nil after surface policy while AX still answers, so it does not establish that navigation reaches windowQueryRejected=true or avoids another windows query before native delivery. On one sole-display iPhone, use the exact-head runner and a documented minimal fault patch to reject the AX query through daemon back; show a sole-screen native tap and an independent visible navigation outcome without another windows query. In that same unavailable state, run coordinate tap, hold, and sampled gesture with fresh canary outcomes, sole-screen markers, and display, point, and orientation logs. Retain source, patch, and build provenance and restore the patch afterward. A natural reproducible AX failure covering these routes would also suffice. Resolver The controlled resolver and the injected primary failure show downstream delivery and the XCTest fallback, not a global AX failure. All 21 checks pass, the exact-head |
2a77509 to
2b9940a
Compare
|
The remaining gap from this request is closed on Natural route proved. On a sole-display iPhone (iPhone 17 Pro, iOS 26.2), the heavy Tester feed exceeds the depth the XCTest serializable AX bridge can encode, so the public Confirmed limits. The early route is proved only for that one simulator, device shape and feed shape. No foldable, no physical device, no scoped set, and this is not global AX unavailability. Default inner portrait and scoped device. I treated your statement that neither is a release blocker as acceptance and did not re-run either. The recorded behaviour stands: UIKit kept landscape after a mode-specific Two things to note about the branch. The branch was rebased onto current |
|
Exact-head test evidence for
The private build used runner source fingerprint |
|
At 2b9940a, the code looks good, and the recorded rejected-query run settles my last request: on a sole-display iPhone, navigation reaches Not blocking, take or leave: The PR is still a draft, so it waits for you to mark it ready. |
Summary
Bind Apple window, screen and digitizer coordinates to measured geometry. Preserve lit-display admission and refuse repeated presses after orientation changes, including 20-step and time-budget chunk boundaries, with completed-action disclosure and global indices.
37 files, +969/−429. Base is
mainat7d42395ff7e1c03b643c2cf56683808bf5427cf3; the parent #4122 is merged as0d5e5d6ae913deef546fbf1c75cfda3a94dd7513. ElementSearch and surface-policy layers remain held.Validation
The branch is rebased onto current
main. The rebase changed one file: main's #4187 renamedRunnerAlert.buttonstoactions, so the alert test now readsalert.actions.firstand keeps this branch's synthesis stub. Localgit range-diffand per-file diff comparison against both the pre-rebase head and2a775092b4e2934f4713c51999870a73194be075report no lost hunk on either side.At
2b9940af2a9e3e91c44e14535c026f96a2c2ac41the localcheck:affected --run --headgate passed withexactCommit=trueandcheckoutChanged=false(receipt.tmp/validation/run-oXhSEW). Hosted coverage and integration checks are running at this head; draft smoke lanes stay skipped.Device evidence, recorded in docs/evidence/surface-geometry-4189-2026-11-03.md:
UNSUPPORTED_OPERATION/unsupported-device-scopeand the follow-up showed no additional canary hit.Open limitation
The early
windowQueryRejectedroute is now proved on a sole-display iPhone, iPhone 17 Pro, iOS 26.2, throughback --in-app: the rejectedapplicationDefinedResizableWindowsquery short-circuits before any hit-test, the sole-screen marker is the only screen log, synthesis logspoint=(32.2,84.0) referenceFrame=(0,0,402,874) interfaceOrientation=1 displayId=1, the navigation canary movesLiked posts: 0to1, andVISUAL_VERIFICATION changed=yes. Coordinate tap, hold and a sampledgesture pandeliver on the same window with fresh canaries. The probe is a natural rejection, not a patch: the heavy-feed snapshot exceeds the XCTest serializable depth, so the public query raiseskAXErrorIllegalArgumentwhile private AX still answers, which is why snapshots keep working. Confirmed only on that one simulator, device shape and feed shape; no foldable, physical device or scoped set, and not a global AX outage.Default inner portrait refusal, scoped
unsupported-device-scopeand the new route are device-level limitations, not release blockers.Earlier native proof and receipts remain attributed to
fea9dbd85668d2d72be2f526eb350917c73f8d0d; prior b45 full gate, native methods, and live evidence retain their original attribution.