This document explains how to contribute to the project. We follow a
"Dual-Track" architecture where human-readable documentation lives in
the root and machine-readable policies live in .machine_readable/.
We welcome contributions in many forms: * Code: Improving the core verified stack or extensions. * Documentation: Enhancing AsciiDoc manuals or AI manifests. * Testing: Adding property-based tests or formal proofs.
-
Read the AI Manifest: Start with
0-AI-MANIFEST.a2mlto understand the repository structure. -
Environment: Use
guixdevelopordirenvallowto set up your tools (Idris2, Zig, Rust). -
Task Runner: Use
justto see available commands (just--list).
For detailed rules on branch naming, commit messages, and the PR process, please refer to the machine-readable metadata in .machine_readable/.
All contributors are expected to adhere to our ethical standards. See CODE_OF_CONDUCT for details.
Every commit that reaches the default branch must be signed; a ruleset refuses unsigned pushes. Estate policy: SIGNING-POLICY.
- People and interactive agents sign with an SSH key registered on GitHub
as a signing key (
gpg.format=ssh,user.signingkey=<key>.pub,commit.gpgsign=true). The committer email must be verified on that account. - Apps, bots and workflows never
git pushlocal commits. They write through the API (createCommitOnBranchor the estatesigned-pushaction) so that GitHub signs each commit. - Merge PRs with squash. The ruleset checks every commit on the PR branch,
not just the result, so one unsigned commit blocks the merge. Re-create such a
branch with signed commits (
git cherry-pick -S) and open a new PR. Rebase-merge replays commits unsigned and is disabled.