Repository navigation
test: website e2e as Markdown specs in the ui-verify grammar; smoke every CLI command and MCP tool - #700
test: website e2e as Markdown specs in the ui-verify grammar; smoke every CLI command and MCP tool#700dash0-dev[bot] wants to merge 19 commits into
Conversation
…site One manifest entry per page (src/routes.ts) generates the page tests; a vitest guard fails when a page.tsx under packages/web has no entry. Public pages run signed out against a local build; dashboard pages also get a signed-out redirect check, and render checks when a test user is configured. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…dds one without a check - packages/cli/test/smoke: a case manifest that runs the real lorekit binary for all 32 commands, in an offline lane (throwaway HOME, no network) and a remote lane (live endpoint, per-run scope, self-cleaning, refuses prod). - cli-smoke.test.mjs runs the offline lane inside cli:test and guards coverage: every command, alias, local stdio MCP tool and hosted MCP tool needs a check. - smoke-mcp-tools.mjs: add the missing memory.protect, policy.update and groom.run coverage, and report which tools each run exercised. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
The Dash0 GitHub App cannot push .github/workflows/* (no workflows permission). Apply with: git am .github/pending-workflow-changes.patch Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…mmar Adding a website test is now a Markdown block in packages/web-e2e/specs/, in aw-tester's WHEN/THEN grammar — the body of a <!-- ui-verify:v1 --> PR block — instead of TypeScript. A zero-dep parser (src/spec/grammar.cjs) runs it deterministically, refusing what needs judgment (semantic:, intent specs, continues-from) by name. spec:import / spec:export move specs to and from ui-verify PR blocks and aw-tester's compiled routes. specs.test.ts parses every file and fails a PR when a page.tsx has no spec. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
- CLI smoke and the new hosted MCP check mint keys as smoke-<epoch-ms>-<name>, the shape smoke-cleanup.mjs recognises, so a killed run leaves nothing the sweeper cannot find on the shared preview project. - The remote scopes case asserts the run's scope is listed (it asserted only that a JSON object came back). - The wrong-password journey never targets production auth. - The grammar reads 'signed-in' (hyphenated) as signed in and refuses 'has text', which would silently read as an attribute. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…oped to steps Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
🟠 1 finding — 1 blockingRe-review at 5ec143d: both earlier notes are fixed. New: journeys.md Specs 1–2 click Docs/Blog links that appear twice on the landing page, so the strict locators fail in every lane. Blocking: 1 blocking finding (see inline) 1 advisory finding below the confidence bar — see Less certain below. Checked: 34 of 34 changed files read · 9 of 9 dependent files traced · 10 possible issues → 1 confirmed → 1 posted Progress: open review threads 2 → 1 → 1 → 2 → 1 · blocking 0 → 0 → 1 → 0 → 1 across the last 5 reviews
What this change reaches — 14 changed exports · 9 dependent files · 9 checkedflowchart LR
subgraph pr["Changed in this PR"]
s1["NO_USER_REASON<br/>added"]:::changed
s2["TARGET<br/>added"]:::changed
s3["USER_SOURCE<br/>added"]:::changed
s4["BASE_URL<br/>added"]:::changed
s5["signInThroughTheForm<br/>added"]:::changed
s6["STORAGE_STATE<br/>added"]:::changed
smore["+8 more changed exports<br/>listed below"]:::changed
end
s1c1["packages/web-e2e/src/ · 2 files<br/>✓ checked"]:::ok
s1c2["packages/web-e2e/src/journeys/ · 2 files<br/>✓ checked"]:::ok
s2c1["packages/web-e2e/src/journeys/ · 2 files<br/>✓ checked"]:::ok
s2c2["packages/web-e2e/playwright.config.ts<br/>✓ checked"]:::ok
s2c3["packages/web-e2e/src/specs.e2e.ts<br/>✓ checked"]:::ok
s3c1["packages/web-e2e/src/ · 2 files<br/>✓ checked"]:::ok
s3c2["packages/web-e2e/src/journeys/ · 2 files<br/>✓ checked"]:::ok
s4c1["packages/web-e2e/playwright.config.ts<br/>✓ checked"]:::ok
s4c2["packages/web-e2e/src/support/fixtures.ts<br/>✓ checked"]:::ok
s5c1["packages/web-e2e/src/auth.setup.ts<br/>✓ checked"]:::ok
s5c2["packages/web-e2e/src/journeys/login.e2e.ts<br/>✓ checked"]:::ok
s6c1["packages/web-e2e/playwright.config.ts<br/>✓ checked"]:::ok
s6c2["packages/web-e2e/src/auth.setup.ts<br/>✓ checked"]:::ok
s1 --> s1c1
s1 --> s1c2
s2 --> s2c1
s2 --> s2c2
s2 --> s2c3
s3 --> s3c1
s3 --> s3c2
s4 --> s4c1
s4 --> s4c2
s5 --> s5c1
s5 --> s5c2
s6 --> s6c1
s6 --> s6c2
classDef changed fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
classDef ok fill:#e7f6ec,stroke:#16a34a,color:#14532d
classDef partial fill:#fef9c3,stroke:#ca8a04,color:#713f12
classDef unknown fill:#f3f4f6,stroke:#9ca3af,stroke-dasharray:4 3,color:#374151
classDef bad fill:#fde8e8,stroke:#dc2626,color:#7f1d1d
classDef warn fill:#fff4e5,stroke:#d97706,color:#78350f
classDef imports fill:#f8fafc,stroke:#64748b,stroke-dasharray:4 3,color:#1e293b
Less certain (1) — advisory, below the confidence bar
Review detailsNeeds attention
Found Quality — produced 10 → posted inline 1 · cleared 1 · carried forward 0 · deferred 0 · below-bar 1 Run full · 12 lines in delta · tier deep · depth checkout
Nothing to report — 0 files skipped.
|
Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
R17: type the ui-verify marker table instead of casting its version to any. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses the pr-reviewer report advisory by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…on is in play Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses the pr-reviewer report advisory by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses review comment by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Addresses the pr-reviewer report advisory by dash0-dev (pr-reviewer): #700 (comment) Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Spec numbers move when a spec is added or removed; the title does not. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Why
A merge should prove the core still works — every page of the website, every
lorekitcommand and every MCP tool — and adding a test should be trivial, in the same spec format/ui-verifyuses.What changed
packages/web-e2e— website tests are Markdown blocks inspecs/*.md, written in aw-tester'sWHEN/THENgrammar (the body of a<!-- ui-verify:v1 -->PR block). A zero-dependency parser runs them in Playwright and refuses, by line number, what it cannot check deterministically (semantic:, intent specs).spec:import/spec:exportmove specs to and from ui-verify PR blocks and aw-tester's compiled routes.specs.test.tsfails a PR when a spec does not parse or apage.tsxhas no spec; every signed-in spec also gets a generated "signed-out visitor goes to/login" check.packages/cli/test/smoke— all 32 commands through the real binary: offline insidecli:test, and against preview at deploy time.cli-smoke.test.mjsfails a PR when a command, alias or MCP tool has no smoke.scripts/smoke/smoke-mcp-tools.mjs— covers the three tools nothing called (memory.protect,policy.update,groom.run)..github/pending-workflow-changes.patch) — aweb-e2ePR job (local build + local Supabase, no secrets); Playwright on the staged production build before promotion and on lorekit.io after; the CLI lane insmoke-previewand/preview. A failed test-account sign-in only warns, so it never blocks promotion or rolls back, and deploy-time runs record no Playwright traces (a trace keeps headers and cookies, and this repo's artifacts are public).docs/smoke-tests.mdandpackages/web-e2e/specs/README.md.How to verify
pnpm nx test web-e2e && node --test packages/cli/test/cli-smoke.test.mjs— the guards plus the offline CLI/MCP lane. The browser suite and the remote CLI lane first run in CI once the patch is applied.Notes for reviewers
The Dash0 GitHub App cannot push
.github/workflows/*. Apply the wiring withgh pr checkout 700 && git am .github/pending-workflow-changes.patch && git rm .github/pending-workflow-changes.patch && git commit -m "ci: drop the applied workflow patch" && git push. Optional repo secrets (each gate skips with a warning while unset):VERCEL_AUTOMATION_BYPASS_SECRET,LOREKIT_TESTING_USER_NAME/LOREKIT_TESTING_USER_PW.