# Verification Before Completion

> Gate function preventing unverified completion claims. Use before claiming any task is done.

- Skill: `oimiragieo/verification-before-completion` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add oimiragieo/verification-before-completion`
- Raw SKILL.md: https://api.skillmd.com/api/skills/oimiragieo/verification-before-completion/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: oimiragieo (https://skillmd.com/u/oimiragieo)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/oimiragieo/verification-before-completion

---


# Verification Before Completion

## Overview

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

**Core principle:** Evidence before claims, always.

**Violating the letter of this rule is violating the spirit of this rule.**

## The Iron Law

```
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
```

If you haven't run the verification command in this message, you cannot claim it passes.

## The Gate Function

```
BEFORE claiming any status or expressing satisfaction:

1. IDENTIFY: What command proves this claim?
2. RUN: Execute the FULL command (fresh, complete)
3. READ: Full output, check exit code, count failures
4. VERIFY: Does output confirm the claim?
   - If NO: State actual status with evidence
   - If YES: State claim WITH evidence
5. ONLY THEN: Make the claim

Skip any step = lying, not verifying
```

## Common Failures

| Claim                 | Requires                               | Not Sufficient                 |
| --------------------- | -------------------------------------- | ------------------------------ |
| Tests pass            | Test command output: 0 failures        | Previous run, "should pass"    |
| Linter clean          | `pnpm lint:fix` output: 0 errors       | Partial check, extrapolation   |
| Format clean          | `pnpm format` output: no changes       | Visual inspection, assumption  |
| Build succeeds        | Build command: exit 0                  | Linter passing, logs look good |
| Bug fixed             | Test original symptom: passes          | Code changed, assumed fixed    |
| Regression test works | Red-green cycle verified               | Test passes once               |
| Agent completed       | VCS diff shows changes                 | Agent reports "success"        |
| Requirements met      | Line-by-line checklist                 | Tests passing                  |
| Code quality gates    | `pnpm lint:fix` + `pnpm format` passed | Tests passing                  |

## Red Flags - STOP

- Using "should", "probably", "seems to"
- Expressing satisfaction before verification ("Great!", "Perfect!", "Done!", etc.)
- About to commit/push/PR without verification
- Trusting agent success reports
- Relying on partial verification
- Thinking "just this once"
- Tired and wanting work over
- **ANY wording implying success without having run verification**

## Rationalization Prevention

| Excuse                                  | Reality                            |
| --------------------------------------- | ---------------------------------- |
| "Should work now"                       | RUN the verification               |
| "I'm confident"                         | Confidence does not equal evidence |
| "Just this once"                        | No exceptions                      |
| "Linter passed"                         | Linter does not equal compiler     |
| "Agent said success"                    | Verify independently               |
| "I'm tired"                             | Exhaustion does not equal excuse   |
| "Partial check is enough"               | Partial proves nothing             |
| "Different words so rule doesn't apply" | Spirit over letter                 |

## Key Patterns

**Tests:**

```
CORRECT: [Run test command] [See: 34/34 pass] "All tests pass"
WRONG: "Should pass now" / "Looks correct"
```

**Regression tests (TDD Red-Green):**

```
CORRECT: Write -> Run (pass) -> Revert fix -> Run (MUST FAIL) -> Restore -> Run (pass)
WRONG: "I've written a regression test" (without red-green verification)
```

**Build:**

```
CORRECT: [Run build] [See: exit 0] "Build passes"
WRONG: "Linter passed" (linter doesn't check compilation)
```

**Lint and Format (BLOCKING GATE):**

```
CORRECT: [Run pnpm lint:fix] [See: 0 errors] [Run pnpm format] [See: no changes] "Lint and format clean"
WRONG: "Code looks formatted" / "No obvious lint issues" / "Should be clean"
```

**Requirements:**

```
CORRECT: Re-read plan -> Create checklist -> Verify each -> Report gaps or completion
WRONG: "Tests pass, phase complete"
```

**Agent delegation:**

```
CORRECT: Agent reports success -> Check VCS diff -> Verify changes -> Report actual state
WRONG: Trust agent report
```

## Why This Matters

From failure analysis:

- "I don't believe you" - trust broken
- Undefined functions shipped - would crash
- Missing requirements shipped - incomplete features
- Time wasted on false completion -> redirect -> rework
- Violates: "Honesty is a core value. If you lie, you'll be replaced."

## When To Apply

**ALWAYS before:**

- ANY variation of success/completion claims
- ANY expression of satisfaction
- ANY positive statement about work state
- Committing, PR creation, task completion
- Moving to next task
- Delegating to agents

**Rule applies to:**

- Exact phrases
- Paraphrases and synonyms
- Implications of success
- ANY communication suggesting completion/correctness

## The Bottom Line

**No shortcuts for verification.**

Run the command. Read the output. THEN claim the result.

This is non-negotiable.

## Iron Laws

1. **NEVER** claim task completion without running fresh verification commands in the current session
2. **ALWAYS** read the full command output before asserting a result — not just the last line or exit code
3. **NEVER** use hedging language ("should pass", "probably works") as a substitute for running verification
4. **ALWAYS** apply the red-green-refactor cycle: verify test fails, fix passes, revert fails again
5. **NEVER** commit, push, or close a task without verified evidence that all gates (tests, lint, format) pass

## Anti-Patterns

| Anti-Pattern                              | Why It Fails                                    | Correct Approach                                     |
| ----------------------------------------- | ----------------------------------------------- | ---------------------------------------------------- |
| Claiming success before running commands  | No evidence the claim is true                   | Run the command, read full output, then claim        |
| Trusting results from a prior run         | State may have changed since last execution     | Always run fresh verification in the current session |
| Partial verification (tests but not lint) | Lint failures fail CI even when tests pass      | Run all gates: tests, `pnpm lint:fix`, `pnpm format` |
| Using "should" or "probably" language     | Implies assumption, not verification            | Eliminate hedging; verify then state the fact        |
| Skipping red-green-refactor cycle         | Regression tests that always pass catch nothing | Verify test fails on revert before marking complete  |

## Memory Protocol (MANDATORY)

**Before starting:**
Read `.claude/context/memory/learnings.md`

**After completing:**

- New pattern -> `.claude/context/memory/learnings.md`
- Issue found -> `.claude/context/memory/issues.md`
- Decision made -> `.claude/context/memory/decisions.md`

> ASSUME INTERRUPTION: If it's not in memory, it didn't happen.

