Nothing failed — but the critical journeys did not all run

3 release-critical journeys did not run at all (Confirming a missing email, Existing customers keep their account, Who the account belongs to). Read the detail below before treating this as a green light.

3c4b8320 master by mendrinos 2026-09-06 08:27 UTC Actions run
5/11journeys passed
150scenarios passed
0failed
360not run
1615/1615unit tests

360 scenarios did not run

Browsers, left to right: Desktop Chrome — full reportDesktop Firefox — full reportMobile Chrome — full reportMobile Safari — full reportTablet Chrome — full report

Journeys

Abuse limits hold

release-critical
partly run

Mailbombing one address and brute-forcing a PIN are both blocked, and one abuser cannot lock anybody else out.

30 passed · 15 not run · 3m 39s of browser time · auth/rate-limiting.spec.ts

····· one social identity cannot spray many addresses 1.3s

Not run — Simulator disabled. Start the dev server with ALLOW_DEV_AUTH_SIMULATION=true.

sign-in links per address allows the limit, then blocks 2.4s
sign-in links per address a different address is unaffected 2.3s
sign-in links per IP allows the limit across distinct addresses, then blocks 9.0s
sign-in links per IP a different IP is unaffected 10.1s
····· sign-in links per IP an unknown client IP gets no shared bucket 1.3s

Not run — Cloudflare always sets CF-Connecting-IP, so no caller here is unattributable — asserted in tests/unit/server/rate-limit.spec.ts

PIN sign-in blocks after the failure limit 3.2s
PIN sign-in a different IP is unaffected 3.7s
····· PIN sign-in an unknown client IP gets no shared bucket 1.3s

Not run — Cloudflare always sets CF-Connecting-IP, so no caller here is unattributable — asserted in tests/unit/server/rate-limit.spec.ts

Confirming a missing email

release-critical
not run

When a provider returns no address, the visitor is asked for one and no account is created until they give it.

85 not run · 1m 25s of browser time · auth/email-confirmation.spec.ts

Nothing here ran — Simulator disabled. Start the dev server with ALLOW_DEV_AUTH_SIMULATION=true.

17 scenarios waiting on this
····· claiming an existing account does not sign the requester in 1.4s
····· the form names the provider that failed to supply an address 1.5s
····· the form the NAME step prefills whatever the provider did supply 1.4s
····· the form requires an email address 1.4s
····· the form blocks an address the browser itself rejects 1.4s
····· the form rejects an address that passes the browser but fails our rule 1.4s
····· the form asks for nothing but the address 2.0s
····· on submit confirms the address it sent to 1.4s
····· on submit still does not sign the user in 1.9s
····· on submit links no provider identity until the address is proven 1.4s
····· on submit a mistyped address is recoverable 1.4s
····· after the emailed link is opened a blank-name account is asked for a name, exactly once 1.4s
····· after the emailed link is opened an account that already has a name keeps its own 1.4s
····· after the emailed link is opened the social identity is linked only now 1.4s
····· without a live pending identity opening the confirm page directly bounces to sign-in 1.3s
····· without a live pending identity shows an explanation that names no provider 1.4s
····· without a live pending identity a cleared pending cookie bounces mid-flow 1.3s

Existing customers keep their account

release-critical
not run

An account created before the identity model still resolves to the same record on its first sign-in after a deploy, with its saved cards and bookings intact.

35 not run · 0.2s of browser time · auth/legacy-account-continuity.spec.ts

Nothing here ran — MONGO_URI unavailable

7 scenarios waiting on this
····· a legacy social user keeps their id, cards and bookings 0.0s
····· the provider identity is adopted, so the next sign-in matches at step 1 0.0s
····· a stored address in different casing still resolves to the same account 0.0s
····· a legacy email-OTP user is found, not duplicated 0.0s
····· a legacy blank-name account is prompted once, then keeps its id 0.0s
····· a name the user set is not reverted by signing in 0.0s
····· legacy workspace roles survive the sign-in 0.0s

Social sign-in

release-critical
passed

Google, Facebook and Microsoft buttons are present and hand off to the right provider.

65 passed · 6m 39s of browser time · auth/oauth-providers.spec.ts

signin page provider buttons all provider buttons are visible and link to correct auth paths 7.7s
signin page provider buttons provider links carry the default redirect 4.8s
signin page provider buttons provider links carry the requested redirect 6.7s
signin page provider buttons provider links do not leak an origin parameter to the browser 6.1s
signin page provider buttons provider text labels are visible on desktop, hidden on mobile 8.6s
OAuth redirect flow clicking Google button redirects to accounts.google.com 7.6s
OAuth redirect flow clicking Facebook button redirects to facebook.com 8.5s
OAuth redirect flow clicking Microsoft button redirects to login.microsoftonline.com 8.2s
error handling UI oauth_cancelled displays cancellation alert 8.7s
error handling UI oauth_invalid displays failure alert 4.9s
error handling UI oauth_error displays error alert 6.3s
error handling UI token_expired displays expiry alert 4.7s
error handling UI token_invalid displays invalid link alert 4.7s

The site loads

release-critical
passed

A first-time visitor reaches the tenant home page and the sign-in page, and both render.

10 passed · 1m 11s of browser time · ui/page-loading.spec.ts

should load the homepage correctly 9.3s
should navigate to signin page 8.7s

What it looked like

Home page
Home page
Sign-in page
Sign-in page

Who the account belongs to

release-critical
not run

Sign-in resolves by provider subject id first and verified email second — never by email alone. This is the invariant behind the saved-card incident.

85 not run · 1m 20s of browser time · auth/identity-resolution.spec.ts

Nothing here ran — Simulator disabled. Start the dev server with ALLOW_DEV_AUTH_SIMULATION=true.

17 scenarios waiting on this
····· two different people without emails stay separate accounts 1.4s
····· the profile page lists the social accounts that can sign in as you 1.4s
····· the simulator refuses a non-allowlisted forwarded host 1.4s
····· provider returns no email microsoft without an email lands on the confirmation form 1.3s
····· provider returns no email facebook without an email lands on the confirmation form 1.4s
····· provider returns no email google without an email lands on the confirmation form 1.4s
····· provider returns no email creates NO user document — nothing is written before an address is proven 1.3s
····· provider returns no email does not establish a session 1.3s
····· provider returns no email the pending cookie is httpOnly and host-wide 1.3s
····· provider returns an email signs straight in without a confirmation step 1.4s
····· provider returns an email attaches the provider identity to the account 1.3s
····· provider returns an email a returning identity resolves to the same account 1.3s
····· name handling a provider that sent no names cannot sign in nameless 1.4s
····· name handling a first name with no last name is still incomplete 1.3s
····· name handling supplying the missing name completes the sign-in without an OTP 1.3s
····· name handling the name form requires both parts 1.4s
····· name handling seeds a blank name, then never overwrites it 1.4s

events/create-event.spec.ts

unmapped spec
not run

No journey description yet — add one in scripts/test-report/journeys.mjs.

25 not run · 24.5s of browser time · events/create-event.spec.ts

Nothing here ran — Simulator disabled. Start the dev server with ALLOW_DEV_AUTH_SIMULATION=true.

5 scenarios waiting on this
····· an organiser creates a draft from the Events settings panel 1.9s
····· a slug that is already taken blocks creation 1.4s
····· a draft is invisible to the public until it is published 1.3s
····· an organiser can read their own draft 1.3s
····· a member without events.manage sees no settings tile and cannot create 1.4s

events/get-tickets.spec.ts

unmapped spec
not run

No journey description yet — add one in scripts/test-report/journeys.mjs.

65 not run · 1m 5s of browser time · events/get-tickets.spec.ts

Nothing here ran — Simulator disabled. Start the dev server with ALLOW_DEV_AUTH_SIMULATION=true.

13 scenarios waiting on this
····· a visitor is sent to sign in and comes back to the event 2.0s
····· a member claims the free ticket and lands on it 1.3s
····· a free ticket is one per person, so a second claim returns the first 1.9s
····· a family ticket asks who is coming, inside its own card and within bounds 1.4s
····· two family tickets get one row each, told apart by number 1.3s
····· the server refuses a headcount outside the bounds, whatever the panel sent 1.4s
····· paid tickets go to checkout with the right lines and total 1.3s
····· a paid ticket cannot be claimed through the free path 1.3s
····· the per-user cap holds on the server 1.3s
····· a members-only ticket is withheld from a non-member, who is offered a membership 1.4s
····· a fully booked event offers no tickets 1.9s
····· an event whose sales have ended offers no tickets 1.4s
····· a draft event is not there to buy from 1.3s

events/ticket-types.spec.ts

unmapped spec
not run

No journey description yet — add one in scripts/test-report/journeys.mjs.

25 not run · 24.2s of browser time · events/ticket-types.spec.ts

Nothing here ran — Simulator disabled. Start the dev server with ALLOW_DEV_AUTH_SIMULATION=true.

5 scenarios waiting on this
····· an organiser adds a family ticket with a description and headcount bounds 1.4s
····· the server clamps hostile bounds rather than storing them 1.3s
····· a members-only ticket is marked as such on the public page 1.4s
····· publishing a draft makes it public 1.3s
····· dates set through the API show on the public page 1.4s

Switching language

passed

Choosing a language changes the rendered text and the choice survives navigation.

30 passed · 5m 30s of browser time · i18n/locale-switching.spec.ts

should navigate to settings/language page 21.0s
should switch from English to Greek and verify locale change 11.4s
should switch from English to French and verify locale change 11.5s
should switch from English to Spanish and verify locale change 13.8s
should persist locale choice across page navigation 15.0s
should handle invalid locale gracefully 8.7s

What it looked like

Language settings
Language settings
Greek locale applied
Greek locale applied
French locale applied
French locale applied
Spanish locale applied
Spanish locale applied
German locale persisted
German locale persisted
Invalid locale falls back
Invalid locale falls back