MANDATORY verification before claiming anything works. Run actual commands, read actual output, provide evidence. Use when claiming tests pass, build succeeds, or code works.
NEVER claim something works without running it and reading the output.
Not "should work". Not "looks correct". Not "I think it passes".
RUN IT. READ IT. PROVE IT.
Before claiming ANY of the following, you MUST provide evidence:
MUST run: mix test
MUST read: Actual test output showing "X tests, 0 failures"
MUST provide: Exact output or test count
# Required evidence
$ mix test
..........
Finished in 0.3 seconds (0.1s async, 0.2s sync)
10 tests, 0 failures
# This is evidence ✓
MUST run: mix compile --warnings-as-errors
MUST read: Output showing "Compiled" or error messages
MUST provide: Confirmation of zero warnings
# Required evidence
$ mix compile --warnings-as-errors
Compiling 5 files (.ex)
Generated my_app app
# This is evidence ✓
MUST run: mix format --check-formatted
MUST read: Output or lack thereof
MUST provide: Confirmation no files would be formatted
# Required evidence
$ mix format --check-formatted
# (no output means all files formatted)
# This is evidence ✓
MUST run: mix credo --strict
MUST read: Analysis results
MUST provide: Confirmation of "no issues found"
# Required evidence
$ mix credo --strict
Checking 42 source files...
Please report incorrect results: https://github.com/rrrene/credo/issues
Analysis took 0.3 seconds (0.2s to load, 0.1s running 100 checks on 42 files)
17 mods/funs, found no issues.
# This is evidence ✓
MUST run: mix dialyzer
MUST read: Type checking results
MUST provide: "done (passed successfully)" message
# Required evidence
$ mix dialyzer
...
Total errors: 0, Skipped: 0, Unnecessary Skips: 0
done (passed successfully)
# This is evidence ✓
MUST run: mix ecto.migrate
MUST read: Migration execution output
MUST provide: Confirmation migration completed
# Required evidence
$ mix ecto.migrate
15:42:13.456 [info] == Running 20231201150000 MyApp.Repo.Migrations.CreateUsers.change/0 forward
15:42:13.458 [info] create table users
15:42:13.478 [info] == Migrated 20231201150000 in 0.0s
# This is evidence ✓
MUST run: Test that exercises the function MUST read: Test output showing it passes MUST provide: Example usage or test code
# Required evidence
test "create_user/1 with valid attrs creates user" do
attrs = %{name: "Alice", email: "alice@example.com"}
assert {:ok, %User{} = user} = Accounts.create_user(attrs)
assert user.name == "Alice"
assert user.email == "alice@example.com"
end
# ✓ Test passes with actual run
MUST run: The command that revealed the issue MUST read: Output showing issue no longer appears MUST provide: Before/after comparison
# Required evidence - BEFORE
$ mix dialyzer
lib/my_app.ex:42:pattern_can_never_match
Total errors: 1
# Applied fix...
# Required evidence - AFTER
$ mix dialyzer
Total errors: 0, Skipped: 0, Unnecessary Skips: 0
done (passed successfully)
# This is evidence ✓
These phrases are BANNED unless accompanied by actual command output:
❌ "The tests should pass" ❌ "This should compile" ❌ "I believe this works" ❌ "This looks correct" ❌ "The code appears to be working" ❌ "I think this fixes it" ❌ "This ought to work" ❌ "Assuming the tests pass" ❌ "If you run the tests, they'll pass" ❌ "The build will succeed"
Instead, RUN THE COMMAND and report actual results.
Before claiming you're done with ANY task:
If you can't check ALL boxes with evidence, you're not done.
WRONG:
I've implemented the create_user function. The tests should pass now.
RIGHT:
I've implemented the create_user function. Running tests:
$ mix test test/my_app/accounts_test.exs
..........
Finished in 0.2 seconds (0.1s async, 0.1s sync)
10 tests, 0 failures
✓ All tests pass.
WRONG:
I've fixed the compilation error. It should compile now.
RIGHT:
I've fixed the compilation error. Compiling:
$ mix compile --warnings-as-errors
Compiling 1 file (.ex)
Generated my_app app
✓ Compiles with zero warnings.
WRONG:
I added the @spec. Dialyzer won't complain anymore.
RIGHT:
I added the @spec. Running Dialyzer:
$ mix dialyzer
Finding suitable PLTs
Checking PLT...
...
Total errors: 0, Skipped: 0, Unnecessary Skips: 0
done (passed successfully)
✓ Dialyzer passes with zero errors.
WRONG:
The migration is ready and should run fine.
RIGHT:
Running the migration:
$ mix ecto.migrate
15:42:13.456 [info] == Running 20231201150000 MyApp.Repo.Migrations.CreateUsers.change/0 forward
15:42:13.458 [info] create table users
15:42:13.478 [info] == Migrated 20231201150000 in 0.0s
✓ Migration executed successfully.
If you run a command and it fails:
For EVERY change you make:
# Edit code
def create_user(attrs) do
# ... implementation
end
$ mix test test/my_app/accounts_test.exs:42
.
Finished in 0.1 seconds
1 test, 0 failures
$ mix test
..........
Finished in 0.3 seconds
10 tests, 0 failures
$ mix format --check-formatted
$ mix credo --strict
$ mix dialyzer
✓ Tests pass (10/10)
✓ Code formatted
✓ Credo: no issues
✓ Dialyzer: 0 errors
Only THEN can you claim the task is complete.
This skill works with:
Example TDD verification:
1. Write test → RUN → See it fail ← VERIFICATION
2. Implement → RUN → See it pass ← VERIFICATION
3. Refactor → RUN → See it still passes ← VERIFICATION
STOP. Fix the environment so you CAN run tests. Testing is non-negotiable.
STOP. Fix the flakiness before proceeding. Flaky tests = broken tests.
Run it anyway. Cache the PLT. Use mix dialyzer --incremental. No shortcuts.
Still verify. Run mix docs and confirm it generates without warnings.
Still verify. Run mix format --check-formatted and ensure formatting is maintained.
WRONG. Code is never obviously correct. Computers are precise. Run it.
WRONG. Run it NOW, in THIS context, with THESE changes.
WRONG. Catch it locally BEFORE pushing. CI is last resort, not primary check.
WRONG. Confidence without evidence is just hope. RUN. THE. COMMAND.
WRONG. Trust, but verify. Actually, just verify. Evidence > trust.
If you claim something works without running it:
The 30 seconds "saved" by not running tests costs 30 minutes debugging later.
Evidence or it didn't happen.
If you didn't run it, you don't know if it works.
If you can't quote the output, you didn't run it.
When verifying, use this template:
## Verification Results
### Tests
$ mix test
[paste actual output]
✓ 10 tests, 0 failures
### Compilation
$ mix compile --warnings-as-errors
[paste actual output]
✓ Zero warnings
### Credo
$ mix credo --strict
[paste actual output]
✓ No issues found
### Dialyzer
$ mix dialyzer
[paste actual output]
✓ 0 errors
## Conclusion
All verification steps passed. Task complete.
"Code doesn't work until you run it and prove it works."
"Assumptions are the mother of all failures."
"If you can't quote the output, you didn't verify it."
RUN. READ. REPORT. Every. Single. Time.
npx skills add mkreyman/elixir-verification-gate下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer