Contributing
Read CLAUDE.md /
AGENTS.md and the
ADR index before changing anything.
Architecture changes (runtime isolation, ingress, secrets, persistence, API,
dependencies) need a new or updated ADR.
Verification
cargo build
cargo test
cargo fmt --all
cargo clippy --all-targets --all-features
Privileged runtime tests mutate namespaces, mounts, and cgroups, so they are gated and opt-in:
DENIA_RUN_PRIVILEGED_TESTS=1 cargo test --test linux_runtime_privileged -- --ignored
The test suite under tests/ covers API contracts, CLI flows (assert_cmd +
httpmock), deployment orchestration, domain verification, hosted-registry
contract + GC, ingress end-to-end, repository persistence, autoscaling lifecycle,
and the privileged Linux runtime.
Conventions
- Commit format:
<type>(<scope>): concise message, where type isfeat,fix,docs,test, orrefactor. - All persisted IDs are UUIDv7 (
uuid::Uuid::now_v7()); never use v4/v1. - Use
axumfor HTTP, explicit domain types at boundaries, typed errors over panics, and keep blocking filesystem/SQLite work off the async path. - Never commit secrets, local keys, tokens, or generated private config.
Project facts
- Language: Rust 2024 edition. Version: 1.1.1. License: Apache 2.0.
- Repository: github.com/zainokta/denia.
- Key dependencies:
axum+tokio,pingora,instant-acme,oci-client,rustix,rusqlite, SOPS + age, BuildKit.