OHAN-14: the registry

the names that mean the same thing to every implementation: wire ids, intents, urgencies, seal and stamp ids, proof types and purposes, service types, and the rule for adding your own. status: seeded for v1, mon 26 oct 2026; grows with every version. an entry names the version it arrived in; a deprecated entry stays for one protocol version before it is removed.

a v1 draft. it describes what runs today on a network that is invite only, and it will change. every change is recorded, and a breaking one bumps the wire id (OHAN-00 §5).

1. wire ids

the rule (OHAN-00 §2): ohan.<object>.<schema version>. a breaking change bumps the number; a receiver names the ids it accepts in /.well-known/ohan.json.

idobjectsincedocument
ohan.card.1the signed public record of a handlev1OHAN-02
ohan.envelope.1the signed message between two principalsv1OHAN-03
ohan.event.1the sealed envelope as a relay holds itv1OHAN-04
ohan.relay.1the relay's signed calls: fetch, delivered, allowv1OHAN-04
intent.v0.1, intent.v0openDM's envelope; accepted on inbound only, until openDM migratesv1, deprecatedOHAN-03 §6
card.v0, relay.v0, presence.v0the demo's ids; not spoken by a v1 boxremoved in v1not published

2. intents

the intent field of an envelope. an unknown name degrades to message and is shown as a message.

intentfrom whommeaningsince
messageanyonetext for a personv1
ackthe recipient of a knock"i accepted you": content.body is acceptv1

reserved, not sent in v1: offer-share, update, request-meeting, request-info, proposal; and the ack bodies decline and revoke. a v1 receiver that sees them shows them as a message.

3. urgency

one of four words on every envelope: low, med, high, critical. the gate shows the word; nothing in v1 acts on it. an envelope with any other value is refused on open (OHAN-03 §1).

4. seal and stamp

namemeaningsince
x25519-sha256-aesgcm-1the v1 seal: an ephemeral x25519 key; the aes key is `sha256(sharedepkto_enc) over raw bytes (the 32 byte x25519 shared secret, the 32 byte ephemeral public key, the 32 byte x25519 key of the recipient's #enc); aes-256-gcm with a random 96 bit nonce; a 4 byte length prefix and padding to 256 bytes; aad toepkseal, where to is the recipient's signing key as its multikey string in ascii, epk the raw ephemeral key and seal` this name in ascii; an all zero shared secret is refused (OHAN-04 §1, OHAN-06 e5)v1
stamp: { bits, nonce }the proof of work in the nip-13 shape: on a card, over the jcs bytes without the proof; on an event, the event id's leading zero bitsv1

other seal ids are reserved for later versions; each publishes with its code.

5. proof types and purposes

namewheremeaningsince
DataIntegrityProof with cryptosuite eddsa-jcs-2022cardsdata integrity 1.0 as the w3c defines it: `sha256(jcs(proof options))sha256(jcs(document without proof)), ed25519, proofValue` multibase base58btcv1
proofPurpose: assertionMethodthe holder's proof; the rotation proof by the previous keythe signer asserts the cardv1
proofPurpose: capabilityDelegationthe root's proof on an agent's cardthe person delegates to the agentv1
previousCardbeside the rotation proofthe id of the card the new one replaces (never previousProof, which means something else in data integrity)v1
the envelope's single signature (multikey key, base58btc signature)envelopesopenDM's shape, kept in v1 so the gateway migrates without a flag dayv1

other proof types and purposes are reserved for later versions.

6. verification method ids and key types

idtypecodecmeaningsince
#signMultikeyed01, z6Mk…the signing key; authentication, assertionMethod, capabilityDelegation, capabilityInvocationv1
#encMultikeyec01, z6LS…the sealing key; keyAgreementv1
#nostrMultikeye701, zQ3s…an opt in secp256k1 key the person also uses on nostr; assertionMethod only; with alsoKnownAs: nostr:npub… and a bip340 cross signature over sha256(raw signing key)v1

7. service types

idtypewhereendpointsince
#cardOhanCarda handle's did documentthe url that resolves the cardv1
#relaysOhanRelaya handle's did documentthe relay urls, as on the cardv1
#gatewayOhanGatewaya handle's did document, when the card names an endpointan application's own https endpoint (openDM's gateway)v1
#ohanOhanBoxa box's did document at /.well-known/did.json/.well-known/ohan.jsonv1

the service id #status and the dns name _ohan are reserved.

8. card fields that are names

fieldvaluessince
acceptsthe intents the holder's client handles: message in v1. intent names only, from §2 or an x- name of §10, never descriptions or keywords. an index reads accepts as the intents a client handles, never as search termsv1
kindone of four words, and no other. person or entity on a root's card: the kind of root that holds it. agent or thing on a card whose did document names a controller: software that acts for its root, or a device or object with its own key under it (a fridge, a car, a room's sticker). absent in v1; a v1 receiver carries it and shows nothing for it. a root's card never says agent or thing; for the gate a sub card inherits its root's kind. the documents that give each word its rules publish with their codereserved
appsshort slugs of the applications the person uses on the handle: openthings, opendmv1
profiledisplay_name (80), line (140), links (three https urls); claims and vouches must be empty or absent in v1v1 (fields allowed; the openthings mcp publishes none in v1)

9. context item types

none in v1: context is an empty array on every envelope. later versions open this table.

10. your own names

an application adds a name the registry does not have as x-<name>:<kind>: x-example:intro as an intent. a receiver shows an x- intent as a message and an x- context item as "an item of type x". a name is adopted into this table, without the prefix, when two implementations send it and the change log records it.

11. deprecation

a name is marked deprecated here for one protocol version before it is removed; receivers keep accepting it for that version. the first entries under this rule are openDM's intent.v0.1 and intent.v0, accepted on inbound through v1.

12. acts no grant carries

adding a contact, accepting a stranger, allowing, unblocking, changing a card, rotating a key, exporting, importing, and writing or widening a rule at the gate are the person's own acts. no grant and no rule at the gate may name them, in any version. a client refuses a grant that does. these acts need the person's yes, given outside the model (OHAN-06 y1, y2).

13. reserved names

these names are reserved so that no implementation gives them a meaning of its own. a v1 receiver carries them unchanged and acts on none of them. their meaning is defined in the document that publishes them.

namewherestatus
kinda card (§8): person, entity, agent, thingreserved
templatean envelope's contentreserved
templatesa cardreserved
rolesa cardreserved
grantan envelope's senderreserved