HOVEL // module 01.17
Module 01.17 Payload provider / Integrated

Formatting and Linting

Run quality workflows through Aspect CLI from the repository root. The underlying formatters, linters, Python runtime, and C toolchain are pinned Bazel inputs; no Picblobs virtual environment or host linter installation is required.

# Apply formatting
aspect run //modules/picblobs/tools:format_write --

# Read-only formatting and Python/Bazel lint checks
aspect test --bazel-flag=--config=picblobs_quality //modules/picblobs/tools:format_check
aspect test --bazel-flag=--config=picblobs_quality //modules/picblobs/tools:lint_check

# Full Picblobs CI gate
aspect hovel-check modules

# Optional C static analysis target
aspect hovel-check modules

Optional repository hooks can be installed with aspect hovel-hooks. They call Aspect-backed checks rather than exposing the underlying tool commands.

Formatters and linters

Language Tool Configuration
C/H files clang-format modules/picblobs/.clang-format
C/H files clang-tidy modules/picblobs/.clang-tidy and Bazel lint aspects
Python Ruff formatter and linter modules/picblobs/ruff.toml
C and Python Lizard complexity checks modules/picblobs/tools/lint.py and modules/picblobs/tools/lizard_baseline.txt

Complexity

# Check the complete declared source set
aspect test --bazel-flag=--config=picblobs_quality //modules/picblobs/tools:lint_check

# Run the lint materializer and forward an explicit source selection
aspect run //modules/picblobs/tools:lint_run -- -- src/payload/hello.c python/tests/test_python_api.py

The Bazel-managed lint target runs Lizard with a maximum cyclomatic complexity number (CCN) of 10. Its declared input set excludes build artifacts, virtual environments, and generated output trees. Explicit Picblobs-relative paths forwarded after -- narrow the materializer to those sources without bypassing the Aspect/Bazel toolchain.