Thank you for considering contributing to EVMX. This project is built on a single, unbroken rule, and every contribution — code, review, or question — is measured against it first:
"We do not know" is never collapsed into "there is nothing."
That rule governs verdicts, and it governs pull requests. If a change could collapse a known uncertainty into a false certainty, it does not land.
- Read the project map — it is the external memory of the project. A decision that is not recorded there is treated as not made.
- Read the README for the design contract (three outcomes, five evidence pieces, provenance-as-result).
- Check the existing issues for open work before opening a new one.
The default branch is protected. No one — including maintainers — pushes to it directly. Changes land only through a pull request that has passed review.
- Fork the repository (or create a feature branch).
- Use a branch named after what it changes, e.g.
feat/third-networkorfix/r5-stale-read. - Open a pull request against the default branch.
- Await at least one approving review before merge.
cargo build --workspace
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warningsGreen on all three is the entry standard — these are exactly the gates enforced
by the CI workflow (see .github/workflows/ci.yml).
- One problem per PR. A small, focused change is easier to verify than a large one, and easier to hold to the project's bar.
- Evidence with the code. If the change alters a detector or an invariant, say what the old and new behaviour are, and which tests demonstrate both.
- Do not manufacture certainty. If the change fixes a gate by assuming a fact the corpus does not establish, it will be rejected.
- Update the docs when you change the architecture. A design decision that
is not in
PROJECT_MAP.mdis not a decision.
The offline suite (351 tests, no network) must stay green. Live-network tests
exist and are #[ignore]d by default:
# run everything except live-network probes
cargo test --workspace
# run only the offline suite, explicitly
cargo test --workspace -- --skip probe_Two conventions matter:
- A test whose result depends on network conditions tests the network, not the
code — it belongs in a
#[ignore]d probe, not the offline suite. - Guards are proven by mutation: a guard that no test can break is not a guard. If your change touches a guard, the mutation of that guard must fail a test.
Use the issue templates where available. A good report includes:
- What you did.
- What you expected, phrased as evidence (the verdict, the named grounds).
- What you got, verbatim.
- The trace/fixture identifiers if relevant.
By contributing, you agree that your contribution is licensed under the project's dual license (Apache-2.0 OR MIT), consistent with the repository's terms.
If you have questions about the contribution model, open a discussion rather than silently changing the bar.