Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
Dotcom E2E conventions
Issue #9185 is moving dotcom tests toward user scenarios instead of isolated UI smoke tests. New collaborative dotcom coverage should prefer the scenario fixture in fixtures/scenario-test.ts.
Scenario tests
- Name scenario files
*.scenario.spec.ts. They run in thechromium-scenariosproject withfullyParallel: true. - Run the ordinary local/CI dotcom suite with
yarn e2e-dotcomfrom the repo root, oryarn workspace dotcom e2efrom this workspace. This runs the scenario project only. - Run only the scenario suite without clearing stored auth with
yarn workspace dotcom e2e-scenarios. - Run the preserved legacy smoke suite with
yarn e2e-dotcom-smokefrom the repo root, oryarn workspace dotcom e2e-smokefrom this workspace. These specs live intests/smoke, still use the reset-basedchromiumproject, and are intentionally separate from the default runner. They do not run on CI; migrate coverage out oftests/smokeinto scenario tests as the follow-ups below are unblocked. - Run both projects together with
yarn e2e-dotcom-allfrom the repo root, oryarn workspace dotcom e2e-allfrom this workspace, when comparing old and new coverage. - Use named actors from the fixture:
owner,member, andvisitor. - Use
scenario.name('label')for files and workspaces so test data is unique to the run. - Do not reset the whole database or shared users in scenario tests. Stable Clerk test accounts are reused by worker, while files and workspaces are namespaced by scenario.
- Scenario actors use later Clerk test accounts than the legacy
chromiumproject so explicit all-project runs can share a command while legacy tests still reset their own users. - Actor contexts and pages are owned by the fixture and closed automatically.
- Use
scenario.createPersonalFile,scenario.createSharedFile,scenario.createGuestEditFile,scenario.createGuestViewFile,scenario.createPublishedFile,scenario.importFileFromUrl,scenario.downloadFileFromSidebar,scenario.setSharedLinkType,scenario.createWorkspaceWithMember, andscenario.createWorkspaceWithRemovedMemberfor common setup. - Use
scenario.createLegacyRouteFixturefor legacy/r,/ro,/v,/s, and history route setup. It creates namespaced debug-only worker data instead of relying on shared production-like fixtures. - Use direct database setup only for preconditions that are expensive or impossible through the UI, such as enabling workspace flags. Keep the behavior under test in UI actions.
- Prefer live assertions across already-open windows. Reload-based checks are still useful for persistence, but they should not be the only proof for collaboration, permission, or membership behavior.
- Wait for readiness through actor helpers and page objects.
actor.gotowaits for the canvas, auth state, app store hydration when a signed-in app is present, mounted editor, file room connection, and visitor access metadata. Use the narroweractor.waitForAuthLoaded,actor.waitForAppStoreHydrated,actor.waitForEditorReady,actor.waitForFileRoomConnected,actor.waitForVisitorAccessMetadata, andactor.waitForSessionClosedhelpers when a test needs to prove a specific transition. Avoid new sleeps unless the product intentionally waits.
Auth follow-ups
The remaining auth edge cases are still tracked by issue #9185. Keep them out of the scenario project until they have Clerk-level mocking or stable account state that can run without per-test shared-user reset.
Follow-up migration groups:
- Auth legal acceptance and analytics consent: replace route-level Clerk response patching with a stable Clerk test account state or a mocked Clerk client boundary.
- Auth verification and resend behavior: isolate Clerk network failures, malformed responses, cooldown behavior, and code input behavior without depending on shared signed-in user cleanup.
- OAuth auth flows: add a Clerk/OAuth boundary that can exercise Google sign-in and legal acceptance without external redirects.
- Auth response edge cases: cover completed sessions, inconsistent
missing_fieldspayloads, and missing email-code factor data once Clerk responses can be mocked below the route layer.