Files
tel/playwright.config.ts
zeekayandHanzo Dev 70d3f4bcf0 a console of its own, on console.lux.tel
Telecom keeps its own console rather than becoming a section of the general cloud
one: sidebar of suites, top bar, highlight band, explore grid, what's new. The
reference leans on a green gradient and coloured chips; this is inverted to the
brand — black ground, white type, hairlines — and hue is reserved for STATE, which
is the only thing on the page anyone has to act on. The wordmark is LUX tel and the
AI affordance is the triangle rather than a sparkle: it is the one glyph this
product already owns.

The suites are PROJECTED from the catalog, not a second list. A console that lists
different products from the site that sold them is how the two drift, and the drift
is always found by a customer. An unknown slug throws at import rather than quietly
dropping a nav entry.

One bundle, three hosts. console.lux.tel serves the same image with the console at
its root, so the callback is derived from the ORIGIN rather than hardcoded — IAM
validates redirect_uri exactly, and a constant would send half the sign-ins to the
other host mid-flow. Both spellings are registered on the lux-tel application.

Route groups split the chrome: (site) carries the header and footer, (console)
carries the sidebar and top bar, and the root layout is html and body. Imports moved
to the @/ alias the tsconfig already declared and nothing used — adding a route
group had just broken fifteen relative paths, and it can no longer.

Two harness defects fixed, both of which had been reporting a broken product. The
Playwright web server was still `python3 -m http.server`, which 301s /console to
/console/ and answers with a DIRECTORY LISTING — the console rendered as a file
index and eight of ten pages were unreachable. And reuseExistingServer was true, so
a stale server from an earlier run got adopted silently. The suite is 10/10 in 5.4s
where it was 38.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-10 12:34:03 -07:00

36 lines
1.3 KiB
TypeScript

import { defineConfig, devices } from '@playwright/test'
/*
Runs against the static export by default; point it at the deployed site with
BASE_URL=https://lux.tel pnpm test:e2e
*/
const baseURL = process.env.BASE_URL ?? 'http://localhost:3000'
export default defineConfig({
testDir: './e2e',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
reporter: 'list',
use: {
baseURL,
trace: 'on-first-retry',
},
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
webServer: process.env.BASE_URL
? undefined
: {
// `python3 -m http.server` cannot serve this export: `next export` writes
// console.html AND a console/ directory beside it, and python answers
// /console with a 301 to /console/ and then a DIRECTORY LISTING. Eight of
// ten pages were unreachable and the console rendered as a file index.
// e2e/serve.mjs resolves the way the real static server does.
command: 'node e2e/serve.mjs',
url: 'http://localhost:3000',
// FALSE, deliberately: `true` reuses whatever already holds :3000, which
// twice has been a stale server from an earlier run answering with the
// listing above — a failure nobody reads as "wrong server".
reuseExistingServer: false,
},
})