The scheduled refresh on 24 August took the star catalogue from 68 388 rows to 447 410 and from 820 kB to 5.4 MB. No branch in the seven-PR chain had ever seen it -- they were all cut before -- so nothing tested the combination until the chain landed on main. Two things broke there. The neighbour ring named Barnard's Star, and the spec clicked it by name. The refresh is a Gaia DR3 merge that carries the same physical star twice: Proxima Centauri at 1.296 pc and Gaia DR3 5853498713190525696 at 1.302 pc are one star, as are Barnard's Star at 1.824 and Gaia DR3 4472832130942575872 at 1.828. The extra row pushed Barnard's from fourth-nearest to fifth, off a ring that shows four. The ring is doing exactly what it says; the spec was asserting the catalogue's contents. It now reads whichever star the ring names and follows that one, so the next refresh cannot demote it. Four other assertions were timing out at Playwright's default five seconds -- not because anything was wrong, but because every one of these tests boots that catalogue and the suite boots several at once on a software rasterizer. The heavy waits already carried explicit longer timeouts; the default now matches. Capping the worker count would have worked too, and would have cost every run the time whether or not the machine needed it. npm test 607/607, npx playwright test 16/16 at the default worker count. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014fcUfL82nvyh9VebX1Fz6w
End-to-end tests (Playwright)
These tests run the real Angular dev server in a real Chromium browser, covering interactions
that unit/component tests (under src/**/*.spec.ts, run via npm test) can only approximate
under jsdom — most importantly the galaxy↔system camera-flight transitions (real WebGPU/
WebGL2 initialization + raycaster picking) and cross-view search navigation.
Running
npm run e2e # headless run against a freshly started dev server
npx playwright test --ui # interactive UI mode
npx playwright show-report
playwright.config.ts starts npm run start -- --port=4300 automatically and waits for it to
respond before running the suite (webServer.reuseExistingServer is true outside CI, so an
already-running ng serve on port 4300 is reused instead of starting a second one). Port 4300
is used instead of the Angular CLI's conventional 4200 to avoid colliding with an unrelated
server a developer might already have running there.
Notes
- The Sun (
Sol) is always placed at the coordinate-system origin (x=0,y=0,z=0), which is exactly where the default galaxy-view camera looks.camera-flight.spec.tsrelies on this to reliably click-select it by clicking the center of the canvas, without needing pixel-perfect knowledge of the star field's on-screen layout. - Data (bootstrap fetch of
stars.bin/stars-index.json/bodies.json/exoplanets.json/deepsky.json) loads asynchronously after the page loads, so tests poll (re-click/re-check) rather than assume the scene is interactive immediately afterpage.goto(). deepsky.jsonis the one dataset the scene treats as optional: it only feeds the decorative backdrop, so a failure to load it is logged and the star field comes up regardless.