Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Guides agents to collect test, build, lint, and deployment evidence before marking work complete.
.claude/skills/aiskillstore-evidence-verification/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 149% | 0% |
Version: 1.0.0 Type: Quality Assurance Auto-activate: Code review, task completion, production deployment
This skill teaches agents how to collect and verify evidence before marking tasks complete. Inspired by production-grade development practices, it ensures all claims are backed by executable proof: test results, coverage metrics, build success, and deployment verification.
Key Principle: Show, don't tell. No task is complete without verifiable evidence.
Test Evidence
Build Evidence
Deployment Evidence
Code Quality Evidence
markdown## Evidence Collection Steps 1. **Identify Verification Points** - What needs to be proven? - What could go wrong? - What does "complete" mean? 2. **Execute Verification** - Run tests - Run build - Run linters - Check deployments 3. **Capture Results** - Record exit codes - Save output snippets - Note timestamps - Document environment 4. **Store Evidence** - Add to shared context - Reference in task completion - Link to artifacts
Minimum Evidence Requirements:
Production-Grade Requirements:
Use this template when running tests:
markdown## Test Evidence **Command:** `npm test` (or equivalent) **Exit Code:** 0 ✅ / non-zero ❌ **Duration:** X seconds **Results:** - Tests passed: X - Tests failed: X - Tests skipped: X - Coverage: X% **Output Snippet:**
First 10 lines of test output]
**Timestamp:** YYYY-MM-DD HH:MM:SS
**Environment:** Node vX.X.X, OS, etc.Use this template when building:
markdown## Build Evidence **Command:** `npm run build` (or equivalent) **Exit Code:** 0 ✅ / non-zero ❌ **Duration:** X seconds **Artifacts Created:** - dist/bundle.js (XXX KB) - dist/styles.css (XXX KB) **Errors:** X **Warnings:** X **Output Snippet:**
First 10 lines of build output]
**Timestamp:** YYYY-MM-DD HH:MM:SSUse this template for linting and type checking:
markdown## Code Quality Evidence **Linter:** ESLint / Ruff / etc. **Command:** `npm run lint` **Exit Code:** 0 ✅ / non-zero ❌ **Errors:** X **Warnings:** X **Type Checker:** TypeScript / mypy / etc. **Command:** `npm run typecheck` **Exit Code:** 0 ✅ / non-zero ❌ **Type Errors:** X **Timestamp:** YYYY-MM-DD HH:MM:SS
Use this comprehensive template for task completion:
markdown## Task Completion Evidence ### Task: [Task description] ### Agent: [Agent name] ### Completed: YYYY-MM-DD HH:MM:SS ### Verification Results | Check | Command | Exit Code | Result | |-------|---------|-----------|--------| | Tests | `npm test` | 0 | ✅ 45 passed, 0 failed | | Build | `npm run build` | 0 | ✅ Bundle created (234 KB) | | Linter | `npm run lint` | 0 | ✅ No errors, 2 warnings | | Types | `npm run typecheck` | 0 | ✅ No type errors | ### Coverage - Statements: 87% - Branches: 82% - Functions: 90% - Lines: 86% ### Evidence Files - Test output: `.claude/quality-gates/evidence/tests-2025-XX-XX.log` - Build output: `.claude/quality-gates/evidence/build-2025-XX-XX.log` ### Conclusion All verification checks passed. Task ready for review.
When: After writing code for a feature or bug fix
Steps:
bash npm test # or: pytest, cargo test, go test, etc.
bash npm run build # or: cargo build, go build, etc.
bash npm run lint # or: ruff check, cargo clippy, golangci-lint run
bash npm run typecheck # or: mypy, tsc --noEmit
quality_evidenceWhen: Reviewing another agent's code or user's PR
Steps:
When: Deploying to production or staging
Steps:
markdown ## Deployment Evidence
Environment: production Timestamp: YYYY-MM-DD HH:MM:SS Version: vX.X.X
Pre-Deployment:
Deployment:
kubectl apply -f deployment.yamlPost-Deployment:
Shared Context (Primary)
json{ "quality_evidence": { "tests_run": true, "test_exit_code": 0, "coverage_percent": 87, "build_success": true, "build_exit_code": 0, "linter_errors": 0, "linter_warnings": 2, "timestamp": "2025-11-02T10:30:00Z" } }
Evidence Files (Secondary)
.claude/quality-gates/evidence/ directory{type}-{timestamp}.logtests-2025-11-02-103000.logTask Completion Messages
✅ Tests executed with captured exit code ✅ Timestamp recorded ✅ Evidence stored in context
✅ Tests pass (exit code 0) ✅ Coverage ≥70% (or project standard) ✅ Build succeeds (exit code 0) ✅ No critical linter errors ✅ Type checker passes ✅ Security scan shows no critical issues
✅ All production-grade requirements ✅ Coverage ≥80% ✅ No linter warnings ✅ Performance benchmarks within thresholds ✅ Accessibility audit passes (WCAG 2.1 AA) ✅ Integration tests pass ✅ Deployment verification complete
Bad:
"I've implemented the login feature. It should work correctly."Good:
"I've implemented the login feature. Evidence:
- Tests: Exit code 0, 12 tests passed, 0 failed
- Build: Exit code 0, no errors
- Coverage: 89%
Task complete with verification."Bad:
"Tests passed" (without actually running them)Good:
"Tests passed. Exit code: 0
Command: npm test
Output: Test Suites: 3 passed, 3 total
Timestamp: 2025-11-02 10:30:15"Bad:
"Build failed with exit code 1, but the code looks correct so marking complete."Good:
"Build failed with exit code 1. Errors:
- TypeError: Cannot read property 'id' of undefined (line 42)
Fixing the error now before marking complete."Bad:
"Tests passed yesterday, so the code is still good."Good:
"Re-running tests after today's changes.
New evidence: Exit code 0, 45 tests passed, coverage 87%"Evidence is automatically tracked in shared context:
typescript// Context structure includes: { quality_evidence?: { tests_run: boolean; test_exit_code?: number; coverage_percent?: number; build_success?: boolean; linter_errors?: number; timestamp: string; } }
Evidence collection feeds into quality gates:
In parallel execution:
markdownBefore marking task complete: - [ ] Tests executed - [ ] Test exit code captured (0 = pass) - [ ] Build executed (if applicable) - [ ] Build exit code captured (0 = pass) - [ ] Code quality checks run (linter, types) - [ ] Evidence documented with timestamp - [ ] Evidence added to shared context - [ ] Evidence summary in completion message
JavaScript/TypeScript:
bashnpm test # Run tests npm run build # Build project npm run lint # Run ESLint npm run typecheck # Run TypeScript compiler
Python:
bashpytest # Run tests pytest --cov # Run tests with coverage ruff check . # Run linter mypy . # Run type checker
Rust:
bashcargo test # Run tests cargo build # Build project cargo clippy # Run linter
Go:
bashgo test ./... # Run tests go build # Build project golangci-lint run # Run linter
See /skills/evidence-verification/examples/ for:
v1.0.0 - Initial release
Remember: Evidence-first development prevents hallucinations, ensures production quality, and builds confidence. When in doubt, collect more evidence, not less.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 28,481 | 25,157 | -12% | 1 | 1 | 0% | 4,166 | 6,925 | +66% | 0 | 0 | — |
case-02 | fail→pass | 26,251 | 18,572 | -29% | 1 | 1 | 0% | 4,389 | 6,609 | +51% | 0 | 0 | — |
case-03 | fail→pass | 14,618 | 13,560 | -7% | 1 | 1 | 0% | 2,207 | 4,859 | +120% | 0 | 0 | — |
case-04 | fail→pass | 37,543 | 17,018 | -55% | 1 | 1 | 0% | 5,532 | 6,445 | +17% | 0 | 0 | — |
case-05 | fail→pass | 8,931 | 4,583 | -49% | 1 | 1 | 0% | 1,734 | 4,320 | +149% | 0 | 0 | — |
case-06 | fail→pass | 13,560 | 3,431 | -75% | 1 | 1 | 0% | 1,473 | 4,210 | +186% | 0 | 0 | — |
case-07 | pass→pass | 13,568 | 13,129 | -3% | 1 | 1 | 0% | 1,611 | 4,758 | +195% | 0 | 0 | — |
case-08 | pass→pass | 9,120 | 12,995 | +42% | 1 | 1 | 0% | 1,469 | 4,735 | +222% | 0 | 0 | — |
case-09 | pass→pass | 19,731 | 12,587 | -36% | 1 | 1 | 0% | 2,360 | 5,401 | +129% | 0 | 0 | — |
case-10 | fail→pass | 22,246 | 16,710 | -25% | 1 | 1 | 0% | 3,547 | 6,420 | +81% | 0 | 0 | — |
case-11 | fail→pass | 21,130 | 10,520 | -50% | 1 | 1 | 0% | 2,539 | 5,172 | +104% | 0 | 0 | — |
case-12 | fail→pass | 11,865 | 11,366 | -4% | 1 | 1 | 0% | 1,371 | 4,783 | +249% | 0 | 0 | — |
case-13 | fail→pass | 13,142 | 10,451 | -20% | 1 | 1 | 0% | 1,680 | 4,521 | +169% | 0 | 0 | — |
case-14 | pass→pass | 11,266 | 4,853 | -57% | 1 | 1 | 0% | 1,207 | 4,438 | +268% | 0 | 0 | — |
case-15 | fail→pass | 19,127 | 13,663 | -29% | 1 | 1 | 0% | 2,058 | 4,979 | +142% | 0 | 0 | — |
case-16 | pass→pass | 15,380 | 10,363 | -33% | 1 | 1 | 0% | 1,912 | 4,357 | +128% | 0 | 0 | — |
case-17 | pass→pass | 10,348 | 10,192 | -2% | 1 | 1 | 0% | 864 | 4,249 | +392% | 0 | 0 | — |
case-18 | fail→pass | 19,417 | 17,584 | -9% | 1 | 1 | 0% | 2,324 | 5,543 | +139% | 0 | 0 | — |
case-19 | pass→pass | 23,163 | 23,256 | +0% | 1 | 1 | 0% | 2,805 | 5,913 | +111% | 0 | 0 | — |
case-20 | pass→fail | 11,800 | 18,271 | +55% | 1 | 1 | 0% | 1,465 | 6,027 | +311% | 0 | 0 | — |
case-21 | pass→fail | 3,361 | 5,289 | +57% | 1 | 1 | 0% | 661 | 4,520 | +584% | 0 | 0 | — |
case-22 | pass→pass | 13,537 | 22,715 | +68% | 1 | 1 | 0% | 1,542 | 4,738 | +207% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.