Browser E2E (ign e2e)
Two verbs. ign e2e doctor diagnoses; ign e2e init scaffolds. There is
deliberately no ign e2e run — the scaffold's own npm test is the
runner, and wrapping it would put this CLI in the business of proxying
Playwright's reporter, flags, and exit codes.
ign e2e doctor # what's missing?
ign e2e init ./e2e --yes # scaffold + npm install
cd e2e && IGNITION_PASSWORD=… npm test
What the scaffold ships. Seven members, embedded in the binary:
package.json (one dev dependency — @playwright/test),
playwright.config.mjs, global-setup.mjs, lib/gateway.mjs,
tests/example.spec.mjs, .gitignore, and a README.md documenting
every environment variable it reads.
What global setup does. Two steps, both delegating to this CLI so the scaffold never reimplements the gateway's login dance or its test protocol:
ign session login --json→ writesdata.storage_stateto.auth/state.json, whichplaywright.config.mjspointsuse.storageStateat. Every browser context therefore starts already authenticated, and no test ever drives the login form.ign testing run --project NAME --json→ runs the gateway's own Jython suite FIRST and throws if the verdict is notpassed, aborting before a single page opens. A browser failure caused by broken gateway-side code is an expensive way to learn something one HTTP call already knew. Skip it withIGN_E2E_SKIP_GATEWAY_TESTS=1.
Both steps surface the CLI's own stderr and name its exit code: 3 a missing password, 5 rejected credentials, 6 a red suite.
The example suite is green on a fresh rig. It ships two tests: a tag
round trip through the testing routes (passes on any gateway with the
bundle deployed), and a Perspective shell check that test.skip()s —
naming --run-project — when the navigation answers 404. A gateway with
no views of your own must not produce a red run.
TLS. lib/gateway.mjs disables certificate verification only
when the gateway host is localhost, 127.0.0.1, or ::1, and prints
one warning to stderr when it does. A self-signed cert on your own
machine is a papercut; the same relaxation pointed at a remote gateway
silently removes the guarantee HTTPS exists to provide. The identical
guard is duplicated in playwright.config.mjs (for ignoreHTTPSErrors)
rather than imported — a cross-import between the runner config and a
test helper is a load-order hazard — and a Rust test renders both bodies
and asserts they name the same hosts and the same opt-in variable, so
the two copies cannot drift. For a remote gateway behind a private CA,
do not set IGNITION_ALLOW_INSECURE_LOCAL; point Node at the CA
with NODE_EXTRA_CA_CERTS=/path/to/ca.pem instead.
.auth/state.json holds a live session cookie. The scaffold's own
.gitignore lists the .auth/ directory, and its README names the file
and what it contains.