# Preflight

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

- Skill: `jessedegans/preflight` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jessedegans/preflight`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jessedegans/preflight/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jessedegans (https://skillmd.com/u/jessedegans)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jessedegans/preflight

---


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

