Contributing
Axiolid values small, proven boundaries over broad claims. A change is not complete when it compiles; it is complete when its capability, dependency direction, and failure behavior are evident.
Before you file anything
Where things go decides the surface: new functionality and optimizations start as discussions, papercuts and bugs are issues, and every decision is recorded rather than silently dropped.
Local checks
bash
cargo fmt --all -- --check
cargo build --workspace
cargo test --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps
scripts/geometry-feature-matrix.sh
scripts/probe_layering_gate.shThe feature matrix protects minimal builds. The probe mutates the declared layering boundary and proves the gate fails, then verifies byte-accurate restoration.
Design rules
- Keep Axiolid format-agnostic: source semantics belong in adapter projects.
- Do not add a concrete backend dependency to a representation or format boundary.
- Treat scalar paths as correctness oracles; benchmark and differentially test a faster path before claiming a performance win.
- Keep operation capability tied to an executable provider implementation.
- Record irreversible architecture choices under
docs/adr/. - Put open work in a GitHub issue, not in a checked-in plan. A code marker is written
TODO(#N). A crate'sREADME.mdsays what the crate is for and makes no coverage claim that the code and tests do not back (ADR 0078).
Documentation
The site is VitePress and deploys from main through GitHub Pages. Preview it locally:
bash
npm --prefix docs ci
npm --prefix docs run docs:devRecords
CHANGELOG.mdfiles follow Keep a Changelog.- Write an ADR from
docs/adr/_template.mdbefore an irreversible boundary or dependency change. - A research record in
docs/research/keeps measured evidence apart from proposals. cargo xtask docsgenerates every page derived from the crates: the crate reference (from each crate's manifest,README.mdandCHANGELOG.md), the per-crate changelog, anddocs/architecture/crate-map.mdanddependency-graph.md. Do not edit them by hand; change the source and regenerate.cargo xtask docs --checkruns in the gate and before every deploy. Package metadata does not prove a capability: the implementation and its conformance tests do.- A published crate's
README.mdis its crates.io page. It ends with its docs.rs, reference-page and source links, and states no version or publication status;cargo xtask docs --checkenforces both.
Diagrams, geometry, and equations
- Use fenced
mermaidfor architecture, state, and data-flow diagrams. IncludeaccTitleandaccDescr, and explain the same conclusion in nearby prose. - Use fenced ASCII
stlonly for small, reviewable geometry examples. GitHub renders the source natively; the VitePress theme parses the same source locally with an event-driven viewer. Keep capability evidence in tests, not in the picture. - Use
$...$and$$...$$for equations, define every symbol, and state the assumptions under which the equation applies. - Keep code, benchmark tables, file trees, and protocol records as code blocks; Mermaid is not a replacement for literal data.
See GitHub's primary documentation for Mermaid diagrams, STL models, and mathematical expressions.