Setup

Wavenumber Python projects use uv for environment management, dependency locking, builds, and tool execution.

Required Tools

Development Commands

uv sync --all-extras
uv run dev-std audit .
uv run rack run --all
uv run python -m build
uv run twine check dist/*

Lockfile Policy

Commit uv.lock. Do not hand-edit it. CI must fail when the lock is stale.

Distribution

wn-dev-std is published to PyPI so downstream projects can pin a reviewed governance tool version in CI. GitHub Release publication triggers release validation, including trusted publishing checks, before a release is treated as ready for downstream use. Projects based on this standard may opt into PyPI trusted publishing, internal publishing, or no publishing. The installed command is dev-std; wn-dev-std remains available as a compatibility alias.

Pure Python packages treat dist/ as transient build output. Native or binary-backed projects may stage artifacts under grouped paths such as dist/native/windows-x64/ and dist/wasm/browser/. Projects using this policy must document each artifact role, regeneration command, and release inclusion rule.

Mixed-mode projects should run native validation before wheel validation, then install the built wheel in a clean environment and smoke the public Python API plus the bundled command-line executable.

C++ Tooling

C++ projects use CMake, CTest, Ninja, clang-format, and clang-tidy. The reference formatter and clang-tidy starter files live under docs/templates/cpp/. CMake presets must enable CMAKE_EXPORT_COMPILE_COMMANDS=ON.

Zephyr Tooling

Zephyr firmware projects use west, the project-selected Zephyr SDK, dtc, LLVM tools, Python with Lizard, and any required flashing tools. The first Zephyr templates live under docs/templates/zephyr/. App-local build scripts should enable CMAKE_EXPORT_COMPILE_COMMANDS=ON, run prebuild signoff before west build, and run postbuild signoff after a successful build.