agentleFS
krzysztofsurdykrzysztofsurdy/code-virtuoso/skills/knowledge/verification-before-completion/SKILL.md

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
  1. Distinctive:

    Run this cycle before every completion claim.

    line 47
  2. Distinctive:

    If unsure what to verify, verify everything.

    line 56
  3. Distinctive:

    Run every required command.

    line 60
  4. Distinctive:

    Run commands in the project root unless they require a specific directory

    line 62
  5. Distinctive:

    Use the project's own scripts and configuration.

    line 63
  6. Distinctive:

    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 …

    line 64
  7. Distinctive:

    Do not fabricate timestamps.

    line 74
  8. Distinctive:

    Check the output against the success criteria.

    line 78
  9. Distinctive:

    All tests pass (zero failures, zero errors, zero skipped unless pre-existing)

    line 80
  10. Distinctive:

    If any check fails, the work is NOT done.

    line 84
  11. Distinctive:

    If any caveats exist (pre-existing failures, skipped checks, known issues), state them explicitly

    line 92
  12. Distinctive:

    Never use language that hides uncertainty (see Language to avoid)

    line 93
  13. Distinctive:

    Before claiming any work is complete:

    line 155
  14. Distinctive:

    Run before you claim: Every verification command must be executed in the current session.

    line 172
  15. Distinctive:

    Full suite, not cherry-picked: Run the complete test suite, not just the tests for the file you changed.

    line 178
  16. Distinctive:

    Caveats are mandatory: If any check was skipped, any test was ignored, or any known issue remains, state it explicitly.

    line 182
  17. Distinctive:

    Failures mean not done: If any verification command fails, the work is not complete.

    line 184
  18. Distinctive:

    Fresh over stale: If you made any change after the last verification run, even a one-character fix, re-run all verification.

    line 186

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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

PrincipleMeaning
Evidence over assertionA claim is only as strong as the output backing it. No output, no claim.
Fresh over staleOnly verification run in the current session counts. Previous runs prove nothing about current state.
Complete over partialRunning 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 rememberedPaste the output. Do not summarize from memory. Memory lies.
Exit code over log linesA command that prints "OK" but exits non-zero has failed. Always check the exit code.
Automated over manualA 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.

TierWhat it meansMinimum evidence
Local doneWorks on the development machineTests pass, linter clean, type checker clean, build succeeds, all with captured output
Review-ready doneSafe for a peer to evaluateLocal done + changes committed, PR description matches actual changes, no untracked files
Merged doneAccepted into the main branchReview-ready done + CI pipeline green, reviewer approved, no merge conflicts
Deployed doneRunning in a target environmentMerged done + deployment command succeeded, health check returns expected status
Verified-in-production doneConfirmed working for real usersDeployed 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 typeRequired checks
Code changeTests, linter, type checker, build
Configuration changeValidation command, application startup, affected feature smoke test
Database/schema changeMigration runs forward, migration rolls back, application starts, affected queries work
Infrastructure changeDeployment succeeds, health checks pass, smoke tests pass, rollback tested
Documentation changeLinks resolve, code examples execute, formatting renders correctly
Dependency updateLock file updated, install succeeds, full test suite passes, build succeeds
Bug fixFailing test reproduced the bug BEFORE fix, test passes AFTER fix, regression suite clean

Common fake-completion patterns

See failure-modes for the full catalog.

PatternWhy it fools peopleWhat actually happened
Compile-checked, not run"It compiles" feels like progressSyntax is valid but logic may be wrong; runtime behavior is untested
Partial test run"Tests pass" is technically true for the 3 you ranThe other 200 tests might be broken by your change
Stale cacheOutput looks rightYou are seeing cached results from before your change
Mocked-out integrationUnit tests passThe 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 ignoredLog output looks normalThe 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 signalOne passing test does not mean the feature is complete

Language to avoid

Banned phraseWhy it failsPreferred 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

  1. 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.
  2. Capture everything. Paste output, do not paraphrase it. "Tests pass" is a claim. "Ran cargo test, 89 passed, 0 failed" is evidence.
  3. 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.
  4. 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.
  5. No self-certification. "I verified it" without captured output is worth zero. The evidence must be visible to anyone reading the completion claim.
  6. 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.
  7. 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."
  8. 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.
  9. Verification is part of the work. Code without verification is a draft, not a delivery.
  10. When in doubt, verify more. Over-verification wastes minutes. Under-verification wastes days.

Reference Files

ReferenceContents
verification-checklistStep-by-step checklists by task type: code, config, schema, infra, docs, dependency updates
evidence-patternsWhat counts as evidence and what does not, with examples across stacks.
failure-modesCatalog of fake-completion patterns: how agents and humans skip verification and get away with it, temporarily
done-definitionsMulti-tiered definition of done from local to production-verified, with evidence requirements per tier

Integration with Other Skills

SituationRecommended Skill
Systematic bug investigation before claiming fixdebugging
Writing PR description after all checks passpr-message-writer
Checking security implications before marking donesecurity
Verifying performance impact of changesperformance

Download now (ZIP)

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.