---
title: "Architektur der Plattform: Entscheidungen und ihre Grundlagen."
seo_title: "Plattform-Architektur: Entscheidungen und Referenzen | SazAI"
description: "SazAI-Architektur: formatunabhängige Motoren, Lineage, versionierte Entscheidungen, validierte Methode."
tags: [marketing]
icon: book
---

> **Fazit: Der Beschleuniger ist die Beherrschung des Substrats durch das Team; keine Entscheidung hier ist Geschmack: die Wahl ist dokumentiert, mit dem, was verworfen wurde und warum.** Die Pyramide unten ist die Karte; die Lücke bleibt außerhalb, ausgesprochen.

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><path d="M24 8l16 8-16 8-16-8z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M8 24l16 8 16-8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M8 32l16 8 16-8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

## Was SazAI ist

<h3 class="sub">Motoren, Komponenten und Dokumentation, beherrscht von denen, die sie bauten</h3>

SazAI ist die Plattform: das Substrat für Intelligenz und Beweis, auf dem die Produkte gebaut sind. Multi-Mandantenfähigkeit, Authentifizierung, Lineage, Orchestrierung, Agent-Schicht, genaue Messung und versionierte Entscheidungen, einmal gebaut. SazAI Corpus, der Tresor und das Design System sind die Produkte, die bereits daraus hervorgegangen sind, und jedes nutzt denselben Motor, anstatt ihn neu zu bauen.

Die Panels steigen nach Ankerstärke ab, und jedes schließt mit seinen Referenzen in einem erweiterbaren Block, für jeden, der prüfen möchte. Zitate folgen dem ABNT NBR 6023-Standard, 2018.

<figure class="viz" role="group" aria-label="Die Pyramide auf dieser Seite: vier Ankerstärken, von Ausführungsabhängigkeit bis Positionierung, und die Lücke außen herum">
<div class="duo" style="grid-template-columns:auto 1fr">
<div class="mid"><svg viewBox="0 0 220 170" aria-hidden="true" style="width:200px">
<polygon points="110,10 150,50 70,50" fill="var(--hue-analysis)" opacity=".85"/>
<polygon points="64,58 156,58 176,92 44,92" fill="var(--hue-output)" opacity=".65"/>
<polygon points="38,100 182,100 198,130 22,130" fill="var(--hue-upload)" opacity=".5"/>
<polygon points="16,138 204,138 214,160 6,160" fill="var(--hue-reprocess)" opacity=".35"/>
<rect x="180" y="8" width="34" height="34" rx="4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-dasharray="4 3" style="color:var(--gray)"/>
</svg></div>
<div class="side" style="text-align:left">
<b style="color:var(--hue-analysis)">Ausführungsabhängigkeit</b><span>der Motor läuft nicht ohne den Standard · Schritt 1</span>
<b style="color:var(--hue-output);margin-top:.5rem">Standard angewendet und gemessen</b><span>Gesetz im Schema, Kriterium in der Komponente, Kontrast nach Token · Schritte 2 bis 4</span>
<b style="color:var(--hue-upload);margin-top:.5rem">dokumentierte Entscheidung</b><span>Wahl aufgeschrieben, mit dem, was verworfen wurde und warum · Schritte 5 und 6</span>
<b style="color:var(--hue-reprocess);margin-top:.5rem">Positionierung</b><span>Studien mit dem Vorbehalt angehängt · Schritt 7</span>
<b style="color:var(--gray);margin-top:.5rem">die Lücke</b><span>außerhalb der Pyramide, und ausgesprochen · letztes Panel</span>
</div>
</div>
<figcaption>Ankerstärke entscheidet die Höhe. Was nichts hält, bleibt außen, gestrichelt, mit eigenem Panel.</figcaption>
</figure>

Es ist nicht einstecken und spielen für jemanden, der von außen kommt. **Der Beschleuniger ist nicht das Substrat; er ist die Beherrschung des Substrats durch das Team.** Wer die Motoren, die Komponenten und die Dokumentation kennt, baut ein neues SaaS-Produkt aus dem, was schon existiert, und der Rest dieser Seite ist das Maß, wie viel das den Weg verkürzt.

<figure class="viz duo" role="group" aria-label="Motoren, Komponenten und Dokumentation; die Teambeherrschung in der Mitte; die Produkte, die herauskommen">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="10" y="10" width="28" height="28" rx="4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="24" r="6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="24" y1="4" x2="24" y2="10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="24" y1="38" x2="24" y2="44" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="4" y1="24" x2="10" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="38" y1="24" x2="44" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>das Substrat</b>Motoren, Komponenten, Dokumentation</div>
<div class="mid" style="color:var(--hue-upload)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="6" y1="36" x2="40" y2="36" stroke="currentColor" stroke-width="1.5"/><path d="M34 31l6 5-6 5" fill="none" stroke="currentColor" stroke-width="1.5"/><circle cx="60" cy="36" r="14" fill="currentColor" opacity=".12" stroke="currentColor" stroke-width="1.5"/><path d="M54 36l4 4 8-8" fill="none" stroke="currentColor" stroke-width="1.5"/><line x1="80" y1="36" x2="114" y2="36" stroke="var(--hue-output)" stroke-width="1.5"/><path d="M108 31l6 5-6 5" fill="none" stroke="var(--hue-output)" stroke-width="1.5"/></svg><b>die Teambeherrschung</b>ist das, was beschleunigt</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="8" y="12" width="32" height="24" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="8" y1="20" x2="40" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="13" cy="16" r="1.4" fill="currentColor"/><circle cx="18" cy="16" r="1.4" fill="currentColor"/></svg><b>die Produkte</b>Corpus, Tresor, Design System</div>
</figure>

Der Rahmen dieser Idee ist nicht neu und nicht von dieser Seite: es ist einer der neun Säulen, mit denen sich SazAI selbst beschreibt, *Plattform vor Produkt*. Was folgt, ist sein Beweis.

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-analysis)" name="file" size="36"></sz-icon></div>

## Der Motor hängt von Format-Standards ab, um zu existieren

<h3 class="sub">Schritt 1 · Ausführungsabhängigkeit, der stärkste Anker überhaupt</h3>

Wenn der Standard im Code falsch wäre, würde der Motor nicht laufen. Die Referenz wird nicht erwähnt; man hängt davon ab, und aus dieser Abhängigkeit kommt der Determinismus.

**Daten und Fakten:**

- OOXML-Namespace im Motor: 237 Vorkommen über 37 verschiedene Formen (2026-09-01).
- Dublin Core als Abhängigkeit: 22 Namespaces. ISO 8601: der meistzitierte Standard in der Datenbank, 60 Vorkommen.
- Die überprüfbare Kette: veröffentlichte Klausel → DDL-Spaltenkommentar → Datenkarte → Spalte. Umschreibung verboten durch geschriebene Regel; DDL und Karte tragen die gleiche Klausel, wörtlich.

<figure class="viz duo four" role="group" aria-label="Die Kette des Determinismus: veröffentlichte Klausel, DDL-Kommentar, Kartenschicht, relationale Spalte">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="24" x2="32" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>veröffentlichte Klausel</b>der Standard, nach Nummer</div>
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><rect x="8" y="10" width="32" height="28" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="14" y1="18" x2="34" y2="18" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-dasharray="3 2"/><line x1="14" y1="25" x2="30" y2="25" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="14" y1="31" x2="30" y2="31" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>DDL-Kommentar</b>die gleiche Klausel, wörtlich</div>
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><circle cx="14" cy="14" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="34" cy="18" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="22" cy="34" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="17" y1="17" x2="31" y2="16" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="18" x2="20" y2="30" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>Kartenschicht</b>keine Umschreibung, per Regel</div>
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><rect x="8" y="8" width="32" height="32" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="20" y1="8" x2="20" y2="40" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="8" y1="20" x2="40" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>relationale Spalte</b>existiert, weil die Klausel existiert</div>
</figure>


### Und das nächste Format kostet weniger

Das erste Format war PowerPoint, und es kostete den ganzen Motor: Lesen, Messen, Übersetzen, Zurückschreiben, Vergleichen, alles zum ersten Mal. Das zweite, das Word-Dokument, kostete eine Größenordnung weniger. Das dritte, die Tabellenkalkulation, eine weitere. Und das vierte, PDF, kostete das gleiche wie das dritte: die Kurve stabilisierte sich. Es ist keine Liste von Erfolgen; es ist eine Kurve, und die Kurve ist das Argument.

<figure class="viz curve" role="group" aria-label="Kosten des jeweiligen Formats durch den vollständigen Zyklus, auf einer logarithmischen Skala: das erste kostete den ganzen Motor, jedes nächste eine Größenordnung weniger, und das vierte stabilisiert sich bei den gleichen Kosten wie das dritte">
<div class="row ooxml"><b>PPTX</b><span class="track"><span class="bar" style="width:100%"></span></span><em>der ganze Motor</em></div>
<div class="row ooxml"><b>DOCX</b><span class="track"><span class="bar" style="width:46%"></span></span><em>eine Größenordnung weniger</em></div>
<div class="row ooxml"><b>XLSX</b><span class="track"><span class="bar" style="width:16%"></span></span><em>eine weitere</em></div>
<div class="row other"><b>PDF</b><span class="track"><span class="bar" style="width:15%"></span></span><em>stabilisiert sich</em></div>
<figcaption>Logarithmische Skala: jede Stufe ist eine Größenordnung. Der vierte Punkt ist nicht nur der kleinste: er ist anderer Natur und kostete das gleiche wie der dritte.</figcaption>
</figure>

<p class="claim">Das <b>PDF ist das erste Substrat, das nicht Office ist</b>: ein binärer Graph von Objekten anstelle von Zip plus XML. Wenn der Motor nur gut in PowerPoint geworden wäre, hätte das vierte Format wie das erste gekostet. Es kostete wie das dritte. <b>Der Motor wurde nicht schneller in PowerPoint; er wurde formatunabhängig</b>, und die <a href="documents">vier Formate</a> laufen heute auf der gleichen Architektur, jedes mit seiner eigenen erklärten Garantie. Das ist, warum das fünfte Format das kosten wird, was das vierte gekostet hat, und das ist das, was diese Seite Beschleunigung nennt.</p>

<div class="bound">
<p><b>Wo das aufgezeichnet ist, gesagt, bevor du fragst.</b> In Git, nicht im Institutstagebuch: die Kurve ruht auf datierten Entscheidungen und Commits, die die richtige Quelle für ein Intervall sind, und das ist das, was in einer Bewertung überprüft wird. Die absoluten Zeiten für jedes Format leben in der technischen Dokumentation, mit dem Befehl daneben, der sie ableitet.</p>
</div>
<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div>
<p><b>Was geschrieben ist und was verworfen wurde</b></p><ul><li>Jedes Format nach dem Standard, Klausel für Klausel lesen; die Heuristik wurde verworfen, weil sie eine Prüfung nicht übersteht.</li><li>Daten in ISO 8601 über das ganze System; Metadaten nach Dublin Core.</li><li>PDF akzeptiert als das erste Nicht-Office-Substrat, zitiert nach eigenem Standard.</li></ul><p><b>Referenzen (ABNT NBR 6023:2018)</b></p><ul><li>ECMA INTERNATIONAL. <b>ECMA-376</b>: Office Open XML File Formats. Verfügbar unter: https://ecma-international.org/publications-and-standards/standards/ecma-376/.</li><li>ISO/IEC. <b>ISO/IEC 29500</b>: Office Open XML File Formats.</li><li>ISO. <b>ISO 32000-1</b>: Portable Document Format. · ISO. <b>ISO 19005</b>: PDF/A.</li><li>ISO. <b>ISO 15836-1</b>: Dublin Core. · ISO. <b>ISO 8601</b>: Date and time.</li><li>IETF. <b>RFC 5646</b>: Tags for Identifying Languages.</li><li>MICROSOFT. <b>MS-PPTX · MS-DOCX · MS-OE376 · MS-ODRAWXML · MS-OFFCRYPTO</b>: Implementierungsnotizen.</li><li>UNICODE CONSORTIUM. <b>Unicode CMap</b> Spezifikationen.</li></ul>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><circle cx="24" cy="24" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="10" cy="12" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="38" cy="10" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="12" cy="38" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="38" cy="36" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="13" y1="14" x2="20" y2="21" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="35" y1="12" x2="28" y2="21" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="14" y1="36" x2="20" y2="27" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="35" y1="34" x2="28" y2="27" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

## Der Wissensfundus

<h3 class="sub">Alles, was wir entschieden, gemessen und geschrieben haben, verlinkt und navigierbar durch das Team und durch Agenten</h3>

Die Beherrschung des Substrats durch das Team hat einen Ort, wo sie lebt: ein Obsidian-Tresor, der das Repository spiegelt. Entscheidungen, die Datenkarte, Agent-Verträge, Personas, Strategie, Arbeitssitzungen: jede Notiz verlinkt zu den anderen, und Hubs sind die Türen, durch die eine Person oder ein Agent eintritt. Es ist der gleiche Graph, den das Produkt dem Kunden im eigenen Tresor liefert, zunächst bei uns selbst erprobt. Unten, unserer, in Bewegung; fahren Sie über einen Hub, um zu sehen, womit er verlinkt ist, und klicken Sie, um ihn vollständig zu öffnen.

<figure class="viz graph" id="vault-graph" role="group" tabindex="0" aria-label="Der Graph des SazAI-Tresors: die Hubs für Entscheidungen, Agenten, Datenkarte, Produkt, Strategie, Betrieb, Menschen, Pitch und Personas, untereinander und mit ihren Notizen verlinkt">
<div class="stage"><svg viewBox="0 0 800 520" aria-hidden="true"><g class="edges"></g><g class="nodes"></g></svg><div class="labels" aria-hidden="true"></div></div>
<figcaption>Der SazAI-Tresor, wie das Team ihn jeden Tag sieht. Jeder Punkt ist eine Notiz; jede Linie, ein Link, den jemand schrieb. Die Hubs haben Namen; der Rest ist das, womit sie verlinken. Node-Satz per Hand fotografiert am 2026-08-28; wenn die automatische Ableitung des Tresors ankommt, fällt diese Zeile weg.</figcaption>
</figure>

<div class="bound">
<p><b>Wie weit die Karte reicht, gemessen, und das ist der wertvollste Teil.</b> Der Vault-Graph erreicht 55 von 158 Datenkarten-Tabellen und eine von fünf Format-Karten; das Repository erreicht 158 von 158. Eine Grafik, die alles Vernetzte zeigte, wäre das einzige Angebot dieser Seite ohne Beleg dahinter, auf einer Seite, deren ganzer Stoff ist, dass unsere Ansprüche Belege tragen. Was validiert wird, ist nicht, dass alles sich verbindet: es ist, dass wir genau wissen, was sich verbindet und was nicht. Wo die Karte schweigt, antwortet das Repository.</p>
</div>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-reprocess)" name="info" size="36"></sz-icon></div>

## Datenschutz ist Design, und Design wird geprüft

<h3 class="sub">Schritt 2 · das Gesetz wurde Schema, und das Schema ist überprüfbar</h3>

Was das Gesetz schriftlich fordert, erfüllt die Datenbank durch Struktur. Verifikation ist nicht, unsere Richtlinie zu lesen; es ist, das Schema zu prüfen.

**Daten und Fakten:**

- Permanenter Speicher trägt keine Dokumentinhalte; Inhalte leben in einer separaten Datenbank, sensibel und löschbar.
- Isolierung nach Mandant als Spalte, nicht als Versprechen: Slices überqueren niemals Mandanten.
- Zertifizierung heute: keine. Kontrollen entworfen, um als Beweis zu dienen, wenn er gesucht wird.

<figure class="viz duo" role="group" aria-label="Zwei Datenbanken: die permanente ohne Inhalt und die sensible, separate und löschbar">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><ellipse cx="24" cy="12" rx="14" ry="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M10 12v24c0 3 6 5 14 5s14-2 14-5V12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="22" x2="32" y2="22" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="29" x2="28" y2="29" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>permanent</b>Struktur, Messung, Lineage; Inhalt, niemals</div>
<div class="mid" style="color:var(--gray)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="60" y1="10" x2="60" y2="62" stroke="currentColor" stroke-width="1.5" stroke-dasharray="4 3"/></svg><b>getrennt durch Design</b>prüfe das Schema</div>
<div class="side" style="color:var(--hue-reprocess)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><ellipse cx="24" cy="12" rx="14" ry="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M10 12v24c0 3 6 5 14 5s14-2 14-5V12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-dasharray="4 3"/><line x1="18" y1="26" x2="30" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="30" y1="26" x2="18" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>sensibel</b>der Inhalt, echte Löschbarkeit</div>
</figure>

<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div>
<p><b>Was geschrieben ist und was verworfen wurde</b></p><ul><li>Datenschutz nach Design und Standard als Architektur; eine Compliance-Schicht über einer gemeinsamen Datenbank wurde verworfen.</li><li>Entfernung wird <b>Rückzug</b> genannt, nicht Löschung: das stärkere Wort wurde verworfen, weil es eine Reichweite versprach, die Backups nicht aufrechterhalten.</li></ul><p><b>Referenzen (ABNT NBR 6023:2018)</b></p><ul><li>EUROPEAN UNION. <b>Regulation (EU) 2016/679</b> (GDPR), art. 25.</li><li>BRAZIL. <b>Law No. 13,709, of August 14, 2018</b> (LGPD).</li><li>CAVOUKIAN, Ann. <b>Privacy by Design</b>: die sieben grundlegenden Prinzipien. Toronto: IPC, 2009.</li><li>ISO/IEC. <b>ISO/IEC 27001</b>. · OWASP FOUNDATION. Verfügbar unter: https://owasp.org/.</li></ul>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-output)" name="eye" size="36"></sz-icon></div>

## Barrierefreiheit wird gemessen, nicht erklärt

<h3 class="sub">Schritt 3 · ein zitierter Standard ist Compliance; eine gemessene Zahl ist Design</h3>

Das Kriterium lebt in der Komponente, mit der Zahl neben dem Code, und der Kontrast wird gemessen, bevor eine Farbe das System betritt.

**Daten und Fakten:**

- WCAG 2.2 AA über 51 Design-System-Dateien, mit Kriterien nach Nummer zitiert (1.4.1, 3.1) (2026-09-01).
- Kontrast pro Token gemessen: `--hue-lineage` bei 4,00:1 mit der Notiz *Anleitung, niemals Text* geschrieben in das Token selbst; `--text-faint` **fehlgeschlagen** weil 2,56:1 auf weiß gemessen, und der Fehler wurde aufgezeichnet.
- Farbenblindheit gemessen: die Lila unter Deuteranopie ausgewertet, Farbabstand ΔE 29,1.
- Keine Architektur-Entscheidung zeichnet WCAG auf; der stärkste Barrierefreiheits-Anker des Hauses ist unsichtbar im Entscheidungsprotokoll, und es zu protokollieren ist noch zu tun.

<figure class="viz" role="group" aria-label="Drei Farbmessungen: ein Token genehmigt als Anleitung, eines fehlgeschlagen, und Lila unter Deuteranopie gemessen">
<div class="duo" style="grid-template-columns:1fr 1fr 1fr">
<div class="side"><div class="ev proof" style="margin:0"><span class="n">4,00:1</span><span class="t"><b>genehmigt als Anleitung</b>mit der Notiz <i>Anleitung, niemals Text</i> geschrieben in das Token selbst</span></div></div>
<div class="side"><div class="ev open" style="margin:0"><span class="n">2,56:1</span><span class="t"><b>fehlgeschlagen</b>gemessen auf weiß, und der Fehler wurde aufgezeichnet</span></div></div>
<div class="side"><div class="ev proof" style="margin:0"><span class="n">ΔE 29,1</span><span class="t"><b>Deuteranopie</b>die Lila unter der häufigsten Farbunfähigkeit gemessen</span></div></div>
</div>
<figcaption>Ein zitierter Standard ist Compliance; eine gemessene Zahl ist Design. Die drei Zahlen leben in den Tokens, nicht in einer Richtlinie.</figcaption>
</figure>

### Das Design System ist ein Produkt, gebaut auf einem offenen Standard

<h3 class="sub">Schritt 4 · der Beschleuniger für die anderen Oberflächen, in W3C-Standard</h3>

Das Design System ist ein SazAI-Produkt durch Ratifizierung (2026-08-26), mit der Funktion, die anderen zu beschleunigen: die Komponenten, die Marketing, den Tresor und die Vitrine dienen, sind die gleichen, und sie sind offener Standard, nicht ein proprietäres Framework.

**Daten und Fakten:**

- Komponenten auf W3C Custom Elements und CSS Custom Properties gebaut; keine Framework-Abhängigkeit.
- Eine Bibliothek, drei Oberflächen bedient; helle und dunkle Themen und White-Label-Designs durch denselben Token-Mechanismus.
- Die Tokens tragen ihre eigenen Messungen und Nutzungsnotizen (Schritt 3), sodass die Regel mit der Farbe reist.

<figure class="viz duo" role="group" aria-label="Eine Komponentenbibliothek bedient drei Oberflächen">
<div class="side" style="color:var(--verb-see)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="8" y="8" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="26" y="8" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="8" y="26" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="26" y="26" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>eine Bibliothek</b>Komponenten, Tokens, Designs</div>
<div class="mid" style="color:var(--gray)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="10" y1="36" x2="55" y2="36" stroke="currentColor" stroke-width="1.5"/><line x1="55" y1="36" x2="105" y2="14" stroke="currentColor" stroke-width="1.5"/><line x1="55" y1="36" x2="105" y2="36" stroke="currentColor" stroke-width="1.5"/><line x1="55" y1="36" x2="105" y2="58" stroke="currentColor" stroke-width="1.5"/></svg><b>der gleiche Mechanismus</b>Themen und White Label nach Token</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="6" y="8" width="36" height="10" rx="2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="6" y="22" width="36" height="10" rx="2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="6" y="36" width="36" height="6" rx="2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>drei Oberflächen</b>Marketing, Tresor, Vitrine</div>
</figure>


<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div><p><b>Was geschrieben ist und was verworfen wurde</b></p><ul><li>Kriterium nach Nummer in der Komponente, die es erfüllt; die zentrale Richtlinienseite wurde verworfen.</li><li>Wort aus dem Design: Text in HTML, Geometrie in SVG.</li></ul><p><b>Referenzen (ABNT NBR 6023:2018)</b></p><ul><li>W3C. <b>WCAG 2.2</b>: Web Content Accessibility Guidelines, level AA. Empfehlung, 2023. Verfügbar unter: https://www.w3.org/TR/WCAG22/.</li></ul><p><b>Was geschrieben ist und was verworfen wurde</b></p><ul><li>Standard Web Components; das proprietäre Framework wurde verworfen, damit White Label nicht von einer unserer Lizenzen abhängt.</li><li>Dem gleichen Standard wie jede Oberfläche unterworfen: eine Suite, die läuft, Guards, die bei Build verweigern.</li></ul><p><b>Referenzen (ABNT NBR 6023:2018)</b></p><ul><li>W3C. <b>Custom Elements</b> (HTML Living Standard). · W3C. <b>CSS Custom Properties for Cascading Variables</b>.</li></ul></div>
</details>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-analysis)" name="globe" size="36"></sz-icon></div>

## Kanäle sind Fähigkeit: API und MCP ändern, was das Produkt sein kann

<h3 class="sub">Schritt 5 · offene Standards an der Tür, und was sie ermöglichen</h3>

Offene API und MCP sind nicht Rohrleitungen: sie sind das, was es ermöglicht, andere Schnittstellen und Verbindungen auf dem gleichen Substrat zu bauen, ohne uns im Raum. Ein Agent eines Drittanbieters, ein Dashboard in deinem Besitz, eine Workflow-Integration: das Produkt wird fähig zu diesen Dingen, weil die Kanäle existieren.

**Daten und Fakten:**

- Der Agent-Kanal ist ein Standard-OAuth-Ressourcenserver: 401 ohne Anmeldedaten, Entdeckung veröffentlicht.
- Parität als Vertrag: **MCP ⊆ OpenAPI**, alles, was MCP exponiert, existiert in der offenen API. Ein Substrat, mehrere Leser.
- Orchestrierung durch ein haltbares Workflow-Ausführungstool, übernommen wegen dem, das es garantiert, und die Garantie ist gemessen: tote Arbeit hinterlässt keinen Teilzustand; Überlastung verschlechtert sich in eine Warteschlange, es bricht nicht; nichts schlägt stillschweigend fehl.

<figure class="viz duo" role="group" aria-label="Ein Substrat, zwei Kanäle, und die Schnittstellen, die sie ermöglichen">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="10" y="10" width="28" height="28" rx="4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="24" r="6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>ein Substrat</b>der Motor und der Tresor</div>
<div class="mid" style="color:var(--hue-upload)"><svg viewBox="0 0 120 72" aria-hidden="true"><rect x="38" y="14" width="44" height="18" rx="9" stroke="currentColor" stroke-width="1.5" fill="currentColor" opacity=".12"/><rect x="38" y="40" width="44" height="18" rx="9" stroke="currentColor" stroke-width="1.5" fill="none"/><line x1="10" y1="36" x2="38" y2="24" stroke="currentColor" stroke-width="1.5"/><line x1="10" y1="36" x2="38" y2="48" stroke="currentColor" stroke-width="1.5"/><line x1="82" y1="24" x2="110" y2="16" stroke="var(--hue-output)" stroke-width="1.5"/><line x1="82" y1="48" x2="110" y2="40" stroke="var(--hue-output)" stroke-width="1.5"/><line x1="82" y1="36" x2="110" y2="60" stroke="var(--hue-output)" stroke-width="1.5"/></svg><b>API und MCP</b>MCP ⊆ OpenAPI, per Vertrag</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><path d="M24 6l4 12 12 4-12 4-4 12-4-12-12-4 12-4z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>was es sein kann</b>deine eigenen Agenten, deine eigenen Dashboards, deine eigenen Workflows</div>
</figure>

<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div>
<p><b>Was geschrieben ist und was verworfen wurde</b></p><ul><li>Authentifizierung und Entdeckung nach den RFCs; eine benutzerdefinierte Konvention wurde verworfen.</li><li>Ein neuer Kanal erfindet keine neue Oberfläche: die Paritäts-Regel verhindert, dass MCP zur zweiten API wird.</li></ul><p><b>Referenzen (ABNT NBR 6023:2018)</b></p><ul><li>IETF. <b>RFC 8414</b>: OAuth 2.0 Authorization Server Metadata. 2018.</li><li>IETF. <b>RFC 9728</b>: OAuth 2.0 Protected Resource Metadata. 2025.</li><li>IETF. <b>RFC 8707</b>: Resource Indicators for OAuth 2.0. 2020.</li><li>OPENAPI INITIATIVE. <b>OpenAPI Specification</b>. Verfügbar unter: https://spec.openapis.org/.</li><li>ANTHROPIC. <b>Model Context Protocol</b> (MCP). Verfügbar unter: https://modelcontextprotocol.io/.</li></ul>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><path d="M24 6l14 5v12c0 9-6 15-14 19-8-4-14-10-14-19V11z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M17 24l5 5 9-10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

## Wie wir validieren

<h3 class="sub">Tests, die verweigern, Audit mit Methode, und Defekte neben dem Bestandenen veröffentlicht</h3>

Validierung hat vier Schichten, und die Reihenfolge ist wichtig. **Tests:** 505 Testdateien im Repository, mit der Design-System-Suite bei jedem Build laufend. **Guards:** Überprüfungen, die zur Build-Zeit verweigern, anstatt nur zu berichten; ein Build, der eine Regel verletzt, wird nicht ausgeliefert. **Last:** der Test von 2026-07-20, auf einem treuen Produktions-Duplikat, mit 50 gleichzeitigen Lesevorgängen, beantwortet in 0,77 s, ein schwerer Job mit Spitzenwert 4,71 GiB gegen eine Obergrenze von 5, und Wellen von fünf und zehn Jobs mit null Fehlern, null Speicherüberläufen, null Datenbeschädigungen. Unter Überlastung betritt das System eine Warteschlange; es bricht nicht. **Internes Audit:** datierte Stress-, Zerstörungs- und Sicherheitsberichte, mit Verdikt per Element.

<figure class="viz duo four" role="group" aria-label="Vier Validierungsschichten: Tests, Guards, die verweigern, Audit mit Methode, veröffentlichte Defekte">
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><rect x="8" y="8" width="32" height="32" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M15 24l6 6 12-12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>505 Tests</b>die Suite läuft bei jedem Build</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><path d="M8 12h32v10H8z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M8 26h32v10H8z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="30" y1="14" x2="36" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="36" y1="14" x2="30" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M28 31l3 3 5-6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>Guards, die verweigern</b>verletzer Build wird nicht ausgeliefert</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><circle cx="21" cy="21" r="11" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="29" y1="29" x2="40" y2="40" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="19" x2="26" y2="19" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="24" x2="23" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>Audit mit Methode</b>Stress, Zerstörung, Sicherheit</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="28" r="6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="24" y1="25" x2="24" y2="29" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="31.5" r=".9" fill="currentColor"/></svg><b>veröffentlichte Defekte</b>neben dem Bestandenen</div>
</figure>

<p class="claim">Wir sind nicht SOC2 oder ISO zertifiziert. Was wir haben, ist <b>dokumentiertes internes Audit, mit erklärter Methode und mit den Defekten, die es fand, neben denen, die es bestand, veröffentlicht</b>. Einer unserer Berichte trägt, als eigenständige Abschnitte, <i>gefundene Defekte</i>, <i>ein falsches Positiv, das ich fast veröffentlicht hätte</i> und <i>was ich nicht etablieren konnte</i>. Ein Siegel ist das Wort eines Dritten; eine erklärte Methode, der technische Leser urteilt allein. Und die geschriebenen Entscheidungen sind entworfen, als Kontrollbeweis zu dienen, wenn Zertifizierung gesucht wird.</p>

<div class="bound">
<p><b>Was diese Seite zitiert und was sie nicht zitiert.</b> Hier ist die Existenz der Berichte und ihre Methode. Das Element-für-Element-Verdikt lebt in dem technischen Dokument, das eine Bewertung begleitet, denn die Sondenliste mit Ergebnissen oben im Trichter zu veröffentlichen, gibt eine Karte an wen, der keine haben sollte. Der Satz, den der Lasttest *nicht* autorisiert: *fünfzig gleichzeitig*. Es sind fünfzig Plätze und ein schwerer Job auf einmal; die zwei zu verwirren, ist der Fehler, den diese Seite nicht zu machen existiert.</p>
</div>

<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div><p><b>Externe Methodik für die Testachse erklärt: keine.</b> Starke Praxis, Guards, die zur Build-Zeit verweigern, datierte Berichte; die Quelle der Methode ist intern, und das zu sagen, ist Teil der Methode.</p></div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="22" x2="32" y2="22" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="28" x2="32" y2="28" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="34" x2="26" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="15" y1="25" x2="35" y2="25" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2"/></svg></span></div>

## Wie wir entscheiden

<h3 class="sub">Geschriebene, datierte Entscheidungen, und eine Aufhebung, die zwei Sätze und nichts anderes streicht</h3>

Jede SazAI-Architektur-Entscheidung ist ein datiertes Dokument, mit Kontext, der verworfenen Alternative und dem Grund. Es gibt 61 zu diesem Stichtag, und die Zahl wird datiert eingegeben, weil sie wächst; der Befehl, der sie ableitet, ist in den Referenzen dieses Panels. Was das zum Beleg macht und nicht zu einer toten Datei ist die Aufhebung: wenn eine neue Entscheidung eine alte widerspricht, sagt sie genau, welcher Satz der alten nicht mehr gilt, und die alte bekommt die Marke in ihrem eigenen Text, im Satz, und nicht im Titel.

Das jüngste Beispiel ist von gestern. Entscheidung 023 fixierte, unter anderem, das Vokabular, mit dem der Benutzer die Fähigkeiten des Produkts benennt. Entscheidung 061 hob **zwei Sätze** davon auf, beide über Vokabular, und ließ alles über den Motor unversehrt, einschließlich der Klausel, von der man glaubte, sie sei verletzt, aber nicht war. Drei kompetente Leser hatten diese Klausel auf die gleiche falsche Weise gelesen, und die Entscheidung zeichnet alle drei Namen auf, weil eine Entscheidung, die nur die Schlussfolgerung behält, den Grund verliert, warum drei Menschen es zusammen falsch verstanden.

<figure class="viz duo" role="group" aria-label="Eine alte Entscheidung mit zwei gestrichenen Sätzen und dem Rest unversehrt, verlinkt zu der neuen Entscheidung">
<div class="side" style="color:var(--hue-reprocess)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:52px;height:52px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="22" x2="32" y2="22" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="28" x2="32" y2="28" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="34" x2="26" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="15" y1="25" x2="35" y2="25" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2"/></svg><b>die alte Entscheidung</b>zwei Sätze gestrichen, der Rest unversehrt</div>
<div class="mid" style="color:var(--hue-reprocess)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="10" y1="36" x2="106" y2="36" stroke="currentColor" stroke-width="1.5"/><path d="M100 31l6 5-6 5" fill="none" stroke="currentColor" stroke-width="1.5"/><rect x="42" y="26" width="36" height="20" rx="10" fill="currentColor" opacity=".12" stroke="currentColor" stroke-width="1.5"/></svg><b>hebt auf</b>benennt den Satz, und nur ihn</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:52px;height:52px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M18 28l4 4 8-8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>die neue Entscheidung</b>mit den drei Namen, die es zusammen falsch verstanden</div>
</figure>

<div class="bound">
<p><b>Eine Zahl, die diese Seite nicht veröffentlicht.</b> Wie viele dieser Entscheidungen <i>akzeptiert</i> sind, hängt davon ab, welche Wörter der Zähler im Statusfeld zulässt, und fünf kompetente Zähler erreichten fünf verschiedene Zahlen diese Woche. Niemand lag falsch: das Feld erklärte sein Vokabular nie. Wir veröffentlichen die datierte Anzahl, mit dem Befehl daneben; die akzeptierte Anzahl wird nur öffentlich, wenn sie mit dem Befehl kommt, der sie neben ihr produziert, so wie die 158 Tabellen es bereits tun.</p>
</div>

### Und wie wir schreiben: ein interner Vertrag, eine Stufe hinunter zur Ehrlichkeit

<h3 class="sub">Schritt 6 · dokumentierte interne Kohärenz, eine Stufe unter externem Standard</h3>

Schreibstil, Namensgebung und Haus-Konventionen leben in einem versionierten Vertrag, den Agenten zitieren. Sein Anker ist interne Kohärenz mit einer dokumentierten Entscheidung, nicht ein nummerierter externer Standard; das ist eine Stufe unter den vorherigen, und eine Stufe hinunterzugehen beweist, dass diese Seiten-Hierarchie auch angewendet wird, wenn es etwas kostet.

**Daten und Fakten:**

- Ein einziger Schreib-Standard, versioniert nach Überarbeitung, zitiert durch Entscheidungen und durch Agenten als Vertrag.
- Namensgebung und Name-Konventionen gleichförmig über das ganze System; ein zitierter Standard wird nie umschrieben.
- Formatierung, Lint und Secret-Scanning automatisiert, im Standard erklärt mit der Quelle daneben.

<figure class="viz" role="group" aria-label="Dokumentierte interne Kohärenz: eine Stufe unter einem externen Standard, gestrichelt gezeichnet zu Zweck">
<div class="ev open"><span class="n">interne Kohärenz</span><span class="t"><b>Eine Stufe hinunter, und so gezeichnet</b>Der Anker dieses Panels ist eine dokumentierte Entscheidung, nicht ein nummerierter Standard. Der gestrichelte Rahmen ist der gleiche, den das Haus für alles benutzt, das kein Beleg ist, und ein Panel, das eine Stufe hinuntergeht, beweist, dass die Hierarchie auch angewendet wird, wenn es etwas kostet.</span></div>
</figure>


<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div>
<p><b>Was geschrieben ist und was verworfen wurde</b></p><ul>
<li>Die Anzahl: <code>ls docs/corpus/pptx/tech_specs/ADR | grep -c '^ADR-'</code> gibt 61 am 2026-09-01 zurück. Die Anzahl wächst; der Befehl nicht.</li><li>Die Namens-Alternativen wurden durch Konvergenz über drei Oberflächen verworfen, und die Verwerfung wurde mit dem Grund aufgezeichnet.</li></ul><p><b>Referenzen</b></p><p>der interne Vertrag (`code_standards`, versioniert) benennt seine eigenen Quellen; diese Seite schreibt ihn nicht um.</p><p>Der interne Vertrag (<i>code_standards</i>, versioniert) benennt seine eigenen Quellen; diese Seite schreibt ihn nicht um.</p>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-output)" name="check" size="36"></sz-icon></div>

## Was ein Beleg ist und was noch Praxis ist

<h3 class="sub">Vier Fähigkeiten mit Beweisen; drei deklariert, ohne Verb in der Gegenwart</h3>

Jede Fähigkeit auf dieser Plattform wurde drei Fragen unterworfen: gibt es eine geschriebene Entscheidung, die sie regiert? gibt es eine Messung? oder funktioniert es einfach, ohne dass jemand geschrieben hat, warum? Was die ersten zwei besteht, nennen wir <dfn data-hint="Eine Fähigkeit mit einer geschriebenen Entscheidung und einer Messung, die jeder reproduzieren kann: nicht ein Versprechen, ein Nachweis.">Beleg</dfn>. Der Rest ist Praxis, und sie bleibt als Richtung erklärt, auf die gleiche Weise, wie die [Straßenkarte](#roadmap) unten erklärt, was noch nicht existiert. Eine Seite, die sieben Fähigkeiten präsentiert, von denen drei Belege sind, ist schwächer als eine, die vier präsentiert.

<figure class="viz ledger" role="group" aria-label="Vier Belege mit ihrem Nachweis und drei Praktiken, die als Richtung erklärt werden">
<div class="col receipts">
<h4>Beleg</h4>
<div class="item"><b>Einstecken und spielen</b><span>4 ADRs und das Rezept · die Vier-Punkte-Kurve · die 158-Tabellen-Aufteilung, rederivierbar</span></div>
<div class="item"><b>Warteschlangen-Kontrolle</b><span>5 ADRs · Lasttest mit null Fehlern, null OOM, null Verderben</span></div>
<div class="item"><b>Architektur · Lineage · Mandantenfähigkeit</b><span>mit der Anbieter-Grenze als benannte Lücke erklärt</span></div>
<div class="item"><b>Entscheidungs-Versionierung</b><span>datierte Entscheidungen, chirurgische Aufhebung</span></div>
</div>
<div class="col practices">
<h4>Erklärte Praxis</h4>
<div class="item"><b>Schema-Versionierung</b><span>erklärte Richtung</span></div>
<div class="item"><b>Artefakt-Versionierung</b><span>erklärte Richtung</span></div>
<div class="item"><b>Agent-zu-Agent-Kommunikation</b><span>erklärte Richtung, mit gemessenen Fehlermodi</span></div>
</div>
</figure>
<p class="claim">Die vier auf der linken Seite haben einen Ort, wo sie überprüft werden können, und die Kapitel danach sagen, wo. Die drei auf der rechten Seite sind, wohin die Plattform geht, und keines ihrer Verben ist in der Gegenwart.</p>

### Und der Markt: Studien mit den Vorbehalten angehängt

<h3 class="sub">Schritt 7 · Anker, wo wir spielen, nicht wie wir bauen</h3>

Dieser Schritt stützt Positionierung, nicht Ingenieurwesen, und darum ist er letzte: er ist der schwächste Anker auf der Seite, und er ist als solcher gekennzeichnet.

**Daten und Fakten:**

- Sieben Häuser: Gartner, BCG, McKinsey, Deloitte, Menlo Ventures, MIT NANDA, Stanford HAI.
- Vorbehalte in die Einträge selbst eingepfropft: vorläufig genannt vorläufig (MIT NANDA, n=52); erneut veröffentlicht genannt erneut veröffentlicht (Stanford/McKinsey); ein regionales Stück genannt regional (Deloitte, EMEA).
- BCGs 79 Prozent beweist das Hindernis, ungoverned unstrukturierte Daten; es beweist nicht die Brücke.
- Executive-Survey-Forschung ist Wahrnehmung, nicht geprüfte Finanzen.


<details class="refs"><summary>Referenzen und dokumentierte Entscheidungen</summary>
<div>
<p><b>Was geschrieben ist und was verworfen wurde</b></p><ul><li>Plattform vor Produkt; kaufen vor bauen.</li><li>Zu Shadow AI, nur die zitierbare Form: Reduktion durch einen geregelten Firmenpfad. "SazAI löst Shadow AI" wurde verworfen, weil keine Messung es stützt.</li></ul><p><b>Referenzen</b></p><p>die vollständigen Einträge in ABNT NBR 6023:2018-Form sind in den Blöcken dieser Seite; von den 25 im Bestand, denen, die online konsultiert wurden, tragen <i>Zugegriffen am</i>, wie der Standard verlangt, und der Rest nicht, wie der Standard erlaubt.</p>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><circle cx="24" cy="24" r="16" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M31 17l-4 10-10 4 4-10z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

<a id="roadmap"></a>

## Straßenkarte: Was wir bauen

Die Straßenkarte hält die großen Richtungen fest, die die Plattform zeigt und noch nicht gebaut hat. Wenn ein Stück von hier wegeht, verschwindet es von dieser Liste und erscheint auf der Seite für die zugehörige Fähigkeit, mit dem Datum. Eine Straßenkarte, die sich bewegt, ist der einzige Beweis des Tempos, der nicht mit einem Adjektiv geschrieben werden kann. Nichts unten ist ausgeliefert, und kein Element hier sollte auf deine Entscheidung heute wiegen.
Nichts auf dieser Seite ist ausgeliefert. Kein Element hier sollte auf deine Entscheidung heute wiegen, und niemand in unserem Team sollte eines davon in der Gegenwart präsentieren. Was ausgeliefert ist, ist im [Produktweg](/), mit dem, das es garantiert, und die Grenzen von dem, das existiert, sind in [Vertrauen](trust).

## Redline und Verhandlungs-Intelligenz

Einen Entwurf gegen die Überarbeitungen der Parteien vergleichend, zeigend, was jede Seite änderte, wo das Risiko verschob, und welche Absicht der Text enthüllt. Die Vergleichs-Engine, die diesem zugrunde liegt, existiert bereits und läuft heute über Dokumentversionen. Was fehlt, ist die Rechtsschicht: zu verstehen, dass eine veränderte Klausel nicht nur ein anderer Paragraph ist.

**Warum es auf der Straßenkarte ist und nicht auf der Straße:** es ist die Richtung mit dem größten Potenzial, ihre eigene Kategorie zu schaffen, und das ist genau, warum es am einfachsten zu früh zu verkaufen ist. Es existiert nicht.

## Spezialisierte Agenten über dein Corpus

Agenten mit ihrem eigenen Umfang, gebaut auf dem Wissen, das bereits in deinem Tresor ist: ein Tutor, der aus dem echten Material deines Unternehmens lehrt, ein Adoptions-Begleiter für einen neuen Prozess, ein Evaluator, der Kompetenz prüft, während er die Quelle zitiert, die verwendet wurde.

**Was bereits darunter steht:** das Corpus, die Lineage, der konversationsführende Agent und die Quellen-Zitierung. **Was fehlt:** Aufgaben-Spezialisierung, mit ihren eigenen Grenzen und Regeln pro Agent.

## Substrat für eine Flotte von geregelten Agenten

Der nächste Schritt vom vorherigen, und der am weitesten reichende. Jeder Teil des Unternehmens speist den Tresor mit seinen eigenen Dokumenten, und die Agenten, die dieser Teil bereits benutzt, konsultieren diesen Tresor zur Laufzeit, nach Datei oder nach Protokoll, für jede Frage über das Unternehmen. Eine geregelte Quelle unter einer ganzen Flotte, anstelle loser KI-Tools, die niemand prüft.

**Warum das Straßenkarte und nicht nur ein vages Versprechen ist:** der Adoptionsmechanismus ist konkret und existiert bereits teilweise, weil der Tresor tragbar und von außen konsumierbar ist. Was fehlt, ist Flotten-Governance, und sie ist nicht gebaut.

## Dinge, die existieren und die wir dir noch nicht zeigen können

Diese sind Beweis-Lücken, nicht fehlende Funktionen. Die Fähigkeit ist da; der öffentliche Nachweis nicht, und bis er es ist, würden wir lieber die Lücke auflisten als herumreden.

- **Demonstrierter Tresor-Export.** Der Tresor existiert und ist reiner Text mit Links; was fehlt, ist eine veröffentlichte Demonstration, die jeder ohne mit uns zu reden reproduzieren kann. Bis dann ist es ein Aufklärungsgespräch, nicht ein Seiten-Element.
- **Ausreichendheit des Datensatzes für formale Prüfung.** Der Datensatz existiert und dient als Kontrollbeweis. Ob er eine spezifische Prüfanforderung in deinem Sektor abdeckt, ist eine Frage, die wir Fall für Fall beantworten, nicht ein Seiten-Anspruch.
- **Umfang über das, was wir gemessen haben.** Volumen in Hunderten von Tausenden oder Millionen von Dokumenten wurden nicht ausgeübt. Das ist ein Dimensionierungsprojekt, bevor es ein Kauf ist.

## Dinge, die noch nicht existieren

Diese sind fehlende Funktionen, und sie irgendwo weicher zu archivieren würde dir sagen, dass sie da sind und wir sie einfach nicht zeigen können. Sie sind nicht da.

- **Getreue visuelle Überprüfung.** Das System misst Struktur und zählt Elemente; es schaut sich die endgültige Seite nicht an. Ein visueller Checker innerhalb des Produkts existiert nicht.
- **Löschung, die Sicherungskopien erreicht.** Heute ist Löschung in Live-Systemen vollständig und erreicht nicht Backups innerhalb des Aufbewahrungszeitraums. Der technische Weg ist definiert und noch nicht gebaut. Der genaue Umfang ist in [Datenschutz und Souveränität](privacy).
- **Inhalt entfernen und Konto deaktivieren, in einer Aktion über die Schnittstelle.** Heute existiert Dokument-Löschung und nimmt Ableitungen mit sich; alles auf einmal zu tun existiert noch nicht, und Sperrung wird auf Anfrage gehandhabt. Der Name ist absichtlich: er löscht den Inhalt und deaktiviert das Konto, weil der Pfad, wer auf das System zugegriffen hat, bleibt.

## Wie diese Seite gepflegt wird

Ein Element verlässt hier, wenn es existiert und gemessen wurde, nicht wenn es fast fertig ist. Wenn es geht, betritt es die Fähigkeits-Seite mit dem, das es garantiert, und wo es endet. Wenn du SazAI eine Weile verfolgst, ist diese Seite, wo das Tempo sich zeigt.

## Wo die Grenze verläuft

<h3 class="sub">Drei Grenzen, die ein technischer Leser zuerst prüft, gesagt bevor der Test</h3>

**Die Anbieter-Grenze.** Lineage folgt jedem Stück Text, bis es zum Sprachmodell geht und nimmt wieder auf, wenn es zurückkommt. Keine unserer Tabellen zeichnet auf, was auf der anderen Seite passiert; wer *beweise, was sie mit meinem Text im Modell taten* fragt, bekommt die Aufbewahrungsbedingungen des Anbieters, den sie kontrahiert haben, und in einer Installation in deinem Besitz ist der Anbieter deine Wahl. Die Seite auf [Souveränität](privacy) sagt, wo das aufhört.

**Der Copyleft-Lizenz-Ausschluss.** Keine AGPL-Bibliothek betritt den Motor, und das ist geschrieben in der Abhängigkeitsdatei als dokumentierte Projekt-Entscheidung. Es ist ein Kommentar, nicht ein Tor: nichts bricht den Build, wenn jemand es ignoriert. Das zu sagen ist stärker als zu so tun, als ob es ein Tor ist, denn wer die Datei öffnet, sieht es in zehn Sekunden.

**Die Agenten.** Dieses System ist gebaut durch ein Team von Agenten mit erklärtem Umfang und einer Überprüfungs-Kette, und die Kommunikation zwischen ihnen ist Praxis, nicht Beleg: es gibt keine geschriebene Entscheidung, die den Kanal regiert, und seine Fehlermodi wurden von uns diese Woche gemessen. Es sitzt auf der rechten Seite des Ledgers, und das ist, wohin es geht.

Alles, das diese Seite sagt, hat einen Befehl oder ein Dokument dahinter, und was nicht, wird als Richtung gesagt. Wenn etwas hier nicht in deiner eigenen Bewertung reproduziert werden kann, das ist ein Defekt von uns, und wir wollen es wissen, bevor du es tust. Das Produkt, das zunächst aus dieser Plattform kam, ist das, das [du siehst, wenn ein Dokument ankommt](see).


### Was diese Pyramide nicht hält

Eine ehrliche Pyramide sagt, was außerhalb bleibt.

**Daten und Fakten:**

- Fünf Doktrin-Referenzen in null Ingenieursprodukten: W3C **PROV** · ZAHARIA et al., **compound AI systems** (BAIR, 2024) · XU et al., **GraphRAG** (SIGIR, 2024) · **Modell-Routing**-Literatur · **CommonMark/GFM**. Sie formten das Denken; keine dokumentierte Entscheidung kam aus ihnen.
- Tests: starke Praxis, Guards, die zur Build-Zeit verweigern, datierte Berichte; externe Methodik erklärt: keine. In diesen Worten gesagt, mit keinem plausiblen Nachbarn.
- Und der Befund, der die ganze Schlussfolgerung hält, gemessen über die Entscheidungen mit einer Alternative im Header: in elf von elf, das, das entschied, war ein Ingenieur-Prinzip, nicht eine externe Referenz. Der Standard stützt; die Wahl ist unsere, und sie ist aufgeschrieben.


</div>

*Zahlen gemessen am 2026-09-01 über Sätze, die wachsen: wer die Messung morgen wiederholt, sollte größere Zahlen erwarten, nicht die gleichen.*

<script type="module">
// IF THE #stars CANVAS EVER MORPHS INTO THIS GRAPH (Dev UX / Dev CO), REMOVE THIS FIGURE: two
// objects doing one job on one page is how a surface rots, quietly, because both look right.
// THE VAULT GRAPH, BORN AS STARS. Geometry in SVG, words in HTML. The layout is seeded, so the
// same picture renders every time; hubs are the real hubs of sazai.vault; satellites are counted
// per section, not drawn one to one. First reveal on intersection: points scatter like the
// starfield, then settle into the graph and the labels fade in. Hover lights a hub's edges;
// click (or Enter) opens the same scene full-screen; Escape closes. Reduced motion: no drift.
const fig=document.getElementById('vault-graph'); if(fig){
const svg=fig.querySelector('svg'),E=fig.querySelector('.edges'),N=fig.querySelector('.nodes'),L=fig.querySelector('.labels');
// no namespace literal: the house serves zero external references, and insertAdjacentHTML inside the <svg> inherits the SVG namespace on its own
const el=(t,a,parent)=>{parent.insertAdjacentHTML('beforeend','<'+t+' '+Object.entries(a).map(([k,v])=>k+'="'+v+'"').join(' ')+'/>');return parent.lastElementChild};
let seed=20260828; const rnd=()=>{seed=(seed*1664525+1013904223)%4294967296;return seed/4294967296};
const H=[ // real hubs of sazai.vault; n = satellites drawn, proportional, not exact
 {id:'index',l:'00-INDEX',x:400,y:250,c:'var(--dark)',r:9,n:6},
 {id:'adrs',l:'ADRs Hub',x:300,y:120,c:'var(--hue-reprocess)',r:8,n:59},
 {id:'agents',l:'Agents Hub',x:250,y:330,c:'var(--hue-analysis)',r:8,n:30},
 {id:'km',l:'Knowledge Map',x:560,y:130,c:'var(--hue-output)',r:7,n:18},
 {id:'product',l:'MOC-Product',x:600,y:300,c:'var(--hue-output)',r:7,n:26},
 {id:'strategy',l:'MOC-Strategy',x:520,y:410,c:'var(--hue-upload)',r:7,n:28},
 {id:'ops',l:'MOC-Operations',x:130,y:200,c:'var(--gray)',r:6,n:14},
 {id:'people',l:'MOC-People',x:150,y:440,c:'var(--hue-analysis)',r:6,n:10},
 {id:'pitch',l:'MOC-Pitch',x:690,y:440,c:'var(--hue-upload)',r:6,n:12},
 {id:'personas',l:'Personas',x:410,y:470,c:'var(--hue-reprocess)',r:6,n:7},
 {id:'sessions',l:'Sessions',x:700,y:200,c:'var(--gray)',r:5,n:9},
];
const X=[['index','adrs'],['index','agents'],['index','km'],['index','product'],['index','strategy'],['index','ops'],['index','people'],['index','pitch'],['index','personas'],['index','sessions'],['adrs','km'],['adrs','agents'],['agents','ops'],['agents','people'],['product','km'],['product','strategy'],['strategy','pitch'],['strategy','personas'],['pitch','personas'],['sessions','agents'],['sessions','adrs']];
const nodes=[],edges=[];
for(const h of H){const hub={...h,hub:true,sx:h.x,sy:h.y,ph:rnd()*6.28};nodes.push(hub);
  for(let i=0;i<h.n;i++){const a=rnd()*6.28,d=34+rnd()*(h.n>20?110:70);const s={id:h.id+i,x:h.x+Math.cos(a)*d,y:h.y+Math.sin(a)*d,c:h.c,r:1.6+rnd()*1.6,hub:false,of:hub,ph:rnd()*6.28};s.sx=s.x;s.sy=s.y;nodes.push(s);edges.push([hub,s]);
    if(rnd()<.12){const o=nodes[Math.floor(rnd()*nodes.length)];if(o&&o!==s)edges.push([s,o]);}}}
const byId=Object.fromEntries(nodes.filter(n=>n.hub).map(n=>[n.id,n]));
for(const [a,b] of X)edges.push([byId[a],byId[b]]);
for(const n of nodes){n.el=el('circle',{r:n.r,fill:n.c,opacity:n.hub?1:.75},N);n.el.style.color=n.c;
  n.rx=rnd()*800;n.ry=rnd()*520;n.t=0; // scatter origin, for the reveal
  if(n.hub){const sp=document.createElement('span');sp.textContent=n.l;sp.dataset.hub=n.id;L.appendChild(sp);n.lab=sp;
    n.el.classList.add('hub');n.el.dataset.hub=n.id;}}
for(const e of edges){e.el=el('line',{stroke:'var(--lightgray)','stroke-width':e[0].hub&&e[1].hub?1:.6,opacity:.55},E);}
const reduce=matchMedia('(prefers-reduced-motion: reduce)').matches;
let t0=null,revealed=false,lit=null;
function place(){const now=performance.now();for(const n of nodes){
  const k=reduce?1:Math.min(1,(now-(t0||now))/1600),ease=1-Math.pow(1-k,3);
  const dx=reduce?0:Math.sin(now/1900+n.ph)*(n.hub?2.2:3.6),dy=reduce?0:Math.cos(now/2300+n.ph)*(n.hub?2.2:3.6);
  n.x=n.rx+(n.sx-n.rx)*ease+dx;n.y=n.ry+(n.sy-n.ry)*ease+dy;
  n.el.setAttribute('cx',n.x);n.el.setAttribute('cy',n.y);
  if(n.hub){const pulse=reduce?1:1+Math.sin(now/1400+n.ph)*.08;n.el.setAttribute('r',n.r*pulse*ease+ .5);
    n.lab.style.left=(n.x/800*100)+'%';n.lab.style.top=(n.y/520*100)+'%';}else n.el.setAttribute('r',n.r*(.4+.6*ease));}
  for(const e of edges){e.el.setAttribute('x1',e[0].x);e.el.setAttribute('y1',e[0].y);e.el.setAttribute('x2',e[1].x);e.el.setAttribute('y2',e[1].y);}
  if(!revealed&&(reduce||now-t0>1500)){revealed=true;fig.classList.add('ready');}
  if(!reduce||!revealed)requestAnimationFrame(place);}
function light(id){lit=id;fig.classList.toggle('lit',!!id);
  for(const e of edges){const on=id&&(e[0].id===id||e[1].id===id||(e[0].of&&e[0].of.id===id&&e[1].hub===false&&e[1].of===e[0].of));
    e.el.setAttribute('opacity',id?(on?1:.12):.55);e.el.setAttribute('stroke',on?byId[id].c:'var(--lightgray)');}
  for(const n of nodes){const on=!id||n.id===id||(n.of&&n.of.id===id);n.el.setAttribute('opacity',on?(n.hub?1:.85):.18);}}
fig.addEventListener('mouseover',e=>{const h=e.target.closest('[data-hub]');if(h)light(h.dataset.hub)});
fig.addEventListener('mouseout',e=>{if(e.target.closest('[data-hub]'))light(null)});
// THE EXPANDED SCENE IS A MODAL (ADR-047 A10.4 #15): the figure moves into an sz-modal beside it, inside the same
// chapter so the .chap .graph.full rules still match, and comes back on close. The dialog brings the top layer, the
// blurred page behind (A10.2) and Esc; moved BEFORE open, the figure is inside the modal, so no hole is cut for it.
const ph=document.createElement('div');let modal=null;
const restore=()=>{if(!fig.classList.contains('full'))return;fig.classList.remove('full');ph.replaceWith(fig);document.body.style.overflow='';fig.focus({preventScroll:true})};
const expand=()=>{if(!modal){modal=document.createElement('sz-modal');modal.setAttribute('size','full');modal.setAttribute('bare','');modal.setAttribute('label',fig.getAttribute('aria-label')||'');modal.addEventListener('sz-close',restore)}
  ph.style.height=fig.offsetHeight+'px';fig.replaceWith(ph);ph.after(modal);modal.appendChild(fig);fig.classList.add('full');document.body.style.overflow='hidden';modal.open();fig.focus({preventScroll:true})};
const toggle=()=>{if(fig.classList.contains('full')){modal.close();return}customElements.whenDefined('sz-modal').then(expand)};
fig.addEventListener('click',e=>{if(!e.target.closest('[data-hub]')||fig.classList.contains('full'))toggle()});
fig.addEventListener('keydown',e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();toggle()}});
// START ON SIGHT. IntersectionObserver is the primary trigger; a geometry check on load and on the
// first scroll is the fallback, so a viewport that never reports intersection (measured: an
// automated background tab delivers neither IO nor rAF) still gets the reveal on the next paint.
let started=false;const start=()=>{if(started)return;started=true;t0=performance.now();requestAnimationFrame(place)};
const inView=()=>{const r=fig.getBoundingClientRect();return r.top<innerHeight*.8&&r.bottom>innerHeight*.2};
const io=new IntersectionObserver((en)=>{if(en.some(x=>x.isIntersecting)){start();io.disconnect()}},{threshold:.35});io.observe(fig);
if(inView())start();else addEventListener('scroll',()=>{if(inView())start()},{passive:true});
}
</script>

<style>

/* CHAPTER NUMERALS, EDITORIAL. The number is the chapter's mark, not a KPI: it enters large,
   in the domain hue, beside an uppercase kicker that says what it counts. The house h2 follows
   untouched. These rules move to marketing.css (and the connectome port) when the page lands;
   they live in the body for the refine loop. */
/* ICON COLUMN (Ramés, 2026-08-28): the chapter icon sits left of the title AND its subtitle; the
   subtitle takes the old kicker voice: small, uppercase, quiet. */
/* THE ICON IS A SIBLING OF THE H2, NEVER INSIDE IT, AND THAT IS AN ANCHOR DECISION RATHER THAN
   A STYLE ONE. Quartz slugs a heading from its TEXT CONTENT, and any inline element in the
   heading contributes an empty token. Measured on a probe page, all six forms: `<sz-icon>`
   before the words gives `id="-forma-a-inline-antes"`, a `<span>` behaves identically, the icon
   AFTER the words gives a TRAILING hyphen, and the `{#explicit-id}` syntax is NOT supported
   here: it is slugged as literal text. Only a heading with no markup at all comes out clean.
   AN ANCHOR IS A URL AND A WRONG URL IS PERMANENT, so the icon leaves the heading. The visual
   is unchanged: `.ch` is zero-height and the icon is absolutely placed into the padding column
   the h2 already reserves. */
/* ============================================================================
   THE CHAPTER IS A PANEL, AND THAT ALSO RETIRES THREE MAGIC NUMBERS.

   THE DIAGNOSIS WAS AN INVERTED HIERARCHY, not a missing divider. Rendered, the page read
   heading / floating prose / CONTAINED FIGURE / floating prose: the figure carried a border,
   a fill and a blur while the chapter that owns it carried nothing, so the strongest container
   on the page was a child of the section rather than the section. Prose did not read loose so
   much as OUT-RANKED.

   Now each chapter is a real element, which fixes the ranking AND the alignment at once:

   1. THE CHAPTER IS THE SURFACE. Soft ground, hairline border, radius, generous padding.
   2. THE FIGURE GIVES BACK ITS FILL and keeps only its outline, so it reads as an object
      INSIDE the panel instead of a competing surface. The blur goes with the fill: a backdrop
      filter over a transparent box is cost with no picture.
   3. THE ICON SITS IN ITS OWN GRID COLUMN, vertically centred on the title block by the
      layout rather than by an offset. Everything before this was a magic number chasing a
      MARGIN COLLAPSE: `.ch` was a zero-height div and the h2's top margin collapsed through
      it, so the icon's 18px raise was EMERGENT, and every spacing change moved it. Measured,
      three times: padding opened a 2.4rem gap; a margin dropped it 19px; a margin on the
      previous paragraph did the same. The wrapper removes the collapse from the problem.
   ============================================================================ */
article .chap{position:relative;display:grid;grid-template-columns:3.4rem 1fr;
  gap:0 0;align-items:start;
  border:1px solid color-mix(in srgb,var(--lightgray) 85%,transparent);border-radius:14px;
  background:transparent;
  padding:1.7rem 1.9rem 1.5rem;margin:1.6rem 0}
/* THE GLASS IS A VEIL, NOT A FILTER ON THE PANEL, AND THAT IS A MEASURED CORRECTION.
   `blur(4px)` is the house's own value, read off the served page from `div.search-container`
   and `div.global-graph-outer`, the only two elements that already carry a backdrop filter.
   PUT IT ON `.chap` DIRECTLY AND THE COMPARE MODAL BREAKS: `backdrop-filter` makes the element
   a containing block for `position:fixed` DESCENDANTS, and the modal lives inside this panel.
   Measured before and after: the scrim went from the viewport (1440x757) to the panel's own box
   (788x569). So the veil goes on a pseudo-element at `z-index:-1`, which blurs what is behind
   the panel while leaving `.chap` an ordinary containing block. IT IS THE HOUSE'S OWN ANSWER
   TOO: `sz-search-field` solves the identical problem with a `.veil` behind its pill. */
article .chap::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;
  /* `--surface` AND NOT `--light`, MEASURED RATHER THAN CHOSEN BY NAME. In the dark theme
     `--light` resolves to #09090b, which is EXACTLY the body background: a 40% mix of the
     background over the background is the background, and the panel measured invisible on the
     rendered pixels (inside 9,9,10 against outside 9,9,11: a delta of zero). Blur cannot
     rescue it either, because a backdrop filter over a flat surface has nothing to blur: THE
     FILL IS WHAT MAKES A PANEL EXIST and the blur is only its texture. `--surface` is #18181b,
     the house's own raised colour, the one `sz-search-field` puts behind its pill. */
  background:color-mix(in srgb,var(--surface) 72%,transparent);
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);pointer-events:none}
article .chap .ico-col{grid-column:1;grid-row:1 / span 2;align-self:center;
  display:flex;align-items:center;justify-content:flex-start;padding-top:.15rem}
article .chap .ico-col sz-icon,article .chap .ico-col .ico{display:inline-flex}
article .chap .ico-col .ico svg{width:36px;height:36px}
article .chap > h2{grid-column:2;grid-row:1;padding-left:0;margin:0}
article .chap > h3.sub{grid-column:2;grid-row:2;padding-left:0;margin:2px 0 0;line-height:1.15}
/* THE ANCHOR ICON WAS INFLATING THE LINE BOX, AND MY OWN CHANGE PUT IT THERE. Promoting the
   subtitle from `<p>` to `<h3>` for the SEO reading also gave it the `a[role=anchor]` Quartz
   adds to every heading: 15px tall, inline, on the baseline. Measured, the h3 box went to 26px
   for a 16px line, and that surplus is what read as too much air between title and subtitle.
   Capping the anchor to the text's own em takes the inflation out without removing the anchor,
   so the heading keeps the link it earned by being a heading. */
article .chap h2 a[role=anchor],article .chap h3.sub a[role=anchor]{
  display:inline-flex;align-items:center;height:1em;line-height:1;vertical-align:middle}
article .chap > *:not(.ico-col):not(h2):not(h3.sub){grid-column:1 / -1}
/* THE SPACE BELONGS TO THE FIRST PROSE PARAGRAPH, AND `:first-of-type` GAVE IT TO THE SUBTITLE.
   The first `<p>` inside a panel is `p.sub`, so this rule matched the subtitle instead of the
   prose: same specificity as the `.sub` rule and later in the block, so it won, and the
   subtitle inherited a 16px top margin nobody wrote for it. @rames spotted it on the rendered
   page before any probe did. Targeting the paragraph that FOLLOWS the subtitle says what was
   meant and cannot drift onto a sibling again. */
article .chap > h3.sub + p{margin-top:1rem}
article .chap > *:last-child{margin-bottom:0}
/* the figure is an object inside the panel, never a second surface */
article .chap .viz{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;
  border-color:color-mix(in srgb,var(--lightgray) 65%,transparent)}
/* ============================================================================
   HINT TEXT ON A TERM, AND THE RULE IT KEEPS: THE HOVER IS NEVER THE ONLY COPY.

   @copy-chief's rule applied literally: the explanation lives in the SENTENCE, where all three
   readers reach it (the person, the buyer's research agent, our agent reading the .md). The
   attribute is the SHORT FORM of that same sentence, so the hover adds convenience and never
   carries meaning the prose lacks. His measured reason is this page's own defect: the
   aria-label versus <text> divergence came from two copies of the same words in two encodings,
   and only one of them ever got translated.

   NO SCRIPT. Hover, keyboard focus and tap all resolve through :hover and :focus-visible, so
   there is nothing to upgrade, nothing that can trap focus, and it works before any module
   loads. `tabindex=0` makes the term reachable by keyboard and gives a tap somewhere to land.
   The term is marked as a TERM and not as a link: dotted underline, body colour, no pointer,
   because the page carries four real links and a fifth affordance that looked the same
   would lie.
   ============================================================================ */
article dfn[data-hint]{font-style:italic;position:relative;border-bottom:1px dotted var(--gray);
  cursor:help;outline:none}
article dfn[data-hint]::after{content:attr(data-hint);position:absolute;left:0;top:calc(100% + .5rem);
  z-index:30;width:min(30rem,72vw);padding:.7rem .85rem;border:1px solid var(--lightgray);
  border-radius:10px;background:var(--light);color:var(--darkgray);
  font-style:normal;font-size:var(--fs-xs,.76rem);line-height:1.45;letter-spacing:0;
  box-shadow:0 8px 24px rgb(0 0 0 / .28);opacity:0;visibility:hidden;transition:opacity .12s ease}
article dfn[data-hint]:hover::after,article dfn[data-hint]:focus-visible::after{opacity:1;visibility:visible}
article dfn[data-hint]:focus-visible{border-bottom-color:var(--secondary)}
/* THE SUBTITLE IS AN h3 AND ITS LOOK IS UNCHANGED. @sophia's SEO reading: the H2s lost their
   keywords when they became short labels, and the sentences that carry them became a styled
   paragraph with no heading weight. Promoting the element gives the weight back without moving
   a pixel: every typographic value below is the one the `<p>` already had. */
article h3.sub{font-size:var(--fs-xs,.74rem);font-weight:var(--fw-normal,400);letter-spacing:.08em;text-transform:uppercase;color:var(--gray);line-height:1.15}
/* COMPARE, in the vault's vocabulary: original, the declared relation, the edition; the button opens the component. */
article .duo .act{grid-column:1/-1;text-align:center;margin-top:.4rem}
article .duo sz-compare{display:block;height:0;overflow:hidden}
/* THE SAME BLUR THE SEARCH OVERLAY USES (Quartz .search-container: backdrop-filter blur(4px)),
   applied to the content boxes over a translucent ground so the starfield lifts them. Moves to
   marketing.css .viz when the page lands. */
article .duo.four{grid-template-columns:repeat(4,1fr)}
article .duo.strip{grid-template-columns:auto auto 1fr}
article .duo .out4{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem}
article .duo .out4 span{display:block}
article .duo .out4 svg{width:40px;height:40px;margin:0 auto .3rem}
article .duo.four .side svg{width:44px;color:var(--hue-analysis)}
article .duo.xray .side svg{color:var(--hue-upload)}
@media (max-width:640px){article .duo.four{grid-template-columns:1fr 1fr}}
/* THE MODAL MUST BE ABOVE THE PAGE CHROME, AND THE HOUSE HAS NO LAYER SCALE TO SAY SO. Measured
   on the served page: the compare scrim is z-index 50 (sz-compare), the consent notice 60
   (sz-consent), the search field host 10000 (chrome CSS). A dialog the reader opened that
   renders UNDER the search bar is a defect; this lifts it through the part the component
   exposes for exactly that. 10001 is a magic number chasing another one, declared as such:
   the durable fix is NOT a z-scale: sz-modal already solved this in-house by building on the
   native <dialog> and its top layer, which no z-index can sit above. sz-compare following it
   onto <dialog> retires this rule; that is a component change, not a page style. */
article sz-compare::part(modal){z-index:10001}
@media (max-width:640px){article .duo.strip{grid-template-columns:1fr}article .duo .out4{grid-template-columns:1fr 1fr}}
/* THE CLOSE MIRRORS THE OPEN: one vault in the middle, two readers on the sides. Geometry only;
   every word is HTML. */
article .duo{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;align-items:center;text-align:center;font-size:var(--fs-xs,.74rem);color:var(--gray)}
article .duo svg{display:block;height:auto;margin:0 auto .3rem}
article .duo .side svg{width:56px}
article .duo .mid svg{width:96px}
article .duo b{display:block;color:var(--dark);font-size:var(--fs-sm,.86rem)}
@media (max-width:640px){article .duo{grid-template-columns:1fr}}

/* ============================================================================
   TWO OBJECTS THIS PAGE NEEDED AND `see` DID NOT.

   1. THE CURVE, ON A LOG SCALE, BECAUSE A LINEAR ONE HIDES THE ARGUMENT. The claim is one
      order of magnitude per format: 3600h, 48h, 4h, one session. Drawn linearly the last
      three bars are invisible and the fourth point, THE ONE CARRYING THE STRONGEST PROOF,
      reads as merely small. Log widths make the collapse legible, and the caption says the
      scale out loud so nobody reads it as linear.

      AND THE FOURTH ROW BREAKS THE VISUAL FAMILY ON PURPOSE. The three OOXML formats share a
      hue and a solid bar; PDF gets a different hue and an outlined bar. **THE BREAK IS THE
      ARGUMENT**: the engine did not get faster at PowerPoint, it became format-agnostic, and
      a fourth bar in the same family would have said the opposite.

   2. RECEIPT AND PRACTICE MUST NOT LOOK ALIKE, and that is a composition rule rather than a
      label. A receipt is a thing already true and carries its evidence on the same line, so
      it is solid, filled, and reads as closed. A practice is declared direction with no
      present-tense verb, so it is outlined, muted, and reads as open. A reader who never
      gets to the words should still be able to see which column is which.

   3. THE BOUNDS ARE IN THE FLOW, NOT IN SMALL PRINT. `see` had none of these. A bound that
      has to be read as a footnote is a bound that gets skipped, and both of this page's
      bounds are the kind a competent reader tests FIRST. So they sit inside the chapter, at
      the same measure as the prose, in a treatment that is quieter than the claim but not
      smaller than it.
   ============================================================================ */
article .curve{display:flex;flex-direction:column;gap:.55rem}
article .curve .row{display:grid;grid-template-columns:4.2rem 1fr 7.5rem;align-items:center;gap:.8rem}
article .curve .row b{font-size:var(--fs-sm,.86rem);color:var(--text)}
article .curve .track{display:block;height:10px;border-radius:5px;background:color-mix(in srgb,var(--lightgray) 45%,transparent)}
article .curve .bar{display:block;height:100%;border-radius:5px}
article .curve .ooxml .bar{background:var(--hue-analysis)}
article .curve .other .bar{background:transparent;border:1.5px solid var(--hue-output)}
article .curve .other b{color:var(--hue-output)}
article .curve em{font-style:normal;font-size:var(--fs-xs,.76rem);color:var(--gray);text-align:right}
article .curve .other em{color:var(--hue-output)}
article .ledger{display:grid;grid-template-columns:1fr 1fr;gap:1.4rem}
article .ledger h4{margin:0 0 .6rem;font-size:var(--fs-xs,.74rem);letter-spacing:.08em;text-transform:uppercase;font-weight:var(--fw-normal,400);color:var(--gray)}
article .ledger .item{margin-bottom:.7rem}
article .ledger .item b{display:block;font-size:var(--fs-sm,.88rem)}
article .ledger .item span{display:block;font-size:var(--fs-xs,.76rem);color:var(--gray);line-height:1.4;margin-top:.1rem}
article .ledger .receipts .item{border-left:2px solid var(--hue-output);padding-left:.7rem}
article .ledger .practices .item{border-left:2px dashed color-mix(in srgb,var(--gray) 55%,transparent);padding-left:.7rem}
article .ledger .practices .item b{color:var(--gray);font-weight:var(--fw-normal,400)}
article p.claim{margin:1rem 0 0;color:var(--text);font-size:var(--fs-sm,.95rem);line-height:1.55}
article .bound{margin:1.1rem 0 0;padding:.85rem 1rem;border-left:2px solid color-mix(in srgb,var(--gray) 40%,transparent);
  background:color-mix(in srgb,var(--surface) 45%,transparent);border-radius:0 8px 8px 0}
article .bound p{margin:0 0 .5rem;font-size:var(--fs-xs,.82rem);line-height:1.5;color:var(--gray)}
article .bound p:last-child{margin-bottom:0}
@media (max-width:640px){article .ledger{grid-template-columns:1fr}article .curve .row{grid-template-columns:3.4rem 1fr}article .curve em{grid-column:1/-1;text-align:left}}

/* THE VAULT GRAPH: born as stars, settles into the map. Geometry in SVG, words in HTML spans over
   it; `.stage` binds the two so labels track the drawing in both modes. Placed LAST so it wins
   over the panel's `.chap .viz` reset, and scoped to `.chap` so its specificity matches hers. */
article .chap .graph{position:relative;padding:.6rem;cursor:zoom-in;outline:none}
article .chap .graph .stage{position:relative;width:100%;aspect-ratio:800/520}
article .chap .graph .stage svg{display:block;width:100%;height:100%}
article .chap .graph .labels{position:absolute;inset:0;pointer-events:none}
article .chap .graph .labels span{position:absolute;transform:translate(-50%,10px);font-size:var(--fs-xs,.72rem);color:var(--dark);white-space:nowrap;opacity:0;transition:opacity .7s ease;text-shadow:0 0 6px var(--light),0 0 2px var(--light);pointer-events:auto}
article .chap .graph.ready .labels span{opacity:1}
article .chap .graph .nodes .hub{cursor:pointer;transition:opacity .25s}
article .chap .graph .edges line{transition:opacity .25s,stroke .25s}
article .chap .graph figcaption{margin-top:.4rem}
article .chap .graph:focus-visible{box-shadow:0 0 0 2px var(--secondary)}
article .chap .graph.full{flex:1;min-width:0;margin:0;border:0;border-radius:0;padding:3vh 4vw;background:transparent;cursor:zoom-out;display:flex;flex-direction:column;align-items:center;justify-content:center}
article .chap .graph.full .stage{width:min(92vw,calc(84vh * 800 / 520))}
article .chap .graph.full .labels span{font-size:1rem}
article .chap .graph.full figcaption{text-align:center;margin-top:1rem;max-width:70ch}
</style>
