Repository navigation
Conversation
…-0028) Exploratory draft. The prose already tells consumers to ignore unrecognized fields and to retain them in signed payloads, but the CDDL maps for AICatalog and CatalogEntry are closed. This makes both maps explicitly open (`* text => any`), adds an Unrecognized Members section with four consumer rules (do not reject, derive no core semantics, preserve on republication, retain in signed payloads), states that undefined names carry no stability guarantee and are outside the Trust Manifest subject, and keeps `extensions` as the only extension point the specification defines. Adds ADR-0028 with rationale, trade-offs and alternatives, and updates the creating/consuming guides. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Contributor
|
Preview: https://ai-catalog.io/pr/131/ This comment is updated automatically while the pull request preview is available. |
This branch has not been deployed
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
Make the AI Catalog top-level object and Catalog Entry objects explicitly open to members the specification does not define, and say precisely what a consumer does with them: nothing, except not rejecting them, preserving them where it can, and keeping them in signed payloads.
The goal is to keep AI Catalog simple and extensible without taking a stance on any particular convention. Some folks have indicated a desire to use JSON-LD-style conventions (a
@contextprefix map plus namespaced members at the entry level). Others want private annotations in internal catalogs, or a way to ship a candidate field and gather experience before proposing it. This change leaves room for all of those while the specification itself defines, references and interprets none of them.extensionsstays the one extension point the spec does define.Why now
The prose and the schema currently disagree:
AICatalogandCatalogEntryCDDL maps are closed, so the normative schema rejects exactly what the prose tells consumers to accept.An implementer reading the schema and one reading the prose build different validators. This PR resolves it in the direction the prose already went.
What changes
specification/ai-catalog.mdextensionsis the stable, namespaced alternative. A future major version MAY narrow or close the objects again depending on how the ecosystem uses them.subjectand are not publisher claims; catalog signatures cover them as bytes, not meaning. The Subject and Publisher and Policy Metadata sections get matching one-line additions.extensionsvs. unrecognized members, and three illustrative examples (explicitly non-normative): a linked-data style@contextwith prefixed members; local annotations in a private catalog; a prototyped lifecycle field.* text => anyadded toAICatalogandCatalogEntry; preamble updated.TrustManifestis deliberately not opened (it is a signed payload and other specs treat it as opaque).adr/0028-open-catalog-and-entry-objects.md— context, decision, rationale, trade-offs, alternatives considered, revisit clause. Supersedes the closed-core rationale of ADR-0012; theextensionsdecision from ADR-0017 stands.docs/guides/creating-a-catalog.md,docs/guides/consuming-catalogs.md— a short "Members beyond the specification" subsection and a one-word tweak to the consumer checklist.No existing catalog document changes meaning or validity. The change is additive and fits the 0.9 → 1.0 line.
Trade-offs (what we lose)
Stated plainly, and hopefully not much:
descriptonbecomes an unrecognized member instead of an error. Mitigation in the text: conformance tooling MAY report unrecognized members as informational output.lifecycletoday may find a later version defines it differently. The spec promises nothing here on purpose; that is what keeps it dependency-free.extensions. The distinction is defined vs. undefined, which is a real distinction rather than two ways to do one thing, but some data will land at the root that would have been better namespaced.Alternatives considered (details in the ADR)
@or containing:): covers prefixed terms but not terms a prefix map aliases to bare names, and adds a rule whose only purpose is to describe someone else's syntax.profileparameter: does not match how catalogs are published.Open questions for the TSC
HostInfoandPublisheralso be opened, or stay closed as sub-objects?@contextexample appearing in the spec at all, versus only in the ADR?Verification
uv run tools/build_spec.pybuilds; the new anchors (#unrecognized-members,#no-stability-guarantee,#trust-and-signing,#relationship-to-extensions) resolve and no internal link in the built HTML is dangling.uv run --group docs mkdocs build --strictpasses.🤖 Generated with Claude Code