| name | preflight |
| description | Use before claiming work is done, before committing, before creating PRs, or before saying "it should work now." Enforces running verification commands and reading their output before making any completion claims. Evidence before assertions.
|
| version | 1.0.0 |
Preflight
The Rule
No completion claims without fresh verification evidence. "I believe this works" is not evidence. Test output is evidence. Linter output is evidence. A passing build is evidence.
The Process
1. Identify verification commands
What checks exist for this project?
| Check | Common commands |
|---|
| Tests | npm test, pytest, go test ./..., cargo test |
| Types | tsc --noEmit, mypy, pyright |
| Lint | eslint, ruff, golangci-lint |
| Build | npm run build, go build, cargo build |
| Format | prettier --check, black --check, gofmt -l |
If you don't know what checks exist, look for: package.json scripts, Makefile targets, CI config (.github/workflows/), or a CLAUDE.md that lists them.
2. Run them
All of them. Not just the one you think matters.
3. Read the output
Actually read it. Don't just check exit codes. A test suite can pass with warnings that matter. A build can succeed while emitting deprecation notices that indicate a problem.
4. Regression check
Did you add or change behavior? Write a test that catches it if it breaks.
- New feature: at least one test that proves it works
- Bug fix: a test that fails without the fix and passes with it
- Config change, formatting, trivial edits: no test needed
Don't generate noise. One focused regression test beats ten shallow ones.
5. Report honestly
- If everything passes: say so, with the evidence ("all 47 tests pass, linter clean, build succeeds")
- If something fails: say what failed, what it means, and what you'll do about it
- If you can't run checks (no test suite, no linter configured): say so explicitly
Rationalization Prevention
| Thought | Reality |
|---|
| "The tests are probably fine" | Run them. |
| "I only changed one line" | Run them. One line can break everything. |
| "The linter was already passing" | Run it again. Your change might have broken it. |
| "This doesn't have tests" | Then what does verification mean for this change? Answer that question. |
| "I'll just push and let CI catch it" | CI catching it means you didn't. That's the opposite of preflight. |
| "It compiled, so it works" | Compilation checks syntax, not correctness. Run the tests. |