{"_id":"@conclave-ai/smoke-verifier","name":"@conclave-ai/smoke-verifier","dist-tags":{"latest":"0.16.2"},"versions":{"0.16.2":{"name":"@conclave-ai/smoke-verifier","version":"0.16.2","description":"Conclave AI smoke verification — runs Playwright user-flow checks against a live deploy URL after autofix push, catches runtime regressions that build+test verify cannot (e.g. missing env vars, paused backend, broken third-party calls).","license":"FSL-1.1-Apache-2.0","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"yaml":"^2.6.0","@conclave-ai/core":"0.14.2"},"peerDependencies":{"playwright":"^1.49.0"},"peerDependenciesMeta":{"playwright":{"optional":true}},"devDependencies":{"typescript":"^5.7.0"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsc -p tsconfig.json --watch","typecheck":"tsc -p tsconfig.json --noEmit","test":"node --test test/*.test.mjs","clean":"rm -rf dist .tsbuildinfo"},"_id":"@conclave-ai/smoke-verifier@0.16.2","_integrity":"sha512-Kq9hthVuPAP6FFw7i0NpWGusl5je7RZb4kgpcWPGhru3hlrtbnLhJxphu2DGozoeZtTBT9YRgpfh5yhe7wKbOQ==","_resolved":"/tmp/38773de81b09ddc476460e662dfd2b56/conclave-ai-smoke-verifier-0.16.2.tgz","_from":"file:conclave-ai-smoke-verifier-0.16.2.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Kq9hthVuPAP6FFw7i0NpWGusl5je7RZb4kgpcWPGhru3hlrtbnLhJxphu2DGozoeZtTBT9YRgpfh5yhe7wKbOQ==","shasum":"19c5b44c50f4965c919d61aa938533f93f7e3cba","tarball":"https://registry.npmjs.org/@conclave-ai/smoke-verifier/-/smoke-verifier-0.16.2.tgz","fileCount":8,"unpackedSize":59901,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH1n2O2pqq9Hdjb3J3M0JMuG3SgEMrr9xPMi15mpw7KcAiA8FQNgNYXQWc8pv16+vrKd228m5WxOPk/e7+ai+L+j/w=="}]},"_npmUser":{"name":"ai-conclave","email":"seunghunbae@3svs.com"},"directories":{},"maintainers":[{"name":"ai-conclave","email":"seunghunbae@3svs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/smoke-verifier_0.16.2_1778417040765_0.15563585153836668"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T12:44:00.674Z","0.16.2":"2026-05-10T12:44:00.890Z","modified":"2026-05-10T12:44:01.112Z"},"maintainers":[{"name":"ai-conclave","email":"seunghunbae@3svs.com"}],"description":"Conclave AI smoke verification — runs Playwright user-flow checks against a live deploy URL after autofix push, catches runtime regressions that build+test verify cannot (e.g. missing env vars, paused backend, broken third-party calls).","license":"FSL-1.1-Apache-2.0","readme":"# @conclave-ai/smoke-verifier\n\nPlaywright-driven smoke checks against a live deploy URL after autofix\npush. Closes the gap between \"build + tests pass\" and \"user-facing flows\nactually work\".\n\n## Why\n\nConclave's existing autofix loop verifies:\n\n- ✅ `pnpm build` succeeds\n- ✅ `pnpm test` passes\n- ❌ **the deployed app actually loads**\n\nThat last one is the gap. Real failures we've seen in the wild:\n\n- Supabase free-tier auto-paused → `TypeError: fetch failed` on every\n  API call (eventbadge, 2026-05-07)\n- Env var missing on Vercel after migration\n- Third-party API quota hit\n- DB migration not applied to remote\n- `next.config.mjs` change broke the prod build but not the local one\n\nA 30-second Playwright smoke against the real deploy preview catches\nall of those before the verdict ships to the user.\n\n## Quick start\n\nAdd `.conclave/smoke.yaml` to your repo:\n\n```yaml\n# Smoke checks for eventbadge — runs after every autofix push, against\n# the deploy preview URL.\nsteps:\n  - name: home page loads\n    goto: /\n  - expect-status: 200\n  - expect-text:\n      text: \"이벤트 만들기\"\n\n  - name: create-event flow loads\n    goto: /events/new\n  - expect-status: 200\n  - expect-text:\n      selector: \"form\"\n      visible: true\n```\n\nConclave's autofix pipeline reads it (when present) and runs the steps\nagainst the freshly-deployed preview URL after `git push`. The result\nbecomes part of the cycle-end report:\n\n```\n✅ Build + tests passed (cycle 1/3)\n✅ Smoke verified live (3/3 steps)\n   ✓ home page loads (200)\n   ✓ create-event flow loads (200)\n   ✓ form visible\n```\n\nOr, if smoke fails:\n\n```\n✅ Build + tests passed (cycle 1/3)\n❌ Smoke broken on live deploy\n   ✗ home page loads — got 503, want 200\n   ⊘ create-event flow loads (skipped after halt)\n→ Cycle marked as deploy-broken — handing back to human\n```\n\n## Step kinds\n\n| Step | Effect |\n|---|---|\n| `goto: <path>` | Navigate to `<base-url><path>` |\n| `expect-status: <N>` | Most-recent goto must have returned `N` |\n| `expect-text: { text, selector?, visible? }` | Selector contains text, OR page contains text |\n| `click: <selector>` | Playwright `page.click(selector)` |\n| `fill: { selector, value }` | Playwright `page.fill` |\n| `wait-for: <selector>` | `page.waitForSelector` (with optional `timeoutMs`) |\n\n## Config keys\n\n```yaml\nstepTimeoutMs: 15000      # per-step timeout (default 15s)\ncontinueOnFailure: false  # halt on first failure (default) vs collect all\nuserAgent: \"Conclave AI smoke verifier\"\nsteps: [...]\n```\n\n## AI Slop check (v2)\n\nBeyond pass/fail steps, smoke verifier scans deployed HTML for known\nLLM placeholder leakage:\n\n- `// TODO: implement` left in source\n- `Lorem ipsum` placeholder text\n- `your-api-key` / `your-secret` literal strings\n- `<INSERT_X>` markers\n- `I would suggest...`, `This is a placeholder` AI commentary\n\nHits surface in the report alongside step failures. Useful for catching\nworker-generated changes that \"look complete\" but contain placeholder\ncontent.\n\n## Wiring into autofix-pipeline\n\nHook is opt-in via `.conclave/smoke.yaml` presence. When file is absent,\nsmoke verification is skipped silently and the cycle behaves as today\n(build + tests only).\n\n## Why not just use Vercel deploy preview's built-in checks?\n\nVercel doesn't run e2e tests on previews — it just serves the static\nbuild. Smoke verifier specifically tests the **live runtime** behavior\nof the user-facing flows that are most often broken by autofix.\n","readmeFilename":"README.md","_rev":"1-aabffc5151b35125280e6a91300dfd92"}