Clone and install
Install Python 3.13+, uv, Bun, and Docker with Compose. The development stack uses ports 5432, 8000, 8080, and 5000; stop any service already using them. Clone the repository and install its dependencies:Start the development environment
Load the development catalog:
Finish local setup through the webapp origin:
.airmux/dataplane.key when needed. Keep that key with its local database.
Develop and verify
Create a branch for your change. Add a behavior test, make the change, and run the checks for the affected area. For a full local check:uv run pytest apps/control-plane/tests/unit. Integration tests use the Postgres service started above. For inference request-path changes, run uv run pytest tests/acceptance/full_stack/scenarios and verify a real request through the local gateway.
Contribute a change
Before editing, read CONTRIBUTING.md,AGENTS.md, and any relevant design record. Update generated contracts when their source changes, and commit generated outputs with the change.
Open a pull request against main with a concise summary of user impact and the checks you ran. Draft and ready pull requests run the same fast checks. Main CI runs the broader checks after merge. Address review feedback and merge after the required CI and security checks pass.
Publish a release
The rootVERSION file is the public package version. Publish Release requires the full SHA of the version pull request’s merge commit on main. It checks Main CI and Security for that exact commit. The other workspace projects stay at 0.0.0.
Checklist
- Run Actions → Prepare Release on
main, then merge its pull request - Wait for Main CI and Security to pass
- Run Actions → Publish Release on
mainwith the version PR’s merge commit SHA; wait for it to finish - Check the GitHub release, PyPI package, and GHCR version and
latesttags
VERSION. Publish Release confirms that the supplied commit changed VERSION and has not already been tagged. It uses the validated Python and container artifacts from that commit’s successful Main CI run; it does not rebuild them. It checks installation and live providers before creating the tag, then publishes and verifies the package and image. The release environment supplies provider credentials and RELEASE_GITHUB_TOKEN; PyPI uses its trusted publisher for release.yml.
If a release fails
Install a local build
Build and install an unreleased checkout, then run its portable installation smoke test outside the repository:airmux command is then available outside the repository.