PLESTY defines four quality tiers that determine which gates are enforced at each stage of development. Each tier is a superset of the previous one, so moving from pixel to quantum means passing an increasing number of checks.
Tier overview
| Tier | Gates | When it runs | Purpose |
|---|---|---|---|
| pixel | 1–2 | Pre-commit | Fast formatting and metadata checks |
| nebula | 1–6 | Pre-push hook | Code quality, API matching, docs |
| quantum | 1–11 + d1–d3/e1–e2 | Full local verification | Complete module validation |
| ci | 1–14 | GitLab CI pipeline | Full pipeline with deploy and release |
pixel
The fastest tier, designed to run before every commit. It checks:
- Gate 1 — Metadata and namespace conventions
- Gate 2 — Code hygiene (ruff lint, ruff format, mypy)
These checks complete in seconds and catch the most common issues.
nebula
Runs as a pre-push hook. It includes all pixel gates plus:
- Gate 3 — API interface matching (base class inheritance)
- Gate 4 — Data layer compliance (return type annotations)
- Gate 5 — Documentation completeness (docs/index.md, CHANGELOG.md)
- Gate 6 — Dependency coexistence (no exact version pins)
Nebula ensures that pushed code is structurally sound and properly documented.
quantum
The full local verification tier. It includes all nebula gates plus:
- Gate 7 — Test coverage (≥80%)
- Gate 8 — Semantic versioning (tag reminder)
- Gate 9 — Licensing compliance (REUSE lint)
- Gate 10 — Vulnerability audit (pip-audit)
- Gate 11 — Docs build (Sphinx, local-only)
- Gate d1 — Device API pipeline (8 mock gates)
- Gate d2 — Device status contract
- Gate d3 — Device docs
- Gate e1 — Experiment contract
- Gate e2 — Experiment persistence
Quantum is the standard for all modules in the plesty check workflow.
ci
The CI pipeline tier. It includes all quantum gates (except gate 11, which is skipped in CI) plus:
- Gate 12 — Docs deploy (needs CI_BOT_TOKEN)
- Gate 13 — SAST secret detection
- Gate 14 — Build and release (v* tag triggers PyPI publish)
CI runs automatically on every push to the exp branch.
Choosing a tier
Most development uses the quantum standard. The plesty check command reads the standard from pyproject.toml:
[tool.plesty]
standard = "quantum"
Override it temporarily with:
uv run plesty check --standard pixel
Next steps
- Set up your workspace and run your first check
- Learn about each gate in detail in Quality Gates