# Verify

> Prove a change actually works before it counts as done. Use after building any non-trivial change, before deliver, and whenever claiming something works. Exercises real behavior end-to-end. Green tools alone are not verification.

- Skill: `tradebaas/verify` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tradebaas/verify`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tradebaas/verify/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Tradebaas (https://skillmd.com/u/tradebaas)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tradebaas/verify

---


# verify: evidence, not confidence

A change is verified when its observable behavior matches its acceptance criteria, and you have
seen that behavior yourself. "Should work", "compiles", "tests pass" are not that.

## 1. The floor: every gate green

Run the full chain and paste real results, not summaries of results:
`node checks/check.mjs`, then the stack gates (typecheck, lint, tests, build; commands are in
`docs/standards/<stack>.md`). Red gate → stop, fix, rerun. Never weaken a gate to pass it.

## 2. The point: exercise the change

- Take the spec's acceptance criteria (tier S: the request itself) and walk them **end to end**
  in the closest thing to reality available: run the app, call the endpoint, click the flow,
  render the document. Per criterion: what you predicted you would see → what you did → what you
  observed. Write the prediction down before running. A pass you did not predict proves only that
  something happened; a prediction that turns out wrong is the finding, and the real behavior gets
  explained and traced to a rule before the criterion counts as met.
- Probe the edges the criteria imply: empty input, wrong input, unauthorized user, the second
  run (idempotency), the slow path. The first bug is usually one step off the happy path.
- Run the long things at arm's length. A test run, a build or a log enters the context as its
  counts and its failures (tail, grep, or a subagent that reads it and returns two lines), so the
  transcript carries the conclusion and not the log; the full output stays on disk for the report.
- Exercise against the real dependency, or the test double the spec names. A path that passed
  because a fallback returned canned data (a sample response, a stub, a default) is a failure, and
  the fallback is a finding: it carries a `defer:` marker with its trigger, or it goes.
- User-facing output → also run `design-guard` on what rendered. A built interface gets re-checked
  against its direction contract and the finish verdict; a document, e-mail, export or error
  string gets judged there in full, because the design method does not carry those.
- Bug fix → reproduce the bug first on the old behavior (or its regression test), then show it
  gone. A fix you never saw fail is a guess. Cause unknown, or a fix attempt already failed?
  Run the `debug` skill's loop before trying again.

## 3. What you cannot verify

Some things this environment can't exercise (production data, real payment, app-store review).
Name them explicitly: "verified: A, B; not verifiable here: C, needs <what>, tracked in
STATE.md". Unverifiable-and-silent is how "works on my machine" ships.

## 4. Converge and record

- Substantial change (per `code-review`'s own bar)? Hand the diff to `code-review` now, before
  any status flips: findings must land while they can still change the work. Blocker fixes come
  back through §1-2. Trivial tier: record "code-review: skipped (trivial)" in STATE.md instead.
- Reconcile docs the verified change made stale; retired wording → denylist
  (`checks/config.json`). Spec: `Verified by:` names this run's artifact (the suite and its count, the walk, the log entry), status → `done`, folder → archive (see `spec`).
- STATE.md: gates line updated with the evidence summary ("checks green, tests 61/61, criteria
  4/4 exercised"), Now ▶ next step.

Report format, per criterion one line: `✓/✗ <criterion>: <what was observed>`, then the
gates line, then anything unverifiable. No prose padding. ⚓

