Mapping to xRegistry¶
This guide binds the Distribution Substrates contract to [[xRegistry]], a hierarchical registry model organized as Registry → Groups → Resources → Versions. xRegistry contributes structure, identity, versioning, cross-referencing, and a registry API; it has no native content-addressing or signature primitive.
Of the binding invariants, the xRegistry binding delegates entry
identity, catalog structure, artifact content, and manifest discovery to
xRegistry's own primitives, but carries content integrity and signing
in the Trust Manifests' signatures and the entry's digest. These remain
authoritative exactly as in plain-HTTP distribution, because xRegistry
cannot express either guarantee natively.
Conceptual Mapping¶
An AI Catalog document maps to an xRegistry Group whose Resources are the catalog entries; each entry's artifact is the Resource document.
| AI Catalog (Logical) | xRegistry (Physical) |
|---|---|
| AI Catalog document | A Group instance (e.g. in a aicatalogs Group type), or the Registry root when serving a single catalog |
| Catalog Entry | A Resource within that Group |
Entry identifier |
Resource-local <SINGULAR>id and xid, with the complete URI preserved in the ai-catalog.identifier label |
Entry type |
Version contenttype (with format when a named format applies) |
| Entry artifact content | Resource document — inline (<RESOURCE> / <RESOURCE>base64) or external (<RESOURCE>url) |
| Entry metadata (displayName, description, tags) | name, description, labels |
| Entry version | Version versionid |
| Nested Catalog Entry | A nested Group referenced from the entry's Resource via meta.xref |
| Contributor Trust Manifests | An array in an extension attribute on the Resource, or related Resources referenced by xref |
Content integrity (entry.digest) |
Carried in a Resource extension attribute (xRegistry has no native digest) |
| Signing | Trust Manifest signatures retained in a Resource extension attribute (xRegistry has no native signature) |
Packing: AI Catalog to xRegistry¶
Tooling converts an AI Catalog JSON document into xRegistry resources:
-
The catalog becomes a Group instance. Catalog-level metadata maps to Group attributes:
displayNametoname, host identity and other metadata tolabelsor extension attributes. -
Each catalog entry becomes a Resource in that Group. The entry's artifact content is stored as the Resource document — inline via
<RESOURCE>/<RESOURCE>base64, or by reference via<RESOURCE>url.typemaps tocontenttype; entry metadata maps toname,description, andlabels. The complete entryidentifierURI is preserved in theai-catalog.identifierlabel. Multiple entry versions map to Versions. -
Trust Manifests are carried as an array in a Resource extension attribute (for example
aicatalog_trustmanifests), or as related Resources referenced frommeta.xref, preserving each manifest, including its contributor, subject, and signature. Carryentry.digestseparately, for example asaicatalog_digest. Preserve the signed manifest contents so signature payloads can be reconstructed unchanged. -
Nested catalog entries become nested Groups; the parent entry's Resource references the nested Group through
meta.xref.
Unpacking: xRegistry to AI Catalog¶
Tooling converts xRegistry resources back to an AI Catalog JSON document:
- Retrieve the Group in document view (the xRegistry
?docprojection), which returns a single self-contained JSON document analogous toai-catalog.json. - For each Resource, reconstruct
entry.identifierfrom theai-catalog.identifierlabel, read its document (inline or via<RESOURCE>url) andcontenttypeto recover the entry's artifact content andtype, and mapname,description, and remaininglabelsback to entry metadata. - Restore
trustManifestsanddigestfrom their extension attributes or related Resources, then verify the signatures and signed artifact bindings against the reconstructed entry and served bytes. - Resolve
xref'd nested Groups into nested catalog entries. - Assemble the logical
application/ai-catalog+jsondocument.
xRegistry Document Example¶
The following shows the xRegistry document-view representation of a Group holding two entries. This is generated by tooling, not authored by hand:
{
"aicatalogid": "acme-services",
"self": "https://registry.acme.com/aicatalogs/acme-services",
"xid": "/aicatalogs/acme-services",
"epoch": 1,
"name": "Acme Services Inc.",
"entriesurl": "https://registry.acme.com/aicatalogs/acme-services/entries",
"entriescount": 2,
"entries": {
"finance-a2a": {
"entryid": "finance-a2a",
"xid": "/aicatalogs/acme-services/entries/finance-a2a",
"name": "Acme Finance A2A Agent",
"contenttype": "application/a2a-agent-card+json",
"labels": {
"ai-catalog.identifier": "urn:air:acme.com:agent:finance-a2a"
},
"entryurl": "https://cards.acme.com/finance/a2a-card.json",
"aicatalog_digest": "sha256:aaa111...",
"aicatalog_trustmanifests": [
{
"contributor": "did:web:acme.com",
"subject": {
"identifier": "urn:air:acme.com:agent:finance-a2a",
"type": "application/a2a-agent-card+json",
"digest": "sha256:aaa111..."
},
"signature": {
"signer": "did:web:acme.com",
"profile": "did-web-v1",
"issuedAt": "2025-01-01T00:00:00Z",
"jws": "eyJhbGciOiJFUzI1NiIsImtpZCI6ImRpZDp3ZWI6YWNtZS5jb20jcmVsZWFzZS1zaWduaW5nLWtleSIsInR5cCI6ImFpLWNhdGFsb2ctdHJ1c3QtbWFuaWZlc3QrandzIn0..detached-JWS"
}
}
]
},
"finance-mcp": {
"entryid": "finance-mcp",
"xid": "/aicatalogs/acme-services/entries/finance-mcp",
"name": "Acme Finance MCP Server",
"contenttype": "application/mcp-server-card+json",
"labels": {
"ai-catalog.identifier": "urn:acme:server:finance-mcp"
},
"entryurl": "https://cards.acme.com/finance/mcp-server.json"
}
}
}
Content Integrity and Signing¶
Because xRegistry has no native content-addressing or signature primitive, this binding carries the entry digest and signed Trust Manifests. Verification uses the reconstructed logical entry and the served Resource document during unpacking, as in plain-HTTP distribution. Resource extension attribute names are transport details; signatures authenticate the logical Trust Manifests, not the xRegistry representation.