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": []
}