Catenor Protocol
Data Model Baseline — Draft v0.1
Purpose: Preserve the canonical data structures, JSON shapes, field semantics, and unresolved wire-format decisions already established during the design of Catenor Protocol.
This document MUST be read together with
CANONICAL-DECISIONS.md.
Status: Review Draft
Protocol: Catenor Protocol
Proposed DID Method: did:catenor
License: Apache License 2.0
0. Precedence and intent
Catenor uses two complementary sources of truth:
CANONICAL-DECISIONS.md
= semantic source of truth
DATA-MODEL-BASELINE.md
= data-shape / object-model source of truthIf an implementation or documentation agent needs to define a protocol object:
1. check Canonical Decisions
2. check this Data Model Baseline
3. check the detailed specification for that object
4. do not invent a conflicting shapeIf this document marks a wire format as OPEN, an agent MUST NOT silently finalize it.
If this document marks a shape as DRAFT, an agent MAY refine it only through explicit review.
If this document marks a field or invariant as FROZEN, dependent documents MUST preserve it.
1. Status legend
Each object or property is classified using the following vocabulary.
FROZEN SEMANTICS
The meaning is approved.
The exact wire representation may still evolve unless separately frozen.
DRAFT SHAPE
The current object shape is the canonical working shape.
It may be refined, but MUST NOT be silently replaced with a different vocabulary.
OPEN WIRE FORMAT
The concept is approved, but no final JSON/wire structure has been approved.
IMPLEMENTATION RECORD
Useful operational data, but not itself a normative Catenor protocol object.
INFORMATIVE EXAMPLE
Illustrates semantics without freezing the complete schema.
2. Global naming rules
Canonical Catenor Subject identifiers use:
did:catenor:<opaque-high-entropy-id>Generic examples in this document use:
did:catenor:human-a
did:catenor:organization-a
did:catenor:organization-b
did:catenor:agent-a
did:catenor:trust-anchor-aThese human-readable suffixes are examples only.
Production identifiers MUST remain opaque and high entropy.
Assets/resources use placeholders such as:
asset:resource-aThe final asset-identifier specification is outside Draft v0.1.
3. Object inventory
| Object | Current status |
|---|---|
| DID Document | DRAFT SHAPE + W3C-based semantics |
| DID Resolution Result | DRAFT SHAPE |
| Canonical Subject Record | OPEN WIRE FORMAT |
| Account Binding | DRAFT SHAPE |
| Provider / External Identity Binding | DRAFT SHAPE, private operational state |
| Verifiable Credential envelope | DRAFT SHAPE + W3C-based |
| Relationship Credential | DRAFT SHAPE |
| Capability | DRAFT SHAPE |
| Delegation Credential | DRAFT SHAPE |
| Issuer Authorization Credential | DRAFT SHAPE |
| Verifiable Presentation | OPEN Catenor-specific profile; W3C envelope applies |
| Credential Status | OPEN WIRE FORMAT; lifecycle semantics frozen |
| Trust Anchor Admission Record | DRAFT SHAPE |
| Policy | DRAFT SHAPE |
| Decision | DRAFT SHAPE |
| Audit Event | DRAFT SHAPE |
| Conformance Statement | DRAFT SHAPE |
| Key Management Reference | IMPLEMENTATION RECORD |
| Relationship Index Row | IMPLEMENTATION RECORD |
| Capability Index Row | IMPLEMENTATION RECORD |
4. DID Document
Status: DRAFT SHAPE
Catenor adopts the W3C DID Document model.
Current baseline:
{
"id": "did:catenor:organization-a",
"verificationMethod": [
{
"id": "did:catenor:organization-a#assertion-key-1",
"controller": "did:catenor:organization-a",
"type": "Multikey",
"publicKeyMultibase": "z6Mk..."
}
],
"assertionMethod": [
"did:catenor:organization-a#assertion-key-1"
]
}4.1 id
"id": "did:catenor:organization-a"Status: FROZEN SEMANTICS
Meaning:
The canonical DID described by this DID Document.
Requirements:
MUST be a valid did:catenor identifier
MUST identify the canonical Subject
MUST NOT encode PII
MUST NOT embed implementer/provider/tenant identity4.2 verificationMethod
"verificationMethod": [...]Status: FROZEN SEMANTICS
Contains public verification methods associated with the DID.
A verification method is not a separate Subject.
4.3 verificationMethod[].id
"id": "did:catenor:organization-a#assertion-key-1"Status: FROZEN SEMANTICS
This is a DID URL:
did:catenor:organization-a
+
#assertion-key-1The fragment identifies one verification method within the DID Document.
4.4 controller
"controller": "did:catenor:organization-a"Status: FROZEN SEMANTICS
Identifies the DID controlling that verification method.
It MUST NOT be interpreted automatically as:
financial wallet
legal owner
database administrator
execution account4.5 type
"type": "Multikey"Status: DRAFT SHAPE
Current working representation uses Multikey.
The final Catenor Crypto Profile MUST determine the supported verification-method types and key suites.
4.6 publicKeyMultibase
"publicKeyMultibase": "z6Mk..."Status: DRAFT SHAPE
Contains public verification material.
The corresponding private key MUST remain private.
The exact key family and encoding are part of the future Crypto Profile.
4.7 assertionMethod
"assertionMethod": [
"did:catenor:organization-a#assertion-key-1"
]Status: FROZEN SEMANTICS
Identifies verification methods authorized to make assertions on behalf of the DID.
Credential issuance is an assertion use case.
4.8 Financial accounts MUST NOT appear merely because they are bound to the Subject
Frozen invariant:
DID verification method
!=
private financial Account BindingThe DID Document MUST NOT automatically publish the Subject's financial execution account.
5. DID Resolution Result
Status: DRAFT SHAPE
Current minimal working envelope:
{
"didDocument": {
"id": "did:catenor:organization-a",
"verificationMethod": [],
"assertionMethod": []
}
}This object is intentionally incomplete.
The detailed DID Method specification MUST later define:
resolution metadata
document metadata
deactivation semantics
version semantics
error representation
historical resolution behaviorAgents MUST NOT freeze those fields yet.
6. Canonical Subject Record
Status: OPEN WIRE FORMAT
The canonical Subject concept is frozen, but no final public JSON record has been approved.
Frozen semantics:
Subject has a canonical did:catenor identifier
Subject type is HUMAN, ORGANIZATION, or AGENT
Subject lifecycle exists
Subject may have verification methods
Subject may have multiple Account Bindings
Subject may have CredentialsAgents MUST NOT invent a normative Subject JSON object before SUBJECTS.md is reviewed.
An implementation MAY maintain a private/internal Subject record.
That internal record is not automatically a protocol wire object.
7. Account Binding
Status: DRAFT SHAPE
Current canonical working shape:
{
"id": "binding:01",
"subject": "did:catenor:human-a",
"account": {
"namespace": "<account-namespace>",
"reference": "<network-or-system-reference>",
"address": "<external-account-identifier>"
},
"purpose": [
"financial-execution"
],
"status": "ACTIVE"
}7.1 id
Status: DRAFT SHAPE
Identifier for the Account Binding object.
Final identifier format is not frozen.
7.2 subject
"subject": "did:catenor:human-a"Status: FROZEN SEMANTICS
The canonical Catenor Subject to which the external account is bound.
7.3 account
"account": {
"namespace": "<account-namespace>",
"reference": "<network-or-system-reference>",
"address": "<external-account-identifier>"
}Status: DRAFT SHAPE
Identifies the external account.
Exact namespace/reference conventions are not yet frozen.
The account may refer to:
blockchain execution account
authentication account
application account
agent account
financial account reference
external DID7.4 purpose
"purpose": [
"financial-execution"
]Status: DRAFT SHAPE
Describes the intended purpose of the binding.
Previously discussed purposes include conceptually:
authentication
execution
financial-executionThe canonical vocabulary is not frozen.
7.5 status
"status": "ACTIVE"Status: FROZEN SEMANTICS, DRAFT VOCABULARY
The binding has lifecycle state.
Expected states may include:
ACTIVE
SUSPENDED
REVOKED
EXPIREDFinal vocabulary will be defined in the Account Binding specification.
7.6 Privacy invariant
The complete mapping:
did:catenor:human-a
↔
external account identifieris private by default.
The account identifier may be public in its native execution environment.
The Catenor correlation is not public by default.
8. Account Control Proof
Status: OPEN WIRE FORMAT
Frozen conceptual flow:
random challenge
↓
external account signs
↓
signature is verified
↓
Account Binding is establishedA minimized policy fact may be:
ACCOUNT_CONTROL_VALID = trueNo final JSON proof object has been approved.
Agents MUST NOT silently define one as normative.
9. Provider / External Identity Binding
Status: DRAFT SHAPE — PRIVATE OPERATIONAL STATE
Catenor separates provider-specific identities from the canonical Subject.
Working private representation:
{
"subject": "did:catenor:human-a",
"provider": "<provider-type-or-adapter-id>",
"externalSubjectId": "<provider-specific-subject-reference>",
"status": "ACTIVE"
}This object is NOT intended to be public.
9.1 subject
Canonical Catenor Subject.
9.2 provider
Identifies the provider/adapter context.
The final identifier convention is not frozen.
9.3 externalSubjectId
Private provider-specific subject reference.
It MUST NOT become the Catenor DID.
9.4 status
Lifecycle state of the provider mapping.
Exact vocabulary is not frozen.
10. Canonical Subject Registry relationship
Status: FROZEN SEMANTICS
Private conceptual model:
did:catenor:human-a
│
├── provider reference A
├── provider reference B
├── authentication reference
└── private Account BindingsNo public wire object is frozen.
11. Verifiable Credential — general envelope
Status: DRAFT SHAPE
Catenor builds on the W3C Verifiable Credentials model.
Working shape:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"<catenor-context-uri>"
],
"id": "urn:uuid:<credential-id>",
"type": [
"VerifiableCredential",
"<CatenorCredentialType>"
],
"issuer": "did:catenor:organization-a",
"validFrom": "2026-09-08T00:00:00Z",
"validUntil": "2027-09-08T00:00:00Z",
"credentialSubject": {
"id": "did:catenor:human-a"
},
"credentialStatus": {
"...": "status mechanism not yet frozen"
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "<open>",
"created": "2026-09-08T00:00:00Z",
"verificationMethod": "did:catenor:organization-a#assertion-key-1",
"proofPurpose": "assertionMethod",
"proofValue": "<signature>"
}
}11.1 @context
Status: DRAFT SHAPE
Uses the W3C VC context plus a future Catenor context.
The Catenor context URI is not frozen.
11.2 id
Status: DRAFT SHAPE
Credential identifier.
Exact identifier format is not frozen.
11.3 type
Status: FROZEN SEMANTICS
Must identify the object as a Verifiable Credential and may identify a Catenor credential subtype.
The canonical Catenor credential-type vocabulary remains open.
11.4 issuer
"issuer": "did:catenor:organization-a"Status: FROZEN SEMANTICS
Identifies the Subject that issued the credential.
The issuer MUST possess valid issuer authority for the credential type and scope when required by the applicable Trust Domain.
11.5 validFrom
Status: DRAFT SHAPE
Beginning of intended validity.
11.6 validUntil
Status: DRAFT SHAPE
End of intended validity when applicable.
11.7 credentialSubject
Status: FROZEN SEMANTICS
Contains the Subject and claims being asserted.
At minimum, the Subject identity is represented through:
{
"id": "did:catenor:human-a"
}11.8 credentialStatus
Status: OPEN WIRE FORMAT
Credential lifecycle/status semantics are required.
The exact technical status mechanism is not frozen.
11.9 proof
Status: DRAFT SHAPE
Represents the credential's cryptographic proof.
Frozen semantics:
proof references an authorized verification method
proof purpose must be appropriate
signature protects credential contentOpen:
exact cryptosuite
exact canonicalization
exact proof suite
supported key types12. What the VC proof means
Status: FROZEN SEMANTICS
A valid proof establishes:
authorship
+
integrityIt does NOT by itself establish:
truth
issuer trust
issuer authority
credential status
scope validity
policy acceptance13. Relationship object
Status: DRAFT SHAPE
Current embedded relationship representation:
{
"type": "OFFICER_OF",
"object": "did:catenor:organization-b"
}When embedded under a credentialSubject:
{
"credentialSubject": {
"id": "did:catenor:human-a",
"relationship": {
"type": "OFFICER_OF",
"object": "did:catenor:organization-b"
}
}
}Conceptual model:
subject
predicate
objectHere:
subject = credentialSubject.id
predicate = relationship.type
object = relationship.object14. Relationship Credential
Status: DRAFT SHAPE
Working example:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"<catenor-context-uri>"
],
"id": "urn:uuid:<credential-id>",
"type": [
"VerifiableCredential",
"CatenorRelationshipCredential"
],
"issuer": "did:catenor:organization-a",
"validFrom": "2026-09-08T00:00:00Z",
"validUntil": "2027-09-08T00:00:00Z",
"credentialSubject": {
"id": "did:catenor:human-a",
"relationship": {
"type": "OFFICER_OF",
"object": "did:catenor:organization-b"
}
},
"credentialStatus": {
"...": "open"
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "<open>",
"verificationMethod": "did:catenor:organization-a#assertion-key-1",
"proofPurpose": "assertionMethod",
"proofValue": "<signature>"
}
}Frozen invariant:
A Relationship Credential proves a relationship claim; the relationship does not automatically grant unrestricted capabilities.
15. Capability
Status: DRAFT SHAPE
Recovered working shape:
{
"subject": "did:catenor:human-a",
"action": "CREATE_DISTRIBUTION",
"resource": "did:catenor:organization-b",
"constraints": {
"maxAmount": 100000,
"currency": "USD",
"validUntil": "2027-01-01T00:00:00Z"
}
}15.1 subject
Status: FROZEN SEMANTICS
Subject receiving/holding the capability.
When a Capability is embedded in a VC, the Subject MAY be inherited from credentialSubject.id rather than duplicated.
The final embedding rule is not frozen.
15.2 action
"action": "CREATE_DISTRIBUTION"Status: FROZEN SEMANTICS, OPEN VOCABULARY
Names the authorized action.
The initial canonical action vocabulary is not frozen.
15.3 resource
"resource": "did:catenor:organization-b"Status: FROZEN SEMANTICS
Identifies the resource/context against which the action is authorized.
A resource may be a Subject or external resource identifier depending on the capability.
15.4 constraints
Status: FROZEN SEMANTICS, DRAFT SHAPE
Contains restrictions on the authority.
Previously established constraint concepts include:
maxAmount
currency
validUntil
jurisdiction
allowed function/action
allowed execution target
delegation depthThe final constraint schema is open.
16. Relationship vs Capability
Status: FROZEN SEMANTICS
Example relationship:
Human A OFFICER_OF Organization Bdoes NOT automatically imply:
CREATE_DISTRIBUTION
MOVE_FUNDS
ISSUE_CREDENTIAL
AUTHORIZE_ISSUERCapabilities must be explicit or explicitly derived by an applicable policy.
17. Capability embedded in a Credential
Status: DRAFT SHAPE
Current working model:
{
"credentialSubject": {
"id": "did:catenor:human-a",
"capabilities": [
{
"action": "CREATE_DISTRIBUTION",
"resource": "did:catenor:organization-b",
"constraints": {
"maxAmount": 100000,
"currency": "USD"
}
}
]
}
}The final choice between:
capabilityand:
capabilities[]for all credential types is not frozen.
Do not silently standardize it before the Capability specification is reviewed.
18. Delegation Credential
Status: DRAFT SHAPE
Recovered semantic model:
issuer
→ delegator
credentialSubject.id
→ delegate
resource
→ authority target
actions
→ delegated actions
constraints
→ delegated limitsCurrent working JSON shape:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"<catenor-context-uri>"
],
"id": "urn:uuid:<delegation-id>",
"type": [
"VerifiableCredential",
"CatenorDelegationCredential"
],
"issuer": "did:catenor:organization-a",
"validFrom": "2026-09-08T00:00:00Z",
"validUntil": "2027-09-08T00:00:00Z",
"credentialSubject": {
"id": "did:catenor:agent-a",
"delegation": {
"resource": "did:catenor:organization-b",
"actions": [
"CREATE_DISTRIBUTION",
"REQUEST_EXECUTION"
],
"constraints": {
"maxAmount": 100000
}
}
},
"credentialStatus": {
"...": "open"
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "<open>",
"verificationMethod": "did:catenor:organization-a#assertion-key-1",
"proofPurpose": "assertionMethod",
"proofValue": "<signature>"
}
}Frozen invariants:
delegated authority ⊆ delegator authority
delegability must be explicit
delegation is revocable/lifecycle-aware
delegate has its own canonical identityThe exact final Delegation Credential schema remains under review.
19. Issuer Authorization Credential
Status: DRAFT SHAPE
Issuer authority is explicit and capability-based.
Current working example:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"<catenor-context-uri>"
],
"id": "urn:uuid:<issuer-authorization-id>",
"type": [
"VerifiableCredential",
"CatenorIssuerAuthorizationCredential"
],
"issuer": "did:catenor:trust-anchor-a",
"credentialSubject": {
"id": "did:catenor:organization-a",
"capability": {
"action": "ISSUE_CREDENTIAL",
"credentialTypes": [
"CredentialTypeA"
],
"constraints": {
"jurisdiction": [
"US"
]
}
}
},
"validFrom": "2026-09-08T00:00:00Z",
"validUntil": "2027-09-08T00:00:00Z",
"credentialStatus": {
"...": "open"
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "<open>",
"verificationMethod": "did:catenor:trust-anchor-a#assertion-key-1",
"proofPurpose": "assertionMethod",
"proofValue": "<signature>"
}
}20. Issuer-delegation capability
Status: FROZEN SEMANTICS, DRAFT SHAPE
ISSUE_CREDENTIAL and AUTHORIZE_ISSUER are distinct.
Working representation:
{
"action": "AUTHORIZE_ISSUER",
"credentialTypes": [
"CredentialTypeA"
],
"constraints": {
"jurisdiction": [
"US"
]
}
}Frozen rule:
Subject allowed to ISSUE_CREDENTIAL
does not automatically have
AUTHORIZE_ISSUERIssuer authorization may be hierarchical only when this delegation/authorization authority exists.
21. Verifiable Presentation
Status: OPEN CATENOR-SPECIFIC PROFILE
Frozen semantics:
VC
= reusable signed claim
VP
= contextual minimum proof package for a verifier/actionCatenor builds on W3C Verifiable Presentation semantics.
A generic informative envelope may look like:
{
"@context": [
"https://www.w3.org/ns/credentials/v2"
],
"type": [
"VerifiablePresentation"
],
"holder": "did:catenor:human-a",
"verifiableCredential": [
"<credential-or-derived-proof>"
]
}This example MUST NOT be treated as the final Catenor VP schema.
Open:
holder binding rules
challenge/domain rules
selective disclosure mechanism
derived-proof formats
presentation proof requirements22. Credential Status
Status: OPEN WIRE FORMAT
Lifecycle semantics are frozen.
Expected conceptual states include:
ACTIVE
SUSPENDED
REVOKED
EXPIRED
SUPERSEDEDAn inability to determine status MUST NOT silently become ACTIVE.
Current VC envelope reserves:
"credentialStatus": {
"...": "status mechanism not yet frozen"
}Agents MUST NOT invent a normative status-list mechanism until it is explicitly approved.
23. Trust Anchor Admission Record
Status: DRAFT SHAPE
Working shape:
{
"type": "CatenorTrustAnchorAdmissionRecord",
"trustAnchor": "did:catenor:trust-anchor-a",
"admissionPolicy": "policy:trust-anchor-admission:v1",
"policyHash": "0x...",
"decision": "ADMIT_TRUST_ANCHOR",
"verificationMethod": "did:catenor:trust-anchor-a#assertion-key-1",
"evidenceCommitment": "0x...",
"createdAt": "2026-09-08T00:00:00Z",
"decisionRef": "decision:admission:001"
}23.1 type
Identifies the record type.
Final naming is draft.
23.2 trustAnchor
Candidate/admitted Trust Anchor DID.
23.3 admissionPolicy
Policy identifier used during admission.
23.4 policyHash
Commitment to the exact policy version evaluated.
Exact hash representation is not frozen.
23.5 decision
Working positive value:
ADMIT_TRUST_ANCHORFinal admission-decision vocabulary is not frozen.
23.6 verificationMethod
Verification method whose possession/control was established during admission.
23.7 evidenceCommitment
Commitment to evidence used during admission without publishing the sensitive evidence.
Exact commitment mechanism is open.
23.8 createdAt
Admission decision time.
23.9 decisionRef
Reference to the detailed Decision object / audit record.
Identifier format is open.
24. Trust Anchor admission is not self-certification
Status: FROZEN SEMANTICS
Invalid:
Subject signs:
"I am a Trust Anchor"and treats that signature alone as sufficient admission.
Required conceptually:
external evidence
+
admission policy
+
verification
+
proof of key possession
+
configured trust/governance
↓
Admission Record25. Policy
Status: DRAFT SHAPE
Current minimal working object:
{
"id": "policy:investment:v1",
"action": "INVEST",
"requirements": [
{
"claim": "KYC_VERIFIED"
},
{
"claim": "AML_CLEAR"
}
]
}25.1 id
Policy identifier/version.
Final identifier scheme is open.
25.2 action
Action being evaluated.
Action vocabulary is open.
25.3 requirements
Verified conditions required by the policy.
The full expression language is open.
26. Policy semantics
Status: FROZEN SEMANTICS
Policy consumes verified facts and context.
A security-critical Policy MUST NOT rely on mutable unsigned application state as though it were verified protocol evidence.
The final:
JSON schema
DSL
expression language
policy execution engineremain open.
27. Decision
Status: DRAFT SHAPE
Current working object:
{
"policy": "policy:investment:v1",
"subject": "did:catenor:human-a",
"action": "INVEST",
"resource": "asset:resource-a",
"decision": "ALLOW",
"evaluatedAt": "2026-09-08T00:00:00Z",
"evidenceCommitment": "0x..."
}27.1 policy
Policy/version evaluated.
27.2 subject
Canonical Subject whose action/context was evaluated.
27.3 action
Requested action.
27.4 resource
Target/resource of the requested action when applicable.
27.5 decision
Minimum authoritative outcomes:
ALLOW
DENYOptional states may include:
INDETERMINATE
REQUIRES_REVIEW
ERRORThese MUST NOT silently become ALLOW.
27.6 evaluatedAt
Evaluation timestamp.
27.7 evidenceCommitment
Optional/minimized commitment to the evidence/proof set used.
Exact commitment mechanism is open.
28. Decision != execution authorization
Status: FROZEN SEMANTICS
A Catenor Decision answers:
Should this action be authorized under the applicable identity,
authority, credential, and policy semantics?It does not automatically mean:
the execution key is technically allowed to execute a transactionExecution authorization is a separate layer.
29. Audit Event
Status: DRAFT SHAPE
Recovered working event shape:
{
"type": "CREDENTIAL_ISSUED",
"subject": "did:catenor:human-a",
"issuer": "did:catenor:organization-a",
"credentialId": "urn:uuid:<credential-id>",
"timestamp": "2026-09-08T00:00:00Z",
"requestId": "request:001"
}29.1 type
Event type.
Initial conceptual event vocabulary includes:
SUBJECT_CREATED
ACCOUNT_BOUND
ACCOUNT_REVOKED
KEY_ADDED
KEY_REVOKED
CREDENTIAL_ISSUED
CREDENTIAL_REVOKED
CAPABILITY_GRANTED
CAPABILITY_REVOKED
DELEGATION_CREATED
DELEGATION_REVOKED
POLICY_EVALUATED
TRUST_ANCHOR_ADMITTED
IDENTITY_DISCLOSEDFinal canonical vocabulary is not frozen.
29.2 subject
Primary Subject affected by the event when applicable.
29.3 issuer
Issuer/actor relevant to the event when applicable.
Not every event will use this field.
29.4 credentialId
Credential reference when applicable.
29.5 timestamp
Event time.
29.6 requestId
Correlation identifier for the triggering operation/request.
Final identifier shape is open.
30. Audit persistence
Status: OPEN WIRE / STORAGE MODEL
Frozen semantics:
security-relevant lifecycle changes are append-oriented
historical verification may require authoritative historyOpen:
database representation
Merkle-log representation
shared-state anchoring
hash chaining
event signature format31. Conformance Statement
Status: DRAFT SHAPE
Current working object from the Conformance specification:
{
"protocol": "Catenor",
"version": "0.1-draft",
"implementation": "Example Verifier",
"conformanceTargets": [
"CredentialVerifier",
"AuthorityEvaluator"
],
"profiles": [
"Core",
"Authority"
],
"didMethods": [
"did:catenor"
],
"cryptoProfiles": [
"catenor-crypto-v1"
],
"status": "experimental"
}31.1 protocol
Must identify Catenor.
31.2 version
Protocol version against which conformance is claimed.
31.3 implementation
Human-readable implementation identifier/name.
It does not imply certification.
31.4 conformanceTargets
Declared protocol roles implemented.
31.5 profiles
Declared Catenor profiles supported.
31.6 didMethods
DID methods supported by the implementation.
31.7 cryptoProfiles
Cryptographic profiles supported.
catenor-crypto-v1 is a placeholder until the Crypto Profile is frozen.
31.8 status
Implementation maturity.
Working values:
experimental
beta
production
deprecatedThis field is informational, not proof of security.
32. Key Management Reference
Status: IMPLEMENTATION RECORD
This is not a public protocol credential.
It is an implementation-neutral operational record linking a DID verification method to protected signing infrastructure.
Working shape:
{
"subject": "did:catenor:organization-a",
"verificationMethod": "did:catenor:organization-a#assertion-key-1",
"signerRef": "<secure-key-management-reference>",
"purpose": "CREDENTIAL_ASSERTION",
"status": "ACTIVE"
}Frozen invariant:
The private key itself MUST NOT be stored in this operational record.
signerRef is an opaque handle to a Secure Key Management System.
33. Relationship Index Row
Status: IMPLEMENTATION RECORD
Operational query/index model:
{
"subject": "did:catenor:human-a",
"predicate": "OFFICER_OF",
"object": "did:catenor:organization-b",
"credentialId": "urn:uuid:<credential-id>",
"status": "ACTIVE"
}This row is not cryptographic proof.
Frozen model:
Operational Database
↓ locates
credentialId
↓
Credential Vault / proof material
↓
cryptographic verification
↓
authority verification34. Capability Index Row
Status: IMPLEMENTATION RECORD
No canonical row shape is frozen.
An implementation MAY index capabilities for query performance.
Any security-critical use MUST resolve the underlying authority proof.
Do not treat the index row as the source of authority.
35. Confidential Verification Result
Status: OPEN WIRE FORMAT
Frozen conceptual examples:
KYC_VALID = true
AGE_OVER_THRESHOLD = true
SAME_SUBJECT = true
AUTHORITY_VALID = true
ACCOUNT_CONTROL_VALID = true
ALLOW
DENYCatenor's principle is:
Private evidence in. Minimum necessary verifiable fact out.
No universal JSON envelope for confidential-verification results has yet been approved.
The Decision object may consume or reference such results.
36. Subject Continuity Result
Status: OPEN WIRE FORMAT
Frozen outcomes conceptually include:
SAME_SUBJECT
NEW_SUBJECT
INDETERMINATE
REQUIRES_REVIEWExact vocabulary and confidence representation are not frozen.
Inputs used for matching remain private.
The result MUST NOT expose unnecessary identity attributes.
37. Credential lifecycle vocabulary
Status: DRAFT VOCABULARY
Previously established states:
ACTIVE
SUSPENDED
REVOKED
EXPIRED
SUPERSEDEDDetailed credential-status specification may refine these states.
UNKNOWN is also used at verification time to represent unavailable/undetermined status and MUST NOT be interpreted as ACTIVE.
38. Account Binding lifecycle vocabulary
Status: DRAFT VOCABULARY
Current conceptual states:
ACTIVE
SUSPENDED
REVOKED
EXPIREDExact lifecycle semantics remain to be specified.
39. Trust Domain
Status: OPEN WIRE FORMAT
Frozen semantics:
A Trust Domain defines the contextual trust/policy environment in which:
Trust Anchors
Issuers
credential types
evidence sources
authority chains
policiesare accepted/evaluated.
Catenor MUST NOT define a universal global Issuer whitelist.
No canonical Trust Domain JSON object is currently approved.
40. Public/private storage classification
Status: FROZEN BASELINE
| Data | Default visibility | Protocol role |
|---|---|---|
did:catenor:<id> | Public / resolvable | DID Resolution Layer |
| DID Document | Public / resolvable | DID Resolution Layer |
| Assertion public verification material | Public | DID Document |
| Credential assertion private key | Private | Secure Key Management |
| Financial execution private key | Private | Secure Key Management |
| DID ↔ financial Account Binding | Private by default | Private Account Binding Registry |
| Full sensitive VC | Private by default | Credential Vault |
| PII / legal identity evidence | Private | Identity Vault |
| Provider external subject reference | Private | Canonical Subject Registry |
| Relationship | Private by default | Credential / Authority state |
| Capability | Private by default | Credential / Authority state |
| Delegation | Private by default | Credential / Authority state |
| Credential status | Profile-dependent / resolvable | Status Layer |
| Policy | Trust-domain dependent | Policy Layer |
| Decision | Minimum necessary disclosure | Decision Layer |
| Full audit details | Private / role-controlled | Audit Layer |
| Audit commitment | May be public | Commitment Layer |
41. Key-purpose data model invariant
Status: FROZEN
Never model this:
one private key
→ credential issuance
→ identity authentication
→ delegation
→ financial executionas the implicit Catenor default.
The protocol recognizes distinct purposes.
Under the Financial Security Profile:
Credential Assertion private key
!=
Financial Execution private key42. Private Account Binding invariant
Status: FROZEN
Public DID state:
did:catenor:human-a
↓
public verification methodPrivate binding state:
did:catenor:human-a
↓
external financial accountThese MUST NOT be conflated.
The fact that an external account may itself be public does not make the Catenor Subject ↔ account correlation public.
43. Issuer model invariant
Status: FROZEN
Issuer is:
a Catenor Subject
+
valid authority to issue a specific credential type
+
scope
+
lifecycle validityIssuer is not:
a global boolean
a hardcoded platform role
a credential itselfAn Issuer Authorization Credential is evidence of authority.
44. Hierarchical Issuer model invariant
Status: FROZEN
Valid:
Trust Anchor
↓ grants AUTHORIZE_ISSUER
Subject A
↓ authorizes
Subject B
↓ issues
Credential Type Aonly when every edge is authorized.
Not valid:
Subject A has only ISSUE_CREDENTIAL
↓
Subject A authorizes Subject Bunless Subject A also has explicit authority to authorize issuers.
45. Delegation invariant
Status: FROZEN
For every delegation:
delegated authority
⊆
delegator authorityDelegation MUST NOT create net-new authority.
46. Relationship invariant
Status: FROZEN
A Relationship object describes:
connectionnot:
permissionPermission belongs to Capability / Policy semantics.
47. Signature invariant
Status: FROZEN
This:
Verify(publicKey, credential, proof) = truemeans:
credential integrity valid
+
proof produced by corresponding private keyIt does not mean:
claim is true
issuer was authorized
credential remains active
policy should accept it48. Data model mapping to future JSON Schemas
When object shapes are approved, this baseline should map to machine-readable schemas.
Planned schemas include:
schemas/
├── account-binding.schema.json
├── relationship.schema.json
├── capability.schema.json
├── delegation.schema.json
├── issuer-authorization.schema.json
├── policy.schema.json
├── decision.schema.json
├── audit-event.schema.json
└── conformance-statement.schema.jsonAdditional VC/VP schemas must remain compatible with the underlying W3C data model.
Do not generate schemas for OPEN WIRE FORMAT objects as if they were final.
49. Objects explicitly NOT frozen yet
The following concepts MUST NOT acquire a canonical JSON shape without review:
Canonical Subject public record
final DID Resolution metadata envelope
Account Control Proof
Verifiable Presentation Catenor profile
Credential Status mechanism
Trust Domain object
Subject Continuity result envelope
Confidential Verification result envelope
final Delegation representation
final Capability constraint grammar
final Policy language
final Audit persistence/event-proof format
final Crypto Profile50. Documentation-agent requirements
Any documentation or implementation agent working on Catenor MUST follow this procedure.
Before defining a JSON object:
1. Find the object in this baseline.
2. Check its status.
3. Preserve frozen field names and semantics.
4. If DRAFT, refine only with explicit justification.
5. If OPEN, do not invent a normative final shape.
6. If a new field is required, identify it as a proposed amendment.
7. Never replace an established vocabulary merely for implementation convenience.Example:
If the baseline uses:
{
"subject": "...",
"action": "...",
"resource": "...",
"constraints": {}
}an agent MUST NOT silently replace it with:
{
"user": "...",
"permission": "...",
"target": "..."
}51. Reference-implementation separation
Core protocol objects MUST remain implementation-neutral.
Implementation-specific identifiers, infrastructure handles, provider-specific fields, and deployment configuration belong in:
reference implementation
or
private implementation recordsnot in normative Catenor objects unless the protocol explicitly standardizes them.
52. Canonical data-flow summary
<mermaid-placeholder index="0" />53. Canonical object relationships
Canonical Subject
│
├── DID Document
│ └── Verification Methods
│
├── Private Account Bindings
│
├── Verifiable Credentials
│ ├── Relationship Credential
│ ├── Delegation Credential
│ └── Issuer Authorization Credential
│
├── Capabilities
│
└── Lifecycle / Audit History
Trust Domain
│
├── Trust Anchors
├── accepted Issuers
├── Policies
└── verification requirements
Policy
↓ consumes
Verified claims + authority + context
↓
Decision
Decision
≠
Execution authorization54. Final data-model baseline statement
Catenor separates public identity-verification state from private account correlation and private evidence. A Subject is identified by
did:catenor; its DID Document exposes only appropriate public verification material. External accounts are private-by-default Account Bindings. Verifiable Credentials carry signed claims. Relationships describe connections, Capabilities describe powers, Delegations transfer bounded powers, and Issuer Authorization establishes who may issue which credential types. Policies consume verified facts and authority chains to produce Decisions. Operational databases may index these objects but do not replace their cryptographic proofs.