verification-before-completion · git:20260720.fa58fb9 · 2026-07-20 · sha256 79eb0545e064c883

verification-before-completion git:20260720.fa58fb9A

Immutable. This exact content is served forever at /api/v1/blob/79eb0545e064c883.

---
name: verification-before-completion
description: >-
  Evidence before success claims — identify the proof command, run it fresh,
  read exit codes and output, then claim only what the evidence supports. Use
  before marking work done, fixed, or passing; before commit or PR; whenever
  tempted to assert status from build alone. Companion: test-driven-development
  for constructing tests; systematic-debugging when verification fails.
metadata:
  source: original (devcake)
  author: devcake
---

# Verification before completion

Claiming work is complete without verification is dishonesty, not efficiency.

**Iron law:** no completion claims without fresh verification evidence.

If you have not run the proof command in this session and read its output,
you cannot claim it passes.

## When this skill applies

Use whenever you would say: done, fixed, green, shipped, ready for review,
or “should work.”

Use before committing, opening/updating a PR, or writing a summary that
asserts quality.

This skill does **not** invent mission outcomes. Completion of a mission step
is defined by the playbook; this skill owns honesty of **evidence** for
technical claims inside that work.

## The gate

Before any success claim:

1. **IDENTIFY** — what command(s) or checks prove this claim for *this* change?
2. **RUN** — execute them fresh and complete (not a remembered earlier pass).
3. **READ** — full relevant output, exit code, failure counts.
4. **VERIFY** — does the output confirm the claim?
   - If no: state actual status with evidence.
   - If yes: state the claim **with** the evidence (command + result).
5. **ONLY THEN** make the claim.

## Choose proof that matches the change

Map the change type to the repository’s real verification path. Prefer what
owner docs, CI, and nearby code already use. Typical patterns:

| Change type | Minimum proof pattern |
|---|---|
| Library / app logic | Unit/integration tests for the touched seam |
| Container / image / compose | Image build **and** runtime/health where the user path is run/up |
| UI package | Build **and** load/health or the project’s UI test suite |
| Docs-only | Re-read for accuracy; no false runtime claims |

**Stale image trap:** if tests run inside an image that COPY’d sources at
build time, re-running pytest on an old image grades the last bake, not the
working tree. Rebake, bind-mount, or run against the tree on the documented
runtime — never claim green from a stale artifact.

“Build succeeded” alone is not proof when the user-facing path is run/up.

## Report honestly

When summarizing:

- Name what ran and what passed.
- Name what could **not** run and what remains unproven.
- Never imply full-system proof from a unit slice.

## Anti-patterns

- “Should work” / “looks good” without a command
- Reusing an earlier test run after further edits
- Claiming CI green without seeing CI
- Fixing a test by deleting or weakening the assertion
- Partial suite green sold as full suite green

## Companion routing

- Failure under verification with unclear cause → `systematic-debugging`
- Need a new failing test for the fix → `test-driven-development`
- Packaging the change for review → `pr-hygiene` (if available)