<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Conceptual Data Object on Orchestrated Technology Transition</title><link>https://ott.earth/cdo/</link><description>Recent content in Conceptual Data Object on Orchestrated Technology Transition</description><generator>Hugo</generator><language>en-au</language><atom:link href="https://ott.earth/cdo/index.xml" rel="self" type="application/rss+xml"/><item><title>Attributes for Conceptual Data Objects</title><link>https://ott.earth/cdo/minimal-attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ott.earth/cdo/minimal-attributes/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Not every CDO needs every attribute — focus on what&amp;rsquo;s essential for business clarity, governance, and compliance. Keep definitions short, practical, and easy to update.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Each attribute below carries a second purpose: it shapes how AI agents, MCP servers, and retrieval pipelines can use the CDO directly. Read the &lt;em&gt;italic&lt;/em&gt; commentary alongside each row.&lt;/p&gt;
&lt;h2 id="core-functional"&gt;Core (Functional)&lt;/h2&gt;
&lt;div class="table-wrap"&gt;
&lt;table class="attrs"&gt;
 &lt;thead&gt;
 &lt;tr&gt;&lt;th style="width:18%"&gt;Attribute&lt;/th&gt;&lt;th style="width:57%"&gt;Guideline&lt;/th&gt;&lt;th style="width:25%"&gt;Example&lt;/th&gt;&lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Short, business-friendly label for the CDO. &lt;em&gt;Used as the canonical token in MCP tool names, RAG indexes, and agent prompts — eliminates synonym drift ("Client" vs "Customer" vs "Account") that derails AI retrieval.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;Customer&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Business Meaning &amp;amp; Definition&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;One-sentence summary in plain English. &lt;em&gt;Becomes the &lt;code&gt;description&lt;/code&gt; field exposed to LLMs via MCP servers and tool schemas — models match user intent to the right concept by meaning, not by guessing from column names.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;"A person or organisation that has an active relationship with the enterprise and may transact with it."&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Category (External Standard, Canonical, Bespoke). &lt;em&gt;Signals to AI agents how much trust to place in the concept — autonomous actions can be permitted on External/Canonical CDOs and gated for human review on Bespoke ones.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Canonical&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Relationships&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;List inbound and outbound links to other CDOs. &lt;em&gt;Lets AI agents traverse the enterprise data graph deterministically (Customer → Order → Invoice) instead of hallucinating joins or inventing foreign keys.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Customer → places → Order; Customer → owns → Account&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Mandatory Attributes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Key business fields that must be present. &lt;em&gt;Defines the required argument shape for MCP tool calls — the LLM knows what it must collect from the user before invoking an action.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;CustomerID, LegalName, ContactEmail, Country&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Validation Rules&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Constraints (uniqueness, mandatory fields, valid ranges). &lt;em&gt;Machine-readable guardrails that automatically reject malformed AI-generated payloads before they hit downstream systems — turns "hope" into enforcement.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;CustomerID unique; ContactEmail per RFC 5322; Country in ISO 3166-1&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Interoperability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Ability to map to external standards or internal canonical models. &lt;em&gt;Enables AI agents to translate between vendor schemas and the enterprise concept on the fly, so the same prompt works whether the data lives in Workday, SAP, or a CSV.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Maps to ISO 20022 "Party"; SAP Business Partner; Salesforce Account&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Usage Scenarios&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Where and how the CDO is used (reporting, analytics, integration, compliance). &lt;em&gt;Used by AI tool-routers to decide which agent or skill should handle a given query — improves tool selection accuracy in multi-agent workflows.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;CRM segmentation, billing, KYC reporting, churn analytics&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Effective Date &amp;amp; Version&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;When the current definition applies; track changes. &lt;em&gt;AI agents and embeddings must pin to a version — without this, a model can quote a definition that was retired last quarter and confidently mislead the user.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;v2.3, effective 2025-07-01&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Authoritative source&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Who owns or governs the CDO (internal or external). &lt;em&gt;Gives AI agents a citation target and a human escalation path — every AI-generated answer about this concept can attribute back to a known steward.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Customer Data Office — Steward: J. Doe&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Usage Notes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Consuming domains, reports, APIs, integrations. &lt;em&gt;Tells AI orchestrators which downstream systems will be touched by a tool call — essential for impact assessment, blast-radius control, and "are you sure?" confirmations.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Consumed by Billing, Analytics Warehouse, Marketing Automation&lt;/td&gt;&lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h2 id="supporting-non-functional"&gt;Supporting (Non-Functional)&lt;/h2&gt;
&lt;div class="table-wrap"&gt;
&lt;table class="attrs"&gt;
 &lt;thead&gt;
 &lt;tr&gt;&lt;th style="width:18%"&gt;Attribute&lt;/th&gt;&lt;th style="width:57%"&gt;Guideline&lt;/th&gt;&lt;th style="width:25%"&gt;Example&lt;/th&gt;&lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Response time targets for queries and API calls. &lt;em&gt;Determines whether the CDO can be called inline during a chat turn or must be cached/pre-fetched — directly shapes AI agent latency budgets.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Lookup ≤ 200 ms p95; search ≤ 500 ms p95&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Ability to handle growth in data volume. &lt;em&gt;AI workloads are bursty (one prompt fans out into many tool calls) — capacity must flex without throttling agents mid-task.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;10M records today; 30% YoY growth; burst 500 req/s&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Availability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Uptime targets (e.g., 99.9% for critical CDOs). &lt;em&gt;When AI sits in the critical path, a CDO outage cascades into a visible AI failure — availability is now a user-experience metric, not just an infrastructure one.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;99.95% uptime, 24×7&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Resiliency&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Disaster recovery and failover capabilities (RPO/RTO). &lt;em&gt;AI agents that fail silently are dangerous; failover behaviour must be explicit so the agent either retries cleanly or refuses, never fabricates.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;RPO 15 min; RTO 1 hour; multi-region active-passive&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Quality rules&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Checks for accuracy, completeness, uniqueness, and reference integrity. &lt;em&gt;Poor data quality is amplified by AI — bad inputs become confident wrong outputs at scale. Quality rules are the upstream defence against hallucination.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;0.1% duplicate rate; 100% mandatory fields populated; FK integrity to Country&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Lifecycle&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Creation, update, archival, and review cadence. &lt;em&gt;RAG corpora and fine-tuning datasets must respect the CDO lifecycle — otherwise AI keeps surfacing deprecated definitions long after the business has moved on.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Created on first transaction; reviewed annually; archived 7 years after last activity&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Encryption, access controls (RBAC, MFA) for sensitive data. &lt;em&gt;AI agents inherit the caller's identity; RBAC enforced at the CDO prevents oversharing through prompt injection, summarisation, or careless context-window leakage.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;RBAC; PII fields AES-256 at rest; TLS 1.3 in transit; MFA for write&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Privacy, retention, and regulatory constraints. &lt;em&gt;AI inference can re-expose redacted data through paraphrase — compliance must be enforced at the CDO so sensitive content never enters the model's context window in the first place.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;GDPR Art. 17 (right to erasure); 7-year tax retention; APP (Australia)&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Auditability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Full change history and version control. &lt;em&gt;Every AI-driven decision needs a reproducible trail: which definition, which version, which rules were in force at the moment of inference.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Every field change logged with user, timestamp, before/after; immutable audit store&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Maintainability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Ease of updating definitions and propagating changes. &lt;em&gt;AI tooling subscribed to the CDO (vector stores, MCP schemas, prompt templates) needs predictable change events to refresh embeddings and tool definitions automatically.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;Schema changes published via change-event topic; semver versioning&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Portability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Technology-independent representation (e.g., JSON, XML, UML). &lt;em&gt;Directly consumable by MCP servers, OpenAPI tool schemas, and vector embeddings — a portable CDO is an AI-ready CDO with no glue code.&lt;/em&gt;&lt;/td&gt;&lt;td&gt;JSON Schema + OpenAPI 3.1 definition; UML class diagram&lt;/td&gt;&lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h2 id="ai-native-attributes"&gt;AI-Native Attributes&lt;/h2&gt;
&lt;p class="lead-sm"&gt;Recommended additions for AI / agentic deployments. Treating CDOs as first-class AI resources requires a small set of additional attributes. These make a CDO directly usable by MCP servers, agent frameworks, and retrieval pipelines — without bolt-on glue code or one-off integration projects.&lt;/p&gt;</description></item><item><title>Rationale &amp; Classification</title><link>https://ott.earth/cdo/rationale-classification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ott.earth/cdo/rationale-classification/</guid><description>&lt;p&gt;CDOs fall into three classification tiers. &lt;strong&gt;Architecture stability depends on a strong base of standardised CDOs&lt;/strong&gt; — the wider that base, the more resilient the enterprise.&lt;/p&gt;
&lt;div class="cdo-pyramid-section"&gt;
&lt;div class="cdo-pyramid-stage"&gt;
&lt;figure class="pyramid-figure pyramid-stable"&gt;
&lt;figcaption class="pyramid-cap pyramid-cap-good"&gt;&lt;span class="cap-dot"&gt;&lt;/span&gt;Stable — wide base of standards&lt;/figcaption&gt;
&lt;svg class="pyramid-svg" viewBox="0 0 420 360" role="img" aria-label="Stable CDO pyramid: External Standard base, Enterprise Canonical middle, Bespoke top"&gt;
&lt;defs&gt;
&lt;linearGradient id="grad-ext" x1="0" y1="0" x2="0" y2="1"&gt;&lt;stop offset="0%" stop-color="#2A66B8"/&gt;&lt;stop offset="100%" stop-color="#143769"/&gt;&lt;/linearGradient&gt;
&lt;linearGradient id="grad-can" x1="0" y1="0" x2="0" y2="1"&gt;&lt;stop offset="0%" stop-color="#5C97D9"/&gt;&lt;stop offset="100%" stop-color="#3A6FB0"/&gt;&lt;/linearGradient&gt;
&lt;linearGradient id="grad-bes" x1="0" y1="0" x2="0" y2="1"&gt;&lt;stop offset="0%" stop-color="#D3E5F6"/&gt;&lt;stop offset="100%" stop-color="#9DBEE3"/&gt;&lt;/linearGradient&gt;
&lt;linearGradient id="grad-ground" x1="0" y1="0" x2="1" y2="0"&gt;&lt;stop offset="0%" stop-color="#22b3c4" stop-opacity="0"/&gt;&lt;stop offset="50%" stop-color="#22b3c4" stop-opacity="0.7"/&gt;&lt;stop offset="100%" stop-color="#22b3c4" stop-opacity="0"/&gt;&lt;/linearGradient&gt;
&lt;filter id="pyr-shadow" x="-20%" y="-20%" width="140%" height="140%"&gt;&lt;feDropShadow dx="0" dy="8" stdDeviation="8" flood-color="#0b1a36" flood-opacity="0.28"/&gt;&lt;/filter&gt;
&lt;filter id="pyr-glow" x="-50%" y="-50%" width="200%" height="200%"&gt;&lt;feGaussianBlur stdDeviation="6" result="b"/&gt;&lt;feMerge&gt;&lt;feMergeNode in="b"/&gt;&lt;feMergeNode in="SourceGraphic"/&gt;&lt;/feMerge&gt;&lt;/filter&gt;
&lt;/defs&gt;
&lt;ellipse class="ground-shadow" cx="210" cy="335" rx="180" ry="10" fill="#0b1a36" opacity="0.18"/&gt;
&lt;g class="pyr-stack" filter="url(#pyr-shadow)"&gt;
&lt;g class="band-ext band-rise"&gt;&lt;polygon points="35,325 385,325 320,220 100,220" fill="url(#grad-ext)"/&gt;&lt;polygon class="band-shine" points="35,325 385,325 380,322 40,322" fill="rgba(255,255,255,0.18)"/&gt;&lt;/g&gt;
&lt;g class="band-can band-rise"&gt;&lt;polygon points="100,220 320,220 260,118 160,118" fill="url(#grad-can)"/&gt;&lt;polygon class="band-shine" points="100,220 320,220 315,217 105,217" fill="rgba(255,255,255,0.18)"/&gt;&lt;/g&gt;
&lt;g class="band-bes band-rise"&gt;&lt;polygon points="160,118 260,118 210,20" fill="url(#grad-bes)"/&gt;&lt;/g&gt;
&lt;/g&gt;
&lt;g class="pyr-labels"&gt;
&lt;text x="210" y="55" text-anchor="middle" class="svg-title svg-title-dark"&gt;Bespoke&lt;/text&gt;
&lt;text x="210" y="78" text-anchor="middle" class="svg-sub svg-sub-dark"&gt;Local · Controlled risk&lt;/text&gt;
&lt;text x="210" y="160" text-anchor="middle" class="svg-title"&gt;Enterprise Canonical&lt;/text&gt;
&lt;text x="210" y="184" text-anchor="middle" class="svg-sub"&gt;Shared meaning across domains&lt;/text&gt;
&lt;text x="210" y="265" text-anchor="middle" class="svg-title"&gt;External Standard&lt;/text&gt;
&lt;text x="210" y="289" text-anchor="middle" class="svg-sub"&gt;Industry · Regulatory · Interop&lt;/text&gt;
&lt;/g&gt;
&lt;line x1="20" y1="345" x2="400" y2="345" stroke="url(#grad-ground)" stroke-width="2"/&gt;
&lt;g class="anchor-marks" stroke="#22b3c4" stroke-width="1.4" opacity="0.55"&gt;
&lt;line x1="60" y1="345" x2="55" y2="354"/&gt;
&lt;line x1="110" y1="345" x2="105" y2="354"/&gt;
&lt;line x1="160" y1="345" x2="155" y2="354"/&gt;
&lt;line x1="210" y1="345" x2="205" y2="354"/&gt;
&lt;line x1="260" y1="345" x2="255" y2="354"/&gt;
&lt;line x1="310" y1="345" x2="305" y2="354"/&gt;
&lt;line x1="360" y1="345" x2="355" y2="354"/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;div class="pyramid-meta"&gt;
&lt;span class="meta-pill meta-good"&gt;&lt;span class="meta-icon"&gt;✓&lt;/span&gt; grounded&lt;/span&gt;
&lt;span class="meta-pill meta-good"&gt;&lt;span class="meta-icon"&gt;✓&lt;/span&gt; resilient&lt;/span&gt;
&lt;span class="meta-pill meta-good"&gt;&lt;span class="meta-icon"&gt;✓&lt;/span&gt; scalable&lt;/span&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;div class="pyramid-divider" aria-hidden="true"&gt;&lt;span class="vs-pill"&gt;vs&lt;/span&gt;&lt;/div&gt;
&lt;figure class="pyramid-figure pyramid-unstable"&gt;
&lt;figcaption class="pyramid-cap pyramid-cap-bad"&gt;&lt;span class="cap-dot warn"&gt;&lt;/span&gt;Unstable — flipped pyramid&lt;/figcaption&gt;
&lt;svg class="pyramid-svg pyramid-svg-warn" viewBox="0 0 240 360" role="img" aria-label="Unstable inverted pyramid: too many Bespoke CDOs at the top, narrow standards base"&gt;
&lt;defs&gt;
&lt;linearGradient id="grad-warn-bes" x1="0" y1="0" x2="0" y2="1"&gt;&lt;stop offset="0%" stop-color="#D3E5F6"/&gt;&lt;stop offset="100%" stop-color="#9DBEE3"/&gt;&lt;/linearGradient&gt;
&lt;linearGradient id="grad-warn-can" x1="0" y1="0" x2="0" y2="1"&gt;&lt;stop offset="0%" stop-color="#5C97D9"/&gt;&lt;stop offset="100%" stop-color="#3A6FB0"/&gt;&lt;/linearGradient&gt;
&lt;linearGradient id="grad-warn-ext" x1="0" y1="0" x2="0" y2="1"&gt;&lt;stop offset="0%" stop-color="#2A66B8"/&gt;&lt;stop offset="100%" stop-color="#143769"/&gt;&lt;/linearGradient&gt;
&lt;radialGradient id="warn-aura" cx="0.5" cy="0.5" r="0.5"&gt;&lt;stop offset="0%" stop-color="#E07A2A" stop-opacity="0.35"/&gt;&lt;stop offset="100%" stop-color="#E07A2A" stop-opacity="0"/&gt;&lt;/radialGradient&gt;
&lt;filter id="warn-soft" x="-30%" y="-30%" width="160%" height="160%"&gt;&lt;feDropShadow dx="0" dy="4" stdDeviation="5" flood-color="#5a1a00" flood-opacity="0.28"/&gt;&lt;/filter&gt;
&lt;/defs&gt;
&lt;circle class="warn-aura" cx="120" cy="170" r="120" fill="url(#warn-aura)"/&gt;
&lt;g class="unstable-stack" filter="url(#warn-soft)"&gt;
&lt;polygon points="15,20 225,20 190,98 50,98" fill="url(#grad-warn-bes)"/&gt;
&lt;polygon points="50,98 190,98 155,178 85,178" fill="url(#grad-warn-can)"/&gt;
&lt;polygon points="85,178 155,178 120,242" fill="url(#grad-warn-ext)"/&gt;
&lt;circle cx="120" cy="290" r="14" fill="url(#grad-warn-ext)"/&gt;
&lt;/g&gt;
&lt;g class="stress-cracks" stroke="#E07A2A" stroke-width="1.6" stroke-linecap="round" fill="none" opacity="0.85"&gt;
&lt;path d="M118 244 l-2 6 l3 4"/&gt;
&lt;path d="M122 244 l3 5 l-2 5"/&gt;
&lt;/g&gt;
&lt;g class="motion-lines" stroke="#E07A2A" stroke-width="2" stroke-linecap="round" fill="none"&gt;
&lt;path class="motion-l" d="M30 130 l-14 -8"/&gt;
&lt;path class="motion-l" d="M30 170 l-18 0"/&gt;
&lt;path class="motion-l" d="M30 210 l-14 8"/&gt;
&lt;path class="motion-r" d="M210 130 l14 -8"/&gt;
&lt;path class="motion-r" d="M210 170 l18 0"/&gt;
&lt;path class="motion-r" d="M210 210 l14 8"/&gt;
&lt;/g&gt;
&lt;g class="ground-cracks" stroke="#E07A2A" stroke-width="2" stroke-linecap="round" fill="none"&gt;
&lt;path d="M40 330 l20 -6 l18 8 l22 -8 l20 6 l22 -8 l20 6 l20 -4"/&gt;
&lt;/g&gt;
&lt;text x="120" y="62" text-anchor="middle" class="svg-mini-title svg-title-dark"&gt;Bespoke&lt;/text&gt;
&lt;text x="120" y="138" text-anchor="middle" class="svg-mini-title"&gt;Canonical&lt;/text&gt;
&lt;/svg&gt;
&lt;div class="pyramid-meta"&gt;
&lt;span class="meta-pill meta-bad"&gt;&lt;span class="meta-icon"&gt;!&lt;/span&gt; top-heavy&lt;/span&gt;
&lt;span class="meta-pill meta-bad"&gt;&lt;span class="meta-icon"&gt;!&lt;/span&gt; coupling risk&lt;/span&gt;
&lt;span class="meta-pill meta-bad"&gt;&lt;span class="meta-icon"&gt;!&lt;/span&gt; drift&lt;/span&gt;
&lt;/div&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p class="pyramid-arc"&gt;A healthy enterprise has a &lt;strong&gt;wide base of External Standard and Enterprise Canonical CDOs&lt;/strong&gt; and a small, controlled set of &lt;strong&gt;Bespoke&lt;/strong&gt; CDOs. If the pyramid flips — too many bespoke concepts at the top — architecture becomes unstable.&lt;/p&gt;</description></item></channel></rss>