Verify
Purpose
Provide a single, consistent way for agents to verify changes before claiming “done”.
Canonical rule
Verification is skill-only.
- Do not rely on a global
verify command.
- Do not require other docs to define verification logic. This skill is self-contained.
When to run
Run verification for every change that alters behaviour, build outputs, tests, types, linting, packaging, CI, or UI.
If you cannot verify, return NO-GO with a concrete reason and the smallest unblock request.
Procedure
0) Pick scope (don’t waste time)
- Prefer the smallest scope that covers what changed:
- single package/app if changes are local
- repo-wide only if shared libraries, configs, or multiple packages changed
- If unsure, start scoped, then widen if failures suggest shared impact.
1) Discover the available verification scripts (don’t guess)
- Identify the relevant
package.json:
- repo root for repo-wide checks
- the changed package/app directory for scoped checks
- List scripts from the relevant
package.json:
- Look for canonical script names first:
verify
test, test:unit, test:ci
lint
typecheck, tsc
build
format, fmt, prettier:check
check (sometimes bundles lint/typecheck/test)
- If none exist, search one level up/down for where scripts live (monorepo layouts vary).
If you still cannot find scripts, return NO-GO and ask for expected verification steps or for a
verify script to be added.
2) Run verification in this order (stop on red)
Run the best available equivalents in this order:
- Format / basic hygiene (only if a check script exists)
- Prefer
format:check / prettier:check / fmt:check
- Do not run auto-format as “verification” unless explicitly requested
- Lint
- Run the repo/package lint script
- Typecheck
- Run
typecheck / tsc / equivalent
- Tests
- Run the smallest relevant test suite:
test / test:unit for code changes
- include integration/e2e only when the repo provides it and it’s relevant
- Build
- Run
build when:
- you changed build outputs, bundling, env wiring, dependencies, or UI
- or when the repo commonly relies on build as a gate
Notes:
- If the repo provides a single
verify or check script, prefer it first. If it fails, fix before running anything else.
- In monorepos, use the workspace/package targeting mechanism that exists in the repo (don’t assume pnpm). If unclear, run within the package directory.
3) UI smoke testing (required for UI/user-flow changes)
If changes affect UI, routing, auth flows, forms, state, client behaviour, styling that could break layout, or anything user-visible, do a smoke test.
3.1 Start the app
- Use the repo’s normal dev/start script for the relevant app (e.g.
dev, start, preview).
- If there are multiple apps, start the one you changed.
If you cannot start the app due to missing env/secrets, return NO-GO and request the minimal env needed (or a mock mode).
3.2 Smoke checklist (happy path + one sad path)
Do the minimum that proves the change works:
- Load the page/route you touched
- Exercise the changed behaviour end-to-end
- Confirm no obvious runtime errors (console/network) and the UI behaves as intended
- Do one “sad path” where relevant (invalid form submit, unauth access, empty state)
3.3 Basic a11y spot-check
- Keyboard: tab order makes sense, focus is visible, primary actions reachable
- Forms: error message appears, first invalid field gets focus (or is clearly indicated)
- No colour-only signalling for errors or status
- Reduced motion: no jarring animations if the change touches motion (best-effort)
3.4 Evidence
Prefer using the agent-browser skill for smoke testing when real interaction matters.
Capture evidence where possible:
- screenshot of the critical state, or
- short description of the steps performed + observed outcome
4) If something fails
- Keep the fix small and local first.
- If the failure is due to missing scripts or repeated workflow pain, recommend adding a
verify script that bundles lint/typecheck/test/build for that scope.
Output contract (mandatory)
Include a section named Verification with either:
PASS
PASS:
- Commands run (exact)
- Results (pass)
- UI smoke (if applicable): steps + outcome + evidence note
NO-GO
NO-GO:
- What blocked verification (exact)
- What you need to proceed (smallest unblock request)
- What you did manage to verify (if anything)
1---2name: verify3description: Verification ladder. Pick smallest scope, run scripts in order, smoke UI, report PASS/NO-GO.4---56# Verify78## Purpose9Provide a single, consistent way for agents to verify changes before claiming “done”.1011## Canonical rule12Verification is skill-only.13- Do not rely on a global `verify` command.14- Do not require other docs to define verification logic. This skill is self-contained.1516## When to run17Run verification for every change that alters behaviour, build outputs, tests, types, linting, packaging, CI, or UI.18If you cannot verify, return **NO-GO** with a concrete reason and the smallest unblock request.1920## Procedure2122### 0) Pick scope (don’t waste time)23- Prefer the smallest scope that covers what changed:24 - single package/app if changes are local25 - repo-wide only if shared libraries, configs, or multiple packages changed26- If unsure, start scoped, then widen if failures suggest shared impact.2728### 1) Discover the available verification scripts (don’t guess)291) Identify the relevant `package.json`:30- repo root for repo-wide checks31- the changed package/app directory for scoped checks32332) List scripts from the relevant `package.json`:34- Look for canonical script names first:35 - `verify`36 - `test`, `test:unit`, `test:ci`37 - `lint`38 - `typecheck`, `tsc`39 - `build`40 - `format`, `fmt`, `prettier:check`41 - `check` (sometimes bundles lint/typecheck/test)42433) If none exist, search one level up/down for where scripts live (monorepo layouts vary).44If you still cannot find scripts, return **NO-GO** and ask for expected verification steps or for a `verify` script to be added.4546### 2) Run verification in this order (stop on red)47Run the best available equivalents in this order:48491) Format / basic hygiene (only if a check script exists)50- Prefer `format:check` / `prettier:check` / `fmt:check`51- Do not run auto-format as “verification” unless explicitly requested52532) Lint54- Run the repo/package lint script55563) Typecheck57- Run `typecheck` / `tsc` / equivalent58594) Tests60- Run the smallest relevant test suite:61 - `test` / `test:unit` for code changes62 - include integration/e2e only when the repo provides it and it’s relevant63645) Build65- Run `build` when:66 - you changed build outputs, bundling, env wiring, dependencies, or UI67 - or when the repo commonly relies on build as a gate6869Notes:70- If the repo provides a single `verify` or `check` script, prefer it first. If it fails, fix before running anything else.71- In monorepos, use the workspace/package targeting mechanism that exists in the repo (don’t assume pnpm). If unclear, run within the package directory.7273### 3) UI smoke testing (required for UI/user-flow changes)74If changes affect UI, routing, auth flows, forms, state, client behaviour, styling that could break layout, or anything user-visible, do a smoke test.7576#### 3.1 Start the app77- Use the repo’s normal dev/start script for the relevant app (e.g. `dev`, `start`, `preview`).78- If there are multiple apps, start the one you changed.7980If you cannot start the app due to missing env/secrets, return **NO-GO** and request the minimal env needed (or a mock mode).8182#### 3.2 Smoke checklist (happy path + one sad path)83Do the minimum that proves the change works:84- Load the page/route you touched85- Exercise the changed behaviour end-to-end86- Confirm no obvious runtime errors (console/network) and the UI behaves as intended87- Do one “sad path” where relevant (invalid form submit, unauth access, empty state)8889#### 3.3 Basic a11y spot-check90- Keyboard: tab order makes sense, focus is visible, primary actions reachable91- Forms: error message appears, first invalid field gets focus (or is clearly indicated)92- No colour-only signalling for errors or status93- Reduced motion: no jarring animations if the change touches motion (best-effort)9495#### 3.4 Evidence96Prefer using the `agent-browser` skill for smoke testing when real interaction matters.97Capture evidence where possible:98- screenshot of the critical state, or99- short description of the steps performed + observed outcome100101### 4) If something fails102- Keep the fix small and local first.103- If the failure is due to missing scripts or repeated workflow pain, recommend adding a `verify` script that bundles lint/typecheck/test/build for that scope.104105## Output contract (mandatory)106Include a section named `Verification` with either:107108### PASS109- `PASS:`110 - Commands run (exact)111 - Results (pass)112 - UI smoke (if applicable): steps + outcome + evidence note113114### NO-GO115- `NO-GO:`116 - What blocked verification (exact)117 - What you need to proceed (smallest unblock request)118 - What you did manage to verify (if anything)