← Front door

Agent discovery interface

The human UI and agents read the same product graph (scope §4). catalog.json is the machine-readable export: stable IDs, canonical URLs, explicit unavailability, deterministic variant grain. Agents may discover, resolve and prepare a cart; purchase confirmation stays human. Every page also emits Schema.org Product / ItemList / BreadcrumbList JSON-LD.

Contract

GET /catalog.json
grain    design_family × product_type × device  →  variant (sku)
sku      {design_id}--{product_type}--{device_id}
urls     brand.html?b=…   design.html?d=…   product.html?id={sku}
truth    a combination exists ⇔ it appears under designs[].offers[].variants[]
gaps     offers[].unavailable == true is an explicit range gap — never guess
reasons  recommendations are rules 1/2/3/5/6 from the scope, with text reasons

Live queries (run against catalog.json in your browser)