docs: Diagramm der Zielarchitektur (Divi-Freigabe je Fähigkeit) statt Fahrplan-Übersicht
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
2facad1cbe
commit
a7a9c09de8
@@ -0,0 +1,304 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"diagram_type": "architecture",
|
||||
"meta": {
|
||||
"title": "Zielarchitektur: Divi-Freigabe je Fähigkeit",
|
||||
"output": "2026-10-18-architektur-divi-faehigkeiten.html",
|
||||
"quality_profile": "showcase",
|
||||
"legend": {
|
||||
"mode": "hidden"
|
||||
}
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"id": "client",
|
||||
"type": "external",
|
||||
"label": "MCP-Client",
|
||||
"sublabel": "KI-Assistent",
|
||||
"pos": [
|
||||
40,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "registrar",
|
||||
"type": "backend",
|
||||
"label": "AbilityRegistrar",
|
||||
"sublabel": "AbilityGuard-Liste",
|
||||
"pos": [
|
||||
250,
|
||||
350
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
],
|
||||
"tag": "kein Divi-Import"
|
||||
},
|
||||
{
|
||||
"id": "core_tools",
|
||||
"type": "backend",
|
||||
"label": "Kern-Tools",
|
||||
"sublabel": "WordPress · Media · Core",
|
||||
"pos": [
|
||||
250,
|
||||
510
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ports",
|
||||
"type": "backend",
|
||||
"label": "Ports",
|
||||
"sublabel": "Builder · Logo · Status",
|
||||
"pos": [
|
||||
40,
|
||||
510
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
],
|
||||
"tag": "Divi implementiert"
|
||||
},
|
||||
{
|
||||
"id": "feature_gate",
|
||||
"type": "security",
|
||||
"label": "DiviFeatureGate",
|
||||
"sublabel": "lehnt je Fähigkeit ab",
|
||||
"pos": [
|
||||
470,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "release_gate",
|
||||
"type": "security",
|
||||
"label": "ReleaseGate",
|
||||
"sublabel": "Matrix je Fähigkeit",
|
||||
"pos": [
|
||||
690,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "resolver",
|
||||
"type": "backend",
|
||||
"label": "ReleaseResolver",
|
||||
"sublabel": "Manifest · Fingerabdrücke",
|
||||
"pos": [
|
||||
910,
|
||||
190
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
],
|
||||
"tag": "Auto-Freigabe"
|
||||
},
|
||||
{
|
||||
"id": "status",
|
||||
"type": "frontend",
|
||||
"label": "Anzeige",
|
||||
"sublabel": "site-status · Tab · CLI",
|
||||
"pos": [
|
||||
690,
|
||||
40
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "divi_tools",
|
||||
"type": "backend",
|
||||
"label": "Divi-Tools",
|
||||
"sublabel": "erklären Fähigkeiten",
|
||||
"pos": [
|
||||
470,
|
||||
350
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "adapters",
|
||||
"type": "backend",
|
||||
"label": "Divi-Adapter",
|
||||
"sublabel": "assertFeature()",
|
||||
"pos": [
|
||||
690,
|
||||
350
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
],
|
||||
"tag": "fail closed"
|
||||
},
|
||||
{
|
||||
"id": "divi",
|
||||
"type": "external",
|
||||
"label": "Divi 5",
|
||||
"sublabel": "Theme-Code",
|
||||
"pos": [
|
||||
910,
|
||||
510
|
||||
],
|
||||
"size": [
|
||||
150,
|
||||
64
|
||||
]
|
||||
}
|
||||
],
|
||||
"boundaries": [
|
||||
{
|
||||
"kind": "region",
|
||||
"label": "Kern (ohne Divi-Import)",
|
||||
"wraps": [
|
||||
"registrar",
|
||||
"core_tools",
|
||||
"ports"
|
||||
]
|
||||
},
|
||||
{
|
||||
"kind": "region",
|
||||
"label": "Divi-Integration",
|
||||
"wraps": [
|
||||
"feature_gate",
|
||||
"release_gate",
|
||||
"resolver",
|
||||
"status",
|
||||
"divi_tools",
|
||||
"adapters"
|
||||
]
|
||||
}
|
||||
],
|
||||
"connections": [
|
||||
{
|
||||
"id": "call",
|
||||
"from": "client",
|
||||
"to": "registrar",
|
||||
"label": "Tool-Aufruf",
|
||||
"variant": "emphasis"
|
||||
},
|
||||
{
|
||||
"id": "guard",
|
||||
"from": "registrar",
|
||||
"to": "feature_gate",
|
||||
"label": "Guard",
|
||||
"variant": "security",
|
||||
"fromSide": "top",
|
||||
"toSide": "left"
|
||||
},
|
||||
{
|
||||
"id": "ask",
|
||||
"from": "feature_gate",
|
||||
"to": "release_gate",
|
||||
"label": "frei?",
|
||||
"variant": "security"
|
||||
},
|
||||
{
|
||||
"id": "matrix",
|
||||
"from": "resolver",
|
||||
"to": "release_gate",
|
||||
"label": "Matrix"
|
||||
},
|
||||
{
|
||||
"id": "probe",
|
||||
"from": "resolver",
|
||||
"to": "divi",
|
||||
"label": "Signaturen",
|
||||
"variant": "dashed",
|
||||
"labelDy": 24
|
||||
},
|
||||
{
|
||||
"id": "show",
|
||||
"from": "status",
|
||||
"to": "release_gate",
|
||||
"label": "liest",
|
||||
"labelDy": 24
|
||||
},
|
||||
{
|
||||
"id": "run_divi",
|
||||
"from": "registrar",
|
||||
"to": "divi_tools",
|
||||
"label": "führt aus"
|
||||
},
|
||||
{
|
||||
"id": "run_core",
|
||||
"from": "registrar",
|
||||
"to": "core_tools"
|
||||
},
|
||||
{
|
||||
"id": "use_ports",
|
||||
"from": "core_tools",
|
||||
"to": "ports"
|
||||
},
|
||||
{
|
||||
"id": "use_adapters",
|
||||
"from": "divi_tools",
|
||||
"to": "adapters"
|
||||
},
|
||||
{
|
||||
"id": "assert",
|
||||
"from": "adapters",
|
||||
"to": "release_gate",
|
||||
"label": "assertFeature",
|
||||
"variant": "security"
|
||||
},
|
||||
{
|
||||
"id": "divi_api",
|
||||
"from": "adapters",
|
||||
"to": "divi",
|
||||
"label": "Divi-API"
|
||||
}
|
||||
],
|
||||
"cards": [
|
||||
{
|
||||
"dot": "emerald",
|
||||
"title": "Kern entkoppelt",
|
||||
"items": [
|
||||
"Registrar kennt nur AbilityGuard und ToolRefusal",
|
||||
"WordPress, Media, Core rufen Divi über Ports",
|
||||
"CoreIndependenceTest verbietet Divi-Importe"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dot": "cyan",
|
||||
"title": "Fähigkeiten",
|
||||
"items": [
|
||||
"Manifest-Einträge gehören zu Fähigkeiten",
|
||||
"Signatur- und Mirror-Fingerabdrücke je Aufruf",
|
||||
"Neue Divi-Version: Freigabe je Fähigkeit"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dot": "rose",
|
||||
"title": "Sperre",
|
||||
"items": [
|
||||
"Gate lehnt nur Tools mit gesperrter Fähigkeit ab",
|
||||
"Lesen wie Schreiben; Tools bleiben registriert",
|
||||
"Adapter prüfen zusätzlich vor jedem Schreiben"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+185
-114
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="generator" content="archify 2.16.0">
|
||||
<title>Etappe 4 – Pläne im Überblick Diagram</title>
|
||||
<title>Zielarchitektur: Divi-Freigabe je Fähigkeit Diagram</title>
|
||||
<script>
|
||||
// Resolve the theme before first paint so light-preference users don't
|
||||
// see a dark flash. The toolbar script below re-applies with UI state.
|
||||
@@ -4955,7 +4955,7 @@
|
||||
data-preset-badge-blueprint="BLUEPRINT / REV 01"
|
||||
data-preset-badge-editorial="EDITORIAL / FIELD NOTE">
|
||||
<div class="pulse-dot"></div>
|
||||
<h1>Etappe 4 – Pläne im Überblick</h1>
|
||||
<h1>Zielarchitektur: Divi-Freigabe je Fähigkeit</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5004,9 +5004,9 @@
|
||||
<!-- Main Diagram -->
|
||||
<div class="diagram-container" data-detail-level="read"
|
||||
data-preset-badge-editorial-plate="ARCHIFY / PLATE 04">
|
||||
<svg viewBox="0 0 1000 534" role="img" lang="en" aria-labelledby="archify-diagram-title archify-diagram-description" data-preset="classic" data-quality-profile="showcase">
|
||||
<title id="archify-diagram-title">Etappe 4 – Pläne im Überblick</title>
|
||||
<desc id="archify-diagram-description">A workflow diagram generated by Archify.</desc>
|
||||
<svg viewBox="0 0 1130 662" role="img" lang="en" aria-labelledby="archify-diagram-title archify-diagram-description" data-preset="classic" data-quality-profile="showcase">
|
||||
<title id="archify-diagram-title">Zielarchitektur: Divi-Freigabe je Fähigkeit</title>
|
||||
<desc id="archify-diagram-description">An architecture diagram generated by Archify.</desc>
|
||||
<!-- Definitions -->
|
||||
<defs>
|
||||
<marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
||||
@@ -5029,136 +5029,208 @@
|
||||
<!-- Background Grid -->
|
||||
<rect width="100%" height="100%" fill="url(#grid)" />
|
||||
|
||||
<!-- Swimlanes -->
|
||||
<rect data-graph-role="structural-frame" data-composition-frame-kind="lane" data-composition-frame-id="lane-0" x="40" y="52" width="742" height="106" rx="10" class="c-lane" stroke-width="1"/>
|
||||
<text x="54" y="74" class="t-dim" font-size="10" font-weight="600">01 / Fertig</text>
|
||||
<!-- Boundaries (behind everything) -->
|
||||
<rect data-graph-role="structural-frame" data-composition-frame-kind="region" data-composition-frame-id="0" data-composition-frame-label="Kern (ohne Divi-Import)" x="10" y="320" width="420" height="274" rx="12" class="c-region" stroke-width="1"/>
|
||||
|
||||
<rect data-graph-role="structural-frame" data-composition-frame-kind="lane" data-composition-frame-id="lane-1" x="40" y="178" width="742" height="106" rx="10" class="c-lane" stroke-width="1"/>
|
||||
<text x="54" y="200" class="t-dim" font-size="10" font-weight="600">02 / Zwischenschritt (geplant)</text>
|
||||
<rect data-graph-role="structural-frame" data-composition-frame-kind="region" data-composition-frame-id="1" data-composition-frame-label="Divi-Integration" x="440" y="10" width="650" height="424" rx="12" class="c-region" stroke-width="1"/>
|
||||
|
||||
<rect data-graph-role="structural-frame" data-composition-frame-kind="lane" data-composition-frame-id="lane-2" x="40" y="304" width="742" height="106" rx="10" class="c-lane" stroke-width="1"/>
|
||||
<text x="54" y="326" class="t-dim" font-size="10" font-weight="600">03 / Danach</text>
|
||||
<!-- Connection paths (before components for correct z-order) -->
|
||||
<path data-edge-from="client" data-edge-to="registrar" data-edge-label="Tool-Aufruf" data-edge-key="0" data-edge-id="call" data-composition-points="190,222;220,222;220,382;250,382" d="M 190 222 L 212 222 Q 220 222 220 230 L 220 374 Q 220 382 228 382 L 250 382" class="a-emphasis" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
|
||||
<path data-edge-from="registrar" data-edge-to="feature_gate" data-edge-label="Guard" data-edge-key="1" data-edge-id="guard" data-composition-points="325,350;325,326;446,326;446,222;470,222" d="M 325 350 L 325 334 Q 325 326 333 326 L 438 326 Q 446 326 446 318 L 446 230 Q 446 222 454 222 L 470 222" class="a-security" stroke-width="1.5" marker-end="url(#arrowhead-security)"/>
|
||||
<path data-edge-from="feature_gate" data-edge-to="release_gate" data-edge-label="frei?" data-edge-key="2" data-edge-id="ask" data-composition-points="620,222;690,222" d="M 620 222 L 690 222" class="a-security" stroke-width="1.5" marker-end="url(#arrowhead-security)"/>
|
||||
<path data-edge-from="resolver" data-edge-to="release_gate" data-edge-label="Matrix" data-edge-key="3" data-edge-id="matrix" data-composition-points="910,222;840,222" d="M 910 222 L 840 222" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="resolver" data-edge-to="divi" data-edge-label="Signaturen" data-edge-key="4" data-edge-id="probe" data-composition-points="985,254;985,510" d="M 985 254 L 985 510" class="a-dashed" stroke-width="1.5" marker-end="url(#arrowhead-dashed)"/>
|
||||
<path data-edge-from="status" data-edge-to="release_gate" data-edge-label="liest" data-edge-key="5" data-edge-id="show" data-composition-points="765,104;765,190" d="M 765 104 L 765 190" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="registrar" data-edge-to="divi_tools" data-edge-label="führt aus" data-edge-key="6" data-edge-id="run_divi" data-composition-points="400,382;470,382" d="M 400 382 L 470 382" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="registrar" data-edge-to="core_tools" data-edge-key="7" data-edge-id="run_core" data-composition-points="325,414;325,510" d="M 325 414 L 325 510" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="core_tools" data-edge-to="ports" data-edge-key="8" data-edge-id="use_ports" data-composition-points="250,542;190,542" d="M 250 542 L 190 542" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="divi_tools" data-edge-to="adapters" data-edge-key="9" data-edge-id="use_adapters" data-composition-points="620,382;690,382" d="M 620 382 L 690 382" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="adapters" data-edge-to="release_gate" data-edge-label="assertFeature" data-edge-key="10" data-edge-id="assert" data-composition-points="765,350;765,254" d="M 765 350 L 765 254" class="a-security" stroke-width="1.5" marker-end="url(#arrowhead-security)"/>
|
||||
<path data-edge-from="adapters" data-edge-to="divi" data-edge-label="Divi-API" data-edge-key="11" data-edge-id="divi_api" data-composition-points="840,382;875,382;875,542;910,542" d="M 840 382 L 867 382 Q 875 382 875 390 L 875 534 Q 875 542 883 542 L 910 542" class="a-default" stroke-width="1.5" marker-end="url(#arrowhead)"/>
|
||||
|
||||
<!-- Phase headers -->
|
||||
<line x1="48" y1="35" x2="260" y2="35" class="a-default" stroke-width="1.1"/>
|
||||
<rect x="48" y="27" width="212" height="16" rx="4" class="c-mask"/>
|
||||
<text x="154" y="39" class="t-muted" font-size="8" font-weight="600" text-anchor="middle">Umgesetzt</text>
|
||||
<line x1="288" y1="35" x2="770" y2="35" class="a-emphasis" stroke-width="1.1"/>
|
||||
<rect x="288" y="27" width="482" height="16" rx="4" class="c-mask"/>
|
||||
<text x="529" y="39" class="t-backend" font-size="8" font-weight="600" text-anchor="middle">Kern entkoppeln + Freigabe je Fähigkeit</text>
|
||||
|
||||
<!-- Workflow groups -->
|
||||
|
||||
|
||||
<!-- Edge paths -->
|
||||
<path data-edge-from="decouple" data-edge-to="features" data-edge-key="0" data-composition-points="390,246;418,246" d="M 390 246 L 418 246" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="display" data-edge-to="stage_4c_e" data-edge-label="weiter" data-edge-key="1" data-composition-points="770,246;804.8,246;804.8,372;770,372" d="M 770 246 L 804.8 246 L 804.8 372 L 770 372" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="features" data-edge-to="matrix_gate" data-edge-key="2" data-composition-points="510,246;538,246" d="M 510 246 L 538 246" class="a-emphasis" stroke-width="1.8" marker-end="url(#arrowhead-emphasis)"/>
|
||||
<path data-edge-from="matrix_gate" data-edge-to="display" data-edge-key="3" data-composition-points="650,246;678,246" d="M 650 246 L 678 246" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="stage_4a" data-edge-to="stage_4b" data-edge-key="4" data-composition-points="140,120;168,120" d="M 140 120 L 168 120" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
|
||||
<path data-edge-from="stage_4b" data-edge-to="decouple" data-edge-label="dann" data-edge-key="5" data-composition-points="260,120;334,120;334,212" d="M 260 120 L 334 120 L 334 212" class="a-default" stroke-width="1.4" marker-end="url(#arrowhead)"/>
|
||||
|
||||
<!-- Nodes -->
|
||||
<g id="node-stage_4a" data-node-id="stage_4a" data-node-label="4a Presets" tabindex="0" role="button" aria-label="Focus 4a Presets, Pipeline + Snapshots, Fertig › Umgesetzt" aria-pressed="false" data-node-kind="database" data-node-sublabel="Pipeline + Snapshots" data-node-context="Fertig › Umgesetzt">
|
||||
<title>4a Presets · Pipeline + Snapshots · Fertig › Umgesetzt</title>
|
||||
<rect x="48" y="94" width="92" height="52" rx="6" class="c-mask"/>
|
||||
<rect x="48" y="94" width="92" height="52" rx="6" class="c-database" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(54 100) scale(0.6875)">
|
||||
<ellipse cx="8" cy="4" rx="5" ry="2"/>
|
||||
<path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/>
|
||||
<!-- Components -->
|
||||
<g id="node-client" data-node-id="client" data-node-label="MCP-Client" tabindex="0" role="button" aria-label="Focus MCP-Client, KI-Assistent, Architecture component" aria-pressed="false" data-node-kind="external" data-node-sublabel="KI-Assistent" data-node-context="Architecture component">
|
||||
<title>MCP-Client · KI-Assistent · Architecture component</title>
|
||||
<rect x="40" y="190" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="40" y="190" width="150" height="64" rx="6" class="c-external" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="external" class="semantic-sigil s-external" transform="translate(46 196) scale(0.6875)">
|
||||
<rect x="2.5" y="5" width="8.5" height="8" rx="1.5"/>
|
||||
<path d="M8 2.5h5.5V8M13.5 2.5 7.5 8.5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="94" y="115" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">4a Presets</text>
|
||||
<text data-detail="context" x="94" y="132" class="t-muted" font-size="7" text-anchor="middle">Pipeline + Snapshots</text>
|
||||
<text data-node-label="" data-detail-anchor="" x="115" y="220" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">MCP-Client</text>
|
||||
<text data-detail="context" x="115" y="236" class="t-muted" font-size="9" text-anchor="middle">KI-Assistent</text>
|
||||
</g>
|
||||
|
||||
<g id="node-stage_4b" data-node-id="stage_4b" data-node-label="4b Zuweisen" tabindex="0" role="button" aria-label="Focus 4b Zuweisen, assign + detach, Fertig › Umgesetzt" aria-pressed="false" data-node-kind="database" data-node-sublabel="assign + detach" data-node-tag="2624 Tests" data-node-context="Fertig › Umgesetzt">
|
||||
<title>4b Zuweisen · assign + detach · Fertig › Umgesetzt · 2624 Tests</title>
|
||||
<rect x="168" y="86" width="92" height="68" rx="6" class="c-mask"/>
|
||||
<rect x="168" y="86" width="92" height="68" rx="6" class="c-database" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="database" class="semantic-sigil s-database" transform="translate(174 92) scale(0.6875)">
|
||||
<ellipse cx="8" cy="4" rx="5" ry="2"/>
|
||||
<path d="M3 4v8c0 1.1 2.2 2 5 2s5-.9 5-2V4M3 8c0 1.1 2.2 2 5 2s5-.9 5-2"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="214" y="107" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">4b Zuweisen</text>
|
||||
<text data-detail="context" x="214" y="124" class="t-muted" font-size="8" text-anchor="middle">assign + detach</text>
|
||||
<text data-detail="fine" x="214" y="142" class="t-database" font-size="7" text-anchor="middle">2624 Tests</text>
|
||||
</g>
|
||||
|
||||
<g id="node-decouple" data-node-id="decouple" data-node-label="Kern entkoppeln" tabindex="0" role="button" aria-label="Focus Kern entkoppeln, Guard + Ports, Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit" aria-pressed="false" data-node-kind="backend" data-node-sublabel="Guard + Ports" data-node-tag="Tasks 1–3" data-node-context="Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit">
|
||||
<title>Kern entkoppeln · Guard + Ports · Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit · Tasks 1–3</title>
|
||||
<rect x="278" y="212" width="112" height="68" rx="6" class="c-mask"/>
|
||||
<rect x="278" y="212" width="112" height="68" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(284 218) scale(0.6875)">
|
||||
<g id="node-registrar" data-node-id="registrar" data-node-label="AbilityRegistrar" tabindex="0" role="button" aria-label="Focus AbilityRegistrar, AbilityGuard-Liste, Kern (ohne Divi-Import)" aria-pressed="false" data-node-kind="backend" data-node-sublabel="AbilityGuard-Liste" data-node-tag="kein Divi-Import" data-node-context="Kern (ohne Divi-Import)">
|
||||
<title>AbilityRegistrar · AbilityGuard-Liste · Kern (ohne Divi-Import) · kein Divi-Import</title>
|
||||
<rect x="250" y="350" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="250" y="350" width="150" height="64" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(256 356) scale(0.6875)">
|
||||
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="334" y="233" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Kern entkoppeln</text>
|
||||
<text data-detail="context" x="334" y="250" class="t-muted" font-size="8" text-anchor="middle">Guard + Ports</text>
|
||||
<text data-detail="fine" x="334" y="268" class="t-backend" font-size="7" text-anchor="middle">Tasks 1–3</text>
|
||||
<text data-node-label="" data-detail-anchor="" x="325" y="380" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">AbilityRegistrar</text>
|
||||
<text data-detail="context" x="325" y="396" class="t-muted" font-size="9" text-anchor="middle">AbilityGuard-Liste</text>
|
||||
<text data-detail="fine" x="325" y="406" class="t-backend" font-size="7" text-anchor="middle">kein Divi-Import</text>
|
||||
</g>
|
||||
|
||||
<g id="node-features" data-node-id="features" data-node-label="Fähigkeiten" tabindex="0" role="button" aria-label="Focus Fähigkeiten, Manifest + Signaturen, Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit" aria-pressed="false" data-node-kind="backend" data-node-sublabel="Manifest + Signaturen" data-node-tag="Tasks 4–5" data-node-context="Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit">
|
||||
<title>Fähigkeiten · Manifest + Signaturen · Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit · Tasks 4–5</title>
|
||||
<rect x="418" y="212" width="92" height="68" rx="6" class="c-mask"/>
|
||||
<rect x="418" y="212" width="92" height="68" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(424 218) scale(0.6875)">
|
||||
<g id="node-core_tools" data-node-id="core_tools" data-node-label="Kern-Tools" tabindex="0" role="button" aria-label="Focus Kern-Tools, WordPress · Media · Core, Kern (ohne Divi-Import)" aria-pressed="false" data-node-kind="backend" data-node-sublabel="WordPress · Media · Core" data-node-context="Kern (ohne Divi-Import)">
|
||||
<title>Kern-Tools · WordPress · Media · Core · Kern (ohne Divi-Import)</title>
|
||||
<rect x="250" y="510" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="250" y="510" width="150" height="64" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(256 516) scale(0.6875)">
|
||||
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="464" y="233" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Fähigkeiten</text>
|
||||
<text data-detail="context" x="464" y="250" class="t-muted" font-size="6.6" text-anchor="middle">Manifest + Signaturen</text>
|
||||
<text data-detail="fine" x="464" y="268" class="t-backend" font-size="7" text-anchor="middle">Tasks 4–5</text>
|
||||
<text data-node-label="" data-detail-anchor="" x="325" y="540" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Kern-Tools</text>
|
||||
<text data-detail="context" x="325" y="556" class="t-muted" font-size="9" text-anchor="middle">WordPress · Media · Core</text>
|
||||
</g>
|
||||
|
||||
<g id="node-matrix_gate" data-node-id="matrix_gate" data-node-label="Matrix + Sperre" tabindex="0" role="button" aria-label="Focus Matrix + Sperre, je Fähigkeit, Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit" aria-pressed="false" data-node-kind="security" data-node-sublabel="je Fähigkeit" data-node-tag="Tasks 6–9" data-node-context="Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit">
|
||||
<title>Matrix + Sperre · je Fähigkeit · Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit · Tasks 6–9</title>
|
||||
<rect x="538" y="212" width="112" height="68" rx="6" class="c-mask"/>
|
||||
<rect x="538" y="212" width="112" height="68" rx="6" class="c-security" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="security" class="semantic-sigil s-security" transform="translate(544 218) scale(0.6875)">
|
||||
<g id="node-ports" data-node-id="ports" data-node-label="Ports" tabindex="0" role="button" aria-label="Focus Ports, Builder · Logo · Status, Kern (ohne Divi-Import)" aria-pressed="false" data-node-kind="backend" data-node-sublabel="Builder · Logo · Status" data-node-tag="Divi implementiert" data-node-context="Kern (ohne Divi-Import)">
|
||||
<title>Ports · Builder · Logo · Status · Kern (ohne Divi-Import) · Divi implementiert</title>
|
||||
<rect x="40" y="510" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="40" y="510" width="150" height="64" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(46 516) scale(0.6875)">
|
||||
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="115" y="540" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Ports</text>
|
||||
<text data-detail="context" x="115" y="556" class="t-muted" font-size="9" text-anchor="middle">Builder · Logo · Status</text>
|
||||
<text data-detail="fine" x="115" y="566" class="t-backend" font-size="7" text-anchor="middle">Divi implementiert</text>
|
||||
</g>
|
||||
|
||||
<g id="node-feature_gate" data-node-id="feature_gate" data-node-label="DiviFeatureGate" tabindex="0" role="button" aria-label="Focus DiviFeatureGate, lehnt je Fähigkeit ab, Divi-Integration" aria-pressed="false" data-node-kind="security" data-node-sublabel="lehnt je Fähigkeit ab" data-node-context="Divi-Integration">
|
||||
<title>DiviFeatureGate · lehnt je Fähigkeit ab · Divi-Integration</title>
|
||||
<rect x="470" y="190" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="470" y="190" width="150" height="64" rx="6" class="c-security" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="security" class="semantic-sigil s-security" transform="translate(476 196) scale(0.6875)">
|
||||
<path d="M8 2.2 13 4v3.5c0 3.1-1.8 5.4-5 6.5-3.2-1.1-5-3.4-5-6.5V4Z"/>
|
||||
<path d="m5.8 8 1.5 1.5 3-3"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="594" y="233" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Matrix + Sperre</text>
|
||||
<text data-detail="context" x="594" y="250" class="t-muted" font-size="8" text-anchor="middle">je Fähigkeit</text>
|
||||
<text data-detail="fine" x="594" y="268" class="t-security" font-size="7" text-anchor="middle">Tasks 6–9</text>
|
||||
<text data-node-label="" data-detail-anchor="" x="545" y="220" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">DiviFeatureGate</text>
|
||||
<text data-detail="context" x="545" y="236" class="t-muted" font-size="9" text-anchor="middle">lehnt je Fähigkeit ab</text>
|
||||
</g>
|
||||
|
||||
<g id="node-display" data-node-id="display" data-node-label="Anzeige" tabindex="0" role="button" aria-label="Focus Anzeige, Status, Admin, CLI, Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="Status, Admin, CLI" data-node-tag="Tasks 10–11" data-node-context="Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit">
|
||||
<title>Anzeige · Status, Admin, CLI · Zwischenschritt (geplant) › Kern entkoppeln + Freigabe je Fähigkeit · Tasks 10–11</title>
|
||||
<rect x="678" y="212" width="92" height="68" rx="6" class="c-mask"/>
|
||||
<rect x="678" y="212" width="92" height="68" rx="6" class="c-frontend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="frontend" class="semantic-sigil s-frontend" transform="translate(684 218) scale(0.6875)">
|
||||
<g id="node-release_gate" data-node-id="release_gate" data-node-label="ReleaseGate" tabindex="0" role="button" aria-label="Focus ReleaseGate, Matrix je Fähigkeit, Divi-Integration" aria-pressed="false" data-node-kind="security" data-node-sublabel="Matrix je Fähigkeit" data-node-context="Divi-Integration">
|
||||
<title>ReleaseGate · Matrix je Fähigkeit · Divi-Integration</title>
|
||||
<rect x="690" y="190" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="690" y="190" width="150" height="64" rx="6" class="c-security" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="security" class="semantic-sigil s-security" transform="translate(696 196) scale(0.6875)">
|
||||
<path d="M8 2.2 13 4v3.5c0 3.1-1.8 5.4-5 6.5-3.2-1.1-5-3.4-5-6.5V4Z"/>
|
||||
<path d="m5.8 8 1.5 1.5 3-3"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="765" y="220" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">ReleaseGate</text>
|
||||
<text data-detail="context" x="765" y="236" class="t-muted" font-size="9" text-anchor="middle">Matrix je Fähigkeit</text>
|
||||
</g>
|
||||
|
||||
<g id="node-resolver" data-node-id="resolver" data-node-label="ReleaseResolver" tabindex="0" role="button" aria-label="Focus ReleaseResolver, Manifest · Fingerabdrücke, Divi-Integration" aria-pressed="false" data-node-kind="backend" data-node-sublabel="Manifest · Fingerabdrücke" data-node-tag="Auto-Freigabe" data-node-context="Divi-Integration">
|
||||
<title>ReleaseResolver · Manifest · Fingerabdrücke · Divi-Integration · Auto-Freigabe</title>
|
||||
<rect x="910" y="190" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="910" y="190" width="150" height="64" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(916 196) scale(0.6875)">
|
||||
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="985" y="220" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">ReleaseResolver</text>
|
||||
<text data-detail="context" x="985" y="236" class="t-muted" font-size="9" text-anchor="middle">Manifest · Fingerabdrücke</text>
|
||||
<text data-detail="fine" x="985" y="246" class="t-backend" font-size="7" text-anchor="middle">Auto-Freigabe</text>
|
||||
</g>
|
||||
|
||||
<g id="node-status" data-node-id="status" data-node-label="Anzeige" tabindex="0" role="button" aria-label="Focus Anzeige, site-status · Tab · CLI, Divi-Integration" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="site-status · Tab · CLI" data-node-context="Divi-Integration">
|
||||
<title>Anzeige · site-status · Tab · CLI · Divi-Integration</title>
|
||||
<rect x="690" y="40" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="690" y="40" width="150" height="64" rx="6" class="c-frontend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="frontend" class="semantic-sigil s-frontend" transform="translate(696 46) scale(0.6875)">
|
||||
<rect x="2" y="3" width="12" height="10" rx="2"/>
|
||||
<path d="M2 6.5h12"/>
|
||||
<circle cx="4.1" cy="4.8" r=".7" class="sigil-fill"/>
|
||||
<circle cx="6.3" cy="4.8" r=".7" class="sigil-fill"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="724" y="233" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Anzeige</text>
|
||||
<text data-detail="context" x="724" y="250" class="t-muted" font-size="7.7" text-anchor="middle">Status, Admin, CLI</text>
|
||||
<text data-detail="fine" x="724" y="268" class="t-frontend" font-size="7" text-anchor="middle">Tasks 10–11</text>
|
||||
<text data-node-label="" data-detail-anchor="" x="765" y="70" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Anzeige</text>
|
||||
<text data-detail="context" x="765" y="86" class="t-muted" font-size="9" text-anchor="middle">site-status · Tab · CLI</text>
|
||||
</g>
|
||||
|
||||
<g id="node-stage_4c_e" data-node-id="stage_4c_e" data-node-label="4c – 4e" tabindex="0" role="button" aria-label="Focus 4c – 4e, Farben bis Version, Danach › Kern entkoppeln + Freigabe je Fähigkeit" aria-pressed="false" data-node-kind="cloud" data-node-sublabel="Farben bis Version" data-node-context="Danach › Kern entkoppeln + Freigabe je Fähigkeit">
|
||||
<title>4c – 4e · Farben bis Version · Danach › Kern entkoppeln + Freigabe je Fähigkeit</title>
|
||||
<rect x="678" y="346" width="92" height="52" rx="6" class="c-mask"/>
|
||||
<rect x="678" y="346" width="92" height="52" rx="6" class="c-cloud" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="cloud" class="semantic-sigil s-cloud" transform="translate(684 352) scale(0.6875)">
|
||||
<path d="M4.3 12.5h7.3a2.4 2.4 0 0 0 .2-4.8 4 4 0 0 0-7.5-1.3A3.1 3.1 0 0 0 4.3 12.5Z"/>
|
||||
<g id="node-divi_tools" data-node-id="divi_tools" data-node-label="Divi-Tools" tabindex="0" role="button" aria-label="Focus Divi-Tools, erklären Fähigkeiten, Divi-Integration" aria-pressed="false" data-node-kind="backend" data-node-sublabel="erklären Fähigkeiten" data-node-context="Divi-Integration">
|
||||
<title>Divi-Tools · erklären Fähigkeiten · Divi-Integration</title>
|
||||
<rect x="470" y="350" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="470" y="350" width="150" height="64" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(476 356) scale(0.6875)">
|
||||
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="724" y="367" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">4c – 4e</text>
|
||||
<text data-detail="context" x="724" y="384" class="t-muted" font-size="7.7" text-anchor="middle">Farben bis Version</text>
|
||||
<text data-node-label="" data-detail-anchor="" x="545" y="380" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Divi-Tools</text>
|
||||
<text data-detail="context" x="545" y="396" class="t-muted" font-size="9" text-anchor="middle">erklären Fähigkeiten</text>
|
||||
</g>
|
||||
|
||||
<!-- Edge labels -->
|
||||
<g id="node-adapters" data-node-id="adapters" data-node-label="Divi-Adapter" tabindex="0" role="button" aria-label="Focus Divi-Adapter, assertFeature(), Divi-Integration" aria-pressed="false" data-node-kind="backend" data-node-sublabel="assertFeature()" data-node-tag="fail closed" data-node-context="Divi-Integration">
|
||||
<title>Divi-Adapter · assertFeature() · Divi-Integration · fail closed</title>
|
||||
<rect x="690" y="350" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="690" y="350" width="150" height="64" rx="6" class="c-backend" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(696 356) scale(0.6875)">
|
||||
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="765" y="380" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Divi-Adapter</text>
|
||||
<text data-detail="context" x="765" y="396" class="t-muted" font-size="9" text-anchor="middle">assertFeature()</text>
|
||||
<text data-detail="fine" x="765" y="406" class="t-backend" font-size="7" text-anchor="middle">fail closed</text>
|
||||
</g>
|
||||
|
||||
<g data-detail="context" data-edge-from="display" data-edge-to="stage_4c_e" data-edge-label="weiter" data-edge-key="1">
|
||||
<rect x="768" y="226" width="38.8" height="14" rx="3" class="c-mask"/>
|
||||
<text x="787.4" y="236" class="t-muted" font-size="8" text-anchor="middle">weiter</text>
|
||||
<g id="node-divi" data-node-id="divi" data-node-label="Divi 5" tabindex="0" role="button" aria-label="Focus Divi 5, Theme-Code, Architecture component" aria-pressed="false" data-node-kind="external" data-node-sublabel="Theme-Code" data-node-context="Architecture component">
|
||||
<title>Divi 5 · Theme-Code · Architecture component</title>
|
||||
<rect x="910" y="510" width="150" height="64" rx="6" class="c-mask"/>
|
||||
<rect x="910" y="510" width="150" height="64" rx="6" class="c-external" stroke-width="1.5"/>
|
||||
<g aria-hidden="true" data-semantic-sigil="external" class="semantic-sigil s-external" transform="translate(916 516) scale(0.6875)">
|
||||
<rect x="2.5" y="5" width="8.5" height="8" rx="1.5"/>
|
||||
<path d="M8 2.5h5.5V8M13.5 2.5 7.5 8.5"/>
|
||||
</g>
|
||||
<text data-node-label="" data-detail-anchor="" x="985" y="540" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Divi 5</text>
|
||||
<text data-detail="context" x="985" y="556" class="t-muted" font-size="9" text-anchor="middle">Theme-Code</text>
|
||||
</g>
|
||||
|
||||
<!-- Connection labels -->
|
||||
<g data-detail="context" data-edge-from="client" data-edge-to="registrar" data-edge-label="Tool-Aufruf" data-edge-key="0" data-edge-id="call">
|
||||
<rect x="188.6" y="282" width="62.8" height="14" rx="3" class="c-mask"/>
|
||||
<text x="220" y="292" class="t-backend" font-size="8" text-anchor="middle">Tool-Aufruf</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="registrar" data-edge-to="feature_gate" data-edge-label="Guard" data-edge-key="1" data-edge-id="guard">
|
||||
<rect x="368.5" y="306" width="34" height="14" rx="3" class="c-mask"/>
|
||||
<text x="385.5" y="316" class="t-security" font-size="8" text-anchor="middle">Guard</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="feature_gate" data-edge-to="release_gate" data-edge-label="frei?" data-edge-key="2" data-edge-id="ask">
|
||||
<rect x="638" y="202" width="34" height="14" rx="3" class="c-mask"/>
|
||||
<text x="655" y="212" class="t-security" font-size="8" text-anchor="middle">frei?</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="resolver" data-edge-to="release_gate" data-edge-label="Matrix" data-edge-key="3" data-edge-id="matrix">
|
||||
<rect x="855.6" y="202" width="38.8" height="14" rx="3" class="c-mask"/>
|
||||
<text x="875" y="212" class="t-muted" font-size="8" text-anchor="middle">Matrix</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="resolver" data-edge-to="divi" data-edge-label="Signaturen" data-edge-key="4" data-edge-id="probe">
|
||||
<rect x="956" y="258" width="58" height="14" rx="3" class="c-mask"/>
|
||||
<text x="985" y="268" class="t-messagebus" font-size="8" text-anchor="middle">Signaturen</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="status" data-edge-to="release_gate" data-edge-label="liest" data-edge-key="5" data-edge-id="show">
|
||||
<rect x="748" y="108" width="34" height="14" rx="3" class="c-mask"/>
|
||||
<text x="765" y="118" class="t-muted" font-size="8" text-anchor="middle">liest</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="registrar" data-edge-to="divi_tools" data-edge-label="führt aus" data-edge-key="6" data-edge-id="run_divi">
|
||||
<rect x="408.4" y="362" width="53.199999999999996" height="14" rx="3" class="c-mask"/>
|
||||
<text x="435" y="372" class="t-muted" font-size="8" text-anchor="middle">führt aus</text>
|
||||
</g>
|
||||
|
||||
|
||||
|
||||
<g data-detail="context" data-edge-from="stage_4b" data-edge-to="decouple" data-edge-label="dann" data-edge-key="5">
|
||||
<rect x="282" y="100" width="30" height="14" rx="3" class="c-mask"/>
|
||||
<text x="297" y="110" class="t-muted" font-size="8" text-anchor="middle">dann</text>
|
||||
<g data-detail="context" data-edge-from="adapters" data-edge-to="release_gate" data-edge-label="assertFeature" data-edge-key="10" data-edge-id="assert">
|
||||
<rect x="728.8" y="330" width="72.4" height="14" rx="3" class="c-mask"/>
|
||||
<text x="765" y="340" class="t-security" font-size="8" text-anchor="middle">assertFeature</text>
|
||||
</g>
|
||||
<g data-detail="context" data-edge-from="adapters" data-edge-to="divi" data-edge-label="Divi-API" data-edge-key="11" data-edge-id="divi_api">
|
||||
<rect x="850.8" y="442" width="48.4" height="14" rx="3" class="c-mask"/>
|
||||
<text x="875" y="452" class="t-muted" font-size="8" text-anchor="middle">Divi-API</text>
|
||||
</g>
|
||||
|
||||
<!-- Boundary labels (foreground masks keep routes out of titles) -->
|
||||
<g data-graph-role="structural-frame-label" data-composition-frame-id="0" data-composition-frame-kind="region" data-composition-frame-label="Kern (ohne Divi-Import)">
|
||||
<rect data-graph-role="structural-frame-label-mask" x="14" y="330" width="134.2" height="16" rx="3" class="c-mask"/>
|
||||
<text data-boundary-label="" x="18" y="343" class="t-cloud" font-size="9" font-weight="600">Kern (ohne Divi-Import)</text>
|
||||
</g>
|
||||
|
||||
<g data-graph-role="structural-frame-label" data-composition-frame-id="1" data-composition-frame-kind="region" data-composition-frame-label="Divi-Integration">
|
||||
<rect data-graph-role="structural-frame-label-mask" x="444" y="20" width="96.39999999999999" height="16" rx="3" class="c-mask"/>
|
||||
<text data-boundary-label="" x="448" y="33" class="t-cloud" font-size="9" font-weight="600">Divi-Integration</text>
|
||||
</g>
|
||||
|
||||
<!-- Legend -->
|
||||
@@ -5352,37 +5424,36 @@
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-dot emerald"></div>
|
||||
<h3>4b umgesetzt</h3>
|
||||
<h3>Kern entkoppelt</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li>• Preset-Stapel, Gruppen-Presets, clear_overrides</li>
|
||||
<li>• lit/divi-presets-assign und lit/divi-design-detach</li>
|
||||
<li>• Höchstens 50 Seiten je Aufruf, Revision je Seite</li>
|
||||
<li>• Registrar kennt nur AbilityGuard und ToolRefusal</li>
|
||||
<li>• WordPress, Media, Core rufen Divi über Ports</li>
|
||||
<li>• CoreIndependenceTest verbietet Divi-Importe</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-dot cyan"></div>
|
||||
<h3>Zwischenschritt</h3>
|
||||
<h3>Fähigkeiten</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li>• Registrar und Kern ohne Divi-Import</li>
|
||||
<li>• Jede Divi-Anforderung gehört zu Fähigkeiten</li>
|
||||
<li>• Nur betroffene Tools werden gesperrt</li>
|
||||
<li>• Fail closed: Adapter prüfen weiter je Fähigkeit</li>
|
||||
<li>• Manifest-Einträge gehören zu Fähigkeiten</li>
|
||||
<li>• Signatur- und Mirror-Fingerabdrücke je Aufruf</li>
|
||||
<li>• Neue Divi-Version: Freigabe je Fähigkeit</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-dot rose"></div>
|
||||
<h3>Entscheidungen</h3>
|
||||
<h3>Sperre</h3>
|
||||
</div>
|
||||
<ul>
|
||||
<li>• Neue Divi-Version: Freigabe je Fähigkeit</li>
|
||||
<li>• Lese-Tools werden bei Bruch abgelehnt</li>
|
||||
<li>• Tools bleiben registriert, Aufruf lehnt ab</li>
|
||||
<li>• Gate lehnt nur Tools mit gesperrter Fähigkeit ab</li>
|
||||
<li>• Lesen wie Schreiben; Tools bleiben registriert</li>
|
||||
<li>• Adapter prüfen zusätzlich vor jedem Schreiben</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,178 +0,0 @@
|
||||
{
|
||||
"schema_version": 2,
|
||||
"diagram_type": "workflow",
|
||||
"meta": {
|
||||
"title": "Etappe 4 – Pläne im Überblick",
|
||||
"output": "2026-10-18-plaene-uebersicht.html",
|
||||
"quality_profile": "showcase",
|
||||
"viewBox": [
|
||||
1000,
|
||||
534
|
||||
],
|
||||
"legend": {
|
||||
"mode": "hidden"
|
||||
}
|
||||
},
|
||||
"lanes": [
|
||||
{
|
||||
"id": "done",
|
||||
"label": "Fertig"
|
||||
},
|
||||
{
|
||||
"id": "next",
|
||||
"label": "Zwischenschritt (geplant)"
|
||||
},
|
||||
{
|
||||
"id": "later",
|
||||
"label": "Danach"
|
||||
}
|
||||
],
|
||||
"phases": [
|
||||
{
|
||||
"id": "built",
|
||||
"label": "Umgesetzt",
|
||||
"fromCol": 0,
|
||||
"toCol": 1
|
||||
},
|
||||
{
|
||||
"id": "between",
|
||||
"label": "Kern entkoppeln + Freigabe je Fähigkeit",
|
||||
"fromCol": 2,
|
||||
"toCol": 5,
|
||||
"variant": "emphasis"
|
||||
}
|
||||
],
|
||||
"mainPath": [
|
||||
"stage_4a",
|
||||
"stage_4b",
|
||||
"decouple",
|
||||
"features",
|
||||
"matrix_gate",
|
||||
"display",
|
||||
"stage_4c_e"
|
||||
],
|
||||
"nodes": [
|
||||
{
|
||||
"id": "stage_4a",
|
||||
"lane": "done",
|
||||
"col": 0,
|
||||
"type": "database",
|
||||
"label": "4a Presets",
|
||||
"sublabel": "Pipeline + Snapshots"
|
||||
},
|
||||
{
|
||||
"id": "stage_4b",
|
||||
"lane": "done",
|
||||
"col": 1,
|
||||
"type": "database",
|
||||
"label": "4b Zuweisen",
|
||||
"sublabel": "assign + detach",
|
||||
"tag": "2624 Tests"
|
||||
},
|
||||
{
|
||||
"id": "decouple",
|
||||
"lane": "next",
|
||||
"col": 2,
|
||||
"type": "backend",
|
||||
"label": "Kern entkoppeln",
|
||||
"sublabel": "Guard + Ports",
|
||||
"tag": "Tasks 1–3",
|
||||
"width": 112
|
||||
},
|
||||
{
|
||||
"id": "features",
|
||||
"lane": "next",
|
||||
"col": 3,
|
||||
"type": "backend",
|
||||
"label": "Fähigkeiten",
|
||||
"sublabel": "Manifest + Signaturen",
|
||||
"tag": "Tasks 4–5"
|
||||
},
|
||||
{
|
||||
"id": "matrix_gate",
|
||||
"lane": "next",
|
||||
"col": 4,
|
||||
"type": "security",
|
||||
"label": "Matrix + Sperre",
|
||||
"sublabel": "je Fähigkeit",
|
||||
"tag": "Tasks 6–9",
|
||||
"width": 112
|
||||
},
|
||||
{
|
||||
"id": "display",
|
||||
"lane": "next",
|
||||
"col": 5,
|
||||
"type": "frontend",
|
||||
"label": "Anzeige",
|
||||
"sublabel": "Status, Admin, CLI",
|
||||
"tag": "Tasks 10–11"
|
||||
},
|
||||
{
|
||||
"id": "stage_4c_e",
|
||||
"lane": "later",
|
||||
"col": 5,
|
||||
"type": "cloud",
|
||||
"label": "4c – 4e",
|
||||
"sublabel": "Farben bis Version"
|
||||
}
|
||||
],
|
||||
"edges": [
|
||||
{
|
||||
"from": "stage_4a",
|
||||
"to": "stage_4b"
|
||||
},
|
||||
{
|
||||
"from": "stage_4b",
|
||||
"to": "decouple",
|
||||
"label": "dann"
|
||||
},
|
||||
{
|
||||
"from": "decouple",
|
||||
"to": "features"
|
||||
},
|
||||
{
|
||||
"from": "features",
|
||||
"to": "matrix_gate",
|
||||
"variant": "emphasis"
|
||||
},
|
||||
{
|
||||
"from": "matrix_gate",
|
||||
"to": "display"
|
||||
},
|
||||
{
|
||||
"from": "display",
|
||||
"to": "stage_4c_e",
|
||||
"label": "weiter"
|
||||
}
|
||||
],
|
||||
"cards": [
|
||||
{
|
||||
"dot": "emerald",
|
||||
"title": "4b umgesetzt",
|
||||
"items": [
|
||||
"Preset-Stapel, Gruppen-Presets, clear_overrides",
|
||||
"lit/divi-presets-assign und lit/divi-design-detach",
|
||||
"Höchstens 50 Seiten je Aufruf, Revision je Seite"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dot": "cyan",
|
||||
"title": "Zwischenschritt",
|
||||
"items": [
|
||||
"Registrar und Kern ohne Divi-Import",
|
||||
"Jede Divi-Anforderung gehört zu Fähigkeiten",
|
||||
"Nur betroffene Tools werden gesperrt",
|
||||
"Fail closed: Adapter prüfen weiter je Fähigkeit"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dot": "rose",
|
||||
"title": "Entscheidungen",
|
||||
"items": [
|
||||
"Neue Divi-Version: Freigabe je Fähigkeit",
|
||||
"Lese-Tools werden bei Bruch abgelehnt",
|
||||
"Tools bleiben registriert, Aufruf lehnt ab"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user