Stop the E2E suite asserting against the towers hostnames - #387
Conversation
Since 2026-09-14 a Cloudflare Origin Rule routes towers.retina.fm and staging-towers.retina.fm to tower-finder-service's own edge, so nothing this repo builds answers there. tower-finder.spec.ts was written against retina-server's bundle, and two of its assertions (the Tower Search tab, the results-table markup) fail against the service's UI. On staging that is a red E2E, which skips deploy-production; on production the same two failures would trip the E2E rollback and undo the deploy. The spec goes rather than being adjusted. Adjusting it would have this repo's E2E permanently assert another repo's markup, and the way that breaks is a rolled-back production. tower-finder-service's own Playwright suite already covers everything the file tested, against its own UI; the one test with no counterpart there asserts a tab bar that UI does not have. hosts.frontend goes with it. It named "the tower finder frontend", which after the flip is a host this repo does not serve, and it was also the suite's baseURL. hosts.map replaces it: the frontend/dist vhost every environment still has. The only other reader, the /api/config check in api.spec.ts, moves to the map host, where the route is served through our own towers-proxy.conf include; verified 200 on both staging-map and map.retina.fm. ClickUp 123zgec2wb0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Claude finished @Babissimo's task in 1m 52s —— View job Reviewing PR #387
ReviewVerified against the repo, not just the PR description:
No correctness issues found in the diff itself. I could not re-run One thing worth a second pair of eyes rather than a blocker: deleting |
The form looks elevation up as soon as coordinates are typed and writes the answer into the altitude field (SearchForm.tsx, the auto-lookup effect). Nothing asserted that: the unit tests and this suite both stub /api/elevation, the stub's own comment says it exists only so the request cannot reject noisily, and the deploy smoke only proves the route is up. The one test that did cover the behaviour lived in retina-server's suite and was deleted there in offworldlabs/retina-server#387, since that repo no longer serves this UI. This is that test, rehomed and made deterministic: the file-level mock answers 43, so the field must read 43. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The form looks elevation up as soon as coordinates are typed and writes the answer into the altitude field (SearchForm.tsx, the auto-lookup effect). Nothing asserted that: the unit tests and this suite both stub /api/elevation, the stub's own comment says it exists only so the request cannot reject noisily, and the deploy smoke only proves the route is up. The one test that did cover the behaviour lived in retina-server's suite and was deleted there in offworldlabs/retina-server#387, since that repo no longer serves this UI. This is that test, rehomed and made deterministic: the file-level mock answers 43, so the field must read 43. Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Why
Since 2026-09-14 a Cloudflare Origin Rule routes
towers.retina.fmandstaging-towers.retina.fmto tower-finder-service's own edge on 8443, so nothing this repo builds answers on those names.frontend/playwright.config.tsstill pointedhosts.frontendat them in both environments, andfrontend/e2e/tower-finder.spec.tsasserted retina-server's own bundle there.The first staging E2E since the flip (run 34956933515, after #384 unblocked the smoke gate) came back 104 passed, 2 failed, both in
tower-finder.spec.ts: the Tower Search tab and the results-table markup, neither of which the service's UI has. A red staging E2E skipsdeploy-production, so production has not deployed since 2026-09-14. Worse, production'shosts.frontendwastowers.retina.fm, also rule-captured, so the same two failures would have tripped thee2e-prodrollback and undone the first deploy to get through.What
tower-finder.spec.tsrather than adjust its two selectors. Adjusting would have this repo's E2E permanently assert another repo's markup, and the way that breaks is a rolled-back production. tower-finder-service's own Playwright suite (frontend/e2e/tower-finder.spec.tsthere, run in its CI) already covers eleven of the twelve tests against the UI it ships: header, form fields, no JS errors, HTML5 validation,source=auto, results table, no-results, error banner, Leaflet container, and a measured-frequencies test stronger than our toggle test. The Tower Search tab test asserts a tab bar that UI does not have. The one behaviour it did not cover, the altitude prefill from/api/elevation, is rehomed in Assert the altitude prefill from /api/elevation in the E2E suite tower-finder-service#34.hosts.frontendfrom the config and makehosts.mapthe suite'sbaseURL. The key named "the tower finder frontend", which is now a host this repo does not serve;mapis thefrontend/distvhost every environment still has. No spec uses a relativepage.goto, sobaseURLonly ever resolves a relative URL./api/configcheck inapi.spec.tsto the map host. That vhost includessnippets/towers-proxy.conf, so the request exercises our own proxy; on the towers host it would have been answered by the service's edge and proved nothing about this repo.Verified
npm run typecheck:e2eclean;pre-commit run --all-filesclean.curlto/api/configonstaging-map.retina.fmandmap.retina.fm: 200, JSON, andPOST /api/geocode404 onstaging-map(the discriminator: retina-server still owns that vhost).RADAR_API_KEY, no Access token)E2E_ENV=stagingE2E_ENV=prodThe skips are
nodes.spec.ts, which registers nothing without the key. The failures are all indashboard.spec.ts, which reads none of the changed keys:no JavaScript errors on login page load(both environments):waitForLoadState("networkidle")timing out under four parallel workers. It passes alone in ~2 s on both environments, and CI runs it with two retries.the admin vhost renders the admin console(staging): the Cloudflare Access login page, because the service token is a CI secret. The config'saccessHeaderscomment describes exactly this.Nothing on the towers hostnames is asserted any more, so the two rule-captured failures from run 34956933515 cannot recur, on staging or on production.
Not in this PR
The Tower Search surface in
frontend/src/App.tsxis now unreachable on every deployed environment:frontend/distis served on the towers, map and testmap vhosts only, and the map ones hide the tab viaisMapDomain. Retiring it, andHOST_MAINwith it, is the cleanup the claude-shared ADR2026-09-07-tower-search-ui-location.mddescribes in its §6; tracked on the ticket. The production smoke inci.ymlstill probestowers.retina.fmforGET /and the seam; those pass today because the service answers, but they are the same another-repo coupling #384 removed from staging.ClickUp Playwright's frontend host points at the rule-captured towers hostnames.
🤖 Generated with Claude Code