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 Manifest. The detached JWS and subject.digest 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 <SINGULAR>id and xid |
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 |
| Trust Manifest | An extension attribute on the Resource (an object), or a related Resource referenced by xref |
Content integrity (subject.digest) |
Carried in the Trust Manifest (xRegistry has no native digest) |
| Signing | Detached JWS retained in the Trust Manifest (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. Multiple entry versions map to Versions. -
Trust Manifests are carried as an extension attribute on the Resource (for example
aicatalog_trustmanifest), or as a related Resource referenced frommeta.xref. The detached JWS andsubject.digestare retained unchanged because xRegistry provides no native signing or content-addressing to delegate to. -
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, read its document (inline or via
<RESOURCE>url) andcontenttypeto recover the entry's artifact content andtype; mapname,description, andlabelsback to entry metadata. - Read the Trust Manifest from the extension attribute or
xref'd Resource, and verify its detached JWS andsubject.digestagainst the 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:acme:agent:finance-a2a"
},
"entryurl": "https://cards.acme.com/finance/a2a-card.json",
"aicatalog_trustmanifest": {
"issuedAt": "2025-01-01T00:00:00Z",
"subject": {
"type": "application/a2a-agent-card+json",
"digest": "sha256:aaa111..."
},
"signature": "eyJhbGciOiJFUzI1NiJ9..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 does not delegate those invariants: the Trust
Manifest's detached JWS and subject.digest remain the source of truth,
verified against the served Resource document during unpacking — the same
model as plain-HTTP distribution. An implementation MAY additionally
expose the digest as an extension attribute for discovery convenience, but
that copy is advisory; the Trust Manifest remains authoritative.