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 model-only and is not published to PyPI. It still builds wheels and sdists so the packaging path is exercised. 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.