feat(spec): add Dependencies official extension (resolves #63) - #95
Open
marianogonzalez wants to merge 1 commit into
Open
feat(spec): add Dependencies official extension (resolves #63)#95marianogonzalez wants to merge 1 commit into
marianogonzalez wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR resolves #63
(declare an artifact's downstream dependencies) by adding an official
extension —
https://ai-catalog.org/extensions/dependencies— rather than acore Catalog Entry field.
An artifact often relies on other artifacts to function: an agent calls a
downstream MCP server, a skill requires a specific tool, a plugin ships a
companion agent. The extension lets a publisher declare those edges on an
entry so a consumer — an agent planner or a governance tool — can answer
"can I use this artifact?" (do I hold the credentials its dependencies
require?) and "what breaks if I decommission artifact X?" before
invoking or deploying anything.
Implementing this as an extension honors ADR-0002
(which deferred a core dependency field over an unresolved AND/OR ambiguity)
rather than reversing it: the core schema stays minimal and dependency-free,
and the sanctioned
extensionsmechanism carries the capability. Because theextension is additive and unrecognized extensions are ignored, it needs no
specVersionchange — a catalog carrying it remains a conformant1.0document.
Changes Included
adr/0021-dependencies-extension.md(new) — records the decision toimplement Spec Proposal: Dependencies manifest #63 as an official extension, resolves the AND/OR blocker from
ADR-0002 by placing the two relations on separate structural axes
(
required[]= AND,anyOfgroup = OR), and documents the reconciliationsbelow.
adr/0002-defer-entry-dependencies.md— status/update note clarifyingthat the deferred capability was later delivered as an extension by
ADR-0021 (the core-schema decision itself still stands).
specification/ai-catalog.md:metadata.(
required/optional), the Dependency object (identifierREQUIRED;type,versionConstraint,credentialPropagation,purposeOPTIONAL), the
anyOfDependency Group, resolution semantics, anexample, and a normative CDDL schema block.
subsection and a note under Catalog Poisoning; extended the multi-artifact
example and the MCP / Claude Plugins mapping appendix.
specification/examples/ai-catalog.json— the canonical example'sfinance agent now declares a required MCP dependency and an optional A2A
dependency.
(
docs/examples/agent-with-dependencies.md), an authoring section inCreating a Catalog, a pre-flight dependency-check section in Consuming
Catalogs, plus cross-links and a nav entry.
Reconciling the original proposal
The proposal in #63 predates several current conventions; the extension uses
today's forms:
urn:ai:…urn:air:{publisher}:{namespace}:{name}(ADR-0015)application/mcp-server+jsonapplication/mcp-server-card+jsonminVersion(lower bound only)versionConstraint(SemVer range matcher)identityTypecredentialPropagation—identityTypealready means an identifier scheme hint (did/dns/spiffe) on Publisher/Trust Manifest; reusing it would collideDesign notes
required[]is an AND (every element mustresolve); an
anyOfDependency Group (two or more alternatives) is anOR (any one satisfies the slot). This is the ambiguity ADR-0002 flagged, now
resolved structurally, and kept distinct from the dual-protocol nested-catalog
pattern.
another artifact's
identifier, never an embedded copy. The extensiondeclares edges; it does not fetch, install, or version-resolve. Consumers
MUST NOT auto-fetch or invoke a resolved dependency without applying the same
trust verification they would apply to any artifact.
credentialPropagationis advisory only (obo/agent/user/none). It lets a planner reason upfront about which credentials it musthold; it MUST NOT be treated as a security control. The depended-on artifact
enforces its real requirements at connection time.
Interoperability impact
No change to interoperability expectations for existing catalogs. The core
schema, CDDL for core types, conformance levels, and
specVersionare allunchanged; a consumer that does not implement the extension ignores it without
error, exactly as for any unrecognized
extensionskey.Non-goals
is discovery metadata only.
per ADR-0002 / ADR-0021.
and the extension ships a CDDL block to match. Introducing JSON Schema would
be a repo-wide decision, not a one-off for this extension.
Validation
uv run --locked python tools/build_spec.py specification/ai-catalog.md dist/index.html --config specification/respec-config.json— passes.uv run --python 3.12 --locked --group docs mkdocs build --strict— passes, no broken links.