Files
slide/decks/gen2D/public/harness.svg
T

70 lines
6.0 KiB
XML
Raw Normal View History

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" font-family="system-ui, sans-serif">
<rect width="800" height="420" fill="#0f172a" rx="8"/>
<text x="400" y="30" text-anchor="middle" fill="#e2e8f0" font-size="16" font-weight="bold">一致性保障 — 全链路设计</text>
<!-- Layer 1 -->
<rect x="30" y="50" width="740" height="80" fill="#1e293b" rx="6" stroke="#3b82f6" stroke-width="1.5"/>
<text x="50" y="72" fill="#60a5fa" font-size="13" font-weight="bold">风格一致性</text>
<rect x="50" y="82" width="140" height="36" fill="#1e3a5f" rx="4"/>
<text x="120" y="105" text-anchor="middle" fill="#93c5fd" font-size="11">Project Style (基底)</text>
<line x1="190" y1="100" x2="230" y2="100" stroke="#4ade80" stroke-width="2" marker-end="url(#arrowG)"/>
<rect x="230" y="82" width="100" height="36" fill="#1e3a5f" rx="4"/>
<text x="280" y="105" text-anchor="middle" fill="#93c5fd" font-size="11">mergeStyle()</text>
<line x1="330" y1="100" x2="370" y2="100" stroke="#4ade80" stroke-width="2" marker-end="url(#arrowG)"/>
<rect x="370" y="82" width="140" height="36" fill="#1e3a5f" rx="4"/>
<text x="440" y="105" text-anchor="middle" fill="#93c5fd" font-size="11">Task Override (覆盖)</text>
<line x1="510" y1="100" x2="550" y2="100" stroke="#4ade80" stroke-width="2" marker-end="url(#arrowG)"/>
<rect x="550" y="82" width="200" height="36" fill="#166534" rx="4"/>
<text x="650" y="105" text-anchor="middle" fill="#4ade80" font-size="11">Final Style (统一风格输出)</text>
<!-- Layer 2 -->
<rect x="30" y="140" width="740" height="80" fill="#1e293b" rx="6" stroke="#a78bfa" stroke-width="1.5"/>
<text x="50" y="162" fill="#a78bfa" font-size="13" font-weight="bold">管线一致性</text>
<rect x="50" y="172" width="110" height="36" fill="#2e1065" rx="4"/>
<text x="105" y="195" text-anchor="middle" fill="#c4b5fd" font-size="11">Graph 拓扑排序</text>
<line x1="160" y1="190" x2="200" y2="190" stroke="#a78bfa" stroke-width="2" marker-end="url(#arrowP)"/>
<rect x="200" y="172" width="130" height="36" fill="#2e1065" rx="4"/>
<text x="265" y="195" text-anchor="middle" fill="#c4b5fd" font-size="11">State 隔离 (每次独立)</text>
<line x1="330" y1="190" x2="370" y2="190" stroke="#a78bfa" stroke-width="2" marker-end="url(#arrowP)"/>
<rect x="370" y="172" width="140" height="36" fill="#2e1065" rx="4"/>
<text x="440" y="195" text-anchor="middle" fill="#c4b5fd" font-size="11">Pre/Post Handler</text>
<line x1="510" y1="190" x2="550" y2="190" stroke="#a78bfa" stroke-width="2" marker-end="url(#arrowP)"/>
<rect x="550" y="172" width="200" height="36" fill="#166534" rx="4"/>
<text x="650" y="195" text-anchor="middle" fill="#4ade80" font-size="11">质检重试 + 降级兜底</text>
<!-- Layer 3 -->
<rect x="30" y="230" width="740" height="80" fill="#1e293b" rx="6" stroke="#f59e0b" stroke-width="1.5"/>
<text x="50" y="252" fill="#f59e0b" font-size="13" font-weight="bold">数据一致性</text>
<rect x="50" y="262" width="120" height="36" fill="#451a03" rx="4"/>
<text x="110" y="285" text-anchor="middle" fill="#fcd34d" font-size="11">SQLite ACID 事务</text>
<line x1="170" y1="280" x2="210" y2="280" stroke="#f59e0b" stroke-width="2" marker-end="url(#arrowY)"/>
<rect x="210" y="262" width="120" height="36" fill="#451a03" rx="4"/>
<text x="270" y="285" text-anchor="middle" fill="#fcd34d" font-size="11">GORM 外键约束</text>
<line x1="330" y1="280" x2="370" y2="280" stroke="#f59e0b" stroke-width="2" marker-end="url(#arrowY)"/>
<rect x="370" y="262" width="140" height="36" fill="#451a03" rx="4"/>
<text x="440" y="285" text-anchor="middle" fill="#fcd34d" font-size="11">CASCADE 级联删除</text>
<line x1="510" y1="280" x2="550" y2="280" stroke="#f59e0b" stroke-width="2" marker-end="url(#arrowY)"/>
<rect x="550" y="262" width="200" height="36" fill="#166534" rx="4"/>
<text x="650" y="285" text-anchor="middle" fill="#4ade80" font-size="11">ID: prefix_base62 唯一</text>
<!-- Layer 4 -->
<rect x="30" y="320" width="740" height="80" fill="#1e293b" rx="6" stroke="#f87171" stroke-width="1.5"/>
<text x="50" y="342" fill="#f87171" font-size="13" font-weight="bold">部署一致性</text>
<rect x="50" y="352" width="130" height="36" fill="#450a0a" rx="4"/>
<text x="115" y="375" text-anchor="middle" fill="#fca5a5" font-size="11">Docker Compose 双容器</text>
<line x1="180" y1="370" x2="220" y2="370" stroke="#f87171" stroke-width="2" marker-end="url(#arrowR)"/>
<rect x="220" y="352" width="130" height="36" fill="#450a0a" rx="4"/>
<text x="285" y="375" text-anchor="middle" fill="#fca5a5" font-size="11">Gitee CI/CD 自动化</text>
<line x1="350" y1="370" x2="390" y2="370" stroke="#f87171" stroke-width="2" marker-end="url(#arrowR)"/>
<rect x="390" y="352" width="140" height="36" fill="#450a0a" rx="4"/>
<text x="460" y="375" text-anchor="middle" fill="#fca5a5" font-size="11">Viper 多层配置覆盖</text>
<line x1="530" y1="370" x2="570" y2="370" stroke="#f87171" stroke-width="2" marker-end="url(#arrowR)"/>
<rect x="570" y="352" width="180" height="36" fill="#166534" rx="4"/>
<text x="660" y="375" text-anchor="middle" fill="#4ade80" font-size="11">确定性构建 · 环境一致</text>
<!-- Bottom summary -->
<rect x="30" y="400" width="740" height="15" fill="transparent"/>
<text x="400" y="412" text-anchor="middle" fill="#64748b" font-size="10">风格 → 管线 → 数据 → 部署:四层一致性保障,确保输出始终可控</text>
<defs>
<marker id="arrowG" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6" fill="#4ade80"/></marker>
<marker id="arrowP" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6" fill="#a78bfa"/></marker>
<marker id="arrowY" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6" fill="#f59e0b"/></marker>
<marker id="arrowR" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6" fill="#f87171"/></marker>
</defs>
</svg>