| Site | URL | Platform | Last status | Last tested | Actions |
|---|
Plain-language walkthrough for the console. Follow the numbered steps in order the first time.
Admiral Web QA is a shared toolkit that checks websites the same way every time.
profiles/ with JSON settings (URL, routes, selectors, budgets, tracking).adm-web-qa).npm run console.https://adm-qa-app.development-server.dev/ in your browser.Or start with Docker: docker compose up console.
Layout: home is the Sites table with an Active tests sidebar. Use the footer links for How to use and About limits. Open a site for its own results, runs, and report page.
Each row is a website profile. You can open the site, run eligible suites, open the expanded report, or delete the profile (also removes run history, reports, and related artifacts).
profiles/<key>/ and discovers routes (public crawl/sitemap, plus login-gated pages when credentials are configured)./sites/<key>) to enter that website workspace.Delete permanently removes that profile folder. Confirm carefully.
Routes are the pages the suites will visit. Smoke, a11y, and SEO all depend on this list.
How discovery works (when you add a website or click Rediscover):
artisan / routes/web.php → all static GET routes into routes.json.routes.json (smoke/seo/a11y).routes.auth-discovered.json (any path shape, not only /admin). Used by the auth suite.Login-walled apps often show only a handful of public routes until authenticated discovery runs. Use Requires login when adding the site, or npm run qa:auth then Rediscover.
Sensitive paths (checkout, cart, payment, register, logout) may land in a needs-approval file. Do not invent checkout or payment tests unless someone approved a safe path.
Always start with suite smoke and pack smoke. Fix smoke before running heavier suites.
smoke, Suite = smoke.The Recommended next tests panel on each site reflects profile-wide coverage gaps and offers one-click runs for perf, security, checkout, crux, and retest-perf where eligible.
Use Run all tests to queue every eligible suite for this site (one run per suite). Missing security scope, load scenarios, RUM config, and tracking defaults are auto-prepared. New sites queue run-all automatically after add.
Pick one suite per run (or use CLI all later). Plain meaning of each:
| Suite | What it checks |
|---|---|
smoke | Per route: HTTP 2xx, body visible, non-empty title, no horizontal overflow, no actionable console/page errors (desktop + mobile). |
a11y | WCAG-tagged Axe on each route + keyboard focus checks. failImpacts block; warnImpacts surface as Medium findings. Configure wcagTags, excludeRules, and keyboard.maxRoutes in budgets.json. |
seo | Title/meta/H1/canonical basics; deeper checks if the profile enables them. |
tracking | Analytics scenarios vs your taxonomy (needs confirm + checkout/write confirm when applicable). |
pagespeed | Lighthouse scores and metrics vs budgets. |
network | Request/transfer budgets for the page. |
functional | Profile-specific journey tests under the site folder (needs confirms). |
auth | Login-gated account/admin pages from routes.auth-discovered.json (needs auth.enabled + session + confirm). |
checkout | Controlled checkout harness only when purchase policy allows it. |
crux | On-site RUM sample via rum-config.json (dataLayer or injected web-vitals). |
retest-perf | Re-runs network + Lighthouse after third-party or budget fixes. |
security | Scoped ZAP scan — passive by default; set zapMode active + confirm for full dynamic DAST. |
perf | k6 load test - staging-safe, needs perf scenarios + confirm. |
Axe is not a full WCAG certificate. GTM script presence is not proof an event fired. See About limits for more.
Pack ≠ suite. Pack (smoke / regression / full) is a label for ops — release checklist and run metadata. It does not by itself change which Playwright checks run. You still choose the suite separately.
full.Example: Pack = regression + Suite = smoke still runs only the smoke suite. To get a11y/SEO/tracking, pick those suites (or Run all).
From the smoke storefront test, each route (for example home) is checked roughly like this:
page.goto finished with an HTTP 2xx final response. Fails on null response, 4xx, or 5xx. A soft-404 that still returns 200 can pass this step.<body> exists and is visible (not hidden / zero-size) within the default timeout.document.title, no body horizontal overflow, and no actionable console.error / uncaught page errors (minus allowlist patterns in selectors.json).Together: the URL loaded successfully and produced a visible HTML page, without obvious JS/layout smoke failures.
Default smoke does not fill username/password. It opens each route unauthenticated unless a saved session exists.
profiles/<key>/credentials.enc.json and tries to sign in immediately.QA_CREDENTIALS_KEY. Generate it once and keep it in the runtime secret store; the console will not write keys to disk.artifacts/auth/<profile>.json. Playwright auto-loads that storage state for suites. Do not commit auth storage or credential files.npm run qa:auth (uses encrypted credentials, or legacy passwordEnv).routes.auth-discovered.json — any path shape, not only /admin.npm run qa -- --profile <key> --suite auth) to exercise those login-gated routes. npm run qa:auth only creates the session file; it is not the suite.only-on-failure / retain-on-failure).final-screenshot.png per scenario as evidence (including on pass)./sites/<key>)./sites/<key>/playwright-report).npm run report:allure:open — do not rely on opening the raw HTML via file://.Opens as a real page at /sites/<key>/reports/<runId> with the console header and a light dashboard (stats, suite scoreboard, charts, findings). Downloads still write under artifacts/reports/<runId>/.
CLI equivalent: npm run report:full -- --profile your-key --expanded. Numbers come from artifacts/ only — the report never invents findings.
Past runs for this website only appear as a list. Click one to load that run’s summary into Results.
This is not a free shell. Only allowlisted project commands run (for example qa, typecheck, adapters).
qa --profile your-key --suite smoke.Prefer the website Start run / Run all tests queue for structured jobs. Use Terminal when you want a live log stream.
CLICKUP_API_TOKEN - never paste tokens into tickets or the UI.Open the footer About limits link for evidence boundaries: what each suite does not prove, suite caveats, and budget enforcement mode.
*.test HTTPS, native runs often need QA_IGNORE_HTTPS=true (PowerShell: $env:QA_IGNORE_HTTPS="true").Same runner outside the UI (from the toolkit root):
npm run qa -- --profile your-key --suite smoke npm run qa -- --profile your-key --suite a11y npm run report:full -- --profile your-key npm run discover:routes -- --url https://example.com --key your-key --write npm run init:profile -- --key acme --url https://acme.example --platform shopify
Docker (hosted URLs): set QA_PROFILE and BASE_URL to the profile URL when using Compose.
Classify before fixing randomly:
profiles/, then re-run smoke.Smoke green (or understood failures) first - then expand to a11y, seo, tracking, pagespeed.
| Suite | Caveat |
|---|
—
—
For controlled checkout, set purchaseApproved in profile.json and confirm Controlled-test policy before running.
Playwright report · Allure report
| Status | Project | Title | Duration | Detail | Report |
|---|
| Severity | Title | Class | Status |
|---|
—
Allowlisted project commands only — not a free shell.
Idle
Token is read from CLICKUP_API_TOKEN (server env).
Ready = layered checklist — not WCAG, SEO, or tracking certification.
—
Login is disabled — profile settings cannot be changed here.
Password is encrypted in the profile. A session file is created so Run all can use logged-in pages.
New sites automatically queue every eligible test suite — no extra confirmations on staging-like hosts.
Queues every eligible suite for this site (one run per suite). Security scope, load scenarios, and RUM config are auto-prepared when missing. Checkout still requires purchase approval in the profile.