Skip to content
autonym.dev
ContentsHide contents

Conformance

Implementation and conformance status

spec 1.0-draft-1

Document 1.0-draft-1 publishes complete contracts for its declared v1 scope. No recipient service or conformance certification is claimed.

Layer Status
Operational health/readiness, scope parsing, prefixed IDs and app shell Implemented and tested in the reference repository
Entry/grant/disclosure/contribution/receipt/purge/export/discovery schemas Specified, generated and structurally tested
30-key vocabulary 1.1 and closed rendering definitions Specified and generated; examples and selected pure policy checks tested
Temporal interval helper, supported-level selection and advertising grant structure Executable pure checks; not an authorised runtime compiler
Pure compiler: grant/request intersections, vocabulary renderers, overlay selection, dependency checks and temporal deadlines Implemented with pure example and property tests and browser evidence, using one injected Clock instant per read; transaction and endpoint integration pending
Full stored-grant authorisation and OAuth/DPoP server The authorisation contract is specified and generated: client registration metadata and metadata documents, access-token and lifecycle-token claims and the contribution authorisation detail, with -SCHEMA tests of the access-token and lifecycle-token lifetime bounds (OAUTH-01). The authorisation server, stored-grant authorisation and runtime evidence are pending
Transactional reads, signed receipts and concurrency The reference provider signs receipts, chains them with log events per record partition and verifies a partition's chain over its stored rows and its exported form; -CHAIN tests against a real database cover appending under concurrency, tampering and signing-key rotation. Transactional reads, the owner's export and runtime evidence pending
Record storage: per-record encryption, immutable entry versions, deletion and crypto-shredding The reference provider stores each record's entries encrypted under the record's own data key, one immutable version per change, with tombstones that remove a deleted entry's value, overrides, evidence and client-supplied provenance (source, times, confidence, derivations), keeping its provenance kind and recording time until the record is erased, a per-partition entry limit, and crypto-shredding that destroys the record's wrapped key; its integration tests run against a real database, with real concurrency. No recipient or management route reads or writes it yet
Pairwise handles and entry aliases The reference provider derives each recipient's pairwise handle and entry aliases as A3.2 specifies, under a dedicated key per partition; -STORE tests against a real database reproduce the published framing vectors through its handle store and show distinct handles for 10,000 recipients of one partition, one handle per recipient until a rotation, a rotation that changes the handle and every alias at once, and collisions retried with a fresh rotation. No route or command issues, rotates or resolves a handle yet, and a provider whose configured authority is an IP address issues none. A recipient read showing that no canonical identifier escapes is pending, so PAIR-01 stays pending; invalidating grants and starting purge on rotation (A3.2) are pending too
Public REST/MCP, contribution/replay processing and purge outbox Pending implementation and runtime evidence
Detached-signature verification: strict JSON, ES256, thumbprint key IDs, issuer binding, key retirement and disclosure deadlines Implemented as a library verifier with SIGN-01 tests in Node and a browser; published test vectors verified by the reference verifier and independently by Python jwcrypto and rfc8785; purge instruction token rejection and runtime signing pending
Signing, encrypted export/import and delegation Contract specified. Signing: -SIGNER tests check signed output against the reference verifier and the published test vectors; -STORE tests of the reference key store against a real database cover a provider's KEY-01 duties (integration evidence); signing in a running recipient surface pending. Encrypted export/import and delegation: cryptographic/interoperability tests and runtime pending
Role-specific conformance runner and certification Requirements published; no running endpoint suite or certificates
Jurisdiction assessment, rights/retention operations, transfer safeguards, opt-out and governance checks PRIVACY-01 to PRIVACY-06 Requirements specified; deployment evidence and runtime enforcement pending
Registry, credentials, emergency cards, guardian/duress Reserved outside v1 conformance

The conformance manifest has stable IDs, expected behaviours, capability dependencies and explicit pending runtime evidence. Each check records runtime_evidence (library where executable library tests cover the requirement as stated; integration where the reference implementation's integration tests, which run its provider against real storage, cover every duty the requirement places on a provider that one provider's own tests can show, while any part that falls to a verifier keeps its library tests or published test vectors and any part one provider cannot show is named below; otherwise pending) and pending_phase, the build phase that supplies its runtime evidence, or, for a check with integration evidence, the phase whose integration tests supplied it. Integration evidence shows that the reference provider meets those duties; it is not a suite another implementation can run against its own service. Library and integration evidence both come from the reference repository's own tests: neither is evidence gathered from a running service, which no check has yet (below). A check that the published test vectors evidence also lists their files in vectors. The SCOPE, ID and VOCAB-1.1 families are listed in the manifest with their library evidence; they belong to no capability profile. WILDCARD-01 checks a recommendation (A15.1) and belongs to no capability profile either. The optional features public-handles (HANDLE-01), encrypted-export (ENCRYPT-01) and pdpp-binding (BINDING-01) apply only to a provider that offers them, as advertising does (A17.1). Test names in the reference repository follow the convention below. SCOPE-01 to SCOPE-10 and ID-01 to ID-05 remain syntax/identifier checks, not grant or recipient certification.

The reference repository names each library or integration test by the check it evidences, and a suffix on the check ID says what kind of evidence the test gives:

  • -SCHEMA: a test of a schema or a pure helper that covers only part of the check's requirement.
  • -COMPILER: an example test of the pure compiler at the library boundary.
  • -PROPERTY: a property checked across many inputs, either by fast-check with a fixed seed and run count, so that a failure replays exactly, or by an exhaustive pass over every published vocabulary key.
  • -VERIFIER: a test of the verifier's side of a check whose remaining duties belong to a running provider, as for KEY-01.
  • -SIGNER: a test of the signing side of a check at the library boundary: what the reference signer writes verifies with the reference verifier and has the published test vectors' exact header and payload bytes for the same key and type. It is not runtime evidence: key custody, rotation and signing inside a provider's transactions are shown by -STORE tests or a running provider.
  • -STORE: an integration test of one of the reference provider's stores, such as its signing key store or its pairwise handle store, run against a real database, with real concurrency where the requirement concerns it. When such tests cover every duty a check's requirement places on a provider that one provider's tests can show, the check records integration evidence.
  • -CHAIN: a test of the reference provider's owner log, either without a database or against a real database: appending each event's exact bytes in order, and verifying a partition's chain over its stored rows and over its exported form. A further word names what the test shows, such as -CHAIN-TAMPER (edits to the stored chain are reported at the first divergence), -CHAIN-CONCURRENCY, -CHAIN-VECTORS (the published receipt chain is reproduced) or -CHAIN-SCALE, a timing guard on verification that, like -BENCHMARK, is not conformance evidence. It is not runtime evidence: LOG-01 and LOG-02 also require the disclosure transaction and the owner's export.
  • -BENCHMARK: a timing guard on the compiler against a median budget. It is not conformance evidence.

A test with no suffix, such as those named SIGN-01 or SCOPE-01, is named by its check alone; the tests of the published test vectors, for example, carry the bare check ID. A test may name more than one check. A suffix describes a test, not a check: whether library or integration tests cover a check's requirement is recorded only by the check's runtime_evidence. Some repository tests carry IDs that are not in the manifest: those that check the shape of the generated contracts, examples and entry validation, and those for the reference server's operational surface, its application shell, the contracts of its internal ports and those of its record store that no check names, whose names can look like a check ID with a suffix, listed above or not. They are implementation tests, not conformance checks, and evidence no check. A record store test named by a check ID with the -STORE suffix is a -STORE test of that check.

Every sentence of the normative pages (core/, bindings/ and the vocabulary page) that carries MUST, MUST NOT, SHOULD or SHOULD NOT, every requirement they state in the imperative, and every sentence that uses a lower-case must or should, has an entry in statements.json: the checks that test it, or the reason no suite can, such as an organisational obligation or a sentence that only restates another. The items of a list introduced by an imperative ending in a colon, such as the A5.4 rejection list, count as imperatives. Some requirements stated without a modal, such as the A5.4 key, key-set and instant rules, the A9 canonical request and the A10 acknowledgement bytes, also have hand-chosen entries of kind declarative. No such sentence needs one, so the audit does not show that every requirement without a modal is covered; but a declarative entry must still quote its sentence, and a sentence the audit extracts takes the extracted kind. pnpm check:statements fails when a sentence has no entry, an entry no longer matches the text, or an entry names a check that is not in the manifest or not cited by its page. Runtime checks are pending because no recipient endpoint exists; this is not an exception permitting weaker behaviour. A release must supply real authentication, storage, concurrency, cryptographic and cross-surface evidence, with failures reported as expected versus observed. No logo or badge substitutes for that evidence.

The test vectors are fixed bytes an implementation can check offline: synthetic keys, canonical JSON, a signed disclosure, a receipt chain across a key rotation, a purge instruction and acknowledgement, and the signed objects a verifier must reject. They evidence a verifier's side of SIGN-01, KEY-01, LOG-01, LOG-02 and PURGE-01: rejecting the failures A5.4 lists for the objects they cover, verifying a receipt signed before a rotation from the published key set alone, recomputing the receipt hash chain and checking an acknowledgement's signed bytes. They are not runtime evidence. KEY-01's verifier rejections have published vectors, but never reusing a key ID, never sharing a key with another provider, signing nothing at or after a key's exp, and keeping a retired key published with an unchanged exp are a provider's duties, shown by a running key store: the reference implementation shows them with -STORE tests of its key store against a real database, its integration evidence, which also covers a provider whose issuer changes: its earlier issuer's retired keys stay in the key set it publishes, with their exp. That evidence does not cover the rest of KEY-01's statements: a verifier's rejections, evidenced by the -VERIFIER tests and the vectors; a key set served at a discovery jwks_uri, and keys a recipient registers, which need a running service; and the keys of any other provider. One provider's tests cannot show that no other provider holds the same key. They show that its keys are generated by the provider itself from a cryptographically secure random source, are never imported, and differ between independent installations; the rest depends on every provider keeping its private keys to itself and on verifiers trusting only the key set configured for each issuer (A5.4).

VOCAB-1.1-01 to VOCAB-1.1-09 exercise the approved pilot additions, version metadata, explicit grant/recipient vocabulary intersection, text/enum validation, renderings, inference restrictions, grant isolation, temporal overlays and unavailable-key deadline isolation. Library checks do not establish runtime negotiation or stored consent evidence. The original 27 keys remain available under vocabulary 1.0; all 30 are tested under 1.1.

The conformance manifest

Every capability, optional feature and check in the conformance manifest of edition 1.0-draft-1, generated from that file. Nothing is certified, and no implementation is claimed to pass any check. The statement audit maps every sentence of the normative pages that carries MUST or SHOULD, states a requirement in the imperative or uses a lower-case must or should to the checks below, or to the reason no suite can test it.

Provider capabilities

Capability Requires Checks
Core Nothing CORE-01, PAIR-01, DISC-01, TEMP-01, TEMP-02, TEMP-03, SIGN-01, CONSENT-01, LOG-01, LOG-02, KEY-01, PURGE-01, CLAIM-01, TRANSPORT-01, WIRE-01, OAUTH-01, FETCH-01, INFER-01, PRIVACY-01, PRIVACY-02, PRIVACY-03, PRIVACY-04, PRIVACY-05, PRIVACY-06
Write Core CONTRIB-01, CONTRIB-02, CONTRIB-03
Portable Core PORT-01, MIGRATE-01
Delegated Core DELEGATE-01

Recipient capabilities

Capability Requires Checks
Read Nothing CORE-01, DISC-01, TEMP-03, SIGN-01, PURGE-01, CLAIM-01, TRANSPORT-01, WIRE-01, FETCH-01, PRIVACY-01, PRIVACY-02, PRIVACY-03, PRIVACY-04, PRIVACY-05, PRIVACY-06
Contribute Nothing CONSENT-01, CONTRIB-01, CONTRIB-02, CLAIM-01, WIRE-01, FETCH-01, PRIVACY-01, PRIVACY-02, PRIVACY-03, PRIVACY-04, PRIVACY-05, PRIVACY-06
Reciprocal Read, Contribute PORT-01, CLAIM-01

Optional features

An optional feature applies only to a provider that offers it (A17.1).

Feature Checks
advertising ADS-01, ADS-02
public-handles HANDLE-01
encrypted-export ENCRYPT-01
pdpp-binding BINDING-01

Every check

60 checks. Library tests means executable library tests cover the requirement as stated. Integration tests means the reference implementation's integration tests, which run its provider against real storage, cover every duty the requirement places on a provider that one provider's own tests can show, while any part that falls to a verifier keeps its library tests or test vectors; they show the reference provider meets those duties and are not a suite another implementation can run. Pending means neither yet. Library and integration tests are the reference repository's own tests, not evidence gathered from a running service, which no check has yet. Test vectors are the published vector files that evidence a verifier's side of a check. They are not runtime evidence, so a check with vectors can still be pending. The keys in keys.json are synthetic and published with their private parts; never trust them, or anything they sign, anywhere else.

Check Section Requirement Evidence Test vectors
PRIVACY-01 A16.2/A16.8 Deployment-specific applicability, actual roles, lawful conditions, notices and consent evidence before processing; unresolved uses disabled. Pending None
PRIVACY-02 A16.3/A16.8 Local sensitivity, inference and necessity assessment; prohibited categories and further uses stay disabled despite grant consent. Pending None
PRIVACY-03 A16.4/A16.8 Document every international flow and its required safeguards before enabling it; reassess changed destinations and suspend unsupported flows. Pending None
PRIVACY-04 A16.5/A16.8 Exercise rights, local deadlines, correction, bounded retention, backup restoration, legal holds and recipient deletion follow-up. Pending None
PRIVACY-05 A16.6/A16.8 Enforce applicable opt-outs and preference signals after grant issue; advertising and child processing disabled without required safeguards. Pending None
PRIVACY-06 A16.7/A16.8 Evidence required governance and granted, in-scope regulatory permissions with expiry/renewal controls; incident exercises, local deadlines, decision rights and regulatory status. Pending None
CORE-01 A3/A6 No read without a currently active, audience-bound grant; test revocation and exhausted counters under concurrency. Pending None
PAIR-01 A3 Different clients receive different handles and entry aliases; rotation changes both; no canonical identifiers escape. Pending None
DISC-01 A5 Intersect restrictions, sparse levels, approved text, no omission counters, no identifiers below their allowed level. Library tests None
TEMP-01 A4 Before/start/end/after, null bounds, invalid intervals and independent grant expiry using one Clock instant. Library tests None
TEMP-02 A4 Explicit activation and conflict selection; baseline restores; standing safety facts survive. Library tests None
TEMP-03 A5/B4 Dependencies, cached and conditional responses cannot outlive source or grant rights. Library tests None
SIGN-01 A5/A15 Tampering, duplicate members and non-I-JSON, untrusted or unknown keys, other algorithms, critical headers, wrong types, objects naming another issuer and expired signed objects are rejected. Library tests jcs.json, disclosure.json, receipt.json, purge.json, negative.json
CONSENT-01 A2/A6 Separate read/contribute grants, purpose changes need approval, recipient flags cannot authorise, and every client that is neither an assistant nor classified by the operator is shown as unverified. Pending None
ADS-01 A6 Default off; eligible adult-owned confirmed enum keys only; max L1, one read, 24 hours, no retention or delegation. Library tests None
ADS-02 A6/A9 Receipts and withdrawal evidence; no implied onward right or linkage to other recipients. Pending None
CONTRIB-01 A14 Write-only cannot read; read-only cannot write; declarations require exact confirmation. Pending None
CONTRIB-02 A14 Origin, retry, collision, correction/withdrawal, tombstones, revoked retries, atomic acknowledgements and 90-day suppression of rejected suggestions. Library tests None
CONTRIB-03 A4/A14 Raw history and preferences separately selected; recursively enforce actual dependency field rights. Library tests None
LOG-01 A9 Counter, receipt and disclosure commit atomically; non-read events carry the subject, actor, decision and IDs A9 gives their kind; verify chain; operational logs contain no entry values. Pending receipt.json, negative.json
LOG-02 A9 A receipt signed before a key rotation verifies afterwards from the published keys and the owner export alone. Pending receipt.json, negative.json
KEY-01 A9/A5 Key IDs are canonical RFC 7638 thumbprints, never reused and never shared between providers; a retired key signs nothing at or after its exp, stays published with an exp that never changes, and verifiers reject signatures dated at or after it. Integration tests keys.json, disclosure.json, receipt.json, negative.json
PURGE-01 A10 Grant ending stops reads, signed notices retry/poll, acks and missing deadlines visible; no why leakage. Pending purge.json, negative.json
PORT-01 A11 Two-way round trip, temporal/provenance preservation, unsupported report, the A4.1 entry limit of each partition checked before any change, no executable imported authority. Pending None
CLAIM-01 A17 Role/version/category/evidence bound claims; no certification or full portability from schema checks alone. Pending None
DELEGATE-01 A6 Target-bound, one-use five-minute offers redeemed only by a recipient that authenticates with private_key_jwt; parent/child restrictions and revocation checked atomically. Pending None
TRANSPORT-01 A7/A8/B3/B4 REST/MCP return the same signed object; headers, DPoP, audience, limits and errors match contracts. Pending None
WIRE-01 A1.1/A4.1 Unknown members, values outside their key's closed schema and keys outside the negotiated core vocabulary are rejected at every defined wire boundary; there is no arbitrary-JSON entry lane. Pending None
HANDLE-01 A3.2 Public handles follow the grammar and claim protections, and resolution yields no record contents, DID or existence evidence to unauthenticated enumeration. Pending None
MIGRATE-01 A3.4/B4.3 After migration the old provider never redirects authenticated API or token requests, forwards credentials or reveals the destination; purge continues there until settled. Pending None
INFER-01 A4.2/A14.3 Special-category and safety-critical keys are never observed or inferred and accept only user_supplied events, as protected proposals; inference for an inferable:false key fails inference_forbidden. Pending None
OAUTH-01 A2/A6.1/A6.3/A6.5/A6.6/A6.8 Metadata naming the configured issuer, iss on responses, per-surface audiences and challenges, exact client-ID matching, registration metadata refused outside its schema, classes from registration evidence, never assistant with a loopback redirect URI, and their limits at issuance, PKCE S256 single-use codes, exact redirects, session-bound state, unframeable consent, DPoP proofs used once within 60 seconds at the token endpoint, rotating refresh whose reuse ends the grant, bounded access and lifecycle tokens, refresh-token revocation ending the grant, with proof of possession of the bound DPoP key from a public client, and access tokens refused as unsupported, and no authorisation, token or refresh for a suspended client. Pending None
FETCH-01 A15.3/A3.3/A6.1 Every fetch of a client- or provider-supplied URL checks resolved addresses and each redirect, refuses private and link-local destinations unless an isolated local mode is configured, bounds size and time and forwards no credentials across origins. Pending None
ENCRYPT-01 A11.2 Optional encrypted export uses the exact JWE and Argon2id parameters, rejects other parameters, duplicate members and excess size before deriving a key, bounds concurrent derivations, verifies GCM first and fails generically. Pending None
BINDING-01 B1.2/B1.3/B1.11 The PDPP source declaration is generated from the vocabulary with source.id equal to the resource identifier; streams are static; owner record endpoints refuse every token. Pending None
WILDCARD-01 A15.1 Recommended: a wildcard L0 grant is refused to a client already holding L2 or higher in any domain, and the person sees the actual selection. Pending None
SCOPE-01 A6.2 The recovered proposal's A6.3 scope example round-trips exactly. Library tests None
SCOPE-02 A6.2 Only the closed purposes and capabilities are accepted. Library tests None
SCOPE-03 A6.2 Exactly one purpose is required. Library tests None
SCOPE-04 A6.2 A wildcard grants only L0, with no implicit read permission. Library tests None
SCOPE-05 A6.2 Duplicates collapse without losing declared-only restrictions. Library tests None
SCOPE-06 A6.2 Malformed separators, non-string boundaries and unsupported tokens reject the whole scope. Library tests None
SCOPE-07 A6.2 Input limits and unsafe domain lookups fail closed. Library tests None
SCOPE-08 A6.2 10,000 arbitrary inputs expose only safe validation errors. Library tests None
SCOPE-09 A6.2 10,000 generated valid sets round-trip and never elevate a ceiling. Library tests None
SCOPE-10 A6.2/A6.7 Advertising is an explicit purpose and grants no implicit capability. Library tests None
ID-01 A4.1 Only canonical prefixed identifiers are accepted, including ULID boundaries. Library tests None
ID-02 A4.1 Generation uses the supplied clock and the library CSPRNG, without ambient time or Math.random. Library tests None
ID-03 A4.1 Invalid generation input fails with fixed errors. Library tests None
ID-04 A4.1 10,000 generated identifiers validate and preserve the supplied timestamp. Library tests None
ID-05 A4.1 The public schema package runs in a browser with secure randomness and no ambient clock. Library tests None
VOCAB-1.1-01 vocabulary Approved additions are versioned without changing the semantics of older keys. Library tests None
VOCAB-1.1-02 vocabulary Closed enum values and text bounds are enforced. Library tests None
VOCAB-1.1-03 vocabulary New keys need both grant approval and recipient support, including at L0. Library tests None
VOCAB-1.1-04 vocabulary Always-do text needs an approved L1/L2 rendering and cannot be inferred. Library tests None
VOCAB-1.1-05 vocabulary Enum values render unchanged at L1 to L3 and use closed categories at L0. Library tests None
VOCAB-1.1-06 vocabulary Overlays, grant restrictions and independent revocation apply to all additions. Library tests None
VOCAB-1.1-07 vocabulary Unavailable key timing cannot change an older vocabulary response. Library tests None
VOCAB-1.1-08 vocabulary Generated synthetic pilot examples validate and new enum preferences remain inferable. Library tests None
VOCAB-1.1-09 vocabulary Transitive dependencies obey both versions without leaking unavailable-source timing. Library tests None

References to other standards and projects describe intended technical alignment only and do not imply endorsement or partnership.