Repository navigation
Conversation
|
Preview: https://ai-catalog.io/pr/131/ This comment is updated automatically while the pull request preview is available. |
…-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>
…TSC outcome Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
28ed24e to
9006f28
Compare
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ample Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
nice! lgtm |
jonathanhefner
left a comment
There was a problem hiding this comment.
Insofar as we want to support open-ended objects, I think these changes look good. Just a few nitpicks.
| This section states what an unrecognized member means to a consumer of | ||
| this specification, which is nothing, and what a consumer does with it. |
There was a problem hiding this comment.
| This section states what an unrecognized member means to a consumer of | |
| this specification, which is nothing, and what a consumer does with it. |
| An unrecognized member on a Catalog Entry or its Publisher object is not | ||
| covered by any Trust Manifest `subject` and is not a claim of the entry's publisher unless | ||
| another specification says so. A catalog signature covers unrecognized |
There was a problem hiding this comment.
An unrecognized member on a Catalog Entry or its Publisher object is not
covered by any Trust Manifestsubjectand is not a claim of the entry's publisher unless
another specification says so.
This is covered by the definition of subject, so I'm not sure that we need to repeat it here. But what we can say is that unrecognized members within a Trust Manifest are signed as part of that Trust Manifest (and unrecognized members anywhere within a Catalog are signed as part of that Catalog).
| | Defined by this specification | Yes: key rules and official extensions | No | | ||
| | Can collide with a future core member | No, keys are namespaced | Yes, no stability guarantee | | ||
| | Meaning to a consumer of this specification | Whatever the extension defines | None | | ||
| | Handling | Ignore unknown keys; retain in signed payloads | Ignore; preserve on republication; retain in signed payloads | | ||
| | Intended for | Publisher-owned, named extensions | Outside conventions, local annotations, experimentation | |
There was a problem hiding this comment.
Bold in the left column values might make this easier to read.
Summary
Align the spec on what it already says: the AI Catalog top-level object and Catalog Entry objects are open to members the specification does not define. The prose has said so all along (Version Handling, the signed-payload rules, Catalog Snapshot Coverage, the CDDL preamble); ADR-0012's "closed" decision never made it into the spec text; and the 2026-11-05 AI Catalog call confirmed open is the intent. This PR adds the one section that says what a consumer does with such members, makes the CDDL match, and records the decision in ADR-0028.
Context, rationale, trade-offs, alternatives, and the meeting reference are all in
adr/0028-open-catalog-and-entry-objects.md.What to review
specification/ai-catalog.md— new Unrecognized Members section before Version Handling (four consumer rules, no-stability-guarantee, trust and signing, comparison withextensions, two non-normative examples). It answers the retransmission question raised on the call: carry, best effort (SHOULD preserve). TheAICatalog,CatalogEntry,HostInfo, andPublisherCDDL maps gain* text => any; the Trust Manifest maps stay as they are. One-line pointers added to the member lists, the Extensions intro, Version Handling, Subject, and Publisher and Policy Metadata.adr/0028-...md— status Accepted. Records the colon-or-@producer rule floated on the call as a possible later refinement, not adopted, per "for 0.9, say nothing more."docs/guides/*— a short "Members beyond the specification" subsection and a one-line checklist tweak.Additive; no existing catalog document changes meaning or validity. The broader namespace proposal (#135) is deferred to the 1.0 discussion and untouched here.
Open questions
Verification
uv run tools/build_spec.pybuilds with all new anchors resolving and no dangling internal links;uv run --group docs mkdocs build --strictpasses. Rebased ontomainafter #136.🤖 Generated with Claude Code