Skip to content

feat: e2e trace pages replace the Playwright trace - #869

Merged
okwasniewski merged 25 commits into
mainfrom
oskar/e2e-traces
Oct 7, 2026
Merged

okwasniewski merged 25 commits into
mainfrom
oskar/e2e-traces

Conversation

@okwasniewski

@okwasniewski okwasniewski commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Summary

trace keeps its modes but writes e2e's own trace instead of a Playwright zip: one markdown page per test, .e2e/results/<test>/trace.md, on every engine. Default retain-on-failure, locally and in CI. Not breaking for test authors. Replaces #822 + #823.

Each page tells every step:

  • cache decision: replayed / missed and why, where a replay stopped, recording saved / kept / evicted, entry file
  • deterministic actions with the node they hit and timing (tap button "Add" (39ms))
  • assertion polls (expect gave up after 15 reads in 1.6s: text "0 remaining" x15)
  • agent actions and last turns
  • what the app logged: console output (info too, capped apart from errors), uncaught errors, failed requests (new EngineAttemptContext.appLog)
  • where the page went: ↪ navigated to /login, a new tab the app opened, a frame that loaded (new navigation source)
  • how the screen changed since the step before: added / removed / changed nodes, bounded (new EngineAttemptContext.screen; web captures after each action, mobile hands over the snapshot its locate already took, so no extra device snapshots; not asked for when the attempt keeps no trace)
  • what the test ran on: browser + user agent, or platform + device (new EngineAttemptContext.environment)
  • hook a step ran in, screen at failure inline, evidence (screenshot, screen.txt, video offset)

Same data lands in report.json: step events (engine, poll, navigation), attempt.appLog (typed lines, each with its step index), step.phase, step.screen, attempt.environment, failure.viewport/nodes, step.cache.entry/detail/write (write gains not-written).

Trace and video share one keep rule (keeps): anything that ran and did not pass keeps them, interrupted included. An attempt that keeps no trace takes no screens at all (engine hook and observations gated by one session flag). The web engine reads a screen after each action when traced; measured on the web benchmark (91 tests, 804 steps, 1 worker): 108.0s with --trace off vs 119.6s default, about 14ms per step.

Output layout: everything a test left is in one directory, .e2e/results/<test>/, replacing .e2e/artifacts/ + .e2e/traces/. Each run overwrites it; report.json, junit.xml, summary.md stay at the .e2e/ root.

.e2e/results/todos-adds-todos-with-the-button-and-72ee7de7346d012a/
  trace.md                                  page links its files, shows the failure screenshot inline
  attempt-1/screen-at-failure.txt           attempts from 1
  attempt-1/screenshots/001-failure.png
  rerun-1/attempt-1/...                     --last-failed

Old path for comparison: artifacts/web/tests_todos.e2e.ts__todos__adds_20todos_20with…-92fc0c69/default/attempt-0/failure/screen.txt. Serial groups share the group's directory; MCP sessions write under results/mcp/. CI uploads move to .e2e/results.

Terminal per failure: ❯ app 2 errors, 2 warnings logged, ❯ trace .e2e/results/<test>/trace.md; summary row Traces .e2e/results/ (N pages, trace.md in each test's directory). summary.md links each failure to its trace. report.json is now framed as data for scripts: the terminal drops its Report row (--debug prints the path; Report (not written) still shows when missing), and docs/skill lead with trace.md and summary.md.

Engine authors

  • startTrace / stopTrace no longer called (older engines declaring them still load); trace leaves artifactCapabilities.
  • report-1 drops the trace artifact kind, not-required redaction, TRACE_WITHHELD.
  • web engine no longer records Playwright traces.

Other fixes in here

  • video: wait for the first screencast frame (white video on Linux)
  • stale replay names what changed in its key under --strict-cache (new entries store keyedBy)

Test plan

  • pnpm typecheck, pnpm lint, pnpm docs:check, pnpm docs:check-errors
  • e2e (3063), web (507), mobile (232), github (32) suites, rebased on main e77c17a
  • real CLI on testbed: results layout (--retries 1, --last-failed rerun, serial group), App log section from console.log/warn/error, --trace off writes no page and no step screens, stress suite's hostile titles give safe folder names
  • web agent suite under --strict-cache after the rebase: no REPLAY_STALE, 26/33 replayed (the rest need a model, covered by CI)
  • real CLI run on testbed: failing tests get pages, a passing { trace: 'on' } test gets a ✓ page, --trace off honors the test option, no zip written; step screen diffs, ℹ console, popup + redirect lines, Ran on: browser/UA
  • real iOS simulator run (Settings app): step screens from locate captures, Ran on: platform ios · device <udid>
  • follow-up: network log per step, ENG-924

@github-actions

github-actions Bot commented Oct 5, 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 541ms
🟢 aria hidden flow › picks the Pro plan by its visible text and confirms it 360ms
🟢 aria hidden flow › another plan shows the error and keeps the picker open 181ms
🟢 tests/async-states.e2e.ts · 2 passed 7.1s
🟢 async states › reads the code off the transient toast and verifies it once the button enables 2.3s
🟢 async states › a wrong code is rejected after the toast has gone 4.8s
🟢 tests/canvas-only.e2e.ts · 2 passed 259ms
🟢 canvas only › taps square, circle, then diamond at their pixel coordinates 138ms
🟢 canvas only › a shape out of order paints the error and resets progress 121ms
🟢 tests/canvas-whiteboard.e2e.ts · 2 passed 392ms
🟢 canvas whiteboard › drags both shapes into their slots and saves 224ms
🟢 canvas whiteboard › bounces a shape off the wrong slot and refuses to save early 168ms
🟢 tests/cart-totals.e2e.ts · 2 passed 379ms
🟢 cart totals › increasing a quantity updates the line total but the order summary stays stale (planted bug) 229ms
🟢 cart totals › a quantity never drops below one 150ms
🟢 tests/checkout-review.e2e.ts · 1 passed 179ms
🟢 shows a raw greeting token and an undefined delivery date (planted bug), yet places the order 179ms
🟢 tests/context-menu-trap.e2e.ts · 2 passed 593ms
🟢 context menu trap › right-click opens nothing; the row menu renames the file 294ms
🟢 context menu trap › the decoy menu items refuse and keep the file 299ms
🟢 tests/control-inventory.e2e.ts · 8 passed 3.8s
🟢 control inventory › check sets the checkbox and the radio without flipping a set one 286ms
🟢 control inventory › check picks a radio the pick replaces with its summary 157ms
🟢 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 291ms
🟢 control inventory › setInputFiles attaches files named from the project root 151ms
🟢 control inventory › the details view is left through the browser history 184ms
🟢 control inventory › scrollIntoView brings the footnote into view 279ms
🟢 control inventory › every exercise done shows the success message 1.4s
🟢 tests/css-content-ui.e2e.ts · 2 passed 341ms
🟢 css content ui › the tile labelled Ship it advances and confirming ships 176ms
🟢 css content ui › a wrong tile shows the CSS-rendered error and keeps the picker 165ms
🟢 tests/date-picker.e2e.ts · 2 passed 647ms
🟢 date picker › navigates three months ahead and books the required date 382ms
🟢 date picker › confirming without the exact date shows the error 265ms
🟢 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 630ms
🟢 div soup › a wrong code is rejected 265ms
🟢 div soup › the right code grants access after the delete tile fixes a typo 365ms
🟢 tests/drag-and-drop.e2e.ts · 2 passed 595ms
🟢 drag and drop › an out-of-order item resets the dropzone 297ms
🟢 drag and drop › dropping Banana then Cherry passes 298ms
🟢 tests/filter-deep-link.e2e.ts · 2 passed 226ms
🟢 filter deep link › filtering writes the query to the URL 119ms
🟢 filter deep link › opening a shared link restores the filter 107ms
🟢 tests/gift-card-purchase.e2e.ts · 3 passed 619ms
🟢 gift card purchase › refuses to buy without an amount 178ms
🟢 gift card purchase › refuses a recipient without an at sign 225ms
🟢 gift card purchase › sends the gift card 216ms
🟢 tests/hover-menu.e2e.ts · 2 passed 486ms
🟢 hover menu › a decoy leaf is refused 188ms
🟢 hover menu › hovering Account, then Billing, reaches Redeem voucher 298ms
🟢 tests/iframe-form.e2e.ts · 2 passed 526ms
🟢 iframe form › a wrong code is refused by the host page 263ms
🟢 iframe form › the code read from one frame applies through the other 263ms
🟢 tests/image-only-ui.e2e.ts · 3 passed 466ms
🟢 image only ui › the icons have no names, so the bare svg locator is ambiguous 121ms
🟢 image only ui › a wrong icon shows the error image and keeps the icons 150ms
🟢 image only ui › tapping the star, then the heart, verifies the icons 195ms
🟢 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 723ms
🟢 kanban board › pointer drags move both cards into the goal layout 390ms
🟢 kanban board › a swipe along a path drags a card as well 132ms
🟢 kanban board › a plain tap moves nothing and the untouched board is rejected 201ms
🟢 tests/login-form.e2e.ts · 4 passed 749ms
🟢 login form › rejects a malformed email 182ms
🟢 login form › rejects a short password 169ms
🟢 login form › rejects an unknown account 185ms
🟢 login form › signs in and logs out 213ms
🟢 tests/lying-labels.e2e.ts · 4 passed 733ms
🟢 lying labels › the button whose accessible name says Pay now is the wrong one 132ms
🟢 lying labels › a text match for Pay now catches the decoy phrase too 106ms
🟢 lying labels › the field whose accessible name says Amount is the wrong one 251ms
🟢 lying labels › visible text drives the payment through 244ms
🟢 tests/native-dialogs.e2e.ts · 3 passed 500ms
🟢 native dialogs › answers the confirm, prompt, and alert chain 149ms
🟢 native dialogs › dismissing the confirm cancels the order 187ms
🟢 native dialogs › a wrong gift code is rejected 164ms
🟢 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.6s
🟢 onboarding wizard › back keeps what was typed and the brief comes back with it 249ms
🟢 onboarding wizard › the address step takes the brief through its bare-div dropdown 319ms
🟢 onboarding wizard › the profile step steers the calendar three decades back 1.5s
🟢 onboarding wizard › the preferences step flips the toggles the brief names and leaves the trap off 1.7s
🟢 onboarding wizard › the review step repeats the brief and finishes with the PIN 1.8s
🟢 tests/order-history.e2e.ts · 2 passed 1.7s
🟢 order history › overview and settings render their panels 321ms
🟢 order history › the orders tab never leaves its loading state (planted bug) 1.3s
🟢 tests/otp-auto-advance.e2e.ts · 3 passed 2.1s
🟢 otp auto-advance › focus advances with each digit and the full code verifies 657ms
🟢 otp auto-advance › backspace on an empty box clears and refocuses the previous one 407ms
🟢 otp auto-advance › a wrong code clears every box and starts over 1.0s
🟢 tests/overlay-trap.e2e.ts · 1 passed 744ms
🟢 continues only after the banner and the overlay are gone 744ms
🟢 tests/playbook-cleanup.e2e.ts · 2 passed 761ms
🟢 playbook cleanup › deleting the draft removes it from an exact-name search 413ms
🟢 playbook cleanup › cancelling the dialog keeps the draft searchable 348ms
🟢 tests/price-sorting.e2e.ts · 3 passed 553ms
🟢 price sorting › opens in the featured order with sale prices struck through 168ms
🟢 price sorting › low to high sorts by the original price, not the paid one (planted bug) 190ms
🟢 price sorting › high to low is the same wrong order reversed (planted bug) 195ms
🟢 tests/product-reviews.e2e.ts · 1 passed 1.2s
🟢 the running-shoe page lists coffee-grinder reviews (planted bug) 1.2s
🟢 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 431ms
🟢 rich text editor › bolding exactly the required word passes the check 212ms
🟢 rich text editor › bold that spills into the previous word fails the check 219ms
🟢 tests/saved-addresses.e2e.ts · 3 passed 529ms
🟢 saved addresses › adds an address and clears the form 188ms
🟢 saved addresses › ignores an add with an empty field 159ms
🟢 saved addresses › delete shows its toast but keeps the address, on retry too (planted bug) 182ms
🟢 tests/shadow-dom-form.e2e.ts · 2 passed 531ms
🟢 shadow DOM form › rejects a wrong access code 264ms
🟢 shadow DOM form › grants access with the code from the hint inside the root 267ms
🟢 tests/smoke.e2e.ts · 1 passed 414ms
🟢 home lists the scenarios and opens one 414ms
🟢 tests/stale-dom.e2e.ts · 1 passed 2.1s
🟢 taps the moving target three times across rebuilds of the list 2.1s
🟢 tests/sticky-chrome.e2e.ts · 1 passed 208ms
🟢 accepts the terms once the button clears the sticky footer 208ms
🟢 tests/virtualized-table.e2e.ts · 1 passed 1m 11s
🟢 scrolls the windowed table to the Golden Row and claims it 1m 11s
🟢 tests/wishlist.e2e.ts · 2 passed 1.5s
🟢 wishlist › saving toggles the button and the tab badge 240ms
🟢 wishlist › the wishlist tab renders the empty state despite the badge count (planted bug) 1.3s

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

@github-actions

github-actions Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e web agent: 33 passed

34 agent steps · 26 replayed from cache · 20 model calls · 76.7k tokens (84% cached) · $0.0050

All 33 tests in 5 files
Test Agent Time
🟢 tests-agent/control-inventory.e2e.ts · 7 passed 7 steps 7.9s
🟢 control inventory › check sets the checkbox and the radio 1 step 625ms
🟢 control inventory › check picks a radio the pick replaces with its summary 1 step 339ms
🟢 control inventory › a long press and a double click are chosen over a plain tap 1 step 977ms
🟢 control inventory › a right-click opens the file menu and Rename renames the file 1 step 2.7s
🟢 control inventory › upload attaches the named project files 1 step 2.5s
🟢 control inventory › back returns from the details view to the inventory 1 step 324ms
🟢 control inventory › scroll_to brings the footnote into view 1 step 416ms
🟢 tests-agent/login-form.e2e.ts · 1 passed 1 step 383ms
🟢 act signs in with the benchmark account 1 step 383ms
🟢 tests-agent/planted-bugs.e2e.ts · 3 passed 4 steps · 8 calls 13.9s
🟢 cart totals: a judgment catches the stale order summary 2 steps · 4 calls 6.1s
🟢 checkout review: a judgment catches the broken copy 1 step · 1 call 1.9s
🟢 wishlist: a judgment catches the lost saved items 1 step · 3 calls 5.9s
🟢 tests-agent/scenarios.e2e.ts · 21 passed 21 steps · 12 calls 2m 33s
🟢 act completes shadow-dom-form 1 step · 3 calls 4.5s
🟢 act completes lying-labels 1 step · 3 calls 6.4s
🟢 act completes iframe-form 1 step · 3 calls 4.4s
🟢 act completes infinite-scroll 1 step 5.7s
🟢 act completes virtualized-table 1 step 1m 42s
🟢 act completes overlay-trap 1 step 893ms
🟢 act completes sticky-chrome 1 step 921ms
🟢 act completes async-states 1 step · 3 calls 7.2s
🟢 act completes debounced-search 1 step 2.3s
🟢 act completes hover-menu 1 step 517ms
🟢 act completes drag-and-drop 1 step 469ms
🟢 act completes kanban-board 1 step 661ms
🟢 act completes context-menu-trap 1 step 2.6s
🟢 act completes stale-dom 1 step 483ms
🟢 act completes otp-auto-advance 1 step 765ms
🟢 act completes date-picker 1 step 885ms
🟢 act completes rich-text-editor 1 step 8.2s
🟢 act completes playbook-cleanup 1 step 619ms
🟢 act completes promo-storefront 1 step 1.3s
🟢 act completes gift-card-purchase 1 step 2.5s
🟢 act filters the list and the URL carries the filter 1 step 277ms
🟢 tests-agent/unique-cache.e2e.ts · 1 passed 1 step 451ms
🟢 act adds an address with a run-unique label 1 step 451ms

e2e 0.18.0 · 2m 57s · 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 166 files

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

Re-trigger cubic

Comment thread docs/migrate/playwright.mdx Outdated
Comment thread docs/debugging.mdx Outdated
Comment thread packages/e2e/src/expect/samples.ts
Comment thread .github/workflows/mobile.yml
Comment thread packages/e2e/src/run/serial.ts
Comment thread docs/coding-agents.mdx
Comment thread docs/coding-agents.mdx Outdated
Comment thread docs/reference/cli.mdx Outdated
Comment thread docs/reference/cli.mdx Outdated
Comment thread docs/reference/config.mdx
@github-actions

github-actions Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e android: 54 passed, 1 skipped

All 55 tests in 7 files
Test Time
⏭️ tests/controls.e2e.ts · 24 passed, 1 skipped 3m 24s
🟢 control inventory › a label query resolves a labeled text field 31.9s
🟢 control inventory › a labeled field answers name, display value, value reads, fill, and clear 16.4s
🟢 control inventory › a placeholder query and attribute reads find the field 9.2s
🟢 control inventory › a secure field takes a fill and denies value reads 9.0s
🟢 control inventory › press sends a character and Enter through the soft keyboard 12.5s
🟢 control inventory › a field autofocuses on mount and focus() moves the focus 14.6s
🟢 control inventory › toBeFocused follows the focus 10.1s
🟢 control inventory › a switch checks, unchecks, and reports its state 9.8s
🟢 control inventory › checkbox and radio roles answer getByRole, and a checkbox toggles by tap 6.8s
🟢 control inventory › checkbox and radio roles check, uncheck, and report their state 12.0s
🟢 control inventory › a tab role answers getByRole 3.7s
🟢 control inventory › a radio group reports the checked option 8.9s
🟢 control inventory › buttons report disabled, enabled, and a state that arrives later 8.1s
🟢 control inventory › a display: none element is absent rather than hidden, its visible twin attached 6.8s
🟢 control inventory › a header answers its accessible name 3.6s
🟢 control inventory › a tab row answers count, all, texts, filters, positions, and switching 5.0s
🟢 control inventory › a list answers counts, list-form text, reads, and boxes in order 5.1s
⏭️ 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.0s
🟢 control inventory › a double tap lands inside the 300 ms window 8.0s
🟢 control inventory › an ambiguous locator fails at once 4.7s
🟢 control inventory › screenshot, restart, and clearState reopen the app on its home list 9.4s
🟢 refusals › verbs a device never declares are refused before the engine 2ms
🟢 refusals › keys the soft keyboard cannot send are refused by the engine 112ms
🟢 refusals › a missing locator fails as not found once its timeout passes 1.4s
🟢 tests/device-fixture.e2e.ts · 8 passed 1m 4s
🟢 device fixture › setOrientation rotates the window the app measures 5.0s
🟢 device fixture › home leaves the app, openApp brings it back where it was 5.5s
🟢 device fixture › foregroundApp sees the home screen after home() 4.0s
🟢 device fixture › closeApp then openApp relaunches on the home list 6.3s
🟢 device fixture › foregroundApp after closeApp reports the closed session as APP_NOT_OPEN 4.0s
🟢 device fixture › device.back pops the scenario 4.7s
🟢 device fixture › setNetwork and setAirplaneMode change what the app sees 16.1s
🟢 device fixture › setLocation and clearLocation change what the app reads 18.7s
🟢 tests/device.e2e.ts · 4 passed 37.0s
🟢 permission prompt › allowing the system dialog enables the microphone 6.7s
🟢 permission prompt › a denied prompt recovers once the permission is granted outside 12.5s
🟢 sequential onboarding echoes the exact values 11.1s
🟢 onboarding rejects a malformed email before advancing 6.8s
🟢 tests/flows-lists.e2e.ts · 7 passed 2m 9s
🟢 infinite scroll reaches the target item 18.0s
🟢 product catalog adds exactly two of the right variant 9.3s
🟢 gestures: long-press, then swipe left 8.0s
🟢 gestures: double-tap completes the flow 9.6s
🟢 sticky chrome: accept below the fold, then continue 11.4s
🟢 async states: load, pull to refresh, claim through the toast 11.3s
🟢 huge virtualized list reaches row 512 1m 1s
🟢 tests/flows.e2e.ts · 7 passed 52.5s
🟢 text inputs unlock the submit button 6.8s
🟢 filled text inputs report their values 5.6s
🟢 modal flow confirms through the native alert 8.3s
🟢 bottom tabs act inside the last tab 6.6s
🟢 error recovery retries, then confirms the delete 8.5s
🟢 choice controls place the exact order 8.2s
🟢 debounced search selects the target once results arrive 8.6s
🟢 tests/login-form.e2e.ts · 3 passed 28.7s
🟢 login form › rejects a malformed email 8.3s
🟢 login form › rejects an unknown account 8.0s
🟢 login form › signs in and logs out 12.4s
🟢 tests/smoke.e2e.ts · 1 passed 5.0s
🟢 home lists the scenarios and opens one 5.0s

e2e 0.18.0 · 8m 41s · android-emulator · run artifacts

@github-actions

github-actions Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e android agent: 1 flaky, 19 passed

24 agent steps · 115 model calls · 767.1k tokens (83% cached) · $0.0502

⚠️ 1 flaky test passed on a retry

⚠️ act completes Sequential Onboarding
tests-agent/scenarios.e2e.ts:257

ACTION_FAILED at step 4 of 4: agent.act "Complete this scenario as the screen instructs: complete the signup wizard with the email, name, and phone the screen asks for, dismissing the keyboard before each Continue", after 1m 17s and 19 model calls

agent.act failed: Entered jane@example.com and Jane Merchant, dismissing the keyboard before each Continue. On the phone step, attempts to fill 0612435678 failed and the field remained empty; tapping Continue showed “Enter a 10-digit phone number starting with 0,” so the signup wizard is incomplete.

  • Turn 16: type_at({"x":157,"y":196,"value":"0612435678"}) → [type_at] type_at (157, 196) failed: APP_UNREACHABLE: perform fill failed: Android fill verification failed Hint: Retry with --debug and inspect diagnostics lo…
  • Turn 17: tap_at({"x":100,"y":196}) → [tap_at] Tapped #n21709 textbox "e.g. 0612435678" testid="phone-input" [focused], the control at (312, 612).
  • Turn 18: type({"value":"0612435678"}) → [type] Typed into the focused field.
  • Screen: dev.e2e.benchmark

Evidence: screenshot, log

All 20 tests in 1 file
Test Agent Time
⚠️ tests-agent/scenarios.e2e.ts · 1 flaky, 19 passed 24 steps · 115 calls 9m 20s
🟢 act completes Login Form 1 step · 3 calls 32.7s
🟢 act completes Infinite Scroll List 1 step · 3 calls 26.0s
🟢 act completes Modal Flow 1 step · 4 calls 12.6s
🟢 act completes Bottom Tabs 1 step · 3 calls 8.9s
🟢 act completes Text Input Variations 1 step · 3 calls 10.2s
🟢 act completes Broken Accessibility 2 steps · 6 calls 37.6s
🟢 act completes Vision Only 2 steps · 6 calls 31.0s
🟢 act completes Gestures 1 step · 10 calls 34.9s
🟢 act completes Async States 1 step · 15 calls 56.6s
🟢 act completes Debounced Search 1 step · 4 calls 11.2s
🟢 act completes Huge Virtualized List 1 step · 3 calls 1m 11s
🟢 act completes Flattened Registration Form 2 steps · 8 calls 43.7s
🟢 act completes Flattened Login 2 steps · 6 calls 27.5s
🟢 act completes Sticky Chrome Target 1 step · 4 calls 15.9s
🟢 act completes WebView Accessibility 1 step · 6 calls 21.6s
🟢 act completes Permission Prompt 1 step · 3 calls 8.9s
🟢 act completes Product Catalog 1 step · 5 calls 13.0s
🟢 act completes Error Recovery 1 step · 7 calls 29.4s
🟢 act completes Choice Controls 1 step · 6 calls 32.0s
⚠️ act completes Sequential Onboarding (1 failed attempt first) 1 step · 10 calls 34.6s

e2e 0.18.0 · 10m 42s · android-emulator · run artifacts

@github-actions

github-actions Bot commented Oct 5, 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 26s
🟢 control inventory › a label query resolves a labeled text field 10.9s
🟢 control inventory › a labeled field answers name, display value, value reads, fill, and clear 19.7s
🟢 control inventory › a placeholder query and attribute reads find the field 7.5s
🟢 control inventory › a secure field takes a fill and denies value reads 11.8s
🟢 control inventory › press sends a character and Enter through the soft keyboard 9.9s
🟢 control inventory › a field autofocuses on mount and focus() moves the focus 11.3s
🟢 control inventory › toBeFocused follows the focus 9.7s
🟢 control inventory › a switch checks, unchecks, and reports its state 11.5s
🟢 control inventory › checkbox and radio roles answer getByRole, and a checkbox toggles by tap 9.7s
🟢 control inventory › checkbox and radio roles check, uncheck, and report their state 13.5s
🟢 control inventory › a radio group reports the checked option 9.6s
🟢 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.4s
🟢 control inventory › a header answers its accessible name 5.7s
🟢 control inventory › a tab row answers count, all, texts, filters, positions, and switching 7.5s
🟢 control inventory › a list answers counts, list-form text, reads, and boxes in order 8.9s
⏭️ 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.7s
🟢 control inventory › pointer verbs land at the point asked for 11.4s
🟢 control inventory › an ambiguous locator fails at once 6.3s
🟢 control inventory › screenshot, restart, and clearState reopen the app on its home list 12.1s
🟢 refusals › verbs a device never declares are refused before the engine 2ms
🟢 refusals › keys the soft keyboard cannot send are refused by the engine 618ms
🟢 refusals › a missing locator fails as not found once its timeout passes 1.2s
🟢 tests/device-fixture.e2e.ts · 9 passed 1m 27s
🟢 device fixture › setAppearance flips the color scheme the app reads 11.8s
🟢 device fixture › setOrientation rotates the window the app measures 7.2s
🟢 device fixture › the clipboard reads back what was written 12.8s
🟢 device fixture › home leaves the app, openApp brings it back where it was 11.8s
🟢 device fixture › closeApp then openApp relaunches on the home list 9.5s
🟢 device fixture › foregroundApp after closeApp reports the closed session as APP_NOT_OPEN 5.1s
🟢 device fixture › device.back pops the scenario 6.3s
🟢 device fixture › setLocation and clearLocation change what the app reads 11.5s
🟢 device fixture › enrollBiometrics and setBiometrics answer a biometric prompt 11.1s
🟢 tests/device.e2e.ts · 2 passed 55.5s
🟢 sequential onboarding echoes the exact values 41.3s
🟢 onboarding rejects a malformed email before advancing 14.2s
🟢 tests/flows-lists.e2e.ts · 7 passed 3m 44s
🟢 infinite scroll reaches the target item 34.5s
🟢 product catalog adds exactly two of the right variant 12.3s
🟢 gestures: long-press, then swipe left 9.7s
🟢 sticky chrome: accept below the fold, then continue 11.5s
🟢 async states: load, pull to refresh, claim through the toast 12.8s
🟢 huge virtualized list reaches row 512 2m 9s
🟢 web view coupon form applies the code shown on the page 14.0s
🟢 tests/flows.e2e.ts · 7 passed 1m 15s
🟢 text inputs unlock the submit button 14.7s
🟢 filled text inputs report their values 10.9s
🟢 modal flow confirms through the native alert 10.5s
🟢 bottom tabs act inside the last tab 8.2s
🟢 error recovery retries, then confirms the delete 10.0s
🟢 choice controls place the exact order 8.8s
🟢 debounced search selects the target once results arrive 11.4s
🟢 tests/login-form.e2e.ts · 3 passed 48.2s
🟢 login form › rejects a malformed email 13.1s
🟢 login form › rejects an unknown account 13.2s
🟢 login form › signs in and logs out 22.0s
🟢 tests/smoke.e2e.ts · 1 passed 11.7s
🟢 home lists the scenarios and opens one 11.7s

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

@github-actions

github-actions Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e ios agent: 21 passed, 1 skipped

25 agent steps · 129 model calls · 790.8k tokens (82% cached) · $0.0538

All 22 tests in 1 file
Test Agent Time
⏭️ tests-agent/scenarios.e2e.ts · 21 passed, 1 skipped 25 steps · 129 calls 12m 34s
🟢 act completes Login Form 1 step · 11 calls 1m 13s
🟢 act completes Infinite Scroll List 1 step · 3 calls 51.7s
🟢 act completes Modal Flow 1 step · 4 calls 17.0s
🟢 act completes Bottom Tabs 1 step · 3 calls 12.5s
🟢 act completes Text Input Variations 1 step · 3 calls 26.3s
🟢 act completes Broken Accessibility 2 steps · 7 calls 35.1s
🟢 act completes Vision Only 2 steps · 6 calls 32.4s
🟢 act completes Gestures 1 step · 11 calls 1m 0s
🟢 act completes Async States 1 step · 9 calls 42.7s
🟢 act completes Debounced Search 1 step · 4 calls 24.3s
🟢 act completes Flattened Registration Form 2 steps · 10 calls 1m 15s
🟢 act completes Flattened Login 2 steps · 12 calls 1m 13s
🟢 act completes Sticky Chrome Target 1 step · 7 calls 42.5s
🟢 act completes WebView Accessibility 1 step · 3 calls 18.7s
🟢 act completes Permission Prompt 1 step · 3 calls 18.7s
🟢 act completes Photo Picker 1 step · 4 calls 18.7s
🟢 act completes Product Catalog 1 step · 5 calls 18.3s
🟢 act completes Error Recovery 1 step · 6 calls 18.0s
🟢 act completes Choice Controls 1 step · 8 calls 41.2s
🟢 act completes Stripe PaymentSheet 1 step · 6 calls 32.7s
🟢 act completes Apple Pay 1 step · 4 calls 22.2s
⏭️ 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 34s · ios-simulator · run artifacts

@okwasniewski
okwasniewski force-pushed the oskar/e2e-traces branch 2 times, most recently from d752c7a to 0967590 Compare October 6, 2026 09:41
Comment thread packages/web/tests/integration/app-log.test.ts Fixed

@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 25 files (changes from recent commits).

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

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread skills/e2e/references/explore.md Outdated
Comment thread docs/debugging.mdx Outdated
Comment thread docs/github.mdx Outdated
Comment thread skills/e2e/references/debugging.md Outdated
Comment thread .claude/skills/verify/SKILL.md Outdated

@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 5 files (changes from recent commits).

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

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread skills/e2e/references/debugging.md Outdated
Comment thread docs/debugging.mdx Outdated
Comment thread packages/e2e/src/report/failure-text.ts Outdated

@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 21 files (changes from recent commits).

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

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread skills/e2e/references/setup.md Outdated
Comment thread skills/e2e/references/running.md Outdated
Comment thread .changeset/e2e-traces.md Outdated
Comment thread docs/debugging.mdx Outdated
Comment thread docs/debugging.mdx
Comment thread skills/e2e/references/debugging.md Outdated

@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 18 files (changes from recent commits).

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

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread packages/e2e/src/report/failure-text.ts Outdated
Comment thread skills/e2e/references/debugging.md Outdated

@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 62 files (changes from recent commits).

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

Tip: Review your code locally with the cubic CLI to iterate faster.

Turn on auto-fix | Re-trigger cubic

Comment thread packages/e2e/src/engine/session.ts Outdated
Comment thread packages/e2e/src/run/step-screens.ts Outdated
Comment thread packages/e2e/src/run/steps.ts Outdated
Comment thread packages/e2e/src/engine/session.ts Outdated
Comment thread packages/e2e/src/internal/text.ts Outdated
Comment thread docs/reference/engine.mdx Outdated
Comment thread packages/e2e/src/engine/index.ts
trace (config, target, test/describe) and --trace are refused, pointing at
the failure pages and video. Removes startTrace/stopTrace from the engine
contract, the trace artifact kind and not-required redaction from report-1,
TRACE_WITHHELD, trace redaction, and the web engine's tracing. Recording
modes stay, for video.
…replacement for this commit

An @e2e-dev/web published before the removal still declares
artifacts.startTrace/stopTrace and sits inside its e2e peer range; the
manifest now accepts and never calls them. The refusal and docs name the
markdown reporter's failure pages, the replacement at this commit, and stop
calling on-all-retries a Playwright video mode.
…-blocking script in the late handler tests

A screencast on Linux delivers the frame of a page that just painted after
the paint, so a segment stopped right after a navigation had no frame and
Playwright wrote it white (seen on main in the mid-attempt video test). A
segment now waits up to 1s for its first frame. The late route handler
tests routed a fetch the page issues after load, which raced the body's
end; they route a script the document waits for instead.
…polls, cache decision, and app log

Every run writes .e2e/failures/<test>.md and the terminal names it. Steps
record the node an action hit, assertion and waitFor readings, the cache's
decision and write outcome, and what the app logged (new engine appLog hook,
implemented by the web engine). REPLAY_STALE for a rekeyed recording names
the key parts that changed.
…nd share one node describer

A failure page that cannot be written is a stderr line, as junit.xml and
summary.md are. cache.write moves to the report's step cache, since it is
decided after act() returns. Kept entries are no longer rewritten only to
gain keyedBy, so committed caches stay clean. Node and clip helpers reuse
targetLabel and bound.
…ps in their video segment, and record point actions
…empts from 1, and state the screen's facts once
… cancelled requests, and word bounded logs and trace layout exactly
…ce, the app log as its own record, and screens compared as data
…oll events, environment clip, and the web trace feed
…d, count screen bytes in UTF-8, and never cut a character in two
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants