Contributing to EMET
July 3, 2026 ยท View on GitHub
EMET is a re-derivability-based integrity verifier. Its value is that every verdict it emits can be reproduced, and that it refuses to become an authority. Contributions are welcome - within the boundaries below, which are not negotiable.
The boundaries a change must respect
A pull request must not make EMET:
- emit a verdict outside the closed lattice
MATCH | DRIFT | UNVERIFIABLE(in particular, neverTRUSTED); - adjudicate a model's safety or content decision;
- run inside, or depend on being hosted by, the system it audits;
- enforce, block, sign, or actuate of its own accord;
- depend on a secret or a held key, or on any claim it cannot re-derive.
A change that bends one of these is out of scope no matter how useful. See SPEC.md section 6.
Running the checks
python test_membrane.py # behavior proof (23 tests)
python conformance/run.py membrane.py # reference conformance (40/40)
python membrane.py selftest # self-hash
Both implementations must pass the conformance vectors. If a change alters behavior,
update SPEC.md and conformance/vectors.json together - the spec is
normative, and the vectors are how an independent implementation reproduces it.
The most valuable contribution: another implementation
An independent implementation written against SPEC.md alone (not by reading
existing code), in any language, is the highest-leverage contribution. When it passes
conformance/vectors.json, re-derivability gains another witness - and a
different-author witness is exactly what the project still needs. Where your
implementation and the spec disagree, fix the spec: those divergences are the point.
Markers and the corpus
The marker denylist is a known-signature set, not a proof of completeness (SPEC sections 8, 11, 16). A proposed marker is data: include the signature, a rationale, and a test input with its expected count. Absence of a marker is never absence of injection.
Security issues
See SECURITY.md. Do not open a public issue for an unfixed vulnerability.
Provenance of authorship
Parts of this project were developed with AI assistance and are committed with
Co-Authored-By trailers. Contributions are accepted under the project license
(MPL-2.0).