Skip to content
Back to skills

Verification Before Completion

ASecurity

Use when about to claim a code change (feature, fix, refactor, upgrade, migration) is done, fixed or passing — run the command that proves it first. Not for a small edit the user spelled out. Runs last, after any review.

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added August 31, 2026
ai-agentsgobashdebugginggit

Works with

  • terminal

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add felipemelendez/llm-orchestrator --skill verification-before-completion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Verification Before Completion?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Verification Before Completion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/felipemelendez-verification-before-completion/badge)](https://www.skillsdirectory.com/skills/felipemelendez-verification-before-completion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: verification-before-completion
description: Use when about to claim a code change (feature, fix, refactor, upgrade, migration) is done, fixed or passing — run the command that proves it first. Not for a small edit the user spelled out. Runs last, after any review.
---

# Verification before completion

A completion claim carries the command that proves it and the line it printed. That is the whole
contract; everything below describes the machinery that checks it and the evidence traps worth
knowing.

**Do not add verification instructions on top of this.** Current models verify their own work
without being told. Anthropic's Opus 5 guidance is explicit that prompts containing *"include a
final verification step"* or *"use a subagent to verify"* cause over-verification, and that
*"the same applies to legacy harness scaffolding that adds separate verification steps."* What
this skill keeps is the **evidence format** — the claim cites the command and its output because
that is what a human reader (and the gate below) needs, not because the model needs reminding to
check.

## How the gate works

There is no gate worth the name, and you should know that rather than lean on one. A Stop hook
reads the transcript the harness already writes. If your reply says `Verification: PASS` and no
check ran and passed in that turn, it prints one line to your terminal. It never blocks, and it
never reads the words of your reply — only that one label.

So it catches the obvious case and nothing subtler. It cannot tell you that a green run executed
zero tests, or that the suite you ran does not cover what you changed. `exit 0` is not evidence:
a filter matching no tests exits 0. Those remain yours to notice. If the run did not cover the
change, that is a `Found:`, not a `Changed:`.

## Finding the project's gates

Use the detection library rather than hand-inventing commands:

```bash
# Locate the lib across install layouts (CLAUDE_PLUGIN_ROOT is often unset
# here; marketplace installs nest under the plugin cache).
orch_lib() { local n="$1" p; for p in "${CLAUDE_PLUGIN_ROOT:-}/scripts/lib/$n" "$HOME/.claude/llm-orchestrator/scripts/lib/$n" "$(pwd)/.claude/scripts/lib/$n"; do [ -f "$p" ] && { printf '%s\n' "$p"; return; }; done; find "$HOME/.claude/plugins" -name "$n" -path '*llm-orchestrator*' 2>/dev/null | sort -V | tail -1; }
L=$(orch_lib orch-detect.sh); [ -n "$L" ] && source "$L" || echo "orch-detect.sh not found — reinstall the plugin" >&2
orch_detect_cached "$PWD"
```

Parse the `## Toolchain` section for `test=`, `typecheck=`, and `lint=` lines and run those. If
detection returns nothing, ask the project (`pnpm test <file>`, `cargo test <module>`,
`tsc --noEmit`). Behavior claims may need a curl, a script, or a manual UI step with screenshot.

## What counts as evidence

- A pasted line from the runner with a pass count.
- A non-zero return code is failure, even if the output looks fine.
- "No output" counts *only* when silence is the command's success signal (e.g. `tsc --noEmit`).
- A pass obtained by re-running until green is not evidence — flakes are bugs.

**A regression test is only proved by watching it fail.** "I added a test that captures the bug"
is the most common unverifiable claim on a bugfix. The cycle that proves it:

1. Write the test. Run it — it should pass against the fixed code.
2. Revert the fix (not the test). Run again — it **must** fail, on the assertion.
3. Restore the fix. Run again — green.

Paste the failing output from step 2. A test that has only ever been green may be asserting
something the bug never violated, and it will not catch the regression when it returns.

**A subagent's `DONE` is verified against `git diff`, not against its report.** The report is a
claim about the work; the diff is the work.

## Native relatives

Native `/verify` builds and runs the app — *"without falling back to tests or type checks"* —
and since v2.1.215 Claude cannot invoke it on its own; it is a good manual complement, not a
substrate this flow can call. `/goal` is a session-scoped Stop hook enforcing *"keep going until
X holds"*; this skill enforces the different thing — *"do not claim X without the command and
its output"*. They compose.

## Output shape

```
Changed:
- <file:line> — <what>
Verify:
- pnpm test users.test.ts → 4 passed
```

If verification fails, do NOT report `Changed:`. Report:

```
Found:
- verification failed: <one-line summary>
- pnpm test → 1 failing: <name> at <file:line>
Next:
- Invoke systematic-debugging.
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.