Skip to content

ci: gate merges through the merge queue with one required check per workflow - #931

Merged
okwasniewski merged 3 commits into
mainfrom
oskar/ci-merge-queue-gates
Oct 7, 2026
Merged

okwasniewski merged 3 commits into
mainfrom
oskar/ci-merge-queue-gates

Conversation

@okwasniewski

@okwasniewski okwasniewski commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

The Main ruleset enables a merge queue but requires no status checks, and no workflow listens to merge_group. So the queue merges right away and auto-merge waits on nothing: #929 merged while spec and mobile were still running.

  • Each of spec, benchmark, mobile, docs ends in a <workflow> gate job. It fails when any job it needs failed or was cancelled and passes over a skipped one. These four are the only checks the ruleset will require.
  • All four trigger on merge_group, so the queue runs every suite on the queued tree before it merges.
  • mobile: changes plans the suites as a matrix. A fork or Dependabot PR leaves out agentic at the job level. Before, those jobs built the Expo app and booted 2 simulators, then skipped only the run step and reported green.
  • mobile on push to main runs no suite (the queue already tested the same tree). It only rebuilds the Expo app on a cache miss (lookup-only), because main's cache scope is the one PRs and queue entries restore from. The per-platform build commands moved into .github/actions/expo-app so both paths share them.
  • docs drops its workflow-level paths: (a required gate would sit pending forever) for a docs entry in .github/filters.yml. It no longer runs on push to main.
  • benchmark web agent skips Dependabot PRs, as mobile already did.
  • spec and benchmark still run on push to main (cheap, they warm main's caches, and they keep a health signal).
flowchart LR
  PR[pull_request] --> G1[4 gates]
  AM[auto-merge] --> Q[merge_group]
  Q --> G2[4 gates on queued tree]
  G2 -- all green --> M[merge to main]
  M --> S[spec + benchmark, mobile app cache warm]
Loading

Trust change: the queue runs a queued PR's code with repo secrets, fork or not. Enqueueing is now the trust decision (written into AGENTS.md security invariants).

Rejected review finding: the agent-device runner cache will no longer be saved on main. Measured on #917, a cache miss costs nothing visible (suite 9:46 on a miss vs 10:53 on a hit), so it isn't worth warming.

After merge

Update the Main ruleset (doing it before this lands would block every open PR):

  • add required_status_checks: spec gate, benchmark gate, mobile gate, docs gate (GitHub Actions integration)
  • raise check_response_timeout_minutes from 60 to 120 (mobile jobs time out at 60, plus the macOS queue)

Verified

Ran it locally: no - CI-only. actionlint is clean (Blacksmith labels and one existing SC2016 ignored) and pnpm check passes. The pull_request path is verified by this PR's own runs. The merge_group path can only be exercised after the ruleset update.

Review in cubic Turn on auto-fix

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e web: 91 passed

All 91 tests in 41 files
Test Time
🟢 tests/aria-hidden-flow.e2e.ts · 2 passed 536ms
🟢 aria hidden flow › picks the Pro plan by its visible text and confirms it 384ms
🟢 aria hidden flow › another plan shows the error and keeps the picker open 152ms
🟢 tests/async-states.e2e.ts · 2 passed 6.9s
🟢 async states › reads the code off the transient toast and verifies it once the button enables 2.2s
🟢 async states › a wrong code is rejected after the toast has gone 4.7s
🟢 tests/canvas-only.e2e.ts · 2 passed 282ms
🟢 canvas only › taps square, circle, then diamond at their pixel coordinates 170ms
🟢 canvas only › a shape out of order paints the error and resets progress 112ms
🟢 tests/canvas-whiteboard.e2e.ts · 2 passed 386ms
🟢 canvas whiteboard › drags both shapes into their slots and saves 219ms
🟢 canvas whiteboard › bounces a shape off the wrong slot and refuses to save early 167ms
🟢 tests/cart-totals.e2e.ts · 2 passed 358ms
🟢 cart totals › increasing a quantity updates the line total but the order summary stays stale (planted bug) 214ms
🟢 cart totals › a quantity never drops below one 144ms
🟢 tests/checkout-review.e2e.ts · 1 passed 191ms
🟢 shows a raw greeting token and an undefined delivery date (planted bug), yet places the order 191ms
🟢 tests/context-menu-trap.e2e.ts · 2 passed 633ms
🟢 context menu trap › right-click opens nothing; the row menu renames the file 356ms
🟢 context menu trap › the decoy menu items refuse and keep the file 277ms
🟢 tests/control-inventory.e2e.ts · 8 passed 3.8s
🟢 control inventory › check sets the checkbox and the radio without flipping a set one 298ms
🟢 control inventory › check picks a radio the pick replaces with its summary 162ms
🟢 control inventory › a long press and a double click are told apart from a tap 1.0s
🟢 control inventory › the file menu opens on right-click only and Rename renames the file 250ms
🟢 control inventory › setInputFiles attaches files named from the project root 171ms
🟢 control inventory › the details view is left through the browser history 201ms
🟢 control inventory › scrollIntoView brings the footnote into view 263ms
🟢 control inventory › every exercise done shows the success message 1.4s
🟢 tests/css-content-ui.e2e.ts · 2 passed 310ms
🟢 css content ui › the tile labelled Ship it advances and confirming ships 173ms
🟢 css content ui › a wrong tile shows the CSS-rendered error and keeps the picker 137ms
🟢 tests/date-picker.e2e.ts · 2 passed 640ms
🟢 date picker › navigates three months ahead and books the required date 376ms
🟢 date picker › confirming without the exact date shows the error 264ms
🟢 tests/debounced-search.e2e.ts · 2 passed 2.8s
🟢 debounced search › a decoy one character off is refused 1.4s
🟢 debounced search › picking the exact item adds it to the cart 1.4s
🟢 tests/deferred-dialog.e2e.ts · 1 passed 1.0s
🟢 one submit opens one confirm, even when double-clicked 1.0s
🟢 tests/div-soup.e2e.ts · 2 passed 591ms
🟢 div soup › a wrong code is rejected 262ms
🟢 div soup › the right code grants access after the delete tile fixes a typo 329ms
🟢 tests/drag-and-drop.e2e.ts · 2 passed 596ms
🟢 drag and drop › an out-of-order item resets the dropzone 299ms
🟢 drag and drop › dropping Banana then Cherry passes 297ms
🟢 tests/filter-deep-link.e2e.ts · 2 passed 207ms
🟢 filter deep link › filtering writes the query to the URL 114ms
🟢 filter deep link › opening a shared link restores the filter 93ms
🟢 tests/gift-card-purchase.e2e.ts · 3 passed 491ms
🟢 gift card purchase › refuses to buy without an amount 126ms
🟢 gift card purchase › refuses a recipient without an at sign 181ms
🟢 gift card purchase › sends the gift card 184ms
🟢 tests/hover-menu.e2e.ts · 2 passed 412ms
🟢 hover menu › a decoy leaf is refused 182ms
🟢 hover menu › hovering Account, then Billing, reaches Redeem voucher 230ms
🟢 tests/iframe-form.e2e.ts · 2 passed 430ms
🟢 iframe form › a wrong code is refused by the host page 212ms
🟢 iframe form › the code read from one frame applies through the other 218ms
🟢 tests/image-only-ui.e2e.ts · 3 passed 423ms
🟢 image only ui › the icons have no names, so the bare svg locator is ambiguous 98ms
🟢 image only ui › a wrong icon shows the error image and keeps the icons 157ms
🟢 image only ui › tapping the star, then the heart, verifies the icons 168ms
🟢 tests/infinite-scroll.e2e.ts · 1 passed 4.5s
🟢 scrolls the feed until the Golden Ticket loads, then claims it 4.5s
🟢 tests/kanban-board.e2e.ts · 3 passed 741ms
🟢 kanban board › pointer drags move both cards into the goal layout 389ms
🟢 kanban board › a swipe along a path drags a card as well 152ms
🟢 kanban board › a plain tap moves nothing and the untouched board is rejected 200ms
🟢 tests/login-form.e2e.ts · 4 passed 765ms
🟢 login form › rejects a malformed email 181ms
🟢 login form › rejects a short password 166ms
🟢 login form › rejects an unknown account 184ms
🟢 login form › signs in and logs out 234ms
🟢 tests/lying-labels.e2e.ts · 4 passed 595ms
🟢 lying labels › the button whose accessible name says Pay now is the wrong one 130ms
🟢 lying labels › a text match for Pay now catches the decoy phrase too 92ms
🟢 lying labels › the field whose accessible name says Amount is the wrong one 191ms
🟢 lying labels › visible text drives the payment through 182ms
🟢 tests/native-dialogs.e2e.ts · 3 passed 395ms
🟢 native dialogs › answers the confirm, prompt, and alert chain 130ms
🟢 native dialogs › dismissing the confirm cancels the order 133ms
🟢 native dialogs › a wrong gift code is rejected 132ms
🟢 tests/newsletter-signup.e2e.ts · 1 passed 2.2s
🟢 subscribe renders no feedback and logs a TypeError (planted bug) 2.2s
🟢 tests/onboarding-wizard.e2e.ts · 5 passed 5.1s
🟢 onboarding wizard › back keeps what was typed and the brief comes back with it 283ms
🟢 onboarding wizard › the address step takes the brief through its bare-div dropdown 336ms
🟢 onboarding wizard › the profile step steers the calendar three decades back 1.3s
🟢 onboarding wizard › the preferences step flips the toggles the brief names and leaves the trap off 1.5s
🟢 onboarding wizard › the review step repeats the brief and finishes with the PIN 1.7s
🟢 tests/order-history.e2e.ts · 2 passed 1.4s
🟢 order history › overview and settings render their panels 179ms
🟢 order history › the orders tab never leaves its loading state (planted bug) 1.2s
🟢 tests/otp-auto-advance.e2e.ts · 3 passed 1.3s
🟢 otp auto-advance › focus advances with each digit and the full code verifies 457ms
🟢 otp auto-advance › backspace on an empty box clears and refocuses the previous one 132ms
🟢 otp auto-advance › a wrong code clears every box and starts over 760ms
🟢 tests/overlay-trap.e2e.ts · 1 passed 691ms
🟢 continues only after the banner and the overlay are gone 691ms
🟢 tests/playbook-cleanup.e2e.ts · 2 passed 449ms
🟢 playbook cleanup › deleting the draft removes it from an exact-name search 233ms
🟢 playbook cleanup › cancelling the dialog keeps the draft searchable 216ms
🟢 tests/price-sorting.e2e.ts · 3 passed 363ms
🟢 price sorting › opens in the featured order with sale prices struck through 98ms
🟢 price sorting › low to high sorts by the original price, not the paid one (planted bug) 125ms
🟢 price sorting › high to low is the same wrong order reversed (planted bug) 140ms
🟢 tests/product-reviews.e2e.ts · 1 passed 1.1s
🟢 the running-shoe page lists coffee-grinder reviews (planted bug) 1.1s
🟢 tests/promo-storefront.e2e.ts · 1 passed 1.3s
🟢 buys a deal once the promo chrome is out of the way 1.3s
🟢 tests/rich-text-editor.e2e.ts · 2 passed 518ms
🟢 rich text editor › bolding exactly the required word passes the check 262ms
🟢 rich text editor › bold that spills into the previous word fails the check 256ms
🟢 tests/saved-addresses.e2e.ts · 3 passed 631ms
🟢 saved addresses › adds an address and clears the form 203ms
🟢 saved addresses › ignores an add with an empty field 221ms
🟢 saved addresses › delete shows its toast but keeps the address, on retry too (planted bug) 207ms
🟢 tests/shadow-dom-form.e2e.ts · 2 passed 597ms
🟢 shadow DOM form › rejects a wrong access code 299ms
🟢 shadow DOM form › grants access with the code from the hint inside the root 298ms
🟢 tests/smoke.e2e.ts · 1 passed 325ms
🟢 home lists the scenarios and opens one 325ms
🟢 tests/stale-dom.e2e.ts · 1 passed 2.2s
🟢 taps the moving target three times across rebuilds of the list 2.2s
🟢 tests/sticky-chrome.e2e.ts · 1 passed 275ms
🟢 accepts the terms once the button clears the sticky footer 275ms
🟢 tests/virtualized-table.e2e.ts · 1 passed 1m 10s
🟢 scrolls the windowed table to the Golden Row and claims it 1m 10s
🟢 tests/wishlist.e2e.ts · 2 passed 1.5s
🟢 wishlist › saving toggles the button and the tab badge 241ms
🟢 wishlist › the wishlist tab renders the empty state despite the badge count (planted bug) 1.3s

e2e 0.18.0 · 1m 59s · web · run artifacts

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 7 files

Heads up: you’re close to your included review allowance. Set a flex budget so reviews don’t pause.

Turn on auto-fix | Re-trigger cubic

Comment thread .github/filters.yml
Comment thread AGENTS.md Outdated
Comment thread .github/workflows/benchmark.yml
Comment thread AGENTS.md
@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e web agent: 33 passed

34 agent steps · 26 replayed from cache · 21 model calls · 83.9k tokens (90% cached) · $0.0043

All 33 tests in 5 files
Test Agent Time
🟢 tests-agent/control-inventory.e2e.ts · 7 passed 7 steps 7.4s
🟢 control inventory › check sets the checkbox and the radio 1 step 592ms
🟢 control inventory › check picks a radio the pick replaces with its summary 1 step 280ms
🟢 control inventory › a long press and a double click are chosen over a plain tap 1 step 915ms
🟢 control inventory › a right-click opens the file menu and Rename renames the file 1 step 2.5s
🟢 control inventory › upload attaches the named project files 1 step 2.4s
🟢 control inventory › back returns from the details view to the inventory 1 step 318ms
🟢 control inventory › scroll_to brings the footnote into view 1 step 300ms
🟢 tests-agent/login-form.e2e.ts · 1 passed 1 step 393ms
🟢 act signs in with the benchmark account 1 step 393ms
🟢 tests-agent/planted-bugs.e2e.ts · 3 passed 4 steps · 8 calls 13.3s
🟢 cart totals: a judgment catches the stale order summary 2 steps · 4 calls 6.5s
🟢 checkout review: a judgment catches the broken copy 1 step · 1 call 2.0s
🟢 wishlist: a judgment catches the lost saved items 1 step · 3 calls 4.8s
🟢 tests-agent/scenarios.e2e.ts · 21 passed 21 steps · 13 calls 2m 34s
🟢 act completes shadow-dom-form 1 step · 3 calls 4.3s
🟢 act completes lying-labels 1 step · 4 calls 7.5s
🟢 act completes iframe-form 1 step · 3 calls 3.8s
🟢 act completes infinite-scroll 1 step 5.4s
🟢 act completes virtualized-table 1 step 1m 42s
🟢 act completes overlay-trap 1 step 865ms
🟢 act completes sticky-chrome 1 step 894ms
🟢 act completes async-states 1 step · 3 calls 6.9s
🟢 act completes debounced-search 1 step 2.3s
🟢 act completes hover-menu 1 step 511ms
🟢 act completes drag-and-drop 1 step 453ms
🟢 act completes kanban-board 1 step 648ms
🟢 act completes context-menu-trap 1 step 2.6s
🟢 act completes stale-dom 1 step 446ms
🟢 act completes otp-auto-advance 1 step 708ms
🟢 act completes date-picker 1 step 808ms
🟢 act completes rich-text-editor 1 step 8.1s
🟢 act completes playbook-cleanup 1 step 550ms
🟢 act completes promo-storefront 1 step 2.3s
🟢 act completes gift-card-purchase 1 step 2.4s
🟢 act filters the list and the URL carries the filter 1 step 217ms
🟢 tests-agent/unique-cache.e2e.ts · 1 passed 1 step 285ms
🟢 act adds an address with a run-unique label 1 step 285ms

e2e 0.18.0 · 2m 56s · web · run artifacts

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e ios agent: 21 passed, 1 skipped

25 agent steps · 136 model calls · 853.7k tokens (82% cached) · $0.0561

All 22 tests in 1 file
Test Agent Time
⏭️ tests-agent/scenarios.e2e.ts · 21 passed, 1 skipped 25 steps · 136 calls 12m 17s
🟢 act completes Login Form 1 step · 12 calls 1m 24s
🟢 act completes Infinite Scroll List 1 step · 3 calls 56.9s
🟢 act completes Modal Flow 1 step · 4 calls 15.7s
🟢 act completes Bottom Tabs 1 step · 3 calls 14.3s
🟢 act completes Text Input Variations 1 step · 3 calls 23.6s
🟢 act completes Broken Accessibility 2 steps · 7 calls 33.8s
🟢 act completes Vision Only 2 steps · 6 calls 30.4s
🟢 act completes Gestures 1 step · 8 calls 33.9s
🟢 act completes Async States 1 step · 8 calls 26.6s
🟢 act completes Debounced Search 1 step · 5 calls 19.3s
🟢 act completes Flattened Registration Form 2 steps · 14 calls 1m 25s
🟢 act completes Flattened Login 2 steps · 11 calls 1m 12s
🟢 act completes Sticky Chrome Target 1 step · 7 calls 42.9s
🟢 act completes WebView Accessibility 1 step · 5 calls 30.8s
🟢 act completes Permission Prompt 1 step · 3 calls 16.6s
🟢 act completes Photo Picker 1 step · 4 calls 17.6s
🟢 act completes Product Catalog 1 step · 6 calls 18.5s
🟢 act completes Error Recovery 1 step · 6 calls 17.3s
🟢 act completes Choice Controls 1 step · 8 calls 36.8s
🟢 act completes Stripe PaymentSheet 1 step · 9 calls 40.1s
🟢 act completes Apple Pay 1 step · 4 calls 19.6s
⏭️ act completes Apple Pay Billing Address (skipped: the CI simulator's Apple Pay sheet skips the billing-address step, so the scenario cannot be completed there)

e2e 0.18.0 · 12m 17s · ios-simulator · run artifacts

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e android: 1 flaky, 53 passed, 1 skipped

⚠️ 1 flaky test passed on a retry

⚠️ sequential onboarding echoes the exact values
tests/device.e2e.ts:58

ENGINE_FAILURE at step 12 of 12: locator.fill getByTestId("phone-input"), after 4.7s

perform fill failed: Android fill verification failed Hint: Retry with --debug and inspect diagnostics log for details.

  • Screen: dev.e2e.benchmark

Evidence: screenshot, log

All 55 tests in 7 files
Test Time
⚠️ tests/device.e2e.ts · 1 flaky, 3 passed 43.1s
🟢 permission prompt › allowing the system dialog enables the microphone 7.3s
🟢 permission prompt › a denied prompt recovers once the permission is granted outside 12.7s
⚠️ sequential onboarding echoes the exact values (1 failed attempt first) 15.7s
🟢 onboarding rejects a malformed email before advancing 7.4s
⏭️ tests/controls.e2e.ts · 24 passed, 1 skipped 3m 31s
🟢 control inventory › a label query resolves a labeled text field 34.4s
🟢 control inventory › a labeled field answers name, display value, value reads, fill, and clear 15.9s
🟢 control inventory › a placeholder query and attribute reads find the field 11.0s
🟢 control inventory › a secure field takes a fill and denies value reads 9.2s
🟢 control inventory › press sends a character and Enter through the soft keyboard 9.1s
🟢 control inventory › a field autofocuses on mount and focus() moves the focus 13.0s
🟢 control inventory › toBeFocused follows the focus 10.7s
🟢 control inventory › a switch checks, unchecks, and reports its state 10.3s
🟢 control inventory › checkbox and radio roles answer getByRole, and a checkbox toggles by tap 7.5s
🟢 control inventory › checkbox and radio roles check, uncheck, and report their state 12.8s
🟢 control inventory › a tab role answers getByRole 4.0s
🟢 control inventory › a radio group reports the checked option 9.8s
🟢 control inventory › buttons report disabled, enabled, and a state that arrives later 9.8s
🟢 control inventory › a display: none element is absent rather than hidden, its visible twin attached 6.5s
🟢 control inventory › a header answers its accessible name 4.2s
🟢 control inventory › a tab row answers count, all, texts, filters, positions, and switching 5.6s
🟢 control inventory › a list answers counts, list-form text, reads, and boxes in order 5.4s
⏭️ control inventory › a row contains its texts (skipped: React Native flattens a plain View out of the accessibility tree on both platforms: XCTest and the Android helper report a View with a testID as a leaf beside its children, so filter({ has }) and a query scoped to it match nothing; only Sc…)
🟢 control inventory › a long press lands as one 7.3s
🟢 control inventory › a double tap lands inside the 300 ms window 7.9s
🟢 control inventory › an ambiguous locator fails at once 5.3s
🟢 control inventory › screenshot, restart, and clearState reopen the app on its home list 10.6s
🟢 refusals › verbs a device never declares are refused before the engine 3ms
🟢 refusals › keys the soft keyboard cannot send are refused by the engine 95ms
🟢 refusals › a missing locator fails as not found once its timeout passes 1.1s
🟢 tests/device-fixture.e2e.ts · 8 passed 1m 9s
🟢 device fixture › setOrientation rotates the window the app measures 4.8s
🟢 device fixture › home leaves the app, openApp brings it back where it was 6.2s
🟢 device fixture › foregroundApp sees the home screen after home() 4.2s
🟢 device fixture › closeApp then openApp relaunches on the home list 7.5s
🟢 device fixture › foregroundApp after closeApp reports the closed session as APP_NOT_OPEN 4.8s
🟢 device fixture › device.back pops the scenario 5.6s
🟢 device fixture › setNetwork and setAirplaneMode change what the app sees 16.2s
🟢 device fixture › setLocation and clearLocation change what the app reads 19.7s
🟢 tests/flows-lists.e2e.ts · 7 passed 2m 23s
🟢 infinite scroll reaches the target item 25.3s
🟢 product catalog adds exactly two of the right variant 9.6s
🟢 gestures: long-press, then swipe left 7.8s
🟢 gestures: double-tap completes the flow 9.9s
🟢 sticky chrome: accept below the fold, then continue 12.9s
🟢 async states: load, pull to refresh, claim through the toast 11.8s
🟢 huge virtualized list reaches row 512 1m 6s
🟢 tests/flows.e2e.ts · 7 passed 1m 2s
🟢 text inputs unlock the submit button 8.9s
🟢 filled text inputs report their values 7.0s
🟢 modal flow confirms through the native alert 9.8s
🟢 bottom tabs act inside the last tab 8.0s
🟢 error recovery retries, then confirms the delete 9.1s
🟢 choice controls place the exact order 9.1s
🟢 debounced search selects the target once results arrive 10.1s
🟢 tests/login-form.e2e.ts · 3 passed 31.8s
🟢 login form › rejects a malformed email 9.6s
🟢 login form › rejects an unknown account 8.8s
🟢 login form › signs in and logs out 13.4s
🟢 tests/smoke.e2e.ts · 1 passed 6.7s
🟢 home lists the scenarios and opens one 6.7s

e2e 0.18.0 · 9m 47s · android-emulator · run artifacts

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e android agent: 20 passed

24 agent steps · 113 model calls · 607.4k tokens (85% cached) · $0.0363

All 20 tests in 1 file
Test Agent Time
🟢 tests-agent/scenarios.e2e.ts · 20 passed 24 steps · 113 calls 9m 45s
🟢 act completes Login Form 1 step · 4 calls 30.2s
🟢 act completes Infinite Scroll List 1 step · 3 calls 31.7s
🟢 act completes Modal Flow 1 step · 4 calls 12.3s
🟢 act completes Bottom Tabs 1 step · 3 calls 8.6s
🟢 act completes Text Input Variations 1 step · 3 calls 12.9s
🟢 act completes Broken Accessibility 2 steps · 6 calls 31.6s
🟢 act completes Vision Only 2 steps · 6 calls 38.6s
🟢 act completes Gestures 1 step · 12 calls 46.4s
🟢 act completes Async States 1 step · 10 calls 39.9s
🟢 act completes Debounced Search 1 step · 4 calls 11.0s
🟢 act completes Huge Virtualized List 1 step · 3 calls 1m 16s
🟢 act completes Flattened Registration Form 2 steps · 9 calls 49.3s
🟢 act completes Flattened Login 2 steps · 6 calls 31.2s
🟢 act completes Sticky Chrome Target 1 step · 4 calls 18.6s
🟢 act completes WebView Accessibility 1 step · 5 calls 16.8s
🟢 act completes Permission Prompt 1 step · 3 calls 9.1s
🟢 act completes Product Catalog 1 step · 5 calls 14.9s
🟢 act completes Error Recovery 1 step · 6 calls 13.0s
🟢 act completes Choice Controls 1 step · 6 calls 29.3s
🟢 act completes Sequential Onboarding 1 step · 11 calls 1m 4s

e2e 0.18.0 · 9m 46s · android-emulator · run artifacts

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e ios: 52 passed, 1 skipped

All 53 tests in 7 files
Test Time
⏭️ tests/controls.e2e.ts · 23 passed, 1 skipped 3m 55s
🟢 control inventory › a label query resolves a labeled text field 11.2s
🟢 control inventory › a labeled field answers name, display value, value reads, fill, and clear 22.9s
🟢 control inventory › a placeholder query and attribute reads find the field 8.3s
🟢 control inventory › a secure field takes a fill and denies value reads 15.1s
🟢 control inventory › press sends a character and Enter through the soft keyboard 13.6s
🟢 control inventory › a field autofocuses on mount and focus() moves the focus 16.7s
🟢 control inventory › toBeFocused follows the focus 11.5s
🟢 control inventory › a switch checks, unchecks, and reports its state 15.6s
🟢 control inventory › checkbox and radio roles answer getByRole, and a checkbox toggles by tap 12.9s
🟢 control inventory › checkbox and radio roles check, uncheck, and report their state 15.6s
🟢 control inventory › a radio group reports the checked option 9.8s
🟢 control inventory › buttons report disabled, enabled, and a state that arrives later 8.8s
🟢 control inventory › a display: none element is absent rather than hidden, its visible twin attached 8.7s
🟢 control inventory › a header answers its accessible name 5.2s
🟢 control inventory › a tab row answers count, all, texts, filters, positions, and switching 7.8s
🟢 control inventory › a list answers counts, list-form text, reads, and boxes in order 8.2s
⏭️ control inventory › a row contains its texts (skipped: React Native flattens a plain View out of the accessibility tree on both platforms: XCTest and the Android helper report a View with a testID as a leaf beside its children, so filter({ has }) and a query scoped to it match nothing; only Sc…)
🟢 control inventory › a long press lands as one 9.4s
🟢 control inventory › pointer verbs land at the point asked for 11.5s
🟢 control inventory › an ambiguous locator fails at once 6.3s
🟢 control inventory › screenshot, restart, and clearState reopen the app on its home list 13.2s
🟢 refusals › verbs a device never declares are refused before the engine 2ms
🟢 refusals › keys the soft keyboard cannot send are refused by the engine 619ms
🟢 refusals › a missing locator fails as not found once its timeout passes 1.2s
🟢 tests/device-fixture.e2e.ts · 9 passed 2m 2s
🟢 device fixture › setAppearance flips the color scheme the app reads 13.8s
🟢 device fixture › setOrientation rotates the window the app measures 9.8s
🟢 device fixture › the clipboard reads back what was written 8.1s
🟢 device fixture › home leaves the app, openApp brings it back where it was 13.2s
🟢 device fixture › closeApp then openApp relaunches on the home list 20.7s
🟢 device fixture › foregroundApp after closeApp reports the closed session as APP_NOT_OPEN 10.3s
🟢 device fixture › device.back pops the scenario 8.0s
🟢 device fixture › setLocation and clearLocation change what the app reads 19.1s
🟢 device fixture › enrollBiometrics and setBiometrics answer a biometric prompt 18.7s
🟢 tests/device.e2e.ts · 2 passed 58.7s
🟢 sequential onboarding echoes the exact values 44.3s
🟢 onboarding rejects a malformed email before advancing 14.4s
🟢 tests/flows-lists.e2e.ts · 7 passed 3m 44s
🟢 infinite scroll reaches the target item 26.4s
🟢 product catalog adds exactly two of the right variant 11.3s
🟢 gestures: long-press, then swipe left 10.0s
🟢 sticky chrome: accept below the fold, then continue 11.7s
🟢 async states: load, pull to refresh, claim through the toast 12.9s
🟢 huge virtualized list reaches row 512 2m 15s
🟢 web view coupon form applies the code shown on the page 17.0s
🟢 tests/flows.e2e.ts · 7 passed 1m 13s
🟢 text inputs unlock the submit button 14.6s
🟢 filled text inputs report their values 10.7s
🟢 modal flow confirms through the native alert 10.3s
🟢 bottom tabs act inside the last tab 8.0s
🟢 error recovery retries, then confirms the delete 10.2s
🟢 choice controls place the exact order 8.5s
🟢 debounced search selects the target once results arrive 10.9s
🟢 tests/login-form.e2e.ts · 3 passed 46.9s
🟢 login form › rejects a malformed email 12.2s
🟢 login form › rejects an unknown account 12.1s
🟢 login form › signs in and logs out 22.6s
🟢 tests/smoke.e2e.ts · 1 passed 15.2s
🟢 home lists the scenarios and opens one 15.2s

e2e 0.18.0 · 6m 45s · ios-simulator · run artifacts

@okwasniewski

Copy link
Copy Markdown
Member Author

[claude-opus-5-5] responding on behalf of okwasniewski

Needs a human:

  • Trust call: the merge queue runs a queued fork PR's code with repo secrets, so enqueueing is now the trust decision (AGENTS.md security invariants).
  • After merge: add required_status_checks to the Main ruleset (spec gate, benchmark gate, mobile gate, docs gate, GitHub Actions app) and raise check_response_timeout_minutes 60 -> 120.
  • The merge_group path can only be exercised after that ruleset update.

@okwasniewski
okwasniewski force-pushed the oskar/ci-merge-queue-gates branch from e97af99 to 905f9c1 Compare October 7, 2026 09:29
@okwasniewski
okwasniewski merged commit 59113aa into main Oct 7, 2026
29 checks passed
@okwasniewski
okwasniewski deleted the oskar/ci-merge-queue-gates branch October 7, 2026 09:52
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