plugins/dev/skills/discipline/verification-before-completion/SKILL.md
Use when claiming task completion or marking items as done. Covers completion evidence requirements, verification methods, and anti-rationalization patterns.
npx skillsauth add madappgang/claude-code verification-before-completionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Iron Law: "NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE"
This skill applies whenever you:
Verification must be fresh (performed after the claimed change) and explicit (evidence shown, not described).
Wrong:
Fixed the login bug in auth.ts. Should be working now.
Correct:
Fixed the login bug in auth.ts line 42:
git diff src/auth.ts:
- if (user.token == null) {
+ if (user.token === undefined || user.token === null) {
Test output:
✓ should reject undefined token (15ms)
✓ should reject null token (12ms)
✓ should accept valid token (8ms)
| Change Type | Required Evidence | Tool/Method |
|-------------|-------------------|-------------|
| Logic/algorithm | Test output showing pass | bun test, pytest, go test |
| File creation | Grep verification or ls output | grep -r "pattern" . or ls -la path/ |
| UI/styling | Screenshot or video | Browser DevTools screenshot |
| Configuration | Build logs showing success | npm run build, cargo build |
| Deployment | CI link or deployment logs | GitHub Actions URL, kubectl logs |
| API changes | API test output or curl result | curl -X POST ... |
| Data migration | Row count or sample query | SELECT COUNT(*) FROM ... |
| Performance fix | Benchmark comparison (before/after) | hyperfine, go test -bench |
When marking a todo as completed:
completed, gather fresh evidenceViolation Pattern:
Message 1: "Fixed the validator. Marking todo complete."
Message 2: "Here's the test output..."
Correct Pattern:
Message 1:
"Fixed the validator. Test output:
✓ should validate email (5ms)
✓ should reject invalid format (3ms)
Marking todo complete."
Common rationalizations and their counters:
| Rationalization | Counter | |-----------------|---------| | "It's a trivial change" | Trivial = fast to verify, not skip | | "I tested this before" | Code changed since then, verify again | | "Same pattern as working code" | Different context = different bugs | | "Just fixing a typo" | Typos can break builds, verify | | "Only changed comments" | Comments can break doc generation | | "Can't test without production data" | Use test fixtures or staging environment |
Scenario: Fixed useState initialization bug
Wrong Completion:
Fixed the counter initialization bug. Should be good now!
Correct Completion:
Fixed the counter initialization bug in Counter.tsx line 8:
git diff:
- const [count, setCount] = useState();
+ const [count, setCount] = useState<number>(0);
Test output:
PASS src/Counter.test.tsx
Counter component
✓ renders with initial value 0 (23ms)
✓ increments on button click (15ms)
Build check:
✓ Type checking passed (1.2s)
✓ No lint errors
Scenario: Fixed validation error in POST /users
Wrong Completion:
Added email validation to the users endpoint. Tested locally, works fine.
Correct Completion:
Added email validation to the users endpoint in api/users.py line 45:
git diff:
@app.post("/users")
def create_user(user: UserCreate):
+ if not re.match(r"[^@]+@[^@]+\.[^@]+", user.email):
+ raise HTTPException(400, "Invalid email format")
return db.create_user(user)
Test output:
test_create_user.py::test_valid_email PASSED
test_create_user.py::test_invalid_email_rejected PASSED
test_create_user.py::test_missing_at_sign PASSED
Manual curl test:
$ curl -X POST http://localhost:8000/users -d '{"email":"invalid"}'
{"detail":"Invalid email format"}
Scenario: Updated Docker build configuration
Wrong Completion:
Updated the Dockerfile to use Go 1.22. Build should work now.
Correct Completion:
Updated the Dockerfile to use Go 1.22:
git diff:
-FROM golang:1.21-alpine
+FROM golang:1.22-alpine
Build verification:
$ docker build -t myapp:test .
[+] Building 45.3s (12/12) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 234B
=> [1/6] FROM golang:1.22-alpine
=> [2/6] WORKDIR /app
=> [3/6] COPY go.mod go.sum ./
=> [4/6] RUN go mod download
=> [5/6] COPY . .
=> [6/6] RUN go build -o /app/server
=> exporting to image
=> => writing image sha256:abc123...
Run verification:
$ docker run myapp:test --version
v1.0.0 (go1.22.0)
Before marking ANY task complete:
Remember: If you can't show fresh evidence, the task isn't complete yet.
testing
A test skill for validation testing. Use when testing skill parsing and validation logic.
tools
--- name: bad-skill description: This skill has invalid YAML in frontmatter allowed-tools: [invalid, array, syntax prerequisites: not-an-array --- # Bad Skill This skill has malformed frontmatter that should fail parsing. The YAML has: - Unclosed array bracket - Wrong type for prerequisites (should be array, not string)
tools
Plugin release process for MAG Claude Plugins marketplace. Covers version bumping, marketplace.json updates, git tagging, and common mistakes. Use when releasing new plugin versions or troubleshooting update issues.
testing
Fetch trending programming models from OpenRouter rankings. Use when selecting models for multi-model review, updating model recommendations, or researching current AI coding trends. Provides model IDs, context windows, pricing, and usage statistics from the most recent week.