21 KiB
name, type, adversary, status, created, target, mandate
| name | type | adversary | status | created | target | mandate | ||
|---|---|---|---|---|---|---|---|---|
| Adversarial Review — ARCHITECTURE-SPINE.md (wiki-of-wikis-2026-08-14) | adversarial-review | independent | final | 2026-08-14 |
|
two mutually conformant units build incompatible systems |
Adversarial Review — Wiki of Wikis Architecture Spine
0. Auftrag & Methode
Dieser Review greift die Architektur grundsätzlich als Gegner an. Für jeden Finding wird ein Paar von Einheiten eine Ebene tiefer konstruiert (zwei Producer, zwei Consumer, Mensch vs. Agent), bei dem jede Einheit jede AD buchstäblich befolgt — und das Paar dennoch inkompatible Systeme baut.
Der Spine verspricht in AD-17 ausdrücklich Schutz vor Last-Writer-Wins. Dieser Review zeigt, dass der Schutz an mehreren Stellen konzeptionell verrutscht und durch neue oder verschärfte Regeln geschlossen werden muss. Alle Findings nennen die beteiligten ADs und die konkrete Close-Regel.
Adversarial Verdict: Der Spine beschreibt ein konsistentes Architektur-Layering, aber er pins keine der drei operativen Schnittstellen, an denen Producer und Producer bzw. Producer und Consumer aufeinandertreffen: (a) die Lease-/Koordinations-Semantik (AD-17), (b) die Concept-ID-Normalisierung (AD-7) und (c) die Claim-Granularität der Provenienz (AD-4/Q-1). Solange diese drei Unterspezifikationen bestehen, folgen zwei konforme Einheiten garantiert mindestens einmal in einer von diesen Nachweisen zu inkompatiblen Bundles.
Findings
F-1 [CRITICAL] — AD-17 definiert keinen Lease-Mechanismus; der Konflikt-Bewahrungsartefakt selbst (log.md) liegt außerhalb des Leases
Beteiligte ADs: AD-5, AD-6, AD-7, AD-14, AD-16, AD-17 (und deren Bind: NFR-7, FR-8, FFr-13)
Konstruiertes Paar:
- Einheit 1: Compiler-Run A (Claude-Adapter), Area
flowable/. Liest AD-17 und realisiert „Lease auf dem eigenen Workspace" als Lock-Datei.wofw/leases/flowable.lockaußerhalb vonwiki/. - Einheit 2: Compiler-Run B (Codex-Adapter) parallel, dieselbe Area. Realisiert „Lease"
als Branch-Name
lease/flowable. Auf einem zweiten Klon (FT-7 Portability erlaubt und fördert das).
Keine AD spezifiziert:
- was ein Lease ist (Lockdatei? Branchname? Registry-Eintrag?),
- wie Leases klon-übergreifend koordiniert werden (bei Local-First + Portability gibt es keinen gemeinsamen Koordinationszustand),
- wie man ein Lease atomar erwirbt und wie Stale-Leases erkannt werden,
- ob
log.md/index.mdan der Bundle-Wurzel innerhalb oder außerhalb eines area-skopierten Leases liegen.
Beide Einheiten mutieren wiki/flowable/timers.md mit unterschiedlichen Synthesen, committen
ihre Branches und führen nach main zusammen. Git auto-mergt getrennte Hunks textuell:
Die Datei enthält anschließend beide Synthesen ungeprüft nebeneinander — ein stiller
semantischer Merge. Genau das verbietet AD-16 („Konflikte explizit erhalten, nie
stillschweigend auflösen"), aber die Verletzung entsteht durch den Koordinationsmechanismus
selbst, nicht durch Regelfolgefehler einer Einheit. Jede Einheit hat jede AD eingehalten.
Zusätzlich, und schärfer: Der einzige Ort, der einen Konflikt bewahren soll (log.md, AD-16
und AD-17 Rule 4), liegt an der Bundle-Wurzel und damit außerhalb jedes area-skopierten
Leases. Zwei Producer, die beide einen Konflikt dokumentieren, schreiben beide nach
log.md kandidierend — on log.md itself herrscht Last-Writer-Wins. Der
Konflikt-Bewahrungsmechanismus ist damit selbst die Stelle, an der Arbeit still
überschrieben wird.
Close-Regeln (neu/verschärft):
- AD-17a (Lease-Vertrag): AD-17 muss definieren, was ein Lease ist und wie er erworben
wird — gegen einen eindeutigen Commit-Objektwert (Merge-Base-Disziplin) und über einen
einzigen, deterministischen Mechanismus (z. B. Branch-Prefix-Konvention
lease/<area>/<id>ergänzt um eine Lockdatei semantisch identisch realisiert in jedem Adapter; die Realisierung darf nicht pro Adapter frei wählbar sein). - AD-17b (Lease-Scope): Das Lease muss ausdrücklich
wiki/inklusivelog.md,index.mdund aller Wurzel-Dateien abdecken („Root-Scope"), sonst ist der Bewahrungsartefakt wehrlos. - AD-17c (Kein stiller Auto-Merge): Zwei Branches, die denselben Concept-Pfad modifiziert
haben, dürfen nicht per textuellem Git-Auto-Merge zusammengeführt werden. Die
Zusammenführung ist Compiler-vermittelt und durchläuft die AD-16-Klassifikation — mit
explizitem
log.md-Eintrag, falls die Inhalte nicht identisch sind. - AD-17d (Lease-Held darf nicht committen „vergessen"): Entweder Time-to-Live + Registrierung
des Leases im Clon-Wurzelzustand oder Regel, dass unveröffentlichte Leases nach
Run-Abbruch als stale gelten und
raw/(immutable, AD-3) die Wiederherstellungsbasis ist.
F-2 [CRITICAL] — AD-7 pinnt die Concept-ID nicht eindeutig: zwei Consumer/Producer rechnen denselben Baum auf zwei ID-Räume ab
Beteiligte ADs: AD-7, AD-8, AD-9, AD-14 (Renames als semantische Änderung), Bind FR-5/FR-6/FR-9–FR-12
Konstruiertes Paar:
- Einheit 1 (Produzent, z. B. Codex-Adapter): schreibt einen Link als
[timers](flowable/timers)— OKF-Stil, bundle-relativ, ohne.md, im Sinne der „Consistency Conventions — Concept identity: relativer OKF-Dateipfad ohne.md". - Einheit 2 (Produzent, z. B. Claude-Adapter): schreibt denselben Link als
[timers](flowable/timers.md)— „normale Markdown-Links" (AD-8) mit Dateiendung.
Beide Links sind in Markdown gültig. Ob sie dieselbe Concept-ID bezeichnen, hängt von einer Endungs-Normalisierung ab, die nirgends festgeschrieben ist:
- Endung:
timersvstimers.md— eine Einheit liest die ID mit, die andere ohne. index.md: AD-9 zeigtspring/index.md. Ist dessen Concept-IDspring,spring/indexoderspring/? Nicht beantwortet. Link-Traversierung bricht je nach Default verschieden.- Case & Dateisystem:
Timers.mdvstimers.mdauf einem case-sensitiven System sind zwei Concept-IDs für dasselbe fachliche Wissen. - Area-Zuordnung: AD-7 definiert die ID als den Pfad, aber nicht, wohin ein fachliches
Thema gehört. Producer A legt „Timers"-Wissen unter
flowable/timersan, Producer B unterspring/timers. Beide erzeugen „eigenständige Konzeptwesen" (FR-5) — beide AD-konform, ein Duplikat. AD-5 schützt das vorhandene Konzept sogar („nur betroffene Concepts verändern"), verschärft also die Vervielfachung statt sie zu verhindern. - Rename-Kaskade: AD-7 erklärt Renames zu semantischen Änderungen — damit ist ein Umbenennen erlaubt und erforderlich, um die ID zu ändern, aber jede andere Einheit, die die alte ID gecacht hat (bewusst oder im Prompt-Kontext), aktualisiert sich nicht und referenziert ins Leere.
Beide Einheiten befolgen AD-7 buchstäblich und verwalten über denselben Baum zwei inkompatible ID-Räume.
Close-Regeln:
- AD-7a (ID-Normalisierung): genau eine kanonische Form festschreiben, z. B.
Kleinbuchstaben, Pfad relativ zur Bundleroot, ohne Endung,index.md→ Area-Pfad, keine Trailendepunkte. Mit Beispieltabelle (flowable/timers,spring,spring/testing). - AD-7b (Link-Form): AD-8 muss die eine erlaubte Linkform festlegen (bundle-relativ mit oder ohne Endung — eine davon, nicht beides).
- AD-7c (Area-Zuordnung): eine Zuordnungsregel für „wohin gehört ein Thema" ergänzen
(Relevanzbestimmung ist AD-17-Anhang bereits auf textuelle Mittel festgelegt; dieselbe
textuelle Determiniertheit muss auch die Ziel-Area determinieren, z. B. via
bestehendem
index.md-Link oder Toplevel-Kollision-Halten an bestehenden Pfaden). - AD-7d (Rename-Verträglichkeit): Rename = neues Objekt + expliziter
Redirect-/Deprecation-Eintrag im
log.md(oderreferences/-Konvention von OKF), damit alte IDs maschinell ausfindig gemacht werden können.
F-3 [HIGH] — AD-4/Q-1 verankern Provenienz nur auf Concept-Ebene; ein Consumer kann belegte von kontextuellen Aussagen nicht mechanisch unterscheiden
Beteiligte ADs: AD-4 (ASSUMPTION), Q-1, AD-13, Bind FR-3/FR-7/FR-8/NFR-7, FT-5, SM-3
Konstruiertes Paar:
- Einheit 1 (Compiler): erzeugt ein synthetisiertes Concept (Synthese aus A und B gemäß
AD-4/FR-7). Im Frontmatter stehen
sources:mit den mitgeführten Source-Verweisen (AD-4: „relevante Source-Provenienz in das resultierende Concept übernehmen"). Der Body mischt drei belegte Claims mit zwei reinen Inferenz-Umformulierungen. Der Compiler erfüllt damit FT-5 und SM-3 buchstäblich („ein erzeugtes Concept kann auf Sources zurückgeführt werden" — Concept-Ebene). - Einheit 3 (strenger Consumer, auch ein LLM-Agent): liest dasselbe Bundle und kann pro
Satz keine Grounding-Granularität mechanisch erkennen. Der Frontmatter-
sources-Block gilt für das ganze Dokument; Inference-Formulierungen sehen identisch „belegt" aus.
Beide Einheiten sind AD-konform. Die Belegstärke der konsumierten Aussagen divergiert jedoch: Ein strenger Consumer verwirft Inferenzen als unbelegt, ein laxer Consumer behandelt sie als evidential. Q-1 beantwortet nur, ob ein generiertes Concept ein anderes generiertes Concept als alleinige Provenienz verwenden darf („No") — es installiert damit keinerlei maschinell prüfbare Regel auf Aussage- oder Blockebene. NFR-7 („Graceful Partial Knowledge", Unsicherheit explizit) wird auf Concept-Ebene deklariert, aber nie in einer satzgranularen Struktur erzwingbar.
Close-Regeln:
- AD-4a (Claim-Granularität): Provenienz muss pro behauptender Einheit (Block/Absatz)
referenzierbar sein, nicht nur pro Concept. Mindestform: jede belegte Aussage trägt einen
Inline-Verweis auf
raw/-Evidenz; Kontext-/Synthese-Umformulierungen erhalten explizit einen Kontext-Marker („aus übernommen, nicht selbst belegt"). - AD-4b (Sources-Ziel):
sources-Einträge dürfen aufraw/oder auf extern referenzierte Evidenz verweisen, nie auf einenwiki/...-Concept-Pfad (Wiki-Links bleiben AD-8; Provenienz und Beziehung werden formatseitig disambiguiert). - AD-4c (Q-1 verbindlich): die Annahme „ein generiertes Concept darf nie ein anderes
generiertes Concept als einzige Provenienz führen" wird von einer ASSUMPTION in eine
Regel überführt und in die (geplante)
schema/wiki-compiler.md-Validierung aufgenommen.
F-4 [HIGH] — AD-16 vs. AD-17: die Klassifikation „CONTRADICTING vs. CORRECTING" entscheidet, wer das Auflösungs-Artefakt besitzt — und ist nicht arbitrierbar
Beteiligte ADs: AD-16, AD-17 Rule 2/4, AD-15, AD-5, FR-8/FR-13, NFR-7
Konstruiertes Paar:
- Einheit 1: klassifiziert eine neue Quelle als CONTRADICTING → lässt den Concept-Bereich
unangetastet, dokumentiert den Disagreement in
log.md(AD-16 wörtlich). - Einheit 2: klassifiziert dieselbe Quelle als CORRECTING → revidiert das Concept (AD-16 erlaubt „CORRECTING → revise existing knowledge").
Beide Handlungen sind AD-16-konform. Die Kategorien sind „konzeptionell" (AD-16 verzichtet explizit auf eine interne Datenstruktur und damit auch auf ein deterministisches Entscheidungskriterium). Die Adversarität liegt darin, dass die Klassifikation besitzt, was passiert: CONTRADICTING → Bewahrung, CORRECTING → Revision. Wer das Auflösungs-Artefakt (Concept oder log.md) besitzt, hängt damit an der Willkür derselben Einheiten, die auch die Schiedsrichter sein sollen. Das Lease- und Konvergenz-Modell (AD-17 Rule 4) kann hier nicht arbitrieren, weil „produktiver Nutzen/Beitrag" als Auflösungsprinzip aufgerufen wird, bevor überhaupt eine gemeinsame Bestimmung darüber existiert, ob ein Beitrag überhaupt anzurühren ist. Ergebnis: Ein Paar aus einem bewahrenden und einem revidierenden Producer ist nach allen ADs legal — und eine der beiden feindlichen Bundles stammt aus einer AD-16- konformen Einheit, deren Arbeit von der anderen Einheit als „wirksam ersetzt" gilt.
Close-Regeln:
- AD-16a (Default-Vorspann): deterministische Vorgabe, z. B. „bei Widerspruch gilt Standard-Bewahrung (CONTRADICTING), sofern die neue Quelle nicht mit expliziter Evidenz die alte strikt ersetzt; andernfalls CORRECTING mit dokumentierter Ersetzungslogik".
- AD-16b (Klassifikations-Pflicht): die Klassifikation inkl. Begründung muss im selben Artefakt wie die Mutation landen (log.md-Eintrag angebunden an den mutierten Concept-Pfad), damit die Auflösungs-Entscheidung reproduzierbar und damit die Ownership auditierbar ist.
F-5 [MEDIUM] — AD-17 Rule 2 schützt nur den committed Input; der dirty Working Tree eines Producers wird von anderer Einheit still zerstört (AD-15/FR-13-Loch)
Beteiligte ADs: AD-17 Rule 2, AD-6 (Mutation), AD-5, AD-15, Q-2, FR-13, AD-14
Konstruiertes Paar:
- Einheit 1 (Mensch): bearbeitet direkt ein Concept (
wiki/flowable/timers.md), nach AD-15/Q-2 ausdrücklich erlaubt, noch nicht committet (dirty working tree). - Einheit 2 (Compiler, AD-10-agent-unabhängig): liest gemäß AD-17 Rule 2 nur committed Inhalte → die menschliche Änderung ist de jure kein Input. Nach AD-6 Mutation läuft der Adapter in die Arbeitskopie, und der Adapter-Mechanismus (checkout/rebase/clean) trifft auf die dirty Datei.
Die Spannung: Rule 2 verhindert, dass uncommittete Inhalte „Input" werden — sie verhindert nicht, dass der Mechanismus der anderen Einheit (Rebase/Checkout/Clean im eigenen Adapter-Vokabular) die uncommittete Arbeitskopie der Einheit 1 genauso still entfernt. Ein Rebase/Checkout in Run B wirft die uncommittete Datei von Einheit 1 ohne Git-Konflikt und ohne log.md-Eintrag weg. Damit wird FR-13 („menschliche Inhalte nicht allein wegen fehlender Herkunft entfernen") und AD-15 verletzt, ohne dass Einheit 2 irgendeine AD gebrochen hat.
Close-Regeln:
- AD-17e (Dirty-Tree-Schutz): vor jeder Mutation muss der Producer die Arbeitskopie für
den zu mutierenden Bereich prüfen; nicht-committete, fremde Änderungen sind zu schützen
(stash/divert in eine geschützte Scratch-Zone), und jeder verdrängte uncommittete Inhalt ist
in
log.mdzu dokumentieren. - AD-14/AD-17f (Commit-Grenze als einzige Mutationsgrenze): die Mutation darf nur auf Verzeichnis/Commit-Ebene wirken, die eine fremde dirty Arbeit nie als Side-Effekt von checkout/rebase löscht.
F-6 [MEDIUM] — AD-1/FR-9 binden an „OKF 0.2", aber der Spine bindet weder das Feld-Subset noch den Validator; Spine-Artefakte (log.md) sind nicht OKF-tippbar
Beteiligte ADs: AD-1, FR-9, AD-16 (log.md), AD-9 (index.md), AD-10, NFR-5, FT-1, Consistency-Conventions „Errors: kein erfolgreicher Run bei ungültigem Bundle"
Konstruiertes Paar:
- Einheit 1 (Claude-Adapter): emittiert
sources: [raw/foo.md, raw/bar.md](Liste von Strings). - Einheit 2 (Codex-Adapter): emittiert OKF-Map-/Objekt-Form bzw. deklariert
okf_version: "0.2"nur in der Bundleroot-index.md(PRD § 13 nennt beides „optional").
Beide behaupten OKF-0.2-Konformität. Es gibt keinen Validator (siehe Consistency
Conventions: „kein erfolgreicher Run bei ungültigem Bundle" — aber ungültig worum?). Der
Spine verweist auf schema/wiki-compiler.md, aber dieser Ordner ist im Structural Seed nur
Dekoration und wird von keiner AD als verbindliches Artefakt gebunden. AD-10 verbietet
Adaptern abweichende Knowledge-Semantik — ohne objektives Validitätsprädikat ist „abweichend"
nicht entscheidbar.
Zweitens sind Spine-eigene Artefakte nicht OKF-getippt:
log.md(AD-16): eine nicht gesperrte.md-Datei. OKF verlangt, dass nicht gesperrte Bundledateien eintypetragen.log.mdhat keines — entweder ist das Bundle OKF-inkonform, oder log.md ist ein undefinierter Concept-Typ, sodass zwei Consumer uneins sind, ob es ein Concept ist.index.mdals Discovery-Ebene (AD-9): OKF lässt Bundleroot-index.mdmitokf_versionoptional zu; AD-9 macht sie faktisch zur Pflicht-Discovery — das ist eine Spine-Konvention über OKF hinaus, deren Consumer-Verträglichkeit ungeprüft ist.
Damit bleibt FT-1/NFR-5 („keine Runtime", „Read ohne Prozess") nur oberflächlich erhalten: Nicht-Runtime gilt für das Lesen von Markdown; das Verstehen der Spine-Konventionen (log.md-Semantik, Lease-Marker, index-Discovery) setzt Interpretationswissen voraus, das zwei Consumer unterschiedlich ausführen. Lesbarkeit ≠ Konformität.
Close-Regeln:
- AD-1a (Schema-Bindung):
schema/wiki-compiler.mdwird als verbindlich gebunden: Es pinnt (i) das exakte OKF-0.2-Feld-Subset (sources-Form als Liste vs. Map, generiert/verified, status), (ii)log.mdals dokumentiertes Artefakt mit eigenemtype, (iii) die index-Discovery-Regel, (iv) die OKF-Validitätsprädikate. - AD-1b (Validator-Regel): eine Regel, wie Konformität geprüft wird (auch wenn der Validator selbst bis D-3 als Agent-Instruktion lebt): „kein erfolgreicher Run bei OKF-invalidem Bundle laut schema/wiki-compiler.md".
- NFR-5/AD-1c (FT-1 mechanisch): FT-1 wird als Regel formuliert: „Entferne alle Runtime-Komponenten; der Reader benötigt nur Markdown + eine statisch abgelegte Konventions-Kurzfassung, um Anzahl, Bedeutung und Grounding aller Artefakte (incl. log.md) eindeutig zu bestimmen."
F-7 [MEDIUM] — AD-17 Rule 4: „produktiver Nutzen als Auflösungs-Prinzip" ist nicht entscheidbar; zwei Merge-Autoritäten lösen denselben Konflikt gegensätzlich auf
Beteiligte ADs: AD-17 Rule 4, AD-16, AD-14, PRD OQ-4 (Konflikt-Auflösung)
Konstruiertes Paar:
- Einheit 1 (Merge-Autorität / Maintainer A): führt den Konflikt in
flowable/timers.mdzugunsten von Quelle A auf, dokumentiert die Ablehnung von Quelle B inlog.md. - Einheit 2 (Merge-Autorität / Maintainer B): führt denselben Konflikt zugunsten von
Quelle B auf, dokumentiert die Ablehnung von Quelle A in
log.md.
Beide sind AD-16/AD-17-konform (Konflikt explizit erhalten, offengelegt). Das Prinzip „produktiver Nutzen/Beitrag zählt als Auflösungs-Prinzip" ist aber weder mechanisch noch authoritativ bestimmt: Es sagt nichts darüber, wer entscheidet und anhand welcher beobachtbaren Kriterien. Zwei voneinander unabhängige Merge-Läufe über demselben Git-Zustand produzieren unterschiedliche Bundles, beide konform. Damit ist die Reproduzierbarkeit des Bundles (eine Kernanforderung aus FT-7 / SM-1) nicht gegeben — derselbe Git-Zustand kann zu zwei kanonisch gültigen, aber inkompatiblen Bundles führen.
Close-Regeln:
- AD-17g (Auflösungs-Autorität): festlegen, wer eine AD-16-Kollision auflöst (MVP: der Compiler-Run, der das Lease hält, nach AD-16a-Default; menschliche Eskalation nur bei Nicht-Entscheidbarkeit), und dass die Auflösung an denselben Commit/dieselbe Log-Dokumentation gebunden ist (Kryptominimal: Commit-Hash + Klassifikation im Eintrag).
- AD-17h (Determinismus-Kontrakt): über demselben Git-Zustand und derselben Input-Menge müssen zwei unabhängige Läufe denselben Bundle-Zustand erzeugen (als expliziter Fitness-Test analog FT-6), andernfalls ist die AD-16-Klassifikation nicht deterministisch genug.
3. Querschnitt-Lücken und wo Autorität fehlt
Die Findings reihen sich in ein Muster: der Spine beschreibt die Data-Ebene präzise und delegiert die Koordination an „den ausführenden Adapter", ohne dem Adapter einen deterministischen Vertrag zu geben.
- D-3 / D-7 / D-1 bleiben offen, während die Konformität des Bundles (F-6) davon abhängt, dass der Validator irgendwann existiert. Solange der Validator liegt, ist „OKF-konform" eine Behauptung, kein Prädikat.
- PRD OQ-4 (welche Konflikte darf der Compiler selbst auflösen) ist im Spine als AD-17 Rule 4 nur scheinbar beantwortet — sie beantwortet das woran, nicht das wer (F-7).
- Q-1 im Spine („Current assumption: No") hat bisher keine Regelwirkung (F-3).
- Q-2 (dürfen Menschen generierte Concepts direkt editieren?) ist für die Dirty-Tree-Kollision (F-5) relevant, da der Spine mit „verhindert nicht menschengemachte Edits" eine Koexistenz erlaubt, ohne die Koexistenz zu koordinieren.
4. Empfohlener Regel-Katalog (neu/verschärft)
| # | Regel | Ersetzt/ergänzt | Schließt |
|---|---|---|---|
| R1 | Lease-Vertrag (Mechanismus, Commit-Bindung, stalo) | AD-17a–17d | F-1 |
| R2 | Root-Scope des Leases inkl. log.md/index.md |
AD-17b | F-1 |
| R3 | Kein textueller Git-Auto-Merge über identischen Concept-Pfad; Merge nur über AD-16-Klassifikation | AD-17c | F-1 |
| R4 | Eine kanonische Concept-ID-Normalisierungsform + eine erlaubte Linkform | AD-7a/7b | F-2 |
| R5 | Deterministische Area-Zuordnung für neue Concepts | AD-7c | F-2 |
| R6 | Rename als neues Objekt + Redirect/Deprecation in log.md | AD-7d | F-2 |
| R7 | Claim-granulare Provenienz; sources nie auf wiki/-Pfade; Q-1 → Regel |
AD-4a–4c | F-3 |
| R8 | AD-16-Generalvorschrift: Bewahrung als Default; Klassifikation publik, an Mutation gebunden | AD-16a/16b | F-4, F-7 |
| R9 | Dirty-Tree-Schutz; Commit-Grenze als Mutationsgrenze; Verdrängung dokumentieren | AD-17e/17f | F-5 |
| R10 | schema/wiki-compiler.md verbindlich; log.md-tipbar; FT-1 mechanisch |
AD-1a–1c | F-6 |
| R11 | Auflösungs-Autorität + Determinismus-Contract (gleicher Zustand → gleiches Bundle) | AD-17g/17h | F-7 |
Ende des Adversarial Reviews.