preflight-checks
$
npx mdskill add rileyhilliard/claude-essentials/preflight-checksRun project linters and formatters before committing code.
- Catches quality errors early instead of relying on pre-commit hooks.
- Auto-detects tools from package.json, tsconfig.json, and other configs.
- Executes specific check commands for each identified tool.
- Applies automatic fixes where available or flags manual intervention.
SKILL.md
.github/skills/preflight-checksView on GitHub ↗
--- name: preflight-checks description: Detect and run project linters, formatters, and type checkers before committing or claiming completion. Auto-detects tools from project config files. --- # Preflight Checks Run the project's code quality tools before committing. Catch errors early instead of letting pre-commit hooks catch them. ## Tool Detection Detect available tools from project config files. Check in this order: | Config File | Tool | Check Command | Fix Command | |-------------|------|---------------|-------------| | `package.json` scripts | npm/yarn/pnpm | Look for `lint`, `typecheck`, `format`, `check` scripts | Run with `--fix` where available | | `.eslintrc*` / `eslint.config.*` | ESLint | `npx eslint <files>` | `npx eslint --fix <files>` | | `tsconfig.json` | TypeScript | `npx tsc --noEmit` | Manual fix required | | `.prettierrc*` / prettier in package.json | Prettier | `npx prettier --check <files>` | `npx prettier --write <files>` | | `pyproject.toml` with `[tool.ruff]` | Ruff | `ruff check <files>` | `ruff check --fix <files> && ruff format <files>` | | `pyproject.toml` with `[tool.mypy]` / `mypy.ini` | mypy | `mypy <files>` | Manual fix required | | `pyproject.toml` with `[tool.black]` | Black | `black --check <files>` | `black <files>` | | `.flake8` / `setup.cfg` with `[flake8]` | Flake8 | `flake8 <files>` | Manual fix required | | `go.mod` | Go | `go vet ./...` | `gofmt -w <files>` | | `Cargo.toml` | Rust | `cargo clippy` | `cargo clippy --fix` | | `.pre-commit-config.yaml` | pre-commit | `pre-commit run --files <files>` | Runs auto-fix internally | ## Execution Order Run tools in this order. Each step can change code that later steps check. 1. **Formatters** (auto-fix): prettier, black, ruff format, gofmt 2. **Linters** (auto-fix where possible): eslint --fix, ruff check --fix 3. **Type checkers** (manual fix): tsc, mypy, pyright ## Scope Only check files that are staged or modified. Don't run checks on the entire codebase. ```bash # Staged files git diff --cached --name-only --diff-filter=ACM # Unstaged modified files git diff --name-only --diff-filter=ACM ``` Filter to relevant extensions for each tool (e.g., only `.ts`/`.tsx` for tsc, only `.py` for ruff). ## Auto-Fix Protocol 1. Run the formatter/linter with its fix flag 2. Re-stage any files that were modified: `git add <fixed-files>` 3. Report what was changed: "Fixed 3 formatting issues in src/auth/login.ts" ## When to Run - Before `git commit` (used by `/ce:commit`) - Before claiming work is complete - Before creating a PR (used by `/ce:pr`) ## Failure Handling Distinguish between fixable and non-fixable errors: **Fixable (auto-fix and move on):** - Formatting errors (whitespace, trailing commas, import ordering) - Simple lint errors with auto-fix support **Needs human decision (report and stop):** - Type errors (wrong types, missing properties) - Complex lint errors without auto-fix - Test failures - Errors you don't understand Never silently skip a failing check.