Mixed Mode Standard

The python-native-wasm profile covers packages that combine a Python distribution, native C or C++ build outputs, and optional WASM runtime artifacts. This profile inherits the native tooling expectations from the C++ Standard.

default_mixed_mode_standard

Returns the current mixed-mode profile for Python packages with native and WASM runtime artifacts.

render_mixed_mode_standard

Renders the mixed-mode profile as text or JSON.

Repository Shape

Build Backend

Pure Python packages use Hatchling. Mixed-mode packages may use a custom setuptools.build_meta path when the wheel must bundle platform executables or libraries. The custom hook must be documented and covered by installed-wheel validation. Bazel lanes build, test, and generate compile commands. CMake compatibility presets use Ninja and enable CMAKE_EXPORT_COMPILE_COMMANDS=ON.

Artifact Policy

Mixed-mode packages that commit distributable runtime artifacts should use grouped paths such as dist/native/windows-x64/, dist/native/linux-x64/, dist/native/macos-arm64/, and dist/wasm/browser/. Root-level files in dist/ are limited to documentation or manifests.

These grouped paths are not mandatory for every mixed/native package. Some packages use dist/native/** or dist/wasm/** only as ignored local staging until a release channel explicitly promotes an artifact.

Local build state remains ignored. Examples include build/, build-*/, build-wasm/, .deps/, out/, .venv/, and test result folders.

Release Signoff

Release signoff must prove that the native CLI, Python source wrapper, installed wheel, and WASM targets still work. The release gate should run Ruff, Pyright, clang-format, Lizard complexity checks for owned C/C++, CTest, native validation, package validation, and a stale artifact policy check.

Version Contract

Version identity must be synchronized across Python package metadata, Bazel module or CMake project metadata, CLI --version, native runtime version APIs, and ABI generation fields. Date-based public versions remain the default; ABI dates change only when the native ABI generation changes.

CI Shape

CI should keep separate lanes for Python signoff, native build and Bazel test or CTest, platform wheel build and installed-wheel smoke tests, WASM build and smoke tests, and final release validation from a GitHub Release published event.