[BE-0281] feat(e2e): add real on-device iOS actuation coverage#1181
Merged
Conversation
0x0c
added a commit
that referenced
this pull request
Jul 17, 2026
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
added a commit
that referenced
this pull request
Jul 17, 2026
…ntrol on-device - ios-e2e.yml: notices.yaml only uses `/swipe` + `/back` steps (no `/scroll` endpoint exists on the runner channel), so drop the stray "+ `/scroll`" from the job-header comment describing it. - docs/architecture.md and its docs/ja/architecture.md mirror: credit idb's `back` and device-control (setLocation/clipboard/push) actuation as now confirmed on-device via the `actuation (idb)` job (BE-0281), per CLAUDE.md's BE-0113 rule to keep architecture.md in step with behavior in the same PR. Addresses review feedback on PR #1181. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
added a commit
that referenced
this pull request
Jul 17, 2026
Address round-3 review feedback on PR #1181: the actuation (idb) job's three bajutsu-e2e steps (navigation/device/push) are independent scenarios bundled into one job for cost reasons, but a plain step failure skipped every step after it — hiding the other scenarios' pass/ fail signal and artifacts. Mark each step continue-on-error and add a final step that re-fails the job if any of the three failed, so all three always get a chance to run while the job-level result stays accurate. Also fixes documentation drift flagged by the same review round: the roadmap's References list still cited gestures.yaml/controls.yaml (never actually wired over idb) instead of the scenarios this PR wired (navigation/device/push/search/notices.yaml), and architecture.md overclaimed the actuation (idb) job "confirmed" back/device-control on-device before a passing run had been observed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
marked this pull request as ready for review
July 18, 2026 04:08
0x0c
pushed a commit
that referenced
this pull request
Jul 18, 2026
…ture.md antecedent Address two open review comments on PR #1181: - Bump ios-e2e.yml xcuitest-gestures timeout-minutes 25 -> 30 to restore headroom after BE-0281's ~13min -> ~21min runtime growth on a gating job. - Fix 'runs it' -> 'runs both' in docs/architecture.md's idb entry: the bullet describes two things (back and device control), so the singular pronoun misread. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NgEYipfg6U2xLeCAxTTNF7
0x0c
added a commit
that referenced
this pull request
Jul 20, 2026
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
added a commit
that referenced
this pull request
Jul 20, 2026
…ntrol on-device - ios-e2e.yml: notices.yaml only uses `/swipe` + `/back` steps (no `/scroll` endpoint exists on the runner channel), so drop the stray "+ `/scroll`" from the job-header comment describing it. - docs/architecture.md and its docs/ja/architecture.md mirror: credit idb's `back` and device-control (setLocation/clipboard/push) actuation as now confirmed on-device via the `actuation (idb)` job (BE-0281), per CLAUDE.md's BE-0113 rule to keep architecture.md in step with behavior in the same PR. Addresses review feedback on PR #1181. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
added a commit
that referenced
this pull request
Jul 20, 2026
Address round-3 review feedback on PR #1181: the actuation (idb) job's three bajutsu-e2e steps (navigation/device/push) are independent scenarios bundled into one job for cost reasons, but a plain step failure skipped every step after it — hiding the other scenarios' pass/ fail signal and artifacts. Mark each step continue-on-error and add a final step that re-fails the job if any of the three failed, so all three always get a chance to run while the job-level result stays accurate. Also fixes documentation drift flagged by the same review round: the roadmap's References list still cited gestures.yaml/controls.yaml (never actually wired over idb) instead of the scenarios this PR wired (navigation/device/push/search/notices.yaml), and architecture.md overclaimed the actuation (idb) job "confirmed" back/device-control on-device before a passing run had been observed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
pushed a commit
that referenced
this pull request
Jul 20, 2026
…ture.md antecedent Address two open review comments on PR #1181: - Bump ios-e2e.yml xcuitest-gestures timeout-minutes 25 -> 30 to restore headroom after BE-0281's ~13min -> ~21min runtime growth on a gating job. - Fix 'runs it' -> 'runs both' in docs/architecture.md's idb entry: the bullet describes two things (back and device control), so the singular pronoun misread. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NgEYipfg6U2xLeCAxTTNF7
0x0c
force-pushed
the
claude/be-0281-implementation-89cc34
branch
from
July 20, 2026 22:39
1911bef to
e44ed09
Compare
Wires idb and XCUITest actuation beyond the conformance job's `tap` into ios-e2e.yml: a new non-gating `actuation (idb)` job drives `back` (navigation.yaml) and device control — setLocation, clipboard, push (device.yaml + push.yaml) — on the Stable launch tab, the only surface idb can reach (idb collapses the native tab bar into one opaque group and cannot tap any tab, confirmed on-device before implementation). The existing `xcuitest (multi-touch)` job gains two more runs — search.yaml for `/type` and notices.yaml for `/swipe` + `/back` on the runner channel — reusing its already-built runner rather than a new job. Scope narrowed from the original proposal: idb cannot drive the tab-crossing gesture/text scenarios (gestures.yaml, controls.yaml) it assumed, so type/swipe/scroll/longPress/doubleTap stay idb-unproven on device pending a tab-free showcase screen (left for a follow-up item). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ntrol on-device - ios-e2e.yml: notices.yaml only uses `/swipe` + `/back` steps (no `/scroll` endpoint exists on the runner channel), so drop the stray "+ `/scroll`" from the job-header comment describing it. - docs/architecture.md and its docs/ja/architecture.md mirror: credit idb's `back` and device-control (setLocation/clipboard/push) actuation as now confirmed on-device via the `actuation (idb)` job (BE-0281), per CLAUDE.md's BE-0113 rule to keep architecture.md in step with behavior in the same PR. Addresses review feedback on PR #1181. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…eout comment The Progress checklist bullet incorrectly lumped `tap` in with the actuators that stay on XCUITest, contradicting the PR's own actuation (idb) job (which runs navigation.yaml's `tap` step) and the Log entry below it, which already excludes `tap` correctly. Fix both the English and Japanese checklist bullets to match. Also update the xcuitest-gestures job's stale ~13min budget comment to ~21min, reflecting the two extra bajutsu run invocations (search.yaml, notices.yaml) this PR added to that job — timeout-minutes: 25 still has headroom. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Address round-3 review feedback on PR #1181: the actuation (idb) job's three bajutsu-e2e steps (navigation/device/push) are independent scenarios bundled into one job for cost reasons, but a plain step failure skipped every step after it — hiding the other scenarios' pass/ fail signal and artifacts. Mark each step continue-on-error and add a final step that re-fails the job if any of the three failed, so all three always get a chance to run while the job-level result stays accurate. Also fixes documentation drift flagged by the same review round: the roadmap's References list still cited gestures.yaml/controls.yaml (never actually wired over idb) instead of the scenarios this PR wired (navigation/device/push/search/notices.yaml), and architecture.md overclaimed the actuation (idb) job "confirmed" back/device-control on-device before a passing run had been observed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ture.md antecedent Address two open review comments on PR #1181: - Bump ios-e2e.yml xcuitest-gestures timeout-minutes 25 -> 30 to restore headroom after BE-0281's ~13min -> ~21min runtime growth on a gating job. - Fix 'runs it' -> 'runs both' in docs/architecture.md's idb entry: the bullet describes two things (back and device control), so the singular pronoun misread. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NgEYipfg6U2xLeCAxTTNF7
0x0c
force-pushed
the
claude/be-0281-implementation-89cc34
branch
from
July 21, 2026 02:05
73df8a9 to
633070a
Compare
Addresses review feedback: consistent "never actuate" phrasing with the smoke job's description, a double-negative fix, a missing object, and a note on why the required xcuitest-gestures job skips the actuation job's continue-on-error pattern. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0x0c
disabled auto-merge
July 21, 2026 04:36
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Wires real on-device actuation into the iOS E2E lane (
ios-e2e.yml) beyond the conformance job'stap, closing the CI-wiring gap BE-0281 identifies: the showcase already carriesgestures.yaml,device.yaml, andpush.yaml, but they ran only in local-only Makefile targets, never CI. This PR moves BE-0281 to Implemented, with scope narrowed from the original design (see Scope below).What changed
.github/workflows/ios-e2e.yml— adds one new non-gating job,actuation (idb), drivingnavigation.yaml(tap+back) anddevice.yaml+push.yaml(setLocation, clipboard,push) over idb on the Stable launch tab — the only surface idb can reach. Also wires two more runs into the existingxcuitest (multi-touch)job:search.yamlfor the runner channel's/typeendpoint andnotices.yamlfor/swipe+/back, reusing that job's already-built runner rather than a new job.actuationstays out of theE2Egate'sneeds:, likegolden/visual, landing as signal first per the Simulator lane's flakiness history (BE-0218).docs/ci.md/docs/ja/ci.md— update the iOS lane's job inventory (six jobs → seven) to describe the newactuation (idb)job and thexcuitest (multi-touch)job's expanded scope.roadmaps/BE-0281-ios-on-device-actuation-coverage/*.md— flipStatusto Implemented, check off the Progress items, and log what shipped and why the scope narrowed.roadmaps/README.md/roadmaps/README-ja.md— regenerated viamake roadmap-index(BE-0281 moves from Proposal to Implemented).Scope
Narrowed from the original proposal. idb cannot tap the native tab bar at all — SwiftUI's
TabViewcollapses into one opaque group in idb'sdescribe-all, with no per-tab children (SPEC.md §3, BE-0107) — confirmed on-device before implementation (atap: {label: "Log"}step returned一致なし/no-match). The proposal's idb interaction job assumedgestures.yamland similar tab-crossing scenarios would run over idb; they cannot, since every one of them opens with a tab tap. The only existing scenario idb can drive end-to-end isnavigation.yaml(Stable launch tab only), coveringtap+back.Consequently:
type/swipe/scroll/longPress/doubleTapstay proven on-device only via the XCUITest runner channel (this PR'ssearch.yaml/notices.yamlwiring) or mocked unit tests — not via the idb companion itself. Closing that specific gap needs a new tab-free showcase screen (idb has no surface today with a text field, scrollable list, or gesture targets outside the tab bar). Left for a follow-up roadmap item.setLocation, clipboard,push) is fully covered as proposed — it lives entirely on the Stable launch tab, which idb reaches./type,/swipe,/back) is fully covered as proposed, reusing the existing sharedsearch.yaml/notices.yamlscenarios rather than authoring a new file.Prime-directive compliance
bajutsu runagainst machine-checkableexpectassertions.sleep; the new job reuses the sameBAJUTSU_MIN_WAIT_TIMEOUTcondition-wait floor pattern assmoke/golden/visual.bajutsu-e2ecomposite action.Verification
actionlintand YAML-parse checks pass on the modified workflow. The XCUITest half of the new coverage (search.yamlfor/type,notices.yamlfor/swipe+/back) was additionally verified end-to-end on a local Simulator + Xcode 26.6 toolchain before landing — both scenariosPASSover--backend xcuitest. The idb half (navigation.yaml,device.yaml,push.yaml) could not be locally verified the same way (the localidb_companionbuild is too old to read the iOS 26 accessibility tree) — the job's actual on-device behavior will be observed on this PR's CI run, which is exactly why it starts non-gating.🤖 Generated with Claude Code