verification-before-completion
Skill36 starsChanged 6 days agoMITView on GitHub
Gate before saying work is done. Use whenever the user says 'mark it done', 'should work now', 'it's fixed' or 'ready', or asks for a PR summary or handoff note, and before any claim that code, config, docs, a migration or a bugfix is complete. Run the check, read the output, then report with evidence, even if not asked.
We split this skill into the rules it gives an agent
18 rules. 0 are common, 18 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 176 edited versions we read keep these.
18
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 47
Run this cycle before every completion claim.
- Distinctive: line 56
If unsure what to verify, verify everything.
- Distinctive: line 60
Run every required command.
- Distinctive: line 62
Run commands in the project root unless they require a specific directory
- Distinctive: line 63
Use the project's own scripts and configuration.
- Distinctive: line 64
Run the full suite, not a subset, unless the full suite takes more than 5 minutes (then run targeted tests and note that the full suite is …
- Distinctive: line 74
Do not fabricate timestamps.
- Distinctive: line 78
Check the output against the success criteria.
- Distinctive: line 80
All tests pass (zero failures, zero errors, zero skipped unless pre-existing)
- Distinctive: line 84
If any check fails, the work is NOT done.
- Distinctive: line 92
If any caveats exist (pre-existing failures, skipped checks, known issues), state them explicitly
- Distinctive: line 93
Never use language that hides uncertainty (see Language to avoid)
- Distinctive: line 155
Before claiming any work is complete:
- Distinctive: line 172
Run before you claim: Every verification command must be executed in the current session.
- Distinctive: line 178
Full suite, not cherry-picked: Run the complete test suite, not just the tests for the file you changed.
- Distinctive: line 182
Caveats are mandatory: If any check was skipped, any test was ignored, or any known issue remains, state it explicitly.
- Distinctive: line 184
Failures mean not done: If any verification command fails, the work is not complete.
- Distinctive: line 186
Fresh over stale: If you made any change after the last verification run, even a one-character fix, re-run all verification.
“Common” is measured: kept by at least 6 in 10 of the 176 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Verification Before Completion
Prove work is done instead of asserting it. Every completion claim must be backed by captured output from verification commands run in the current session. The most expensive bugs are the ones that ship behind a confident "it works," not the ones that fail loudly.
Iron law
No "done" without evidence. Assertions are not evidence.
If you have not run a verification command and read its output in this session, you cannot claim the work passes. "Should work" is not a status. "I believe it's correct" is not a test result. The only proof is captured output from an executed command.
Why this matters
False completion costs more than incomplete work. Incomplete work is visible, so someone will finish it. False completion is invisible: it passes review, merges, deploys, and fails in production. Every minute spent on verification saves hours of debugging, rollback, incident response, and trust repair. The cost of catching a defect grows by orders of magnitude at each stage: local development, code review, staging, production. Verify early and often, with evidence.
Core Principles
| Principle | Meaning |
| Evidence over assertion | A claim is only as strong as the output backing it. No output, no claim. |
| Fresh over stale | Only verification run in the current session counts. Previous runs prove nothing about current state. |
| Complete over partial | Running one test file does not verify the suite. Running the linter does not verify the build. Each check covers only its own surface. |
| Captured over remembered | Paste the output. Do not summarize from memory. Memory lies. |
| Exit code over log lines | A command that prints "OK" but exits non-zero has failed. Always check the exit code. |
| Automated over manual | A reproducible command beats "I checked it manually" every time. |
Tiered definition of done
Work passes through several tiers before it is done. Each tier has its own evidence requirements. See done-definitions for the full breakdown.
| Tier | What it means | Minimum evidence |
| Local done | Works on the development machine | Tests pass, linter clean, type checker clean, build succeeds, all with captured output |
| Review-ready done | Safe for a peer to evaluate | Local done + changes committed, PR description matches actual changes, no untracked files |
| Merged done | Accepted into the main branch | Review-ready done + CI pipeline green, reviewer approved, no merge conflicts |
| Deployed done | Running in a target environment | Merged done + deployment command succeeded, health check returns expected status |
| Verified-in-production done | Confirmed working for real users | Deployed done + smoke tests pass against live environment, key metrics stable, no new errors in logs |
The verification cycle
Run this cycle before every completion claim.
Phase 1: Identify the verification surface
Determine what needs to be verified based on what changed.
- List every file modified, added, or deleted
- Map each change to its verification category (code, config, schema, docs, infra)
- Identify the minimum set of commands that covers all changed surfaces
- If unsure what to verify, verify everything. Over-verification costs minutes, under-verification costs hours
Phase 2: Run verification commands
Run every required command. Do not skip any.
- Run commands in the project root unless they require a specific directory
- Use the project's own scripts and configuration. Do not invent custom verification
- Run the full suite, not a subset, unless the full suite takes more than 5 minutes (then run targeted tests and note that the full suite is deferred)
- Capture both stdout and stderr
Phase 3: Capture output
Record the raw output from every command.
- Include the exact command that was run
- Include the full output (or the summary section for large outputs)
- Include the exit code
- Do not fabricate timestamps; the current session is the implicit timestamp
Phase 4: Compare to expected
Check the output against the success criteria.
- All tests pass (zero failures, zero errors, zero skipped unless pre-existing)
- Zero lint errors (zero warnings for strict projects)
- Type checker reports zero errors
- Build exits with code 0 and produces expected artifacts
- If any check fails, the work is NOT done. Fix the issue and restart from Phase 2
Phase 5: Cite evidence in the claim
Reference the captured output when claiming completion.
- State which commands were run
- State the result of each (pass count, exit code, key output lines)
- If any caveats exist (pre-existing failures, skipped checks, known issues), state them explicitly
- Never use language that hides uncertainty (see Language to avoid)
What counts as evidence
See evidence-patterns for the full reference.
| Evidence (valid) | Non-evidence (invalid) |
Test runner output: 42 passed, 0 failed | "Tests should pass" |
Linter output: 0 errors, 0 warnings | "I ran the linter" (no output shown) |
| Build log ending with exit code 0 | "The build looks fine" |
HTTP response: 200 OK with expected body | "The endpoint works" |
Type checker: Found 0 errors | "Types are correct" |
Deployment log: Successfully deployed v2.3.1 | "I deployed it" |
| Diff showing expected file changes | "I made the changes" |
| Screenshot of UI in expected state | "The UI looks right" |
Verification by task type
Different changes need different verification. See verification-checklist for full checklists per task type.
| Task type | Required checks |
| Code change | Tests, linter, type checker, build |
| Configuration change | Validation command, application startup, affected feature smoke test |
| Database/schema change | Migration runs forward, migration rolls back, application starts, affected queries work |
| Infrastructure change | Deployment succeeds, health checks pass, smoke tests pass, rollback tested |
| Documentation change | Links resolve, code examples execute, formatting renders correctly |
| Dependency update | Lock file updated, install succeeds, full test suite passes, build succeeds |
| Bug fix | Failing test reproduced the bug BEFORE fix, test passes AFTER fix, regression suite clean |
Common fake-completion patterns
See failure-modes for the full catalog.
| Pattern | Why it fools people | What actually happened |
| Compile-checked, not run | "It compiles" feels like progress | Syntax is valid but logic may be wrong; runtime behavior is untested |
| Partial test run | "Tests pass" is technically true for the 3 you ran | The other 200 tests might be broken by your change |
| Stale cache | Output looks right | You are seeing cached results from before your change |
| Mocked-out integration | Unit tests pass | The real service returns a different format than your mock |
| Wrong environment | "Works on my machine" | Config, data, or dependencies differ in staging/production |
| Exit code ignored | Log output looks normal | The command returned non-zero, so it failed |
| Self-reported success | "I verified it" | No output captured, no command shown, no evidence provided |
| Premature celebration | "It works!" after the first positive signal | One passing test does not mean the feature is complete |
Language to avoid
| Banned phrase | Why it fails | Preferred alternative |
| "Should work" | Prediction, not evidence | "Ran npm test, exit code 0, 47/47 passed" |
| "I believe it's correct" | Belief is not verification | "Type checker reports 0 errors" |
| "Looks good" | Visual impression, not a test | "Linter output: 0 errors, 0 warnings" |
| "I ran it" | Claim without output | "Ran pytest -v, output: 23 passed in 1.4s" |
| "It's working now" | Status without proof | "Health check returns 200, response body contains expected fields" |
| "I tested it" | Vague, unverifiable | "Ran go test ./..., 156 tests passed, 0 failed" |
| "Everything passes" | Unsubstantiated universal claim | "CI pipeline green: lint, type-check, test, build, all exit 0" |
| "Fixed" | Conclusion without evidence | "Failing test now passes. Regression suite: 312/312 green." |
| "Done" (alone) | Completion without criteria | "All verification checks pass. See output above." |
Quality checklist
Before claiming any work is complete:
- All modified files are identified
- Verification commands are identified for each change type
- Every verification command has been run (not recalled from memory; run fresh)
- Output from every command is captured and visible
- All tests pass with zero failures
- Linter reports zero errors
- Type checker reports zero errors (if applicable)
- Build succeeds with exit code 0 (if applicable)
- No untracked or uncommitted files that should be included
- No language from the "Language to Avoid" table appears in the completion claim
- Any caveats, known issues, or deferred checks are explicitly stated
- Evidence is cited, not asserted
Critical rules
- Run before you claim. Every verification command must be executed in the current session. Output from a previous session, a previous branch, or a previous version of the code is not evidence.
- Capture everything. Paste output, do not paraphrase it. "Tests pass" is a claim. "Ran
cargo test, 89 passed, 0 failed" is evidence. - Check exit codes. A command that prints friendly output but exits non-zero has failed. Always verify the exit code, not just the log output.
- Full suite, not cherry-picked. Run the complete test suite, not just the tests for the file you changed. Your change may break something elsewhere.
- No self-certification. "I verified it" without captured output is worth zero. The evidence must be visible to anyone reading the completion claim.
- Caveats are mandatory. If any check was skipped, any test was ignored, or any known issue remains, state it explicitly. Hidden caveats are lies by omission.
- Failures mean not done. If any verification command fails, the work is not complete. Fix the failure and re-run. There is no "done except for that one failing test."
- Fresh over stale. If you made any change after the last verification run, even a one-character fix, re-run all verification. The last change is the one that breaks things.
- Verification is part of the work. Code without verification is a draft, not a delivery.
- When in doubt, verify more. Over-verification wastes minutes. Under-verification wastes days.
Reference Files
| Reference | Contents |
| verification-checklist | Step-by-step checklists by task type: code, config, schema, infra, docs, dependency updates |
| evidence-patterns | What counts as evidence and what does not, with examples across stacks. |
| failure-modes | Catalog of fake-completion patterns: how agents and humans skip verification and get away with it, temporarily |
| done-definitions | Multi-tiered definition of done from local to production-verified, with evidence requirements per tier |
Integration with Other Skills
| Situation | Recommended Skill |
| Systematic bug investigation before claiming fix | debugging |
| Writing PR description after all checks pass | pr-message-writer |
| Checking security implications before marking done | security |
| Verifying performance impact of changes | performance |
Other versions187 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 187
- obra/superpowers★ 305ksame name
- jnMetaCode/superpowers-zh★ 8.4ksame name
- openai/plugins★ 7.4ksame name
- farm-fe/farm★ 5.6ksame name
- GanyuanRan/Aegis★ 1.4ksame name
- pcvelz/superpowers★ 1.3ksame name
- coco-research/coco★ 797same name
- pedronauck/skills★ 641same name
- derHaken/SuperAntigravity★ 439same name
- koaning/wigglystuff★ 437same name
177 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use chinese-code-review, chinese-commit-conventions and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
GEd520Skillchinese-code-review
中文 review 沟通参考——话术模板、分级标注(必须修复/建议修改/仅供参考)、国内团队常见反模式应对。仅在用户显式 /chinese-code-review 时调用,不要根据上下文自动触发。
Also in 7 projects that use this
GEd520Skillchinese-commit-conventions
中文 commit 与 changelog 配置参考——Conventional Commits 中文适配、commitlint/husky/commitizen 中文模板、conventional-changelog 中文配置。仅在用户显式 /chinese-commit-conventions 时调用,不要根据上下文自动触发。
Also in 7 projects that use this
obraSkilldiagnosing-superpowers
Use when a superpowers session went wrong and your human partner wants to know why — repeated work, ignored plans, stumbles, poor results, a skill that didn't fire, "it took too long", "why is it so expensive", "what is it doing" — or wants to build a bug report for the superpowers maintainers, for the current session or a past one identified by id or path, on any harness.
Also in 12 projects that use this
10CGSkillworkflow-runner
十步循环轻量编排器,协调 Phase Skills 执行,支持灵活组合。
Also in 7 projects that use this
MicrosoftSkillroot-cause-tracing
Use when errors occur deep in execution and you need to trace back to find the original trigger - systematically traces bugs backward through call stack, adding instrumentation when needed, to identify source of invalid data or incorrect behavior
Also in 6 projects that use this
kntismSkillcondition-based-waiting
Use when tests have race conditions, timing dependencies, or inconsistent pass/fail behavior - replaces arbitrary timeouts with condition polling to wait for actual state changes, eliminating flaky tests from timing guesses
Also in 3 projects that use this
- +2 more from GEd520
In this repository38 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llm-evalsSkill
- llm-observabilitySkill
- accessibilitySkill
- context-engineeringSkill
- debuggingSkill
- docs-lookupSkill
- performanceSkill
- securitySkill
- finishing-branchSkill
- game-feature-loopSkill
- handoffSkill
- hooks-and-guardrailsSkill
- pr-feedbackSkill
- security-researchSkill
- spec-driven-developmentSkill
- tddSkill
- agent-creatorSkill
- agentic-rules-writerSkill
- audit-dependenciesSkill
- brainstormingSkill
- communication-styleSkill
- find-test-gapsSkill
- plan-migrationSkill
- plugin-creatorSkill
- pr-message-writerSkill
- report-writerSkill
- researchSkill
- review-pr-coldSkill
- review-prSkill
- scan-refactorsSkill
- skill-creatorSkill
- skill-measureSkill
- stakeholder-update-writerSkill
- ticket-writerSkill
- ui-reviewSkill
- verify-acceptanceSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

