Use when you need to run safe install, build, lint, typecheck, test, startup, route checks, repair failures, and verify.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillry-testing-and-qa:52-smoke-test-and-repairThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run safe install, build, lint, typecheck, test, startup, and route checks; repair failures; and verify the result. Each gate runs in dependency order. When a gate fails, the smallest root-cause fix is applied and re-verified before the chain continues — no skipping ahead past a red gate, and no masking a real bug with a suppression comment.
Run safe install, build, lint, typecheck, test, startup, and route checks; repair failures; and verify the result. Each gate runs in dependency order. When a gate fails, the smallest root-cause fix is applied and re-verified before the chain continues — no skipping ahead past a red gate, and no masking a real bug with a suppression comment.
53-playwright-e2e-audit for browser flows, 59-build-and-typecheck-review for deep build config audits.package-lock.json to npm, pnpm-lock.yaml to pnpm, yarn.lock to yarn, bun.lockb to bun); read package.json scripts. Use the project's own scripts; do not invent commands.curl the health or primary route; assert the status code, then stop the process.npm ci, pnpm install --frozen-lockfile, yarn install --immutable) so lockfile drift surfaces instead of hiding.tsc --noEmit) and exited 0.@ts-ignore, eslint-disable, or try/catch{} was added to silence a real failure.dist/ or cache masking a failure).# npm shown; swap for pnpm/yarn/bun as detected by lockfile
set -e
npm ci # reproducible install (fall back to npm install if no lockfile)
npm run typecheck || npx tsc --noEmit # type gate
npm run lint # lint gate
npm run build # build gate
npm test # unit test gate (capture pass/fail counts)
# Startup + route smoke (kill the server even if curl fails)
npm run start & SRV=$!
for i in $(seq 1 15); do
curl -fsS http://localhost:3000/health && break || sleep 1
done
curl -fsS http://localhost:3000/health || curl -fsS http://localhost:3000/
kill "$SRV" 2>/dev/null
# Detect package manager from lockfile
ls package-lock.json 2>/dev/null && echo npm
ls pnpm-lock.yaml 2>/dev/null && echo pnpm
ls yarn.lock 2>/dev/null && echo yarn
ls bun.lockb 2>/dev/null && echo bun
Gate table format for the report:
| Gate | Command | Status | Exit | Error summary | Fix applied |
|-----------|--------------------|--------|------|-------------------------|------------------------------|
| install | npm ci | pass | 0 | — | — |
| typecheck | tsc --noEmit | fail | 2 | TS2345 in api/user.ts:8 | narrowed param type |
When a gate fails, map the error to the smallest likely root cause before touching code:
| Gate | Common error | Likely root cause | Smallest fix |
|---|---|---|---|
| install | ERESOLVE / peer conflict | mismatched peer dep range | align the one offending version; do not blanket --force |
| install | lockfile out of sync | package.json edited without re-lock | regenerate the lockfile, commit it |
| typecheck | TS2307 cannot find module | missing @types/* or wrong path alias | add the types package or fix paths |
| typecheck | TS2345 not assignable | real type bug or a too-wide input | narrow the type at the source, not with as any |
| lint | no-unused-vars | dead import after a refactor | remove the import |
| build | Module not found | case-sensitive path differs from disk | correct the import casing |
| test | one suite fails, rest pass | test depends on order/shared state | isolate the test's fixture |
| startup | EADDRINUSE | a previous run left the port bound | kill the stale process; ensure teardown |
| route | health returns 500 | a required env var is unset | set the env var; assert it at startup |
The build gate fails with Cannot find module './utils/Format' while the file on disk is format.ts. Root cause: a case-sensitive import that works on macOS (case-insensitive FS) but breaks the Linux CI build. Smallest fix: change the import to ./utils/format, re-run only the build gate to confirm green, then continue to the test gate. No dependency change, no config change — one character at the lowest wrong layer. This is also why "passes locally, fails in CI" is a recurring class: reproduce with the same OS/case behavior the CI uses.
// @ts-ignore or eslint-disable to make a gate green hides a real defect. Fix the root cause at the lowest layer that is wrong.npm install instead of npm ci. Mutates the lockfile and hides drift that CI will later catch.kill the dev server leaves a port bound and confuses the next run; always tear it down.Not every gate exists in every repo, and faking a pass is worse than an honest skip. Distinguish three cases and report them differently:
lint script. Status: skip, reason "no lint script defined". This is a finding worth noting (the project may want one), not a failure.DATABASE_URL that is a secret you must not fabricate, or startup needs a service you cannot launch locally. Status: skip, reason "requires DATABASE_URL (not available; do not fabricate)". Report it as a blocker for full verification, not a pass.skip, reason "would require a forbidden action". Never run it.A skipped gate must always carry a reason and must never be silently counted toward "all green". The final verdict is green only if every gate that could run passed and every skip is justified. If a skip blocks meaningful verification (e.g., tests cannot run at all), the overall verdict is "cannot confirm green", not "green".
Return a gate table: gate | command | status (pass/fail/skip) | exit | error summary | fix applied. End with: overall green/red verdict, remaining failures with the smallest next step, and any gate skipped plus why. Include exit codes for failed gates.
In a monorepo the root scripts may fan out to many packages, which changes how gates run:
pnpm-workspace.yaml, a workspaces field in root package.json, turbo.json, or nx.json. The right command may be pnpm -r build or turbo run build, not a per-package npm run build.pnpm --filter <pkg> test, turbo run test --filter=<pkg>) before fixing, so you re-run only the affected package, not the whole graph.turbo/nx already encode build-before-test ordering and caching. Do not bypass it with raw per-package commands that ignore dependencies.The gate order is unchanged; only the command shape and the failure-isolation step differ.
ci / --frozen-lockfile / --immutable) to surface lockfile drift instead of hiding it.Done means each gate ran (or was justifiably skipped), failures were repaired at the root with minimal scoped diffs and re-verified green, and the final gate table plus next steps are reported.
npx claudepluginhub fluxonlab/skillry --plugin skillry-testing-and-qaProvides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.