Thanks for opening this file. ECHIDNA is owner-maintained and slow-merging by design: each change has to compose with a trust-hardened verification pipeline, a polyglot backend surface, and the RSR / CCCP hard-rule set. This document tells you how to keep your contribution composable.
-
Skim
README.adocfor the overview andEXPLAINME.adocfor "show me the receipts". -
Read
RSR_COMPLIANCE.adoc. The hard-rule list (RSR-H1…H15) is enforced by CI; the soft conventions are checked at review time. -
Open an issue before doing significant work — design and scope discussions are cheaper than a re-review.
-
If you’re using an AI agent (Claude Code, GitHub Copilot, etc.), read
CLAUDE.mdfirst; it carries the collaboration brief and the things to avoid sweeping.
git clone https://github.com/hyperpolymath/echidna.git
cd echidna
just doctor # verify toolchain
just heal # auto-install missing tools
just tour # codebase tourLanguage toolchains are described in QUICKSTART-DEV.adoc.
| Type | Notes |
|---|---|
Corrective (bug fix) |
Welcome. Cite the failing test, log line, or reproduction in the PR body. If the fix involves a new test, that test must fail at the parent of the fix commit and pass at the fix commit. |
Adaptive (env / dep / upstream change) |
Welcome. Pin every action SHA, every tool version, and every
upstream release. The |
must |
trust |
adjust |
bust |
dust |
intend` family tools (R1 rule); other unpinned installs may be flagged by reviewers. |
Perfective (refactor / docs / clarity) |
Welcome if pareto-optimal: every user-facing surface should be
at least as informative after the change. Don’t shave numbers or
cite-points out without leaving a canonical pointer in their place
(see |
Preventive (proactive hardening) |
Welcome with a stated motivation. Drive-by hardening with no current risk should defer to a tracked issue first. |
-
Python anywhere outside
salt/— banned by RSR-H4. The ML layer is Julia; the rest is Rust / Idris2 / Chapel / Zig / AffineScript-or-ReScript. -
Dockerfiles — RSR-H15 requires Podman +
Containerfile(or.containerization/Containerfile.wave3for the per-prover image tree). -
Make — RSR-H14: Justfile is primary.
-
believe_me,assert_total,unsafePerformIO,prim__crashinsrc/abi/— the Idris2 ABI is gated by.github/workflows/idris2-abi-ci.yml; the scan rejects all four unconditionally. Existing comments referencing those tokens are fine; new uses are not. -
unsafe {}in Rust without a// SAFETY:comment — RSR-H6. -
Removing CI workflows — RSR-H7: needs explicit owner approval.
-
Generated code outside
generated/— RSR-H3.
Conventional Commits prefixes — feat, fix, docs, refactor,
test, chore, ci, build, perf. The first line stays at or
under 72 characters; the body wraps at 80 and explains why. The
project uses GPG-signed commits (git commit -S); a maintainer can
help reviewers verify on request.
For PRs touching more than one concern, prefer multiple atomic commits over a single squash blob — squash happens at merge time.
-
Branch off
main(origin/main). Stacked PRs against feature branches are accepted but require the base branch in the PR description. -
Rebase, don’t merge, when pulling in main mid-PR.
-
Fill in the PR template (the trio of Summary, Why, Test plan blocks is the floor). If your PR touches the trust pipeline, the Idris2 ABI, or the Chapel layer, name the invariants you preserved in the Why block.
-
Auto-merge (
gh pr merge <n> --auto --squash --delete-branch) is fine and encouraged for low-risk PRs once CI is green. Admin merge is the owner’s tool for clearing pre-existing red checks at source.
-
cargo test --libfor unit tests; per-module test functions are expected at change time. -
cargo test --testsfor integration suites undertests/. -
cargo test --test integration_testsfor the dispatcher end-to-end suite specifically. -
cargo benchfor criterion benchmarks. Regressions block merge by convention — call out an expected regression in the Why block before benchmarking. -
idris2 --build src/abi/echidnaabi.ipkgfor the ABI. The CI gate for this isType-check Idris2 ABI definitions. -
just chapel-build && just chapel-smoke && just chapel-testfor the optional Chapel layer.
The doc surfaces and their authoritative responsibilities are:
| Surface | Owns |
|---|---|
Overview, prover surface, quick start, architecture pointers. Defers counts to |
|
Thin Markdown pointer to |
|
"Receipts for the README claims" — names commands and pointers, not embedded numbers. |
|
Per-release notes; the single source of truth for "what shipped in vX.Y". |
|
The canonical prover-count and tier table. If you find a doc that names a specific count, route it through here. |
|
System architecture. |
|
Environment variables. |
|
Direction beyond the next release. |
|
The hard-rule list and ECHIDNA’s out-of-template adaptations. |
|
Collaboration brief for Claude Code; not a tutorial. |
If you add a new doc, slot it into the table above and link to it from
the Documentation section of README.adoc.
This project is licensed under MPL-2.0; new source files carry the header:
// SPDX-License-Identifier: CC-BY-SA-4.0
// SPDX-FileCopyrightText: <year> <name> <email>Don’t migrate existing files' SPDX identifiers without explicit owner direction — the license stance is intentionally MPL-2.0 across the documentation surface, and historical drift on individual files is owner-managed.
ECHIDNA’s contribution model historically references the
Palimpsest License as an ethical / philosophical framework
alongside the legal licence. That framework reference is preserved
as part of the project’s stance: the legal licence remains as
declared by the SPDX header on each file (MPL-2.0 for the
documentation surface; historical drift owner-managed). The
Palimpsest framework is a discipline about how contributions are
received, attributed, and forwarded — orthogonal to the SPDX
choice. The Palimpsest licence proper is the legal licence only on
palimpsest-license, palimpsest-plasma, and (prospectively)
consent-aware-http.
Vulnerabilities go through SECURITY.md, not the
public issue tracker. The supply-chain hardening conventions
(SHA-pinned actions, R1 family-tool pins, OpenSSF Scorecard
enforcement) are enforced by CI; the governance workflow is the
gate.
-
Open an issue: https://github.com/hyperpolymath/echidna/issues
-
Read the project Code of Conduct:
CODE_OF_CONDUCT.md -
See current maintainers:
MAINTAINERS.adoc