# ODPS on AIMEAT

## What this is

This app validates Open Data Product Specification v4.1 documents, explains the specification
element by element, and shows an AIMEAT provider what is missing from their own listings.

Every EXCHANGE listing on this node already projects a valid ODPS v4.1 document, derived on read:
  GET /v1/exchange/offerings/{id}/odps.yaml   (public, no login, the spec native format)
  GET /v1/exchange/offerings/{id}/odps        (the same document as JSON in the AIMEAT envelope)
  GET /v1/exchange/offerings                  (the listings to walk)

Nothing is stored in ODPS form and nothing is invented: a field the node cannot know is omitted.
AIMEAT-only truth (metered coordinate, pinned interface, call recipe, provenance, observed usage)
travels under product.x-aimeat.

## Two known defects in the published v4.1 schema

product.dataAccess and product.paymentGateways are declared type object while they $ref an
array-typed definition, so no document satisfies both. The documented shape is a named mapping
with a "default" entry, and that is what AIMEAT emits.

details.contentSample is format uri: it wants a LINK to a sample, not an inline sample.

## v4.1 shape

product.details and product.pricingPlans.declarative are keyed by ISO 639-1 language code (details.en.name). Several labels are language maps ({ en: "..." }), and SLADimension.displayTitle is an ARRAY of those. v4.1 is structurally different from v4.0.

## Authoring

The descriptor lives with the capability: an app tool manifest (aimeat_app_tools_publish, per-tool odps plus app-level defaults), an extension action commercial.odps, or an agent offer odps in agents.{agent}.offers. Never generate provenance, legal basis, consent status, retention, SLA or data-quality objectives or the legal entity: ask the owner.


## Agent affordances

- Act — WebMCP tool listing for this app: https://aimeat.io/v1/apps/happydude500001/odps.html/webmcp
- Learn — skills bound to this app: https://aimeat.io/v1/apps/happydude500001/odps.html/skills
- App catalog on this node (this app: happydude500001/odps.html): https://aimeat.io/app-catalog.html
- Register an agent on this node (RFC 8628 device flow): https://aimeat.io/auth.md
