Repository navigation
#542 AC2: fix the six Svelte-port gaps surfaced by e2e-shards - #583
Merged
MaximumTrainer merged 1 commit intoOct 25, 2026
Merged
Conversation
Six Playwright spec files were in the next-branch e2e-shards ignore list
because the Svelte port had regressed from the React originals. All six
are fixed here, and the ignore list shrinks back to the WebGL/engine-only
exclusions.
Root causes
* No telemetry boot in the Svelte app. `main.tsx` called `startTelemetry()`
before anything rendered and `checkBootCrash()` right after, plus wired
the `__VIRTUALROW_SIMULATE_BOUNDARY__` test seam. The Svelte layout
skipped all three, so `sessionStorage` never carried a `run-start`
event, and `crashBoot` never reported a prior crash. +layout.svelte now
performs the same boot sequence in its top-level script (same order as
`main.tsx`), guarded by `typeof window !== 'undefined'` since the
layout script runs on module evaluation.
* `.rower3d-canvas-container` disappeared under the "needs WebGPU"
screen. The AC11 "unavailable" branch replaced the entire stage, so
specs that assert on `.rower3d-canvas-container` after
`.btn-try-demo` (crash-detection, crash-telemetry) raced a 30 s wait
against a container the engine's decline had already removed from the
DOM. The stage is now always mounted when a session is active, and
the WebGpuUnsupported screen sits on top as an overlay — same user
experience, container still queryable.
* `window.__SELECTED_ROUTE` was declared in the shared types but never
assigned. App.tsx published it from a `useEffect([selectedRoute])`
under `__PLAYWRIGHT_TESTING`; the Svelte RoutesStore now does the
same from `#select`, which is the one assignment point. Covered by
two new tests on RoutesStore.
* No `VITE_INTERVALS_CLIENT_ID` in next-branch-ci.yml. The main
workflow sets `VITE_INTERVALS_CLIENT_ID: playwright-e2e-client`;
without it, `getClientId()` throws at build time's first dereference
and `exchangeCode`'s catch block tags every failure as the `network`
class, so every alert copy / `data-auth-error-class` test fails. The
`e2e-shards` job env block now matches the main workflow, and
`LIBGL_ALWAYS_SOFTWARE=1` lets the leaflet map's WebGL layer still
render through SwiftShader.
Specs re-enabled
Six spec files (17 tests) come back out of the testIgnore list:
* auth.spec.ts
* intervals-login-failure.spec.ts
* rownative-track-attach.spec.ts
* crash-detection.spec.ts
* crash-telemetry.spec.ts
* login-integration.spec.ts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q5D9BTXmu7SeMa3LghJD8b
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
Six Playwright spec files were in the next-branch
e2e-shardsignore list(added by #582) because the Svelte port had regressed from the React
originals. All six are fixed here, and the ignore list shrinks back to
the WebGL-era + engine-only exclusions.
Root causes & fixes
No telemetry boot in the Svelte app.
main.tsxcalledstartTelemetry()before any render andcheckBootCrash()rightafter, plus wired the
__VIRTUALROW_SIMULATE_BOUNDARY__test seam.The Svelte
+layout.svelteskipped all three — sosessionStoragenever carried a
run-startevent, andcrashBootnever reported aprior crash. The layout now runs the same boot sequence in its
top-level script.
.rower3d-canvas-containerdisappeared under the "needs WebGPU"screen. The AC11 "unavailable" branch replaced the entire stage, so
specs that assert on
.rower3d-canvas-containerafter.btn-try-demo(crash-detection, crash-telemetry) raced a 30 s waitagainst a container the engine's decline had already removed. The
stage is now always mounted when a session is active, and
<WebGpuUnsupported>sits on top as an overlay — same UX, containerstill queryable.
window.__SELECTED_ROUTEdeclared but never assigned. App.tsxpublished it from a
useEffect([selectedRoute])under__PLAYWRIGHT_TESTING; the SvelteRoutesStorenow does the samefrom its one
#selectassignment point, covered by two new tests.VITE_INTERVALS_CLIENT_IDmissing from next-branch-ci.yml. Themain workflow sets
VITE_INTERVALS_CLIENT_ID: playwright-e2e-client;without it,
getClientId()throws andexchangeCode's catch tagsevery failure as the
networkclass — so every auth alert-copy /data-auth-error-classtest fails identically. Thee2e-shardsjobenv block now matches the main workflow, and
LIBGL_ALWAYS_SOFTWARE=1lets the leaflet / MapLibre WebGL layer still render through
SwiftShader.
Specs re-enabled (17 tests, 6 files)
auth.spec.tsintervals-login-failure.spec.tsrownative-track-attach.spec.tscrash-detection.spec.tscrash-telemetry.spec.tslogin-integration.spec.tsTest plan
tsc -p tsconfig.app.json --noEmitclean.npm run lintclean.routesStore.svelte.test.tscover the__SELECTED_ROUTEpublish under / without__PLAYWRIGHT_TESTING.e2e-shards 1/2and(2/2)on this PR run the six re-enabledspec files and go green.
Generated by Claude Code