These gates run entirely locally with no network access. They complete in under 15 seconds on a typical module.
pixel
[SDK]
Gate 1 — Metadata & Namespace
Checks
pyproject.toml: required fields present (name, version, description, authors); package name matches plesty-<module> pattern; plesty/<module>/ directory exists. If module_type is present in [tool.plesty], validates it is one of device, experiment, analyzer, core.
pixel
[SDK]
Gate 2 — Code Hygiene
Runs
ruff (E, F, W, D rule sets) with the SDK ruff.toml (line-length = 99). Runs ruff format --check. Runs mypy type-checking (excluding tests/). All three must pass with zero errors.
nebula
[SDK]
Gate 3 — API Interface Matching
Static AST analysis: any class that imports from
plesty.lib.* must inherit from the imported base class. For example, a class importing BaseDeviceSyncModel must list it in its MRO. Catches cases where a developer imports the class but forgets to inherit from it.
nebula
[SDK]
Gate 4 — Data Layer Compliance
All public methods (those not prefixed with
_) must have explicit return type annotations. Accepts None for procedures. Prevents return type drift in the public API.
nebula
[SDK]
Gate 5 — Documentation Completeness
docs/index.md (or index.rst) must exist. CHANGELOG.md must exist and must have been updated (file modified) since the last git tag. This ensures release notes are always current.
nebula
[SDK]
Gate 6 — Dependency Coexistence
No exact version pins (
==x.y.z) in [project.dependencies] or [dependency-groups]. Use compatible ranges: >=x.y,<x+1. Prevents dependency conflicts when multiple PLESTY modules are installed together.
Quick fixes
| Gate | Common failure | Fix |
|---|---|---|
| 2 | Format violation | uv run ruff format --config <sdk-ruff.toml> . |
| 2 | Lint violation | uv run ruff check --fix . |
| 2 | Mypy error | Add return type annotation; fix type mismatch |
| 5 | Missing docs/index.md |
Create minimal overview file |
| 5 | Stale CHANGELOG | Add a dated entry to CHANGELOG.md |
| 6 | Exact pin == |
Change to >=x.y,<x+1 |