Part of #2725.
Decision: local-only Duo regression coverage for now
The maintainer explicitly approved keeping Duo coverage local until GitHub Actions supports it. Deliver a repeatable local scenario and evidence; automatic PR/scheduled selection is NOT a completion condition for this issue. Clearly label it local/manual coverage, never automatic regression coverage. No new self-hosted runner or hosted-toolchain installation is requested.
Investigation of CI availability (2026-09-21)
Dependencies and scope
Prerequisite: PR #2724 must be merged, or explicitly base the test PR on its branch. Do not duplicate its input fix. #2728/#2729/#2730 are not prerequisites for a semantic interaction replay: do not assert their new metadata or forced-fallback behavior here.
Reuse the fixture app and existing replay/test harness; no new framework or CI/gate registration. Pin DEVELOPER_DIR to a Duo-capable Xcode, accept an explicit UDID/session, and document the runtime and Device Hub Accessibility prerequisites. If the fold helper reports device-hub-window-missing, report actionable setup failure rather than skipping. The investigation observed this with a real window on a second host display; moving it to the main display restored pose control. Include that workaround without claiming the window is absent.
Required scenario
- Verify the correct fixture surface and select a local test session.
- Exercise closed -> half-open -> open -> closed. After each fold, capture fresh state, press a visible selector/ref, and assert the selected tab or another activation-dependent app counter changed.
- On open, scroll and assert a newly visible canary; long-press and assert its dedicated count increments.
- Run one multipointer pinch canary and assert recognized scale change, not onFinalize or transport success. Derive its coordinates from the current target bounds rather than portrait constants. Reuse the existing gesture-lab fixture.
- Never reuse refs across pose changes or mutations. Save failure artifacts, clean up the session, and restore the starting pose where safely possible.
Acceptance
- One documented local command reproduces the scenario using the existing harness.
- Publish the tested commit, toolchain/runtime, command, semantic results, and remote-accessible result summary in the PR.
- Demonstrate a wrong-display or geometry mutation makes a semantic assertion fail, then restore and pass.
- Run relevant harness tests and affected gates. Do not require an automatic Duo job or weaken the ordinary iPhone CI lane.
- Record future GHA enablement as deferred work, with the admission requirements: Duo runtime/device type, working Device Hub pose controls/permissions, and an actual successful lane run.
Implementation can start on #2724's branch with its PR base/dependency explicit. Do not merge ahead of the prerequisite. Follow AGENTS.md and manual-session hygiene.
Part of #2725.
Decision: local-only Duo regression coverage for now
The maintainer explicitly approved keeping Duo coverage local until GitHub Actions supports it. Deliver a repeatable local scenario and evidence; automatic PR/scheduled selection is NOT a completion condition for this issue. Clearly label it local/manual coverage, never automatic regression coverage. No new self-hosted runner or hosted-toolchain installation is requested.
Investigation of CI availability (2026-09-21)
.github/workflows/ios.yml:macos-26, iOS 26.2, iPhone 17 Pro.total_count: 0registered self-hosted runners.Dependencies and scope
Prerequisite: PR #2724 must be merged, or explicitly base the test PR on its branch. Do not duplicate its input fix. #2728/#2729/#2730 are not prerequisites for a semantic interaction replay: do not assert their new metadata or forced-fallback behavior here.
Reuse the fixture app and existing replay/test harness; no new framework or CI/gate registration. Pin
DEVELOPER_DIRto a Duo-capable Xcode, accept an explicit UDID/session, and document the runtime and Device Hub Accessibility prerequisites. If the fold helper reportsdevice-hub-window-missing, report actionable setup failure rather than skipping. The investigation observed this with a real window on a second host display; moving it to the main display restored pose control. Include that workaround without claiming the window is absent.Required scenario
Acceptance
Implementation can start on #2724's branch with its PR base/dependency explicit. Do not merge ahead of the prerequisite. Follow AGENTS.md and manual-session hygiene.