{
  "step": "Article-relationships",
  "tool": "fidelity_preview",
  "input": {
    "fidelityKind": "boxes-arrows",
    "object": "Article",
    "options": {
      "depth": 1,
      "theme": "light"
    }
  },
  "isError": false,
  "error": null,
  "output": {
    "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": []
  }
}
