# Proofet Atlas Taxonomy Registry

**Status:** Proofet Atlas 0.1.0
**Scope:** Digital Identity Credentials
**Known-value cutoff:** 2026-08-24
**Conceptual source:** [Digital Credential and VC Analysis Taxonomy](../docs/vc_taxonomy.md)

This is the authoritative registry of Proofet Atlas characteristics and values
for the declared scope and cutoff. It is complete in a bounded sense: every
characteristic has a stable identifier and complete value model, and every
closed value set is listed. It does not claim that every private, experimental,
historical, or future credential technology is known.

## Value Models

| Model | Meaning |
|---|---|
| `closed` | Every permitted Atlas value is listed here. |
| `registered` | Known entries are listed, but unmatched literal identifiers remain valid observations. |
| `structured` | The value is an object composed of controlled values, literals, measurements, and nested observations. |
| `evaluated` | The value records a check actually performed, including scope, evidence, and limitations. |

`unknown` means classification was not possible. `none_detected` means the
supported inspection completed and found no mechanism. Neither means `other`,
and neither permits discarding literal evidence.

## Identifier Grammar

```text
segment    = [a-z][a-z0-9_]*
atlas_code = segment ("." segment)*
```

The canonical expression is `^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$`.
Dots delimit hierarchy and underscores separate words within one segment.
Versions belong in a separate `version` field. Atlas codes are assigned by this
registry, never generated from external data. URIs, media types, `vct`,
`docType`, algorithm, cryptosuite, and profile identifiers remain literal. A
published code never changes meaning; deprecated codes are never reused.

## Characteristic Registry

This table is exhaustive. Short IDs are navigation labels; Atlas codes are the
stable identifiers.

| ID | Characteristic code | Group | Cardinality | Model |
|---|---|---|---|---|
| A1 | `atlas.artifact.kind` | Intrinsic | one | `closed` |
| A2 | `atlas.credential.family` | Intrinsic | zero or one | `closed` |
| A3 | `atlas.credential.model_and_profile` | Intrinsic | one model, zero or more profiles | `structured`, `registered` |
| A4 | `atlas.representation.serialization` | Intrinsic | one or more layers | `closed` |
| A5 | `atlas.representation.security_envelope` | Intrinsic | one or more layers | `structured`, `closed` |
| A6 | `atlas.claims.topology` | Intrinsic | one | `structured` |
| A7 | `atlas.credential.lifecycle` | Intrinsic | one | `structured` |
| A8 | `atlas.semantics.definition` | Intrinsic | zero or more | `structured`, `closed` |
| A9 | `atlas.credential.domain` | Intrinsic | zero or more | `structured`, `closed` |
| B1 | `atlas.mechanism.cryptography` | Declared | zero or more | `structured`, `registered` |
| B2 | `atlas.mechanism.selective_disclosure` | Declared | one | `structured`, `closed` |
| B3 | `atlas.mechanism.key_discovery` | Declared | zero or more | `structured`, `registered` |
| B4 | `atlas.mechanism.holder_binding` | Declared | one | `structured`, `closed` |
| B5 | `atlas.mechanism.credential_status` | Declared | zero or more | `structured`, `registered` |
| B6 | `atlas.context.exchange_protocol` | Contextual | zero or more | `structured`, `registered` |
| C1 | `atlas.assurance.decoding` | Assurance | checks | `evaluated` |
| C2 | `atlas.assurance.structure` | Assurance | checks | `evaluated` |
| C3 | `atlas.assurance.conformance` | Assurance | checks | `evaluated` |
| C4 | `atlas.assurance.cryptography` | Assurance | checks | `evaluated` |
| C5 | `atlas.assurance.status` | Assurance | checks | `evaluated` |
| C6 | `atlas.assurance.trust` | Assurance | checks | `evaluated` |
| C7 | `atlas.assurance.binding` | Assurance | checks | `evaluated` |
| C8 | `atlas.assurance.privacy` | Assurance | checks | `evaluated` |
| C9 | `atlas.assurance.fitness_for_purpose` | Assurance | policy decisions | `evaluated` |

## A. Intrinsic Classification

### A1. Artifact Kind

| Value suffix | Meaning |
|---|---|
| `credential` | Claims issued about one or more subjects. |
| `presentation` | Credentials or derived claims assembled for a verifier. |
| `disclosure` | Data revealing a selectively disclosable element. |
| `binding_proof` | Holder, presenter, or transaction binding proof. |
| `certificate` | Public-key and identity binding certificate. |
| `unknown` | No in-scope kind was established. |

Append each suffix to the `atlas.artifact.kind` prefix. Protocol messages are
not A1 values; they can supply B6 context for embedded artifacts.

### A2. Credential Family

Append each suffix to the `atlas.credential.family` prefix.

| Suffix | Governing specification or body |
|---|---|
| `w3c_vc` | W3C Verifiable Credentials Data Model |
| `sd_jwt_vc` | IETF SD-JWT-based Verifiable Credential |
| `iso_mdoc` | ISO/IEC 18013-5 and ISO/IEC 23220 mdoc |
| `anoncreds` | Hyperledger AnonCreds |
| `x509` | ITU-T X.509 and IETF PKIX certificate |
| `unknown` | No registered family established; retain identifiers. |

This set is closed. Profiles, schemes, products, and protocols are not families.

### A3. Model Version and Profiles

The model object contains `family` (A2), literal `version`, `status`
(`declared`, `inferred`, `conflicting`, `unknown`), and evidence. Each profile
contains:

| Field | Values |
|---|---|
| `registry_key` | registered code below, or `null` |
| `identifier` | exact observed identifier |
| `identifier_kind` | `vct`, `doctype`, `type`, `context`, `schema`, `credential_definition`, `certificate_policy`, `unknown` |
| `version` | literal version or `null` |
| `base_family` | A2 value |
| `authority` | canonical authority identifier |
| `registry_status` | `registered`, `unregistered`, `ambiguous` |
| `evidence` | source paths and literal values |

Known profiles:

| Registry key | Profile | Families | Recognition basis |
|---|---|---|---|
| `atlas.credential.profile.eudi_pid` | EUDI PID | `sd_jwt_vc`, `iso_mdoc` | Versioned EUDI `vct` or `docType` rule |
| `atlas.credential.profile.iso_mdl` | ISO mobile driving licence | `iso_mdoc` | `org.iso.18013.5.1.mDL` |
| `atlas.credential.profile.iso_photo_id` | ISO photo ID | `iso_mdoc` | `org.iso.23220.photoid.1` |
| `atlas.credential.profile.openbadges` | 1EdTech Open Badges 3.0 | `w3c_vc` | Versioned context and type rule |
| `atlas.credential.profile.learner_credential` | 1EdTech Comprehensive Learner Record | `w3c_vc` | Versioned context and type rule |
| `atlas.credential.profile.ebsi_vc` | EBSI VC profile | `w3c_vc` | Versioned EBSI context, schema, or type rule |
| `atlas.credential.profile.icao_dtc` | ICAO Digital Travel Credential | `w3c_vc`, `iso_mdoc` | Versioned profile identifier or document type |

Recognition rules must be versioned before implementation. Unmatched profiles
are `unregistered` and retain their literal identifier.

### A4. Serialization

Record layers outermost to innermost. Full codes use
the `atlas.representation.serialization` prefix.

| Suffix | Meaning |
|---|---|
| `json` | JSON without established JSON-LD processing |
| `json_ld` | JSON using the JSON-LD processing model |
| `cbor` | Concise Binary Object Representation |
| `anoncreds_json` | AnonCreds-specific JSON structure |
| `asn1_der` | ASN.1 Distinguished Encoding Rules |
| `unknown` | Serialization not established |

Base64url and PEM are transfer encodings recorded as layer evidence. JWS and
COSE are A5 envelopes.

### A5. Security Envelope and Representation

Each layer contains `kind`, `variant`, literal `media_type`,
`payload_relationship` (`detached`, `embedded`, `enveloping`, `derived`,
`zero_knowledge`, `none`, `unknown`), and evidence.

| Kind suffix | Known variants |
|---|---|
| `unsecured` | `plain_object` |
| `embedded_proof` | `data_integrity`, `legacy_linked_data_proof`, `proof_set`, `proof_chain` |
| `jws` | `compact`, `json`, `legacy_nested_vc_jwt`, `direct_payload_vc_jwt`, `sd_jwt`, `sd_jwt_kb` |
| `cose` | `sign1`, `sign`, `mac0`, `mac`, `encrypt0`, `encrypt`, `mdoc_issuer_auth`, `mdoc_device_auth` |
| `derived_proof` | `bbs_derived`, `ecdsa_sd_derived` |
| `zk_credential_proof` | `anoncreds_proof`, `cl_signature_proof` |
| `unknown` | Preserve literal type or media type. |

Append each kind suffix to the `atlas.representation.security_envelope` prefix.

### A6. Subject and Claim Topology

The object contains:

- `subject_count` and `subject_count_status` (`exact`, `lower_bound`, `indeterminate`);
- all subject identifiers and `subject_identifier_presence` (`all`, `some`, `none`, `indeterminate`);
- `holder_subject_relationship` (`same`, `different`, `mixed`, `not_declared`, `indeterminate`);
- `bearer_orientation` (`bearer`, `holder_bound`, `claims_bound`, `mixed`, `indeterminate`);
- claim locations (`credential`, `presentation`, `disclosure`, `binding_proof`, `certificate`, `unknown`);
- every claim's path, name, value type, cardinality, and disclosure state;
- subject relationships and measured maximum depth.

Value types are `null`, `boolean`, `integer`, `number`, `string`, `binary`,
`object`, `array`, and `unknown`. Cardinalities are `one`, `zero_or_one`,
`one_or_more`, `zero_or_more`, and `unknown`. Partial measurements are explicit.

### A7. Lifecycle and External Dependencies

Record literal and normalized start/end times and `window_state`:
`within_declared_time_window`, `before_declared_start`, `after_declared_end`,
`indeterminate`, or `not_declared`.

Each dependency has exact `identifier`, evidence, and:

| Field | Values |
|---|---|
| `kind` | `status`, `schema`, `evidence`, `terms_of_use`, `refresh_service`, `context`, `verification_method`, `related_resource`, `issuer_metadata`, `trust_registry`, `unknown` |
| `availability` | `embedded`, `supplied`, `resolved`, `not_resolved`, `resolution_failed`, `not_applicable` |
| `integrity` | `verified`, `failed`, `declared_not_checked`, `not_declared`, `not_applicable` |

Unknown dependency types preserve their literal property or type.

### A8. Schema and Semantic Definition

Append each suffix to the `atlas.semantics.definition` prefix.

| Suffix | Required data |
|---|---|
| `json_ld_context` | exact context |
| `json_schema` | exact identifier or embedded schema |
| `anoncreds_schema` | schema identifier and available declarations |
| `iso_namespace` | exact namespace and document type |
| `credential_metadata` | configuration and issuer metadata identifiers |
| `profile` | A3 profile reference |
| `proprietary` | literal defining identifier and authority |
| `none_detected` | completed-inspection evidence |
| `unknown` | literal unrecognized declaration |

Each observation has a processing history using `declared`, `resolved`,
`integrity_checked`, `applied`, `failed`, and `not_checked`.

### A9. Domain and Intended Purpose

Append each suffix to the `atlas.credential.domain` prefix.

| Suffixes |
|---|
| `identity`, `education`, `employment`, `professional_licensing`, `authorization` |
| `health`, `finance`, `membership`, `compliance`, `device`, `supply_chain` |
| `travel`, `residency`, `age`, `unknown` |

Each observation contains basis (`declared`, `context_supplied`, `inferred`,
`unknown`), confidence from 0 through 1, evidence, and optional literal purpose.
Domain does not establish C9 fitness.

## B. Declared Capabilities and Mechanisms

### B1. Cryptographic Mechanism

Each inventory item records:

- operation: `signature`, `mac`, `commitment`, `zero_knowledge_proof`,
  `key_agreement`, `encryption`, `digest`, or `unknown`;
- container: `data_integrity`, `jws`, `cose`, `x509`, `anoncreds`, `mdoc`, or `unknown`;
- literal proof type, algorithm, cryptosuite, verification method,
  transformation, and digest identifiers; and
- registry status (`registered`, `unregistered`, `ambiguous`) and evidence.

Known Data Integrity cryptosuites are `eddsa-rdfc-2022`, `eddsa-jcs-2022`,
`ecdsa-rdfc-2019`, `ecdsa-jcs-2019`, `ecdsa-sd-2023`, and `bbs-2023`.
Known proof types include `DataIntegrityProof` and `Ed25519Signature2020`.
JOSE, COSE, and X.509 algorithms retain their IANA names, integer labels, or
object identifiers; Atlas does not copy living external registries into a closed
enum. Recognition is not verification.

### B2. Selective Disclosure

| Field | Values |
|---|---|
| `capability` | `present`, `absent`, `indeterminate`, `not_applicable` |
| `mechanisms` | values below |
| `granularity` | `claim`, `nested_claim`, `object`, `array_element`, `namespace`, `predicate`, `unknown` |
| `current_disclosure` | `full`, `selective`, `none`, `indeterminate`, `not_applicable` |
| `commitments` | `present`, `absent`, `indeterminate`, `not_applicable` |
| `unlinkability` | `claimed`, `not_claimed`, `conditional`, `indeterminate`, `not_applicable` |

Mechanisms are `sd_jwt_salted_hash`, `data_integrity_bbs_derived`,
`data_integrity_ecdsa_sd_derived`, `mdoc_issuer_signed_item`,
`anoncreds_attribute_reveal`, `anoncreds_predicate_proof`, `atomic_credential`,
and `unknown`. Also record disclosed paths and measurable undisclosed count.

### B3. Key Discovery and Resolution

Methods are `did_url`, `controlled_identifier_document`, `jwk`, `jwks`,
`x509_embedded`, `x509_url`, `x509_pki`, `cose_key`,
`anoncreds_credential_definition`, `trusted_registry`, `local_key`, and
`unknown`. Each observation records the exact identifier, optional DID method or
URI scheme, material format (`jwk`, `multikey`, `cose_key`, `x509`,
`anoncreds_credential_definition`, `unknown`), and resolution status
(`not_attempted`, `resolved`, `not_found`, `failed`, `blocked`,
`not_applicable`). Resolution does not establish authorization or trust.

### B4. Holder and Presentation Binding

Every property independently reports `declared`, `not_declared`,
`indeterminate`, or `not_applicable`, plus exact evidence.

| Property | Mechanisms |
|---|---|
| Credential binding | `confirmation_key`, `subject_key`, `device_key`, `link_secret`, `claims_binding`, `biometric_binding`, `bearer`, `unknown` |
| Proof of possession | `kb_jwt`, `vp_data_integrity_proof`, `vp_jws`, `mdoc_device_auth`, `anoncreds_proof`, `issuance_key_proof`, `unknown` |
| Presentation binding | `credential_digest`, `disclosure_digest`, `derived_proof`, `session_transcript`, `presentation_proof`, `unknown` |
| Audience binding | `aud_claim`, `domain`, `client_id`, `origin`, `session_transcript`, `unknown` |
| Challenge binding | `nonce_claim`, `challenge`, `session_transcript`, `unknown` |
| Freshness | `issued_at`, `not_before`, `expiration`, `nonce`, `one_time_use`, `transaction_state`, `unknown` |

Detection is not C7 verification.

### B5. Status and Revocation

Append each suffix to the `atlas.mechanism.credential_status` prefix.

| Suffix | Basis |
|---|---|
| `bitstring_status_list` | W3C Bitstring Status List |
| `status_list_2021` | W3C StatusList2021 |
| `token_status_list` | IETF Token Status List |
| `anoncreds_revocation_registry` | AnonCreds accumulator registry |
| `x509_crl` | X.509 CRL |
| `x509_ocsp` | OCSP |
| `online_issuer_check` | issuer-specific endpoint |
| `short_lived_only` | explicit profile rule or configured threshold |
| `none_detected` | supported inspection found no mechanism |
| `unknown` | preserve unrecognized declaration |

Also record literal status type and identifier, purpose (`revocation`,
`suspension`, `message`, `unknown`, or literal extension), index/token, and
evaluation status (`not_checked`, `good`, `revoked`, `suspended`, `invalid`,
`indeterminate`, `not_applicable`).

### B6. Issuance and Presentation Protocol Context

Append each suffix to the `atlas.context.exchange_protocol` prefix.

| Suffix | Known stages |
|---|---|
| `openid4vci` | offer, authorization, token, credential request/response, deferred, notification |
| `openid4vp` | authorization request, presentation request/response, DC API |
| `presentation_exchange` | presentation definition/submission |
| `didcomm_aries` | issue credential, present proof |
| `iso_mdoc_proximity` | device retrieval, engagement, session |
| `iso_mdoc_online` | server retrieval, OpenID4VP, DC API |
| `chapi` | store, get |
| `digital_credentials_api` | get, create |
| `proprietary` | literal protocol identifier required |
| `unknown` | retain literal evidence |

Each observation includes literal version, stage, basis (`enclosing_message`,
`endpoint`, `caller_supplied`, `inferred`), evidence, and confidence. A bare
credential does not establish exchange history.

## C. Evaluated Assurance

Every C characteristic uses this common contract:

| Field | Values |
|---|---|
| `id` | stable check identifier |
| `characteristic` | C1-C9 Atlas code |
| `status` | `pass`, `fail`, `warning`, `not_checked`, `not_applicable` |
| `scope` | precise check scope |
| `ruleset` | exact identifier and version, or `null` |
| `evidence` | evidence array |
| `detail` | bounded explanation |
| `limitations` | explicit omissions and environmental limits |
| `evaluated_at` | timestamp or `null` |

| ID | Registered check subjects |
|---|---|
| C1 | `artifact_detection`, `serialization_decoding`, `envelope_decoding`, `payload_extraction`, `disclosure_decoding` |
| C2 | `required_fields`, `value_shapes`, `cardinality`, `date_syntax`, `date_ordering`, `envelope_payload_consistency`, `extension_shape` |
| C3 | `data_model`, `context`, `vocabulary`, `schema`, `credential_profile`, `media_type`, `algorithm_constraints`, `normative_rules` |
| C4 | `signature`, `mac`, `disclosure_digest`, `derived_proof`, `zero_knowledge_proof`, `key_authorization`, `certificate_path` |
| C5 | `time_window`, `revocation`, `suspension`, `status_integrity`, `status_freshness`, `certificate_status`, `lifecycle_policy` |
| C6 | `issuer_identity`, `issuer_authority`, `trust_anchor`, `trust_registry`, `governance`, `accreditation`, `authorization_chain` |
| C7 | `credential_binding`, `proof_of_possession`, `presentation_binding`, `audience`, `challenge`, `freshness`, `replay_protection` |
| C8 | `sensitive_claims`, `stable_identifiers`, `disclosure_minimization`, `correlation`, `external_tracking`, `policy_excess`, `unlinkability` |
| C9 | named policy decision with `acceptable`, `rejected`, or `indeterminate` outcome |

C9's policy outcome is separate from execution status. A correctly executed
policy can have `status: pass` and `outcome: rejected`. It additionally records
policy/version, purpose, jurisdiction, required and missing evidence, and
decision rationale.

## Evidence Contract

Every non-sentinel classification and assurance result cites `source`
(artifact, enclosing message, caller context, resource, policy, or ruleset), an
unambiguous `path`, literal `value` or typed redaction/digest, and an
`observation`. Evidence establishes only its containing claim: a declared
algorithm supports B1, not a C4 pass.

## Extension Rules

1. Add a characteristic only for a distinct analytical question that cannot be
   represented without overloading an existing one.
2. Add a closed value only when its meaning is stable and distinguishable.
3. A registered entry needs a stable authority, canonical identifier or
   deterministic rule, source specification, and version policy.
4. Preserve unknown external identifiers literally; never normalize them into
   `other`, guess a nearby entry, or discard them.
5. Retain external spelling and numeric values. Atlas codes identify Atlas
   concepts, not aliases for every external value.
6. Deprecation records a replacement and release; it never deletes history.
7. Classification never implies conformance, verification, trust, privacy, or
   fitness for purpose.

## Source Anchors

The known-value set derives from the conceptual taxonomy and, as available at
the cutoff, W3C VCDM 1.1/2.0, Data Integrity and its EdDSA/ECDSA/BBS suites,
VC JOSE/COSE, Bitstring Status List, DID and Controlled Identifiers; IETF JOSE,
COSE, PKIX, SD-JWT (RFC 9901), and Token Status List work; OpenID4VCI/VP 1.0;
ISO/IEC 18013-5 and 23220; Hyperledger AnonCreds; DIF Presentation Exchange and
DIDComm/Aries; EUDI ARF; 1EdTech Open Badges and CLR; EBSI VC profiles; and ICAO
DTC work.

External registries are discovery aids. Conformance rules must cite and
implement an exact normative specification and version rather than relying on
this classification registry alone.