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 .
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,