Docs
Producer conformance
What it takes for a producer (browser extension, Emacs minor mode, or anything else) to be considered conformant.
possiblymadebyahuman is producer-agnostic. The browser extension and the Emacs minor mode are the first two implementations, and others can follow. To stay consistent with the public format, every producer must clear the same checks.
A producer is conformant if it passes:
- Canonicalization vectors: given a public process event, the producer canonicalises it byte-identically to the format package (sorted keys, no whitespace, fixed numeric formatting).
- Hash-chain vectors: given a vector event log and session id, the producer computes the same BLAKE3 chain over the canonical public events and the same final
record_hash. The chain hash is over process events only, never over text. - Process-length vectors: given a vector event log, the producer computes the same observed process length and follows the same rules for emitting explicit
nullinpos,del_len, orins_lenwhen a value cannot be derived content-blindly. - Capability accuracy: the producer’s declared capability set matches what it actually delivers. If
timingis declared, every event has a realt. Ifsource_attributionis declared, every event has a realsource. If a capability is genuinely unavailable in a given runtime, the producer must omit it fromcapabilities; downstream analyzers then report “not applicable” rather than penalising the record. - Content-blindness on public uploads:
POST /api/recordsmust not include text fields, inserted text, or final text. The ingest API rejects unexpected manifest fields and content-bearing fields, and a conformant producer must not surface a “ship text” path in its public flow. The single permitted text-derived value is the optional format0.2text_bindingcommitment (a salted hash of the canonical letters/digits), which a producer computes locally at sign time and after which it discards the text; only the commitment is uploaded, never the text. Apart from that, producers may transiently inspect text in-memory to derive a numeric process field, but the string must be discarded in the same statement and never recorded, hashed, logged, persisted, or uploaded. - Capture-context preview: the producer must show the signer the exact
capture_contextthat will be uploaded, and let them edit or remove fields before submission.
Source attribution accuracy
This is the rule producers are most likely to get wrong.
typingmeans real key-level input was observed.paste,cut,dropmean the producer is certain about clipboard/drag-and-drop sourcing.imemeans IME composition was the source.autocompletemeans a suggestion-engine commit.programmaticmeans JS, AppleScript, or another script wrote the field.unknownis what you use when you cannot reliably attribute the input. It is a first-class value, not a failure state, and it keeps the format precise about known and unknown fields.
Dressing unknown up as typing because it produces a “more impressive” record is the single most product-corrupting mistake a producer can make.
Transient inspection versus retention
A producer may transiently inspect editor text only when necessary to derive numeric process metadata such as position or length. It must discard the string immediately. It must not store, log, upload, reconstruct, or retain document text. The one sanctioned exception is computing the optional text_binding at sign time: the producer (the Emacs producer may hand the final text to its local helper for this) computes the content-blind commitment, discards the text, and uploads only the commitment, never the text, and never any other text-derived value.
How to actually run the conformance suite
The conformance vectors live under packages/conformance/vectors/ in this monorepo. The suite verifies them inside the project’s own tests (make check). A third-party producer should run the same vectors through its own canonicaliser and chain hasher before publishing.
If you would like to publish a producer and discover the conformance harness disagrees with you, the conformance package is the ground truth, not the other way round.