zudo-composer
GitHub repository

Type to search...

to open search from anywhere

Browser Lanes

The browser acceptance lanes for hosts, development servers, sites, demos, and static output.

One lane, one port

Every browser lane owns one machine-global port and one server. Stop other lanes before starting one; an occupied port is a failed precondition, not a reason to let the server silently select another port. The lane scripts and Playwright configs are the executable source of truth:

LaneCommandPortConfigWhat it proves
Hostcorepack pnpm test:browser:host4173playwright.host.config.tsRuns zudo-composer dev through the package's installed-bin shape against a disposable host, after activating the Sample Studio project, and exercises the tests/browser authoring proof (excluding the SiteProject spec).
Developmentcorepack pnpm test:browser:dev5173playwright.dev.config.tsRuns this repository's own pnpm dev with disposable release, Assets, Composition, and CMS roots, the Assets root pre-seeded with the sample's committed bytes, and exercises tests/browser-dev.
SiteProjectcorepack pnpm test:browser:site-project4174playwright.site-project.config.tsVerifies the Sample Studio static artifact and frozen route parity, activates the committed project into isolated roots, and crawls site-project-acceptance.pw.ts against the repository Vite app.
Demoscorepack pnpm test:browser:demos4176playwright.demos.config.tsVisits each of demo-sample, demo-webshop, demo-landing, and demo-blog in turn through its installed host dev server, crawls every verified static route, and performs the demo's one mock interaction.
Demo editorcorepack pnpm test:browser:demo-editor [sample|shop|landing|blog]4175playwright.demo-editor.config.tsServes each prepared per-host dist-editor artifact in turn, verifies its demo-editor-manifest.json, and runs the editor acceptance proof.

The demo-editor and packed-host smoke proofs share port 4175 and must run serially, so they cannot overlap. The reserved set is therefore 4173, 4174, 4175, 4176, and 5173. The demo packages' interactive one-off servers use 4181 (Webshop), 4182 (Landing), 4183 (Blog), and 4184 (Sample Studio); those are not browser-lane ports.

Preparation and artifact rules

The SiteProject and demos lanes consume artifacts prepared before the browser run:

corepack pnpm demo:build-sites
corepack pnpm test:browser:site-project
corepack pnpm test:browser:demos
corepack pnpm demo:build-editors
corepack pnpm test:browser:demo-editor

The four static-site artifacts and four editor artifacts have separate target contracts. Use corepack pnpm demo:build-sites before the SiteProject/demos lanes and corepack pnpm demo:build-editors before the editor lane.

Preparation builds and verifies; browser lanes only read the verified bytes and never rebuild them. Before using a route, the SiteProject and demo runners check the artifact manifest, file checksums, source/tool identity, Assets, and sitemap route parity. A stale or missing artifact fails with the preparation instruction rather than falling back to a newly generated route list. The editor runner likewise requires each host's dist-editor/demo-editor-manifest.json before it starts its static server.

What each proof isolates

The host lane creates a fresh host under the OS temporary directory, links the package as a host dependency, runs the installed seed command, and removes the tree afterward. This proves the installed-host boundary rather than a Vite preview of the checkout. The development lane gives each spec file a fresh set of disposable filesystem roots so one spec's writes cannot leak into the next invocation, with the Assets root pre-seeded from the sample's committed bytes so its bootstrapped content's asset references resolve.

The SiteProject lane reads packages/demo-sample/dist-site/site-manifest.json through its verified-manifest helper, compares the authoring routes with Studio's frozen production route data, and seeds a release in temporary roots. The demos lane copies each of the four committed cms/ trees into a temporary host-local directory, seeds a separate release root, starts one demo at a time on 4176, and checks every route from that host's verified site-manifest.json. It never authors into a committed CMS tree. The demo-editor lane serves the four corresponding dist-editor artifacts serially on 4175 and does not rebuild them.

Both host and development configs route specs by filename. *.coarse.pw.ts runs only in the touch-capable 390x844 coarse project, while *.responsive.pw.ts runs in both coarse and desktop projects. The coarse-only rules are disabled on a fine pointer, so the suffix is part of the proof and not just a label. Traces, screenshots, and videos are retained on failure in the ignored test-results/ tree.

For the assertions behind the lanes, see the workspace acceptance operator guide and the static-site build section.

Revision History

CreatedUpdated