[Tools](https://oods-foundry.com/tools) / fidelity_preview

# `fidelity_preview`

Draw object relationships or compositions at four fidelity levels.

Generated from @oods/foundry 0.10.1

One of the 20 tools your assistant sees by default.

Use it when reviewing static structure or appearance; use design_preview instead to run generated React/Vue behavior. Returns SVG or HTML with fidelity-specific structure and provenance. fidelityKind selects boxes-arrows, wireframe, review or branded-mockup. Supply exactly one object, objects set, schema/schemaRef, fixture or legacy manifest; object/context composes a screen. Object diagrams show declared relationships; schema diagrams show containment. Wireframe/review show component bindings and recorded confidence, and branded mockups use static sample data. options.brandOverlay/theme selects built tokens. These drawings do not certify usability or referential integrity. Reference: TOOL-REFERENCE.md#fidelity_preview; full schema: oods\://schemas/fidelity_preview\.input.json.

## Inputs

| Name | Type | Required | Description |
| - | - | - | - |
| `fidelityKind` | `"boxes-arrows" \| "wireframe" \| "review" \| "branded-mockup"` | yes | Which HTML fidelity emitter to invoke. |
| `fixture` | `string` | no | Named allow-listed Object Catalog fixture shipped in registry data; unknown names return OODS-FP-001. |
| `manifest` | `object` | no | Inline Object Catalog manifest to render — an alternative to \`fixture\`. See full schema for details. |
| `options` | `object` | no | Operation options. |
| `object` | `string` | no | Registered object. boxes-arrows draws its declared relationships; other views compose it in context. |
| `objects` | `string[]` | no | Explicit object set; draw only declared edges within this set. boxes-arrows only. |
| `schema` | `object` | no | Inline composed screen tree; validated as UiSchema. |
| `schemaRef` | `string` | no | Cached UiSchema from design.compose or schema load; missing/expired refs return a typed error. |
| `context` | `"list" \| "detail" \| "form" \| "timeline" \| "card" \| "inline" \| "workflow" \| "dashboard"` | no | Context to compose for a single object in wireframe, review or branded-mockup. |

## Outputs

| Name | Type | Required | Description |
| - | - | - | - |
| `status` | `"ok" \| "warning" \| "error"` | yes | ok = clean run; warning = non-fatal issues but html is valid; error = errors\[] populated and html may be empty/partial. |
| `fidelityKind` | `"boxes-arrows" \| "wireframe" \| "review" \| "branded-mockup"` | yes | |
| `fixture` | `string` | yes | |
| `html` | `string` | yes | Complete HTML output ready to insert into a preview surface (may include a \<style> block when includeStyles is true). |
| `warnings` | `object[]` | yes | |
| `errors` | `object[]` | yes | |
| `meta` | `object` | yes | |
| `svg` | `string` | no | Accessible standalone SVG for object relationships or component containment. |

## A real call

Recorded by this site's `screens` run, step `Article-relationships`, with the published OODS Foundry 0.10.1.

Its input:

```
{
  "fidelityKind": "boxes-arrows",
  "object": "Article",
  "options": {
    "depth": 1,
    "theme": "light"
  }
}
```

Its result:

```
{
  "status": "ok",
  "fidelityKind": "boxes-arrows",
  "fixture": "(object:Article)",
  "html": "<!doctype html><html lang=\"en\" data-brand=\"A\" data-theme=\"light\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Relationships: Article</title><style>body{margin:0;padding:24px;font-family:system-ui,sans-serif;background:rgb(255, 255, 255);color:rgb(10, 10, 10);}h1{font-size:24px;margin:0 0 8px}p{max-width:80ch}.diagram{max-width:100%;overflow:auto;border:1px solid rgb(212, 212, 212);border-radius:12px}.diagram:focus-visible{outline:3px solid rgb(58, 91, 199)}svg{display:block}</style></head><body><h1>Relationships: Article</h1><p>Declared object associations · 2 edges · * required field. These are object types, not joined records. <span data-diagram-overflow hidden>Scroll the diagram to inspect it.</span></p><div class=\"diagram\" role=\"region\" aria-label=\"Relationship diagram\" tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-labelledby=\"relationships-2de65758f6f7-title relationships-2de65758f6f7-desc\" viewBox=\"0 0 788 697\" width=\"788\" height=\"697\" style=\"font-family:system-ui,sans-serif;background:rgb(255, 255, 255);forced-color-adjust:none\"><title id=\"relationships-2de65758f6f7-title\">Relationships: Article</title><desc id=\"relationships-2de65758f6f7-desc\">3 object types and 2 declared associations. Arrows point from source to target. Labels state source-relative cardinality and the via field; they do not assert live referential integrity. Article to Media: Hero media, many-to-one, via hero_media_id. Article to User: Author, many-to-one, via author_id.</desc><defs><marker id=\"relationships-2de65758f6f7-arrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"rgb(58, 91, 199)\"/></marker></defs><g data-relationship-source=\"Article\" data-relationship-target=\"Media\" data-via=\"hero_media_id\"><polyline points=\"516.3679999999999,271 586,339 586,416.5\" fill=\"none\" stroke=\"rgb(58, 91, 199)\" stroke-width=\"2\" marker-end=\"url(#relationships-2de65758f6f7-arrow)\"/><rect x=\"596\" y=\"306\" width=\"147.5\" height=\"66\" rx=\"4\" fill=\"rgb(255, 255, 255)\"/><text x=\"606\" y=\"324\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"606\" dy=\"0\">Hero media</tspan><tspan x=\"606\" dy=\"19\">many-to-one</tspan><tspan x=\"606\" dy=\"19\">via hero_media_id</tspan></text></g><g data-relationship-source=\"Article\" data-relationship-target=\"User\" data-via=\"author_id\"><polyline points=\"271.632,271 202,339 202,407\" fill=\"none\" stroke=\"rgb(58, 91, 199)\" stroke-width=\"2\" marker-end=\"url(#relationships-2de65758f6f7-arrow)\"/><rect x=\"212\" y=\"306\" width=\"117.5\" height=\"66\" rx=\"4\" fill=\"rgb(255, 255, 255)\"/><text x=\"222\" y=\"324\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"222\" dy=\"0\">Author</tspan><tspan x=\"222\" dy=\"19\">many-to-one</tspan><tspan x=\"222\" dy=\"19\">via author_id</tspan></text></g><g data-object=\"Article\" transform=\"translate(224 32)\"><title>Canonical editorial article with hybrid taxonomy + tag classification for CMS surfaces.</title><rect width=\"340\" height=\"239\" rx=\"10\" fill=\"rgb(255, 255, 255)\" stroke=\"rgb(212, 212, 212)\" stroke-width=\"2\"/><text x=\"18\" y=\"30\" fill=\"rgb(10, 10, 10)\" font-size=\"18\"><tspan x=\"18\" dy=\"0\">Article</tspan></text><path d=\"M 18 43 H 322\" stroke=\"rgb(212, 212, 212)\"/><text x=\"18\" y=\"65\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"18\" dy=\"0\">Traits: Labelled, Stateful,</tspan><tspan x=\"18\" dy=\"19\">Timestampable, Classifiable</tspan><tspan x=\"18\" dy=\"19\">Key fields (6 of 28)</tspan><tspan x=\"18\" dy=\"19\">article_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">label: string *</tspan><tspan x=\"18\" dy=\"19\">author_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">hero_media_id: string</tspan><tspan x=\"18\" dy=\"19\">body_markdown: string *</tspan><tspan x=\"18\" dy=\"19\">content_type: string *</tspan></text></g><g data-object=\"Media\" transform=\"translate(416 416.5)\"><title>Canonical digital asset metadata powering media library, DAM, and CMS integrations.</title><rect width=\"340\" height=\"239\" rx=\"10\" fill=\"rgb(255, 255, 255)\" stroke=\"rgb(212, 212, 212)\" stroke-width=\"2\"/><text x=\"18\" y=\"30\" fill=\"rgb(10, 10, 10)\" font-size=\"18\"><tspan x=\"18\" dy=\"0\">Media</tspan></text><path d=\"M 18 43 H 322\" stroke=\"rgb(212, 212, 212)\"/><text x=\"18\" y=\"65\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"18\" dy=\"0\">Traits: Labelled, Stateful,</tspan><tspan x=\"18\" dy=\"19\">Timestampable, Classifiable</tspan><tspan x=\"18\" dy=\"19\">Key fields (6 of 29)</tspan><tspan x=\"18\" dy=\"19\">media_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">label: string *</tspan><tspan x=\"18\" dy=\"19\">asset_type: string *</tspan><tspan x=\"18\" dy=\"19\">file_size_bytes: number *</tspan><tspan x=\"18\" dy=\"19\">mime_type: string *</tspan><tspan x=\"18\" dy=\"19\">object_key: string *</tspan></text></g><g data-object=\"User\" transform=\"translate(32 407)\"><title>Canonical identity record representing a platform user across lifecycle contexts.</title><rect width=\"340\" height=\"258\" rx=\"10\" fill=\"rgb(255, 255, 255)\" stroke=\"rgb(212, 212, 212)\" stroke-width=\"2\"/><text x=\"18\" y=\"30\" fill=\"rgb(10, 10, 10)\" font-size=\"18\"><tspan x=\"18\" dy=\"0\">User</tspan></text><path d=\"M 18 43 H 322\" stroke=\"rgb(212, 212, 212)\"/><text x=\"18\" y=\"65\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"18\" dy=\"0\">Traits: Stateful, Timestampable,</tspan><tspan x=\"18\" dy=\"19\">Taggable, Addressable, Preferenceable,</tspan><tspan x=\"18\" dy=\"19\">Authable, Communicable</tspan><tspan x=\"18\" dy=\"19\">Key fields (6 of 37)</tspan><tspan x=\"18\" dy=\"19\">user_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">name: string *</tspan><tspan x=\"18\" dy=\"19\">primary_email: email *</tspan><tspan x=\"18\" dy=\"19\">role: string *</tspan><tspan x=\"18\" dy=\"19\">description: string</tspan><tspan x=\"18\" dy=\"19\">preferred_name: string</tspan></text></g></svg></div><script>(()=>{const region=document.querySelector('.diagram'),notice=document.querySelector('[data-diagram-overflow]');if(!region||!notice)return;const update=()=>{notice.hidden=region.scrollWidth<=region.clientWidth;};update();new ResizeObserver(update).observe(region);})();</script></body></html>",
  "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-labelledby=\"relationships-2de65758f6f7-title relationships-2de65758f6f7-desc\" viewBox=\"0 0 788 697\" width=\"788\" height=\"697\" style=\"font-family:system-ui,sans-serif;background:rgb(255, 255, 255);forced-color-adjust:none\"><title id=\"relationships-2de65758f6f7-title\">Relationships: Article</title><desc id=\"relationships-2de65758f6f7-desc\">3 object types and 2 declared associations. Arrows point from source to target. Labels state source-relative cardinality and the via field; they do not assert live referential integrity. Article to Media: Hero media, many-to-one, via hero_media_id. Article to User: Author, many-to-one, via author_id.</desc><defs><marker id=\"relationships-2de65758f6f7-arrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"rgb(58, 91, 199)\"/></marker></defs><g data-relationship-source=\"Article\" data-relationship-target=\"Media\" data-via=\"hero_media_id\"><polyline points=\"516.3679999999999,271 586,339 586,416.5\" fill=\"none\" stroke=\"rgb(58, 91, 199)\" stroke-width=\"2\" marker-end=\"url(#relationships-2de65758f6f7-arrow)\"/><rect x=\"596\" y=\"306\" width=\"147.5\" height=\"66\" rx=\"4\" fill=\"rgb(255, 255, 255)\"/><text x=\"606\" y=\"324\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"606\" dy=\"0\">Hero media</tspan><tspan x=\"606\" dy=\"19\">many-to-one</tspan><tspan x=\"606\" dy=\"19\">via hero_media_id</tspan></text></g><g data-relationship-source=\"Article\" data-relationship-target=\"User\" data-via=\"author_id\"><polyline points=\"271.632,271 202,339 202,407\" fill=\"none\" stroke=\"rgb(58, 91, 199)\" stroke-width=\"2\" marker-end=\"url(#relationships-2de65758f6f7-arrow)\"/><rect x=\"212\" y=\"306\" width=\"117.5\" height=\"66\" rx=\"4\" fill=\"rgb(255, 255, 255)\"/><text x=\"222\" y=\"324\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"222\" dy=\"0\">Author</tspan><tspan x=\"222\" dy=\"19\">many-to-one</tspan><tspan x=\"222\" dy=\"19\">via author_id</tspan></text></g><g data-object=\"Article\" transform=\"translate(224 32)\"><title>Canonical editorial article with hybrid taxonomy + tag classification for CMS surfaces.</title><rect width=\"340\" height=\"239\" rx=\"10\" fill=\"rgb(255, 255, 255)\" stroke=\"rgb(212, 212, 212)\" stroke-width=\"2\"/><text x=\"18\" y=\"30\" fill=\"rgb(10, 10, 10)\" font-size=\"18\"><tspan x=\"18\" dy=\"0\">Article</tspan></text><path d=\"M 18 43 H 322\" stroke=\"rgb(212, 212, 212)\"/><text x=\"18\" y=\"65\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"18\" dy=\"0\">Traits: Labelled, Stateful,</tspan><tspan x=\"18\" dy=\"19\">Timestampable, Classifiable</tspan><tspan x=\"18\" dy=\"19\">Key fields (6 of 28)</tspan><tspan x=\"18\" dy=\"19\">article_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">label: string *</tspan><tspan x=\"18\" dy=\"19\">author_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">hero_media_id: string</tspan><tspan x=\"18\" dy=\"19\">body_markdown: string *</tspan><tspan x=\"18\" dy=\"19\">content_type: string *</tspan></text></g><g data-object=\"Media\" transform=\"translate(416 416.5)\"><title>Canonical digital asset metadata powering media library, DAM, and CMS integrations.</title><rect width=\"340\" height=\"239\" rx=\"10\" fill=\"rgb(255, 255, 255)\" stroke=\"rgb(212, 212, 212)\" stroke-width=\"2\"/><text x=\"18\" y=\"30\" fill=\"rgb(10, 10, 10)\" font-size=\"18\"><tspan x=\"18\" dy=\"0\">Media</tspan></text><path d=\"M 18 43 H 322\" stroke=\"rgb(212, 212, 212)\"/><text x=\"18\" y=\"65\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"18\" dy=\"0\">Traits: Labelled, Stateful,</tspan><tspan x=\"18\" dy=\"19\">Timestampable, Classifiable</tspan><tspan x=\"18\" dy=\"19\">Key fields (6 of 29)</tspan><tspan x=\"18\" dy=\"19\">media_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">label: string *</tspan><tspan x=\"18\" dy=\"19\">asset_type: string *</tspan><tspan x=\"18\" dy=\"19\">file_size_bytes: number *</tspan><tspan x=\"18\" dy=\"19\">mime_type: string *</tspan><tspan x=\"18\" dy=\"19\">object_key: string *</tspan></text></g><g data-object=\"User\" transform=\"translate(32 407)\"><title>Canonical identity record representing a platform user across lifecycle contexts.</title><rect width=\"340\" height=\"258\" rx=\"10\" fill=\"rgb(255, 255, 255)\" stroke=\"rgb(212, 212, 212)\" stroke-width=\"2\"/><text x=\"18\" y=\"30\" fill=\"rgb(10, 10, 10)\" font-size=\"18\"><tspan x=\"18\" dy=\"0\">User</tspan></text><path d=\"M 18 43 H 322\" stroke=\"rgb(212, 212, 212)\"/><text x=\"18\" y=\"65\" fill=\"rgb(10, 10, 10)\" font-size=\"13\"><tspan x=\"18\" dy=\"0\">Traits: Stateful, Timestampable,</tspan><tspan x=\"18\" dy=\"19\">Taggable, Addressable, Preferenceable,</tspan><tspan x=\"18\" dy=\"19\">Authable, Communicable</tspan><tspan x=\"18\" dy=\"19\">Key fields (6 of 37)</tspan><tspan x=\"18\" dy=\"19\">user_id: uuid *</tspan><tspan x=\"18\" dy=\"19\">name: string *</tspan><tspan x=\"18\" dy=\"19\">primary_email: email *</tspan><tspan x=\"18\" dy=\"19\">role: string *</tspan><tspan x=\"18\" dy=\"19\">description: string</tspan><tspan x=\"18\" dy=\"19\">preferred_name: string</tspan></text></g></svg>",
  "meta": {
    "entityCount": 3,
    "edgeCount": 2,
    "appliedBrandOverlay": "A",
    "theme": "light",
    "width": 788,
    "height": 697
  },
  "warnings": [],
  "errors": []
}
```

[The whole call, 12 KB of JSON](https://oods-foundry.com/tools/fidelity-preview/call.json)
