Configure three-layer pre-commit system with linting, type checking, and testing hooks. Use for quality gate setup and code standards. Skip if pre-commit is optimally configured.
Configure a three-layer pre-commit quality system that enforces linting, type checking, and testing before every commit.
The system is organised in three layers, each with a different cost / coverage tradeoff:
This layering keeps the fast feedback loop fast while still catching the slow / project-specific bugs before they land.
The detailed configuration patterns are in modules; load only the ones you need:
modules/standard-hooks.md: Layer 1 patterns for
Python, Rust, and TypeScript (load when configuring base
linters).modules/component-level-hooks.md: Layer 2 monorepo
scripts and pre-commit wiring (load when project has
multiple components / plugins).modules/validation-hooks.md: Layer 3 custom hooks
and SKIP patterns (load when enforcing project conventions
beyond linting).modules/ci-integration.md: GitHub Actions workflow
plus a complete .pre-commit-config.yaml example (load
when wiring CI to mirror local checks).modules/troubleshooting.md: timing tables, cache
clearing, hook-failure recovery (load when hooks are slow
or failing).```bash
python3 plugins/attune/scripts/attune_init.py \ --lang python \ --name my-project \ --path .
mkdir -p scripts chmod +x scripts/run-component-*.sh ```
Create pyproject.toml with strict type checking:
```toml [tool.mypy] python_version = "3.12" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true strict = true
[[tool.mypy.overrides]] module = "plugins.*" strict = true ```
```toml [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["src"] addopts = [ "-v", # Verbose output "--strict-markers", # Strict marker enforcement "--cov=src", # Coverage for src/ "--cov-report=term", # Terminal coverage report ]
markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"')", "integration: marks tests as integration tests", ] ```
```bash
uv sync --extra dev
uv run pre-commit install
uv run pre-commit run --all-files
git add . git commit -m "feat: add feature"
```
For full quality checks (CI/CD, monthly audits):
```bash #!/bin/bash
set -e
echo "=== Running Full Quality Checks ==="
./scripts/run-component-lint.sh --all ./scripts/run-component-typecheck.sh --all ./scripts/run-component-tests.sh --all
echo "=== All Quality Checks Passed ===" ```
Pre-commit hooks run in this fixed order; all must pass for the commit to succeed:
Start with strict settings from the beginning: they are
easier to maintain over time. Configure type checking with
strict = true in pyproject.toml, set up testing early
(include pytest in pre-commit), and document the reason
whenever you must skip a hook.
Use a gradual adoption strategy. Start with global checks
(Layer 1), then add component-specific checks (Layer 2)
once legacy issues are resolved. Use --no-verify only for
true emergencies and document why.
Standardize per-component Makefiles for lint, typecheck,
and test targets. Centralize common settings in a root
pyproject.toml while allowing per-component overrides.
Automate change detection so commits stay fast, and use
progressive disclosure (summary first, detail on failure).
Skill(attune:project-init): Full project initializationSkill(attune:workflow-setup): GitHub Actions setupSkill(attune:makefile-generation): Generate component
MakefilesSkill(pensive:shell-review): Audit shell scripts for
exit-code and safety issues.pre-commit-config.yaml exists at the project root with hooks covering at minimum
Layer 1 (whitespace, YAML/TOML/JSON syntax, global linting).uv run pre-commit run --all-files exits 0 after the configuration is installed,
confirming all hooks pass on the current codebase state.git commit with a staged change triggers the pre-commit hooks automatically (verified
by uv run pre-commit install exit code 0 and presence of .git/hooks/pre-commit).--no-verify bypass is absent from the project's documented workflows; if one is
found in existing scripts, it is flagged as a violation rather than silently accepted.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
Tags:pre-commit, quality-gates, linting, type-checking, testing