Skip to content

Resolve #58: Add ADR-0017 and migrate to namespace extensions map#77

Open
mindpower wants to merge 2 commits into
mainfrom
mindpower/loose-coupling
Open

Resolve #58: Add ADR-0017 and migrate to namespace extensions map#77
mindpower wants to merge 2 commits into
mainfrom
mindpower/loose-coupling

Conversation

@mindpower

@mindpower mindpower commented Jul 10, 2026

Copy link
Copy Markdown
Member

Summary

This PR formally resolves Issue #58 (Proposal for JSON-LD @context Namespaces) by implementing the consensus reached during the July 2 and July 9 Working Group meetings and also comments on that issue.

To preserve the AI-Catalog's minimalist parser and avoid the complexity of JSON-LD graph resolution, the TSC agreed to reject the @context proposal. Instead, we are adopting a loosely coupled architecture with the Agentic Resource Discovery (ARD) specification and replacing the legacy metadata property with a strict extensions array.

Changes Included

  1. Added ADR-0017: Documents the decision to loosely couple ARD and AI-Catalog, preserving AI-Catalog as a strictly-typed "publishing format" while allowing ARD to evolve independently as a rich "discovery format."
  2. Updated ai-catalog.md:
    • Removed the legacy metadata property from the Catalog Entry, Trust Manifest, and root schemas.
    • Introduced the extensions array mechanism.
    • Rewrote the Extensibility section to enforce reverse-DNS/URL keys for extension boundaries.

Motivation

This architecture allows AI-Catalog to remain a lightweight, fast "thin pointer," while freeing downstream aggregators (like ARD) to build the complex semantic envelopes they need for federated discovery without forcing those requirements into the base protocol.

Closes #58

@mindpower
mindpower requested a review from a team as a code owner July 10, 2026 23:53
github-actions Bot added a commit that referenced this pull request Jul 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Preview: https://ai-catalog.io/pr/77/

This comment is updated automatically while the pull request preview is available.

Comment thread specification/ai-catalog.md Outdated
Comment thread specification/ai-catalog.md Outdated
## Value Types
1. **Metadata** (`https://ai-catalog.org/extensions/metadata`)
- Used to store generic, schemaless key-value pairs (replacing the legacy metadata field).
2. **SBOM** (`https://ai-catalog.org/extensions/sbom`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to add SBOM out of the gate? Alternatively: we just have the metadata field and add to it if we see ecosystem adoption of specifics

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect SBOM to be a trust attestation type rather than included in metadata

Comment thread adr/0017-ard-loose-coupling.md Outdated
After extensive discussions in the July 2 and July 9, 2026 working group meetings, the team concluded that the requirements of the two projects are fundamentally different. ARD requires the ability to aggregate rich, namespaced descriptions of resources directly in the discovery payload, while AI-Catalog requires strict, minimal schema definitions.

## Decision
The ARD (Agentic Resource Discovery) specification will be **loosely coupled** with the AI-Catalog specification.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's just remove this line so it doesn't look like we are making decisions on behalf of the ARD group.

Comment thread specification/ai-catalog.md Outdated
Comment thread adr/0017-ard-loose-coupling.md
…, and migrate metadata to extensions array

This commit formalizes the resolution to Issue #58 regarding extensibility
and JSON-LD namespaces. Based on working group consensus (July 9, 2026),
we are adopting a loosely coupled architecture with ARD to preserve
AI-Catalog's minimalist parser.
Changes included:
- Added ADR-0017 to formally document the rejection of JSON-LD @context
  and the decision to loosely couple the ARD specification.
- Updated `specification/ai-catalog.md` to remove the legacy `metadata`
  property across Catalog Entry and Trust Manifest schemas.
- Replaced the Extensibility section with the new `extensions` array
  design, enforcing URL/reverse-DNS keys for vendor-specific fields.
@mindpower
mindpower force-pushed the mindpower/loose-coupling branch from 6a70372 to e79245d Compare July 22, 2026 21:49
github-actions Bot added a commit that referenced this pull request Jul 22, 2026
github-actions Bot added a commit that referenced this pull request Jul 22, 2026
@mindpower

Copy link
Copy Markdown
Member Author

Thanks for all the feedback and suggestions! I've updated the PR to reflect that. Here is a summary of the changes:

  1. Changed extensions to a Map: Following the discussion, I've updated the spec (including the CDDL schema) to define extensions as a JSON object (map) instead of an array. This makes it easier to manage and parse namespace keys.
  2. Removed SBOM Example: I removed the SBOM from the "Official Extensions" list to keep the core spec examples as lightweight as possible.
  3. Remove the sentence : "ARD will be loose coupling with AI-catalog" on the adr-0017 -> this is on ARD spec side.
  4. Added Example for Map Structure: I included a concrete JSON example in the Format and Key Naming section to demonstrate how the new map structure cleanly handles namespaces (e.g., encapsulating metadata and custom okf schemas directly within the extensions map).

Example:
For example, a catalog entry with extensions representing metadata and a custom schema:

{
  "specVersion": "1.0",
  "entries": [
    {
      "identifier": "urn:air:treasury.gov:okf:fiscaldata",
      "type": "text/vnd.okf+markdown",
      "tags": ["finance", "treasury"],
      "extensions": {
        "metadata": {
          "location": "US-West",
          "environment": "staging",
          "version-compatible": [">=1.0.0"]
        },
        "okf": {
          "@context": "https://openknowledgeformat.org/ns#",
          "type": "Financial Dataset",
          "taxonomy": "us-gaap",
          "conformsTo": ["us-gaap:Revenue", "ifrs:Revenue"]
        }
      }
    }
  ]
}

Let me know what you think of the new structure!

@mindpower mindpower changed the title Resolve #58: Add ADR-0017 (Loose Coupling) and migrate to extensions array Resolve #58: Add ADR-0017 and migrate to namespace extensions map Jul 22, 2026

@tadasant tadasant left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great to me, thanks for iterating @mindpower !

@Tehsmash Tehsmash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two tiny requests, otherwise LGTM.

"type": "text/vnd.okf+markdown",
"tags": ["finance", "treasury"],
"extensions": {
"metadata": {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should make sure this example is compliant with: "To avoid collisions between independent publishers, the keys MUST be a valid URL or a reverse-DNS string"

Suggested change
"metadata": {
"https://ai-catalog.org/extensions/metadata": {


## Value Types
1. **Metadata** (`https://ai-catalog.org/extensions/metadata`)
- Used to store generic, schemaless key-value pairs (replacing the legacy metadata field).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to mention "legacy" IMO unless we're doing official deprecations of existing fields as part of the spec.

Suggested change
- Used to store generic, schemaless key-value pairs (replacing the legacy metadata field).
- Used to store generic, schemaless key-value pairs.

@darrelmiller

Copy link
Copy Markdown
Contributor

LGTM with the minor changes suggested by Sam.

@ramizpolic

Copy link
Copy Markdown
Collaborator

LGTM with the minor changes suggested by Sam.

+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proposal: Replace nested metadata with JSON-LD style @context and namespaced fields

6 participants