# Validate Code

> Run linting, formatting, type-checking, and pytest tests for the codebase using pre-commit. Use this skill whenever you need to validate that code changes pass all quality gates before committing, pushing and/or executing a coding plan.

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

---


# Validate Code

## When to Use

- After editing any Python file in the repository.
- Before committing or creating a pull request.
- When the user asks to "lint", "check", "validate", or "type-check" code.

## Command

Run **all** pre-commit hooks (ruff lint + format, mypy, pytest tests on push):

```bash
poetry run pre-commit run --all-files
```

## What It Checks

The `.pre-commit-config.yaml` defines these hooks:

| Hook            | Stage      | What it does                                      |
| --------------- | ---------- | ------------------------------------------------- |
| **ruff (fix)**  | pre-commit | Auto-fixes lint issues (except E501 line length)  |
| **ruff-format** | pre-commit | Enforces consistent formatting (Black-compatible) |
| **ruff (E501)** | pre-commit | Fails on remaining line-length violations         |
| **mypy**        | pre-commit | Static type-checking across `http_py/`            |
| **pytest**      | pre-push   | Runs `pytest -v`                                  |

> **Note:** The `pytest` hook only runs on `pre-push` stage by default.
> To include it during local validation, run:
>
> ```bash
> poetry run pre-commit run --all-files --hook-stage pre-push
> ```

## Interpreting Failures

1. **ruff lint / format** — If ruff auto-fixed files, they will show as
   "Failed" but the fixes are already applied. Re-run the command to confirm
   a clean pass.
1. **mypy** — Type errors must be resolved manually. Read the mypy output
   for file paths and line numbers.
1. **pytest** — Test failures include tracebacks. Fix the failing test or
   the code under test.

## Quick Individual Commands

```bash
# Format only
poetry run ruff format .

# Lint with auto-fix
poetry run ruff check --fix .

# Lint check only (no fix)
poetry run ruff check .

# Type-check only
poetry run mypy http_py

# Tests only
poetry run pytest -v
```

