Files
wow20/_bmad-output/implementation-artifacts/spec-2-1-concepts-aus-source-material-erzeugen-okf-konform.md
T
Michael TamseandClaude bb32acdf3f feat: Story 2.1 auf done setzen (Human-Review-Freigabe) + Re-Run-Patches Rev 1.4
Story 2.1 «Concepts aus Source Material erzeugen (OKF-Konform)» ist done:
- spec-2-1: status review -> done + Change-Log-Eintrag
- sprint-status.yaml: Story 2.1 -> done, last_updated 08-17 07:35
- wiki/log.md: done-Eintrag (Human-Review-Freigabe)
- open bleibt: Action-Item code-review-2-1-item-2 (Validator-Rev 9, kein Blocker)

Umsetzung der Unabhängig-Re-Run-Patches (4 Layer, 15/17):
- schema/compiler.md -> Revision 1.4 (Pruefgrundlage Rev 8, §6.6-Labels §4.5/§4.2,
  §3.2 Kollision-Hold-Run-Fortsetzung, §5.3/§6.3 Rollback-Sequenz, Sprachkorrekturen)
- wiki/index.md Baumdiagramm um Root-Concepts-Ebene
- deferred-work Dedupe + n=21, review-input-dryrun Aufloesung, epic-2-context
  AD-4c tautologisch, validator-revision-8 status done/DoD, spec Verification

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-17 07:37:55 +02:00

280 lines
43 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 'Concepts aus Source Material erzeugen (OKF-Konform) (Story 2.1)'
type: 'feature'
created: '2026-08-16'
status: 'done'
review_loop_iteration: 2
baseline_commit: a67ba659108006a54eb54b84592d1dba046af96e
context:
- _bmad-output/implementation-artifacts/epic-2-context.md
---
<frozen-after-approval reason="human-owned intent — do not modify unless human renegotiates">
## Intent
**Problem:** Der Workspace kann Sources unter `raw/` (Story 1.2) halten und deren OKF-Konformität validieren (Story 1.4), aber es existiert noch keine deterministische, agentische Anweisung, die aus diesen Sources **neue, eigenständige OKF-0.2-Concepts** erzeugt (FR-5, FR-9) — der erste Compile-Run steht aus.
**Approach:** Eine agent-unabhängige Compiler-Instruktion `schema/compiler.md` schaffen, die die Concept-Erzeugung als deterministischen, textuell nachvollziehbaren Agenten-Prozess beschreibt (Interpret → Reconcile → Synthesize → Mutation, AD-5/AD-7), und sie in einem **ersten Demonstrationslauf** gegen die drei vorhandenen `raw/`-Sources anwenden — Ergebnis: konkrete, OKF-validierbare Root-Concepts + Verlinkung in `wiki/index.md`.
## Boundaries & Constraints
**Always:**
- `schema/compiler.md` ist der **einzige Ort** der Erzeugungs-Instruktion; er ist rein textuell (kein ausführbarer Code, D-3) und agent-unabhängig (AD-10), liegt außerhalb des Bundles neben Vertrag und Validator (AD-1).
- Concepts MÜSSEN OKF-0.2-konform sein: Markdown mit YAML-Frontmatter, `type` als einziges Pflichtfeld und nicht leer (§3.1, Stolperstein Punkt 1); Feldsubset strikt nach §3 (`type`, `sources`, `generated`, `verified`, `status`, `stale_after`), keine unautorisierten Keys (Stolperstein Punkt 6). `okf_version`/`type: bundle` NIE in Concepts (Punkt 9).
- Trust-Metadaten v1 (A0-20, AD-15): maschinell erzeugt → `generated: { by: wow-compiler/0.1.0, at: <ISO-8601-Datetime> }`, `verified` ungesetzt. `at` ist VOLLES ISO-8601-Datetime (`YYYY-MM-DDTHH:MM:SS` mit `Z`/`±HHMM`/`±HH:MM`), nie reines Datum (Validator Revision ≥3, Punkt 14).
- `sources` zeigt ausschließlich auf `/`-getrennte, relative Workspace-Pfade unter `raw/` (§3.3, AD-4b); jede referenzierte `raw/`-Datei MUSS zum Validierungszeitpunkt als Datei existieren (EC-1) — nie auf `wiki/`-Pfade (Punkt 3), kein `..`/URL/absolut/Backslash (Punkt 4).
- Concepts sind eigenständige Wissenseinheiten (FR-5): nicht 1:1 pro Abschnitt, nicht bloße Kopie/Zusammenfassung des Quelldokuments (FR-2); mehrere Source-Abschnitte können in verschiedene Concepts fließen. V1-Instruktion erzeugt Concepts **auf Root-Ebene** unter `wiki/` (Story 2.4 regelt Area-Zuordnung später); neue Concepts MÜSSEN in `wiki/index.md` verlinkt werden (Punkt 11 / Index-Regel §6).
- Der Demonstrationslauf mutiert ausschließlich `wiki/` (Concepts + `index.md` + zulässiger `log.md`-Eintrag); `raw/` bleibt unangetastet (AD-3); `schema/wiki-compiler.md` und `schema/validator.md` bleiben unverändert (autorisiert).
- `log.md`-Eintrag (optional, Vertrag §5-konform): datumsgruppiert, neueste zuerst; dokumentiert die angelegten Concepts inkl. Quell-Pfad.
- Instruktion und Konzepte in Deutsch.
**Ask First:**
- Eine bewusste Abweichung vom Feldsubset oder eine neue Invaliditätsart (Verschärfung des §7-Katalogs) — alles, was den autorisierten Vertrag ändern würde, ist explizit menschlich zu genehmigen.
- Die Einführung eines Standalone-Programms (Python/TS/etc.) als Compiler — D-3 widerspricht; nur mit menschlicher Zustimmung (Rückkehrpunkt dokumentiert).
- Die Anlage eines `wiki/<area>/`-Verzeichnisses in dieser Story (Area-Zuordnung ist Story 2.4) — nicht ohne menschliche Genehmigung.
**Never:**
- Kein eigener OKF-Dialekt, keine Änderung an `schema/wiki-compiler.md`/`schema/validator.md` (autorisiert, Story 1.3/1.4), keine Änderung an `raw/` (immutable, AD-3).
- Kein Standalone-/Executable-Compiler (D-3); keine LLM-Runtime-Implementierung im Bundle; kein MCP.
- Keine claim-granulare Inline-Provenienz-Ausarbeitung (Story 2.2), keine deterministische Area-Zuordnung/Hierarchie (Story 2.4), keine vollständige Discovery-Logik über `index.md`/Progressive Discovery (Story 2.5) — diese Stories bleiben unangetastet, dürfen aber nicht behindert werden.
- Keine Löschung/Umbenennung bestehender Concepts oder `log.md`-Einträge; keine stillschweigende Verlinkung außerhalb `wiki/index.md`.
- Kein LLM-Urteil in der Instruktion als alleinige Entscheidungsbasis: Wo Relevanz/Klassifikation nötig ist, wird sie textual-deterministisch begründet (AD-13).
## I/O & Edge-Case Matrix
| Scenario | Input / State | Expected Output / Behavior | Error Handling |
|----------|--------------|---------------------------|----------------|
| HAPPY_PATH | 3 neue Sources unter `raw/` (prd, epics, architecture-spine), leeres `wiki/` (nur `index.md`, `log.md`) | Compiler erzeugt 3 dem Source-Inhalt entsprechende, eigenständige Root-Concepts (`wiki/<slug>.md`) mit `type`, `sources`→existing `raw/`-Pfade, `generated {by, at}` ohne `verified`; verlinkt alle 3 in `wiki/index.md`; Validator-Lauf ergibt SUCCESS | N/A |
| CONCEPT_OHNE_TYPE | Compiler legt Concept ohne/leeres `type` an | Concept ist strukturell invalide (Punkt 1) | Instruktion verlangt zwingend `type`; Run bricht mit textueller Fehlerursache ab, `wiki/`-Änderungen bis dahin rückmelden |
| FEHLENDE_RAW | `sources`-`resource` verweist auf nicht existente `raw/`-Datei | Fachlich invalide (EC-1) → Run-FAIL | Instruktion: nur real existierende `raw/`-Dateien als `resource`; Verweis auf strukturierte Prüfung |
| LEERE_QUELLE / KEINE_WISSENSEINHEITEN | Source enthält keine klar abgegrenzten Wissenseinheiten (z.B. nur README/Artefakt wie `raw/README.md`) | Wird NICHT zu einem Concept verdichtet; ggf. als Hinweis in `log.md` | Artefakt-Dateien (`source.md`, `README.md`) sind keine Evidenz (raw/README.md) → ausgeschlossen |
| VERALTETE_SOURCE | `source.md` verweist auf Commit, der nicht mehr existiert | Provenienz-Hinweis bleibt im Sidecar; `raw/`-Datei selbst ist Evidenz | Fehlende Commit-Auflösbarkeit blockiert die Concept-Erzeugung nicht (Sidecar ist Artefakt, nicht Input) |
| KEIN_CONTENT | Concept würde nur Source-Copy sein | Kein Concept anlegen; Wissen ist nicht neu → nichts erzeugen | FR-2-konform: Kopieren/Zusammenfassen ist keine Wissensintegration |
</frozen-after-approval>
## Code Map
- `schema/compiler.md`**Zieldatei (neu)**: deterministische Compiler-Instruktion zur Concept-Erzeugung; Kern des Reviews.
- `schema/wiki-compiler.md`**Normative Grundlage (read-only, Story 1.3)**: §1 Geltungsbereich, §2 Bundleroot, §3.13.7 Feldsubset & Formate (inkl. §3.3 `sources`/`resource`, §3.4 `generated`, §3.5 `verified`, §3.6 `status`, §3.7 `stale_after`), §5 `log.md`, §6 Index-Regel/Prädikate, §7 abschließende 14-Punkte-Liste, §8 Normreferenzen.
- `schema/validator.md`**Pflicht-Referenz (read-only, Story 1.4)**: §3.2 Voraussetzungsprüfungen V-1/V-2; §4.1 kanonische Key-Reihenfolge; §4.3 ISO-8601-Normalform (`at` voll, keine reine Datumsangabe); §6 fachliche Prüfungen (EC-1 Existenz); §6.2 Punkt-4-vor-3-Priorität; Punkt-11-Index-Check (Root-Concepts → Bundleroot `wiki/index.md`).
- `wiki/index.md`**Zieldatei (mutiert im Demonstrationslauf)**: Bundleroot (Frontmatter exklusiv `type: bundle`/`okf_version: "0.2"`); nimmt die Root-Concept-Links auf (Punkt 11); kein eigenes Frontmatter-Feld anfassen.
- `wiki/log.md`**Zieldatei (append-only)**: zulässiger Protokolleintrag (Vertrag §5) über angelegte Concepts; kein Frontmatter.
- `raw/prd/prd-wow20-2026-08-14.md`, `raw/epics/epics-2026-08-14.md`, `raw/architecture-spine/architecture-spine-2026-08-14.md`**Evidenz (read-only, Story 1.2)**: Demonstrations-Sources; `resource`-Ziele der neuen Concepts.
- `raw/README.md`, `raw/*/source.md` — Artefakt-/Grenzdateien (keine Evidenz); nicht als Concepts konsumierbar.
- `adapters/README.md`, `adapters/claude/README.md` — Adapter-Kontext (read-only, AD-10); Story 5.3 Zuständigkeit, kein Ort für Erzeugungslogik.
- `_bmad-output/planning-artifacts/architecture/architecture-wow20-2026-08-14/ARCHITECTURE-SPINE.md` — AD-5 (inkrementell, Interpret→Reconcile→Synthesize→Update), AD-7-Reihe (Identität/Verlinkung/Areas: Story 2.3/2.4), AD-17 (Lease/branch, nur committete Inputs), D-3 (kein Standalone-Compiler).
- `_bmad-output/implementation-artifacts/epic-2-context.md` — primärer Planungskontext (read-only).
## Tasks & Acceptance
**Execution:**
- [x] `schema/compiler.md` — Compiler-Instruktion anlegen: Zweck & Aufruf (Agent führt Schritte deterministisch aus), Eingabe (committete `raw/`-Evidenz, AD-17) und Ausgabe (OKF-validierbare Concepts), der logische Fluss Interpret→Reconcile→Synthesize→Mutation (AD-5), die Erzeugungs-/Auswahlregeln (Wissenseinheiten statt 1:1-Abschnitte, FR-5; keine Kopie, FR-2; artefakt-Evidenz-Ausschluss), die Pflicht-Frontmatter-Vorgabe für neue Concepts (`type` gesetzt; §3-Subset; `generated { by: wow-compiler/<version>, at: volles ISO-8601 }` ohne `verified`, A0-20; canonische Key-Reihenfolge §4.1; `sources`→existierende `raw/`-Pfade, EC-1), die Verlinkungs-Pflicht (neue Root-Concepts in `wiki/index.md` verlinken, Punkt 11/§6), Dokumentationspflicht (`log.md`, Vertrag §5) und die Selbstbegrenzung (keine Area-Anlage [Story 2.4], keine claim-granulare Provenienz-Ausarbeitung [Story 2.2], kein Standalone-Code, keine OKF-Erweiterung [D-3, AD-1a]) — FR-5, FR-9, NFR-2/3/4.
- [x] `schema/compiler.md` — Determinismus-/Selbsttest-Norm: jede Erzeugungsentscheidung textual-deterministisch begründbar (AD-13); eine Nachprüf-Sektion, die ein erzeugtes Concept gegen den Validator abprüfbar macht (vollständige §3-Subset-Konformität, `at`-Normalform, `sources`-Existenz) — AD-17h-konform, ohne LLM-Doppelurteil (der Validator bleibt die mechanische Prüfung).
- [x] `schema/compiler.md` — Positiv-/Negativ-Beispiele (Referenztabellen): je Regel ein Beispiel-Concept (ideal-konform vs. verletzte Regel) — AD-17h/Verifikations-Kultur aus Story 1.4 (Verifikations-Beleg).
- [x] Demonstrationslauf (Agent führt Instruktion aus): 3 eigenständige Root-Concepts aus den 3 `raw/`-Evidenzdateien erzeugen (je `wiki/<slug>.md`: `type`, `sources` mit existierenden `raw/`-Pfaden, `generated {by, at}` ohne `verified`, inhaltlich eigenständig kuratiert), alle in `wiki/index.md` verlinken, `wiki/log.md`-Eintrag ergänzen.
- [x] Validator-Lauf gegen das mutierte Bundle: erzeugte Concepts + `index.md` + `log.md` MÜSSEN SUCCESS liefern (Punkt 11 inklusive: Root-Concept links in Bundleroot); Ergebnis im Spezifikations-Verification dokumentieren.
- [x] `_bmad-output/implementation-artifacts/sprint-status.yaml` — Story 2.1 von `backlog` auf `in-progress` setzen (nach Start der Implementierung).
**Acceptance Criteria:**
- Given eine neue Source mit mehreren Abschnitten, when ein Compilation Run sie verarbeitet, then erzeugt der Compiler eigenständige Concepts gemäß den erkannten Wissenseinheiten — nicht 1:1 pro Abschnitt, nicht an die Source-Struktur gebunden (FR-5).
- Given die Concept-Erzeugung, when ein Concept geschrieben wird, then ist es OKF-0.2-konform: Markdown mit YAML-Frontmatter, `type` als verpflichtendes, nicht leeres Feld; vollständiges §3-Subset ohne unautorisierte Keys (AD-1a, FR-9).
- Given ein erzeugtes Concept, when dessen V1-Trust-Metadaten gesetzt werden, then sind sie `generated: { by, at }` (volles ISO-8601) ohne `verified` (A0-20, AD-15).
- Given der Demonstrationslauf, when der Validator danach ausgeführt wird, then ist das Bundle mit den neuen Root-Concepts + `index.md`-Verlinkung + `log.md`-Eintrag vollständig SUCCESS (insbesondere Punkt 1, 6, 11, 12, 14).
- Given `sources`-Referenzen, when sie dokumentiert werden, then lösen sie ausschließlich auf real existierende `raw/`-Dateien auf — nie auf `wiki/`-Pfade (AD-4b, EC-1).
- Given ein erzeugtes Concept, when es inhaltlich eine bloße Kopie/Zusammenfassung der Quelle wäre, then erzeugt der Compiler es nicht (FR-2: Kopieren ist keine Wissensintegration).
- Given ein neues Concept auf Root-Ebene, when es angelegt wird, then wird es in `wiki/index.md` verlinkt (Punkt 11/§6), ohne Area-Verzeichnis anzulegen (Story 2.4).
- Given die Instruktion, when sie ausgeführt wird, then ist sie eine eigenständige, deterministische, agent-unabhängige Anweisung (D-3, AD-17h) — kein Standalone-Programm.
### Review Findings (bmad-code-review, 2026-08-16)
**patch:**
- [x] [Review][Patch] `schema/compiler.md` §1-Überschrift ist Englisch („Input (what the compiler consumes)") — Verstoß gegen eigene Always-Regel „Instruktion … in Deutsch"; fix: `## 1. Input (was der Compiler konsumiert)` [schema/compiler.md:23] — **erledigt, Rev 1.3**
- [x] [Review][Patch] `schema/compiler.md` enthält „Revision 6"-Referenz auf die Prüfgrundlage, während der Commit `validator.md` Rev 7 liefert — Selbstwiderspruch des Instruktions-Selbstbilds; fix: Revisionszahl angleichen (bzw. bei Rev-7-Rückbau konsistent „Revision 6" lassen) [schema/compiler.md:5, schema/compiler.md:127] — **erledigt, auf Revision 7 angeglichen, Rev 1.3**
- [x] [Review][Patch] `schema/compiler.md` §6.6-Referenztabelle enthält eine irreführende Zeile: canonical-Key-Reihenfolge wird als „✗"-Abweichung gelistet, aber als „kein FAIL, aber nicht erzeugt" beschrieben und das Label „§6.4" verweist auf eine reine Pfad-Regel (Punkt 4); fix: Zeile aus der ✗-Tabelle herausnehmen (kein Validator-FAIL) bzw. Label auf §4.4 korrigieren [schema/compiler.md:102] — **erledigt: Zeile auf reine ✓-Vorgabe, Label auf §4.2, Rev 1.3**
- [x] [Review][Patch] `schema/compiler.md` §1.2 vs. §1.4 widersprechen sich: „jede Datei unter `raw/` ist Evidenz" (extensiv) vs. „Artefakt-/Grenzdateien (`raw/README.md`, `raw/**/source.md`) sind KEIN Input" (restriktiv) — neue normative Regel, die so weder im Vertrag noch im Spine noch im Validator steht; fix: in §1.4 die nicht-mechanisch prüfbare Sonderregel als dokumentarische Konvention (nicht als Input-Verdikt) kennzeichnen; alternativ im Change Log als Klarstellung nachführen — **erledigt: §1.2 präzisiert, §1.4 als dokumentarische Konvention gekennzeichnet, Rev 1.3**
- [x] [Review][Patch] `wiki/log.md`-Einträge weichen vom Vertrags-§5-Beispielformat ab (freie Prosa statt „`- neu:` … angelegt (sources: …)"); keine Maschine prüft das, aber der dokumentierte Doku-Standard wird nicht eingehalten; fix: Einträge an das §5-Beispielformat angleichen [wiki/log.md] — **erledigt: drei Demonstrationslauf-Einträge auf §5-Format umgestellt**
**defer:**
- [x] [Review][Defer] Contract-Verletzung: `schema/validator.md` im Commit mutiert (Rev-7-Notiz §7.3), obwohl Always/Never + AD-3 es als unverändert autorisiert frieren [schema/validator.md:262] — **aufgelöst via Option A (2026-08-16):** `validator.md` bleibt mit Rev-7-Hinweis erhalten (inhaltlich korrekt, kein Rückbau); Heilung über die nächste **autorisierte Validator-Revision** (F-14-Fixture + Innen-Ebenen-Klarstellung dort formal tragen — vgl. `deferred-work.md`); Story 2.1 bleibt bis dahin `in-progress`, Review-Wiedervorlage vor `done`. (Grund: Frieren-Prinzip wahren, ohne die nützliche Klarstellung zu verwerfen.)
- [x] [Review][Defer] Content-Truth-Verifikation: kein Check verifiziert den Inhalt eines Concepts gegen seine deklarierten `raw/`-Quellen (Verification-Gap) — deferred, Story 2.2 [wiki/*.md]
- [x] [Review][Defer] Determinismus-Selbsttest-Dokumentation: §6.6-Interpretations-Hinweis behauptet eine starte „genau diese Form", obwohl `generated.at` pro Run variiert (AD-15) — deferred, Story 2.3 [schema/compiler.md:106]
- [x] [Review][Defer] R-1 (Compiler-Input-Interface): Compiler definiert seine Source-Eingabe als **Menge beliebiger `raw/`-Dateien (Set-Interface)** — Verdikt **Bestanden**. Der übergebene dryrun-Fall „einzelner Pfad" existiert nicht mehr. Empfehlung gemäß Review-Vorgabe ergänzend: den Mechanismus der Source-Auswahl (welche `raw/`-Dateien wann verarbeitet werden) als Konventions-/Erkennungsproblem für Epic 3/AD-5-Home-Story in `deferred-work.md` festhalten — Firm-Zwang, die „Run-ohne-Pfad"-Lücke der Nutzererwartung bleibt offen (Story 3.1/3.2) — deferred, Epic 3
- [x] [Review][Defer] R-2 (Nicht-Markdown-Quellen): Compiler-Instruktion liest Sources **endungsneutral als Datei** (§1.2/§1.4, Verdikt **Bestanden**); die Konventions-/Asset-Zuordnungsfrage für PDF bleibt als dokumentierte Konvention offen — deferred, Epic 2/3 [raw/README.md]
### Re-Review Verifikationsvermerk (bmad-code-review, 2026-08-16)
Konforme Wiedervorlage nach dem Erst-Review — alle 5 Patch-Findings verifiziert, kein neuer Bruch:
- ✅ P-1..P-5 (compiler.md Rev 1.3, log.md §5-Format, spec-status, deferred-work, sprint-status) sauber umgesetzt und im Working Tree verifiziert.
-**AC-Abgleich** gegen `epics.md` Story 2.1: unverändert gültig (type-Pflicht, §3-Subset, v1-Trust `generated {by,at}` ohne `verified`, Wissenseinheiten ≠ 1:1, Index-Pflicht, kein Area, D-3-Textinstruktion) — kein neuer Verstoß durch die Patches.
-**Validator-Run gegen das Bundle** (gemäß `schema/validator.md`): **SUCCESS für alle 5 Bundle-Dateien** (`index.md`, `log.md`, 3 Concepts) — Points 114 ✔, V-1/V-2 ✔, EC-1/EC-3/EC-11 ✔, Punkt 11 (alle 3 Identitäten verlinkt) ✔. Keine Abweichung.
-**AD/Provenienz:** AD-3 (`raw/` unangetastet, leerer Diff), AD-5 (nur neue Root-Concepts), AD-10 (`adapters/` unverändert, keine abweichende Knowledge-Semantik), D-3 (rein textuell, kein Executable-Block), AD-4b (alle `sources[].resource` → existierende `raw/`-Dateien, nie `wiki/`), v1-Default (`generated` gesetzt, `verified` ungesetzt).
-**R-1** (Menge von Source-Pfaden, Set-Interface — compiler.md §1.2 definiert die gesamte evidierenfähige `raw/`-Menge; Einzelpfad-Interface existiert nicht): **Bestanden**, kein Finding. Erkennungs-Mechanismus bewusst deferriert (AD-5-Home-Story, Epic 3, Story 3.1/3.2).
-**R-2** (Nicht-Markdown-Quellen): Instruktion liest Sources endungsneutral als Datei (Vertrag §3.3: nur Dateipfad unter `raw/`; Validator EC-1: nur Existenz); PDF zulässig; §1.4 dokumentarische Konvention (§1.2/§1.4-Widerspruch via Rev 1.3 Patch #4 sauber aufgelöst, kein neuer Bruch): **Bestanden**.
-**Option A intakt (Re-Re-Review, 2026-08-17):** `validator.md` Rev-7-Notiz unverändert erhalten (kein Rückbau); `done`-Fähigkeit war korrekt an die nächste autorisierte Validator-Revision gekoppelt. **Diese Revision ist jetzt ausgeführt:** **Revision 8 (2026-08-16, Autorisations-Runde)** trägt formal die F-14-Negativ-Fixture 4a (§7.1, Punkt 4: `resource` außerhalb `raw/`), die Innen-Ebenen-Key-Subset-Klarstellung (Punkt 6 → §7.3-Isolations-Notiz) und die Header-Anhebung „Revision 6" → „Revision 8" (OBS-1). Zertifizierung selbstgeprüft PASS: Fixture 4a isoliert → FAIL Punkt 4; Innen-Ebenen-Sample → FAIL Punkt 6 (Key=role); reales Bundle → SUCCESS. Vertrag `schema/wiki-compiler.md` und `schema/compiler.md` unverändert.
**Verdikt (Re-Re-Review, 2026-08-17):** Die offene Option-A-Voraussetzung ist **erfüllt** — die autorisierte Validator-Revision 8 ist ausgeführt und zertifiziert. Story 2.1 ist damit **`review`-fähig und `done`-fähig**; keinerlei AC-/Vertrags-Blocker in den Story-Artefakten, keine neuen Findings aus den Nachzieh-Patches. Verbleibende Schwelle bis `done` ist ausschließlich die **menschliche Review-Freigabe** (Human-Review, Status `review``done`), nicht mehr eine technische Voraussetzung.
### Review Findings (bmad-code-review, 2026-08-17 — unabhängiger Re-Run auf dem Stand nach Validator-Rev-8)
**Kernbefund:** Alle 8 Acceptance Criteria **PASS**; die tragenden Story-2.1-Artefakte (compiler.md, 3 Concepts, index/log, validator Rev 8) sind validator-clean (`raw/` unangetastet, keine Area-Verzeichnisse, kein Executable-Code, keine unautorisierten Keys in keiner Ebene, EC-1/Punkt 11 erfüllt). Kein `high`. Die Findings sind Doku-/Referenz-Konsistenz, zwei Instruction-Vollständigkeits-Lücken und ein `medium`-Governance-Item. Unabhängig verifiziert, nicht aus dem Vordingsvermerk übernommen.
**patch:**
- [x] [Review][Patch] `schema/compiler.md` §0/§8 nennt die Prüfgrundlage `validator.md` „Revision 7", aber der Validator ist jetzt **Revision 8** — die von OBS-1 geschlossene Referenzkette ist damit nur halbschließend (3 Layer: Blind + Acceptance + Verification-Gap) [schema/compiler.md:5, schema/compiler.md:127]
- [x] [Review][Patch] `wiki/log.md` (2026-08-16): die `schema/compiler.md`-Rev-1.3-Zeile hat ihren `-`-Bullet verloren (nur führendes Leerzeichen) und rendert als Fortsetzung des Rev-8-Eintrags — zwei Ereignisse in einem Listeneintrag, bricht die §5-Flach-Bullet-Konvention, die dieser Diff selbst in Patch #5 durchgesetzt hat [wiki/log.md:8]
- [x] [Review][Patch] `schema/compiler.md` §6.6: Referenz-Labels in 4 Zeilen falsch („§4.4 canonical Key-Reihenfolge", „§4.4 keine Duplikat-Keys", „§4.4 sources-Eintrag-Key-Subset", „§4.4 kein okf_version") — aber §4.4 dieser Datei ist die `status`/`stale_after`-Regel; canonical-order ist §4.5, sources-Key-Subset ist §4.2. Die Rev-1.2-Logzeile dokumentiert, das Label sei „von §4.5 auf §4.4 korrigiert" — d. h. die vorgegebene Korrektur bewegte es an die falsche Stelle [schema/compiler.md:99-102]
- [x] [Review][Patch] `wiki/index.md`: das Baum-Diagramm (code-block) ist veraltet — es zeigt das Bundle weiterhin nur als `<area>/…` ohne Root-Concepts, während `## Concepts` direkt darunter 3 neue Root-Dateien auflistet; die Struktur-Skizze widerspricht nun dem Dateisatz, den sie dokumentiert [wiki/index.md:12-20]
- [x] [Review][Patch] `deferred-work.md`: „Content-Truth-Verifikation einführen" und „Determinismus-Selbsttest-Dokumentation schärfen" erscheinen je **zweimal** (Folge-Aufgaben-Block + Code-Review-Block) mit nahezu identischem Text, aber unterschiedlichem `source_spec`-Label und (für Determinismus) unterschiedlichem Home — Ownership mehrdeutig, lädt zu Doppel-Erledigung ein [deferred-work.md]
- [x] [Review][Patch] `deferred-work.md` (Sandbox-Dryrun-P1): „jede Negativ-Fixture (`validator.md` §7.1, **n=17**)" — die §7.1-Tabelle hat nach Revision 8 **21** Zeilen (nach Rev 7: 20); Zählung in einem frisch geschriebenen Eintrag falsch [deferred-work.md]
- [x] [Review][Patch] `review-input-dryrun-2-1-pdf-radium.md` §1: interne Inkonsistenz der Datei-Auflösung — „13 Root- + 5 spring/" vs. „die 5 realen … zuzüglich 11 radium- + 2 spring-" (impliziert 16 Root- und 5 vs. 2 spring) [review-input-dryrun-2-1-pdf-radium.md]
- [x] [Review][Patch] `validator-revision-8-autorisationsrunde-…md`: Frontmatter `status: 'draft'` **und** alle 4 Definition-of-Done-Boxen `- [ ]`, obwohl die Runde ausgeführt, zertifiziert und downstream `done` ist (Action-Item done, log.md-Zertifizierung, deferred-work „umgesetzt") — die Legitimität, Rev 8 als „autorisiert" zu führen, stützt sich auf ein nicht finalisiertes Dokument; Status finalisieren + DoD abhaken (3 Layer: Blind + Acceptance + Verification-Gap) [validator-revision-8-autorisationsrunde-f14-innen-ebenen.md:5,76-79]
- [x] [Review][Patch] Spec: doppelte `## Spec Change Log`-Sektion — die obere enthält weiterhin nur „(leer bis zum ersten Review-Loopback)", die untere die tatsächlichen Einträge; das Re-Re-Review-Verdikt (der bedeutendste Zustandswechsel nach Log-Start) fehlt im Change Log [spec-2-1-…md]
- [x] [Review][Patch] Rev-8-Runde: Datums-Diskrepanz — `wiki/log.md`, `sprint-status.yaml` (`closed`) und der validator-Rev-8-Logeintrag sagen **2026-08-16**, aber der ausführende Commit `e6c36fc` sowie `deferred-work.md` („umgesetzt 2026-08-17") und das `→ review`-Flip-Verdikt sagen **2026-08-17**; aus den Artefakten ist nicht konsistent ableitbar, an welchem Tag die Runde lief [wiki/log.md:7, sprint-status.yaml:161]
- [x] [Review][Patch] `epic-2-context.md`: „die Schema-Validierung von Story 1.4 **erzwingt auch AD-4c** (keine abgeleitete Provenienz)" — übertrieben; Vertrag §6.1 (A0-5/AD-4c) sagt, die Regel sei in v1 „tautologisch erfüllt" und „erzeugt kein eigenes Validitätsprädikat", und der Validator hat keinen AD-4c-Check. Der frisch angelegte Epic-Kontext schreibt Erzwingung einem Mechanismus zu, der per Definition noch nicht existiert [epic-2-context.md]
- [x] [Review][Patch] `schema/compiler.md` Sprache: §5.2 „Der Body darf keine **grossen** Quell-Exzerpte enthalten" (→ „großen") und §1.4 „zu verarbeitende Evidenz kann auch andere **Aufträge** als `.md` tragen" (→ „Formate"/„Endungen") — beide in normativem Kontext (FR-2-Bodylimit, Evidenz-Definition) [schema/compiler.md:28,61]
- [x] [Review][Patch] Spec `## Verification` + `## Suggested Review Order` veraltet: erwarten „KEINE … `schema/validator.md`-Mutationen" und „Validator (Rev 7) … unverändert autorisiert" — beides wird vom Diff widersprochen (validator.md ist jetzt Rev 8 und mutiert); die Spec wurde nie angepasst, um zu verzeichnen, dass Option A den legitimen Diff-Inhalt geändert hat [spec-2-1-…md]
- [x] [Review][Patch] `schema/compiler.md` §3.2 Kollision-Hold: definiert nur das Ergebnis je Einheit („bricht für diese Einheit ab"), aber **nicht**, ob der Run die übrigen Einheiten fortsetzt und was der Gesamt-Run-Status bei teils-gehaltener Einheit ist — Run-Ergebnis nicht deterministisch ableitbar [schema/compiler.md:40]
- [x] [Review][Patch] `schema/compiler.md` §5.3/§6.3: „keine weiteren Mutationen auf FAIL" + „Commit-Boundary ist die Mutations-Boundary" fehlt eine **explizite Rollback-Sequenz** für den Teilzustand (Concept-Datei + Index-Zeile + log-Zeile bereits geschrieben), der zwischen „Mutieren" und einem fehlgeschlagenen „Validieren" existiert — teilweise Mutationen könnten inkonsistent im Bundle liegen [schema/compiler.md:63,70]
- [ ] [Review][Patch] `schema/validator.md` §7.1 Fixture 4a: das erwartete Verdikt — **GEGEHOLDERT (2026-08-17):** betrifft die gerade autorisierte, gefrorene `validator.md` (Rev 8); Anwendung setzt einen neuen Autorisierungsschlag auf `schema/` voraus und wird separat bestätigt, nicht automatisch mitgepatcht. `Punkt 4: … (resolved=README.md)` ist aus der §3-Punkt-4-Vorlage `(..-Traversal|absolut|URL|Backslash|file://)` **nicht ableitbar** — die Vorlage trägt kein `resolved=`-Token (Punkt 4 deckt zwar „außerhalb raw/ durch Auflösung", die Fehlerursachen-Grammatik listet es aber nicht); §7 verlangt „exakt die aus §3". *Betrifft die (gerade autorisierte) frozen `validator.md`* [schema/validator.md:63,214]
- [ ] [Review][Patch] `schema/validator.md` Rev 8: die „formalisierte" **Innen-Ebenen-Punkt-6-Regel** hat keine Fixture-Zeile — **GEGEHOLDERT (2026-08-17):** betrifft die gerade autorisierte, gefrorene `validator.md` (Rev 8); Anwendung setzt einen neuen Autorisierungsschlag auf `schema/` voraus und wird separat bestätigt, nicht automatisch mitgepatcht. in §7.1/§7.3 — der einzige Punkt-6-Fixture ist Top-Level `foo: bar` (Zeile 6), die §7.3-Notiz zeigt `sources … role: x` nur als Inline-Beispiel, nicht als Tabellen-Fixture; die Zertifizierung dieses Falls existiert nur als Prosa in log.md/spec/sprint-status, kein re-runbares Sample ist committed, obwohl §7 behauptet, die Tabellen machten „jede mechanische Bedingung reproduzierbar nachprüfbar". *Betrifft die (gerade autorisierte) frozen `validator.md`* [schema/validator.md:214,260]
**defer:**
- [x] [Review][Defer] Content-Truth-Verifikation: kein Check verifiziert den Body eines Concepts gegen seinen deklarierten `raw/`-Quellen-Inhalt. Konkrete Instanz: `knowledge-kompilation-inkrementell.md` — das ASCII-Datenfluss-Diagramm-Layout stammt aus `raw/architecture-spine/…`, deklariert ist `sources: raw/epics/…` (Inhalt an sich ist kuratiert/korrekt, nur die exakte Diagrammform ist nicht von der deklarierten Source gedeckt) — deferred, Story 2.2 (bereits in deferred-work.md) [wiki/knowledge-kompilation-inkrementell.md]
- [x] [Review][Defer] Concepts präsentieren Epic-3/4-Fähigkeiten als aktuelle Tatsache ohne Forward-Referenz-Marker: `knowledge-kompilation-inkrementell.md` „Verbindung zu Regelwerken" (NEW/CONFIRMING-CORRECTING-Klassifikation + grep/ripgrep-Relevanz → Story 3.2/4.1) und „FR-6 Aktualisierung statt neuer Dateien" (→ Story 3.1, die `compiler.md` §7/§3.2 explizit nicht baut und deren Kollision-Hold auf bestehendem Pfad sogar abbricht) — deferred, Story 2.2/3 [wiki/knowledge-kompilation-inkrementell.md:62-67]
- [x] [Review][Defer] Determinismus-Selbsttest: §6.6-Interpretations-Hinweis behauptet „genau diese Form … im Demonstrationslauf erfüllt", die ✓-Zeile pinnt `at: 2026-08-16T09:23:33Z`, aber `generated.at` variiert pro Run (AD-15) — für einen Regenerate-Vergleich hält nur die Normalform, nicht „genau diese Form" — deferred, Story 2.3 (bereits in deferred-work.md) [schema/compiler.md:97,108]
- [x] [Review][Defer] `wiki/log.md`: die neuen 2026-08-16/17-Einträge sind überwiegend Prozess/Meta-Content (Review-Verdikt, Action-Item-Statusflips, Validator-Revision-Ankündigungen) statt Vertrag-§5-„fachliche Änderungen … verknüpft mit dem mutierten Concept-Pfad"; kein Marker unterscheidet Meta- von Fach-Einträgen, kein Validierungs-Hook (F17 defert Log-Content-Validierung bewusst) — vorbestehendes Muster (Retrospective-Follow-up-Einträge), nicht neu durch diesen Diff verursacht — deferred, pre-existing [wiki/log.md]
**dismiss (2 — nicht persistent):**
- Consumer-Namen (BMAD/Claude Code/Codex) in `wissensarchitektur-trennung-states.md` **sind** in der deklarierten `raw/architecture-spine/…` belegt (Zeilen 324/334/700701) — kein Content-Truth-Verstoß (False Positive des Blind-Hunters).
- Sandbox-Dryrun-Artefakte (`review-input-dryrun-…md`, `deferred-work.md`-Dryrun-Block) sind additiv, nicht-normativ, klar als externer Kontext aus `D:\mita\wow-2nd-sandbox` gelabelt — kein Befund gegen `schema/`/`wiki/`/`raw/`.
## Design Notes
**Warum eine Instruktion, kein Programm (D-3):** Genau wie der Validator (Story 1.4) ist der Compiler eine textuelle Agent-Instruktion — der deterministische Kern ist `schema/compiler.md`, ausgeführt von einem vorhandenen agentischen Host (AD-11). Das hält die Story klein, revisionierbar (Git) und prüfbar (AD-17h). Ein Standalone-Compiler ist explizit D-3-verboten und nur als dokumentierter Rückkehrpunkt für eine spätere Story zugelassen.
**Root-Ebene statt Areas (Umgehung des Punkt-11-/Area-Dilemmas):** Story 2.4 besitzt die deterministische Area-Zuordnung; Story 2.5 die Discovery-Navigation. Story 2.1 darf diesen Stories nicht vorgreifen. Daher entstehen die ersten Concepts **direkt unter `wiki/`** (`wiki/<concept>.md`) und werden — wie es der Punkt-11-Check des Validators für Root-Concepts verlangt — in der Bundleroot `wiki/index.md` verlinkt. Es wird kein `wiki/<area>/`-Verzeichnis angelegt. Story 2.4 kann diese Root-Concepts später per deterministischer Zuordnung in Areas verschieben (mit AD-7d-Rename-Eintrag in `log.md`).
**Demonstrationslauf = der eigentliche „Beweis":** Die Instruktion allein wäre nur Theorie. Der Run gegen die 3 `raw/`-Evidenzdateien erzeugt echte Concepts und wird anschließend gegen den **autorisierten Validator** (Story 1.4) geprüft — das ist die mechanische Bestätigung der Konformität (Kultur aus Story 1.4: Validator-Selbstprüfung gegen Fixtures). Die `at`-Zeitstempel werden zum Ausführungszeitpunkt in UTC-ISO-8601 gesetzt.
**Zeitstempel-Determinismus:** Der `at`-Wert ist ein Ausführungszeitpunkt und damit per se nicht deterministisch über Runs hinweg — das ist beabsichtigt (Trust-Metadaten beschreiben den Erzeugungsmoment, AD-15). Deterministisch sind Pfad, Struktur, Frontmatter-Form und `sources`-Auflösung; der Verdikt-Erfolg hängt nicht von einer festen `at`-Sekunde ab.
## Verification
**Commands:**
- `git status --short && git diff --stat` — expected: neue Datei `schema/compiler.md` + `wiki/<slug>.md`-Concepts + `wiki/index.md`-Änderung + `wiki/log.md`-Eintrag + `sprint-status.yaml`-Update; KEINE `raw/`- oder `schema/wiki-compiler.md`-Mutationen. (Hinweis 2026-08-17: `schema/validator.md` ist zwischenzeitlich im Rahmen der autorisierten Option-A-Revision 8 mutiert — der ursprüngliche Diff-Erwartungswert „KEINE `schema/validator.md`-Mutationen" gilt für den Story-2.1-Erstellungs-Diff, nicht mehr für den Gesamt-Stand nach Validator-Rev-8.)
- Validator-Instruktion gegen Bundle ausführen (manuell/deterministisch, siehe `schema/validator.md` §5-Grammatik): `grep -nE 'Punkt 11|concept nicht verlinkt' schema/validator.md` + praktischer SUCCESS-Lauf des Validators gegen `wiki/` — expected: alle neuen Concepts + `index.md` + `log.md` liefern `SUCCESS` (kein FAIL, kein WARN-Blocker).
- Frontmatter-Konformitäts-Smoke: `grep -nE '^(type|sources|generated|verified|status|stale_after):' wiki/*.md` — expected: nur §3-Felder je Concept; `type` gesetzt; `generated.at` im Format `YYYY-MM-DDTHH:MM:SS` (mit Offset-Suffix).
- `sources`-Auflösung: `grep -nE 'resource:' wiki/*.md` — expected: jeder Wert ist ein existierender `/`-getrennter `raw/`-Pfad (kein `..`, kein `wiki/`, keine URL).
- `git log --oneline -3 -- raw/` — expected: keine neuen Commits/Einträge unter `raw/` (immutable).
- `at`-Format-Smoke (Punkt 14): `grep -nE '^ at: [0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(Z|[+-][0-9]{2}:?[0-9]{2})$' wiki/*.md` (je `generated.at`/`verified.at` ein volles ISO-8601-Datetime; reines Datum wäre FAIL Punkt 14).
- `sources`-Eintrag-Key-Subset (Vertrag §3.3/Punkt 6): `grep -nE '^ - [a-z_]+:' wiki/*.md` — expected: je `sources`-Eintrag ausschließlich `resource` (bzw. erlaubte optionale: `id`/`title`/`author`/`usage_count`/`last_modified`); kein unautorisierter Key.
**Manual checks (if no CLI):**
- `schema/compiler.md` ist rein textuell (kein Programmcode/Executable-Abschnitt) und beginnt mit Zweck & Aufruf.
- Alle Erzeugungsregeln sind deterministisch formuliert und auf Vertrag/Validator zurückführbar (kein reines LLM-Urteil).
- `wiki/log.md` enthält einen datierten Eintrag über die angelegten Concepts mit Quell-Pfaden.
- Jede Concept-Datei ist menschlich lesbares Markdown (NFR-2) und nicht bloße Kopie der Quelle (FR-2).
## Verification Record (Ausführungs-Beleg, 2026-08-16)
**Demonstrationslauf:** `schema/compiler.md` (Revision 1.1) angelegt; 3 Root-Concepts erzeugt; `wiki/index.md` + `wiki/log.md` mutiert. `sprint-status.yaml`: epic-2 + Story 2.1 → `in-progress`.
**Validator-Lauf gegen das mutierte Bundle (gemäß `schema/validator.md`, Revision 6, deterministisch ohne LLM-Urteil):**
| Datei | Punkte 114 | §6/V §6.1 EC-1 | Verdikt |
|---|---|---|---|
| `wiki/index.md` | 8, 9, 13 ✓ (Punkt 8 OK, kein Punkt-9-Inhalt, keine Duplikate) | — | SUCCESS |
| `wiki/log.md` | 10 ✓ (kein Frontmatter), 9 ✓ | — | SUCCESS |
| `wiki/llm-wiki-prinzip.md` | 1, 2, 6, 7, 12, 13, 14 ✓ (`type: concept`, `generated.by` gesetzt, `at` = `2026-08-16T09:23:33Z` volles ISO-8601, canonical key order, keine Duplikate) | EC-1 ✓ (`raw/prd/prd-wow20-2026-08-14.md` existiert als Datei) | SUCCESS |
| `wiki/knowledge-kompilation-inkrementell.md` | 1, 2, 6, 7, 12, 13, 14 ✓ | EC-1 ✓ (`raw/epics/epics-2026-08-14.md` existiert) | SUCCESS |
| `wiki/wissensarchitektur-trennung-states.md` | 1, 2, 6, 7, 12, 13, 14 ✓ | EC-1 ✓ (`raw/architecture-spine/architecture-spine-2026-08-14.md` existiert) | SUCCESS |
**Punkt 11 (Index-Regel):** Alle 3 Root-Concept-Identitäten `llm-wiki-prinzip`, `knowledge-kompilation-inkrementell`, `wissensarchitektur-trennung-states` sind in `wiki/index.md` verlinkt (`grep -c` je = 1) ✓.
**Punkt 3/4 (Keine `wiki/`-Auflösung, Pfad-Grammatik):** Alle `resource`-Werte sind `/`-getrennte `raw/`-Pfade ohne `..`, ohne führendes `/`, ohne Backslash, ohne URL ✓.
**Scope:** Keine Mutation unter `raw/` (`git log raw/` ohne neue Commits), `schema/wiki-compiler.md` und `schema/validator.md` unverändert (autorisiert) ✓. Frontmatter-Smoke `grep -nE '^(type|sources|generated|verified|status|stale_after):' wiki/*.md` → nur §3-Felder in Concepts, kein `okf_version`/`type: bundle` ✓.
**Gesamtergebnis:** `SUCCESS` für alle 5 Bundle-Dateien — kein FAIL. Run als erfolgreich gewertet (Integrations-/Verifikations-Beleg).
## Spec Change Log
- **2026-08-17 (Human-Review-Freigabe → `done`):** Nutzer-Freigabe erteilt — Story 2.1 ist `done` (Status `review``done`); die letzte verbleibende Schwelle (menschliche Review-Freigabe) ist damit überschritten. Alle 8 ACs PASS, kein AC-/Vertrags-Blocker; offene Folge-Arbeit (autorisierte Validator-Revision 9: Punkt-4-Grammatik `resolved=`-Token, Innen-Ebenen-Punkt-6-Fixture-Zeile) ist kein Story-2.1-Blocker und bleibt in `deferred-work.md` / Action-Item `code-review-2-1-item-2` verankert. `sprint-status.yaml`: Story 2.1 → `done`.
- **2026-08-17 (Code-Review-Re-Run, Patches 15/17 umgesetzt):** Unabhängiger Re-Run (4 Layer) auf dem Stand nach Validator-Rev-8: 17 Patch / 4 Defer / 2 Dismiss, alle 8 ACs PASS. 15 Patches umgesetzt — `schema/compiler.md` → Revision 1.4 (Prüfgrundlage Rev 8, §6.6-Referenzlabels §4.5/§4.2, §3.2 Kollision-Hold-Run-Fortsetzung, §5.3/§6.3 Rollback-Sequenz, Sprachkorrekturen), `wiki/log.md` (verlorener Bullet, Rev-8-Datum), `wiki/index.md` (Baumdiagramm), `deferred-work.md` (Dedupe, n=21), `review-input-dryrun-…md` (Datei-Auflösung 16+2), `validator-revision-8-…md` (status done, DoD), `epic-2-context.md` (AD-4c tautologisch), spec Verification/Suggested-Review-Order (Rev 8), `sprint-status.yaml` (closed-Datum 08-17). 2 Patches auf der gefrorenen `validator.md` (Rev 8) **geholdert** → nächste autorisierte Validator-Revision (Rev 9): Punkt-4-Grammatik `resolved=`-Token + Innen-Ebenen-Punkt-6-Fixture-Zeile (s. `deferred-work.md` „Arbeitsauftrag Rev 9", Action-Item `code-review-2-1-item-2`). Status bleibt `review` (`done`-fähig; verbleibende Schwelle = Human-Review).
- **2026-08-17 (Re-Review):** Re-Re-Review-Verdikt — Option-A-Voraussetzung erfüllt (autorisierte Validator-Revision 8 ausgeführt und zertifiziert: F-14-Fixture 4a, Innen-Ebenen-Key-Subset formalisiert, Header „Revision 6" → „Revision 8"); Story 2.1 `review`-fähig und `done`-fähig; verbleibende Schwelle bis `done` ausschließlich die menschliche Review-Freigabe.
- **2026-08-16 (Step-04-Review):** `sources`-Eintrag-Key-Subset als Zusatz-Verification-Check ergänzt (Vertrag §3.3, Punkt 6); `at`-Format-Smoke als Punkt-14-Beleg unter die Verification-Checks aufgenommen; `status: in-review` (Review begonnen). Keine Änderung am `<frozen-after-approval>`-Intent.
- **2026-08-16 (Erstellung):** Initiale Approve-Baseline.
## Edge-Case-Matrix-Audit
| Scenario | Abgedeckt durch | Befund |
|---|---|---|
| HAPPY_PATH | §5 Demonstrationslauf | ✓ 3 Concepts erzeugt, verlinkt, validiert |
| CONCEPT_OHNE_TYPE | §4.1 (Punkt 1) + §6.5 Kriterium 1 | ✓ Instruktion verlangt zwingend non-empty `type`; Abweichung → Run-FAIL mit textueller Ursache |
| FEHLENDE_RAW | §4.2 + §6.5 Kriterium 3 (EC-1) | ✓ nur real existierende `raw/`-Dateien als `resource` |
| LEERE_QUELLE / KEINE_WISSENSEINHEITEN | §1.3/§1.4 (Artefakt-Ausschluss) | ✓ `raw/README.md`, `raw/**/source.md` sind kein Input/keine Evidenz; werden nie `resource` |
| VERALTETE_SOURCE | §1.4 (Sidecar = Artefakt, nicht Input) | ✓ fehlende Commit-Auflösbarkeit blockiert Erzeugung nicht |
| KEIN_CONTENT | §2.3 (FR-2, Curated ≠ Copy) | ✓ bloße Kopie/Zusammenfassung → kein Concept |
## Step-04-Review-Nachschärfungen (2026-08-16)
Nach den drei Review-Layern (Blind Hunter, Edge Case Hunter, Verification Gap) angewendet:
- `schema/compiler.md` auf Revision 1.2: Input-Regel auf AD-17a statt AD-17.2 referenziert; `sources`-Eintrag-Key-Subset (Innen-Ebene, Vertrag §3.3) in §4.2, §6.5-Kriterium-1 und §6.6 ergänzt; `status`-Absenz Formulierung an Vertrag §3.6 (Absenz = `stable`) angebunden; Bereichs-Ziel-Ablehnung bis Story 2.4 (§5.1/§6.6); §6.6-Fehlerursache der `verified`-Zeile auf Punkt 6 korrigiert (statt „semantisch (Trust)"); §6.6-Referenzlabel von §4.5 auf §4.4 korrigiert; §6.6 um vollständige Punkt-4-Pfad-Verbote ergänzt; AD-17f als Commit-Boundary sichtbar (§0/§5.3/§6.6).
- `schema/validator.md` auf Revision 7: §7.3-Isolations-Hinweis um Innen-Ebenen-Key-Subset-Fälle (Punkt 6 in `sources`/`generated`/`verified`-Einträgen) erweitert.
- `wiki/index.md`: Workspace-Absatz präzisiert — `schema/` enthält drei Artefakte (Vertrag, Validator, Compiler-Instruktion) statt nur „Compiler-Schema-Vertrag".
- `wiki/log.md`: Review-Eintrag ergänzt (Nachschärfungen + `at`-Konsistenz-Prüfung).
- `sprint-status.yaml`: Story 2.1 → `review` (Review begonnen).
**Verifiziert gegen Fehlalarme:** `at: 2026-08-16T09:23:33Z` entspricht 11:23:33 Lokalzeit (+0200) und deckt sich mit den Datei-Mutationszeitpunkten (11:24) — kein Befund auf die Ausführungszeit; Consumer-Namen (BMAD/Claude Code/Codex) sind in `raw/prd`, Spine und Epics verbatim belegt; Key-Reihenfolge liegt korrekt in Validator §4.1 (Zeile 104); „Mutieren" (AD-6/A0-7) steht im Einklang mit dem inkrementellen „Update"-Fluss (A0-6).
**Defer-Kontexte (in `deferred-work.md` notiert):** Content-Truth-Verifikation (kein check prüft die inhaltliche Übereinstimmung eines Concept-Bodys mit seinen `raw/`-Quellen; Story 2.2/Deferred) sowie eine `at`-basierten Determinismus-Selbsttest-Divergenz (die `at`-Sekunde variiert pro Run, während der §6.6-Interpretations-Hinweis eine feste Form behauptet — mit der `at`-Run-Zeit semantisch konsistent, als Selbsttest-Dokumentation für Story 2.3/nächste Validator-Revision zu schärfen).
## Suggested Review Order
**Einstieg (Design-Intent der Story)**
- Deterministic compiler instruction — the single artifact that makes Story 2.1 load-bearing: one place, textual (D-3), flow Interpret→Reconcile→Synthesize→Mutate→Validate.
[`compiler.md`](../../schema/compiler.md#L1)
**Feldsubset & Trust — Intake der drei Artefakte**
- New compiler instruction: `sources`-entry key-subset (Innen-Ebene, Vertrag §3.3) and `generated` (by/at, no verified) — the §4 production rules in canonical form.
[`compiler.md`](../../schema/compiler.md#L48)
- Authorized contract: field subset, `sources` key-subset per entry, `generated` by/at — the normative anchor Story 2.1 derives from (unchanged, authorized).
[`wiki-compiler.md`](../../schema/wiki-compiler.md#L53)
- Validator (Rev 8): F-14-Negativ-Fixture 4a (§7.1, Punkt 4) + Innen-Ebenen-Key-Subset formalisiert (Punkt 6 → §7.3-Isolations-Notiz, autorisiert) + Header-Revisionszahl auf 8 angehoben (OBS-1 behoben) — autorisierte Option-A-Revision, 2026-08-17 ausgeführt und zertifiziert.
[`validator.md`](../../schema/validator.md#L260)
**Wissenseinheiten — Konzepte aus den Quellen**
- `LLM-Wiki-Prinzip` — Anker-Concept: Compounding, Knowledge Compiler vs. Retrieval; Trust-Metadaten gemäß A0-20 (generated ohne verified).
[`llm-wiki-prinzip.md`](../../wiki/llm-wiki-prinzip.md#L1)
- `Knowledge Compilation & Inkrementelle Evolution` — AD-5-Datenfluss, FR-12/FR-6/FR-14; Abgrenzung zu Epic 3.
[`knowledge-kompilation-inkrementell.md`](../../wiki/knowledge-kompilation-inkrementell.md#L1)
- `Wissensarchitektur: Source Material, Curated Knowledge & Consumer` — AD-2/AD-3-Grenzen, Consumer-Unabhängigkeit, Konvergenzregeln.
[`wissensarchitektur-trennung-states.md`](../../wiki/wissensarchitektur-trennung-states.md#L1)
**Verlinkung & Dokumentation — Bundle-Integrität**
- Bundleroot-Index: `## Concepts` mit den 3 Root-Concept-Links + korrigierter Workspace-Beschreibung (drei `schema/`-Artefakte).
[`index.md`](../../wiki/index.md#L24)
- Bundle-Log: Story-2.1-Demonstrationslauf- und Review-Einträge (datumsgruppiert, ohne Frontmatter).
[`log.md`](../../wiki/log.md#L3)
**Status & Tracking — Peripherie**
- Sprint-Status: epic-2/Story-2.1 auf `review` (Review begonnen), nach Abschluss auf `done` zu flippen.
[`sprint-status.yaml`](../../_bmad-output/implementation-artifacts/sprint-status.yaml#L45)