Files
wow20/wiki/log.md
T
Michael TamseandClaude 96661836e9 feat: Story 3.8 Re-Open-Delta — Zwei-Run-Determinismus auf getrennte Worktrees/Manifest/Receipt umgestellt (genehmigtes Sprint-Change-Proposal 2026-08-20)
Re-Open-Scope (approved, ProMods; Epics-ACs Z. 357-370): zwei frische Agent-Kontexte in getrennt aufgebauten (sauberen) Worktrees (Q-6/A0-19 — eine zweite Ausführung in derselben Session genügt nicht), kanonisches Eingabemanifest (Baseline-Commit, geordnete Sources, output-sichtbare Run-/Zeit-/Identitätswerte), Run-Receipt außerhalb des Bundles (Candidates, Reihenfolge, Plan, Entscheidungen, Output-Hashes), keine hart codierten erwarteten Pläne/Concept-Bodies, keine pauschale verified-Maskierung (nur benannte at-Ausnahme).

- schema/compiler.md §5.14: Zwei-Run-Bestätigungs-Mechanik + §8-Revision-3.3-Klausel + Re-Open-Delta auf getrennte Worktrees/Manifest/Receipt/no-hardcode/no-masking umgestellt; §5.13-"in einer Session" unverändert (AD-6-Phasen-Disziplin, Fugen-Identität)
- sandbox-3-8/run-sandbox.sh: DET-2 auf zwei getrennte Worktrees (wt-a/wt-b) + manifest.yaml + receipts/-Dateien außerhalb des Bundles umgebaut; Candidate-Ableitung aus Git-State via deterministischem Stufe-a-Match (nicht hart codiert); Receipt-Abgleich als tatsächlicher Zwei-Run-Vergleich (diff der beiden Receipts, nicht je Lauf gg. Baseline); non-vakuum-Witness (Run-alpha-SHA != Baseline-alpha-SHA); Subshell für Worktree-cwd-Isolation. Exit 0, DET-1..DET-8 harte PASS
- spec-3-8: Re-Open-Delta-Intent, Tasks & AC-3/4/5, SRO auf Worktrees angepasst
- wiki/log.md: Story-3.8-Re-Open-Delta-Eintrag (Verankerung, Sandbox-Nachweis Exit 0, Erhaltungs-Invariante, Validator-Verdikt 7/7 SUCCESS, Revision 3.3)
- sprint-status.yaml: last_updated nachgeführt; Key 3-8 in-progress
- epic-3-context.md: neu kompiliert (Story-Liste/Stories 3.9-3.13 synchron)

Validator-Verdikt (human-mechanisch, schema/validator.md Rev 9, D-3 — kein CLI): alle wiki/-Dateien 7/7 SUCCESS (keine Inhalts-Mutation). Erhaltungs-Invariante §5.9 Pkt. 5: git status --porcelain -- wiki/ zeigt ausschließlich wiki/log.md. AD-3 read-only (validator/wiki-compiler/adapters/raw/canonical-terms) unverändert.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-20 13:08:28 +02:00

58 lines
113 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.
# Log
## 2026-08-20
- **Story 3.8 → Re-Open-Delta (Determinismus-Vertrag, genehmigtes Sprint-Change-Proposal 2026-08-20):** `_bmad-output/planning-artifacts/sprint-change-proposal-2026-08-20.md` (approved, ProMods, explizite Chat-Freigabe) nimmt Story 3.8 aus `review` nach `in-progress` zurück (Epics-Datei ACs Z. 357370). **§5.14-Wortlaut (Re-Open-Delta):** Zwei-Run-Bestätigungs-Mechanik umgestellt auf **zwei getrennte saubere Worktrees + frische Agent-Kontexte** (Q-6/A0-19 — eine zweite Ausführung in derselben Session genügt nicht), unter **kanonischem Eingabemanifest** (Baseline-Commit, geordnete Source-Eingaben, output-sichtbare Run-/Zeit-/Identitätswerte, A0-19) und mit **Run-Receipt** (Candidate-Liste, Reihenfolge, Plan, Entscheidungen, Output-Hashes) **außerhalb des Knowledge Bundle**; **keine hart codierten erwarteten Pläne/Concept-Bodies** und **keine pauschale `verified`-Maskierung** (einzige benannte Ausnahme bleibt der dokumentierte `generated.at`-Wanduhr-Gap, A0-20/§5.14 Pkt. 3). **Sandbox DET-2 umgebaut** (zwei getrennte Worktrees `wt-a`/`wt-b` + `manifest.yaml` + `receipts/run2a.receipt/run2b.receipt` außerhalb des Bundles; Candidate-Ableitung aus Git-State via deterministischem Stufe-a-Match, nicht hart codiert; Abgleich der beiden Receipts als tatsächlicher Zwei-Run-Vergleich, nicht-vakuum): `bash _bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh`**DET-1..DET-8 harte PASS, Exit 0** (Zwei-Run-Identität byte-identisch bis auf die benannte `at`-Ausnahme; Witness weicht von Baseline ab). `schema/compiler.md` §8 **Revision 3.3** (Re-Open-Klausel); §5.13-„in einer Session" unverändert (AD-6-Phasen-Disziplin, Fugen-Identität). **Validator-Verdikt** (human-mechanisch, `schema/validator.md` Rev 9, D-3 — kein CLI): alle `wiki/`-Dateien SUCCESS (keine Inhalts-Mutation). **Erhaltungs-Invariante §5.9 Pkt. 5:** `git status --porcelain -- wiki/` zeigt ausschließlich diesen Eintrag in `wiki/log.md`; `sprint-status.yaml``in-progress`; AD-3 read-only (validator/wiki-compiler/adapters/raw/ unverändert).
- **Story 3.8 → `in-progress` (Determinismus-Vertrag (AD-17h) als Agent-Instruktions-Validator, Verankerung §5.14, 2026-08-20):** `schema/compiler.md` Revision 3.3 — neue Sektion **§5.14 „Determinismus-Vertrag & Agent-Instruktions-Validator (Story 3.8)“** (nach §5.13, vor §6; §5.13 Pkt. 7-Seam auf den §5.14-Anker umgehängt): geschlossene Bestätigungs-Mechanik des Determinismus-Vertrags (AD-17h/FT-10/A0-19) — (1) **Bundle-State-Definition** (deterministische Projektion des committeten Git-States: committeter Baum gg. Baseline, Plan-/Kandidaten-/Reihenfolge-Outputs, Ausführungs-Entscheidungen; `generated.at`/`verified[].at` als **benannte Ausnahme** der Projektion), (2) **Zwei-Run-Bestätigungs-Mechanik** (agent-Instruktions-basiert D-3/Q-6: Producer führt zweimal über demselben committeten Git-State aus, Vergleichs-Operandum = committeter Baum, diff-/hashbasierte Formeln, identische Outputs byte-identisch bis auf `at`; Sandbox DET-2 nicht-vakuum; kein Prozess/Server/MCP/Standalone, AD-6/AD-11), (3) **Ausnahme-Menge** (allein der `generated.at`-Wanduhr-Gap als dokumentierte A0-20-Konvention — kein stiller Ausschluss; alle übrigen Bestandteile byte-identisch), (4) **Abweichungs-Klassifikation** (jede Differenz außerhalb der Ausnahme = **AD-16-Klassifikationsdefekt**, kein Rauschen, textuell benannt NFR-4, korrigiert/zurückgerollt, erneut bestätigt), (5) **Normalisierungs-/Match-/Orphan-Schließung** (verweist auf §3.2-Pkt.-1b-/§5.10-Pkt.-8-Verankerung). **§3.2 Normalisierungs-Lücken geschlossen (append-only, kein Umbruch):** Em-Dash in der Kollaps-Klasse (`[-–— _]``-`), Kollaps-Reichweite (jedes Vorkommen → genau ein `-` + Trim), Match-Scope der Stufe a (ganze Wörter über den Body, Frontmatter exkludiert). **§5.10 Pkt. 8 Orphan** zur deterministischen Reconcile-Orphan-Regel präzisiert (Zuwachs gg. `<Baseline-Commit>`, datumsgruppierter `log.md`-Eintrag, kein Banner, AD-16-Default). §7-Determinismus-Vorbehalt **aufgelöst** (Story-3.8-Verankerung, bestehende Bullets unverändert); §8-`AD-17h` auf den **§5.14-Anker** angehoben (mit `generated.at`-Wanduhr-Gap-Ausnahme-Nennung); **Revisionslog Revision 3.3** mit Abschlussklausel (AD-3 — `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert; keine neue §7-Klasse; kein Standalone/D-3; keine Vertragsänderung; kein neuer Prädikat-/Format-/Frontmatter-Key; `generated.at`-Verhalten unverändert, Ask-First bei Verhaltens-Wechsel; keine eigene Workflow-Engine). `sprint-status.yaml`-Key `3-8-determinismus-vertrag-ad-17h-als-agent-instruktions-validato`**`in-progress`** (Implementierungs-Flip, HEAD-Stand 08-20-2026 09:05; finaler `review`/`done`-Flip im Review-Schritt — Step-04/05), `last_updated` → 08-20-2026 09:05. **Sandbox-Nachweis** (`_bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh`, `/tmp`-Baum, Linux-Semantik, nie der reale `wiki/`-/`raw/`-Baum): **DET-1..DET-8, Exit 0, 8 harte PASS-Assertionen** — DET-1 Bundle-State-Definition (Projektion zweimal byte-identisch extrahiert, KEINE_EIGENE_ENGINE-Negativkontrolle D-3/AD-11); DET-2 Zwei-Run-identisch **nicht-vakuum** (echte Content-Hashes Plan-/log-/index-/alpha + Bundle-TREE byte-identisch über zwei unabhängige Läufe, Witness weicht byte-weise von Baseline ab); DET-3 Zwei-Run-Abweichung (künstlich divergenter Lauf → AD-16-Klassifikationsdefekt textuell benannt NFR-4, korrigierter Lauf == Referenz); DET-4 `at`-Gap-Ausnahme (diff ausschließlich at-Zeile, nach at-Maskierung byte-identisch, Negativkontrolle Body-Differenz = Defekt); DET-5 Em-Dash (identische canonische Form wie En-Dash/Bindestrich/Unterstrich/Leerzeichen); DET-6 Kollaps (`a--b``a-b`, `-x``x`, `x-``x`); DET-7 Match-Scope (ganze Wörter, Body-exklusiv, Substring-/Frontmatter-Treffer liefern keine Kandidaten); DET-8 Orphan (verwaiste Evidenz unzugeordnet, `log.md`-Verwaist-Eintrag mit `<Baseline-Commit>`, kein Banner, keine eigenständige Anlage, Erhaltungs-Invariante nur `log.md`). **Defers aufgegriffen/geschlossen**`deferred-work.md` append-only (7 `### Aufgegriffen`-Blöcke + 1 `### Aufgegriffen (teilweise)`-Block: Em-Dash → §3.2 Pkt. 1b/§5.14 Pkt. 5; Kollaps-Reichweite → §3.2 Pkt. 1b; Match-Scope Stufe a → §3.2 Pkt. 1b; Orphan → §5.10 Pkt. 8; `generated.at`↔AD-17h-Gap → §5.14 Pkt. 13; A0-20-Post-Zustand-Negativkontrolle → §5.14 Pkt. 24; Misch-Run-Coverage → §5.14; Umlaut/Em-Dash **teilweise aufgegriffen** — der Em-Dash-Anteil in §3.2 Pkt. 1b/§5.14 Pkt. 5 geschlossen, der Umlaut-vs-Transkription-Anteil bleibt offen, kein Instruktions-Defekt). **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story D-3); `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert (AD-3, via `git status` geprüft); `schema/canonical-terms.md` unverändert (append-only-Registry unangetastet). **Validator-Verdikt auf Ist-Bundle** (human-mechanisch ausgeführte Text-Instruktion `schema/validator.md` Rev 9, D-3 — kein CLI; keine Concept-Inhalts-Mutation): alle `wiki/`-Dateien SUCCESS.
- **Story 3.7 → Review-Loop-2-Abschluss (bmad-code-review Re-Run, 4 Layer — blind-hunter / edge-case-hunter / verification-gap / acceptance-auditor, 2026-08-20):** Nutzer-Entscheidungen D1/D2/D3 = 1/1/1 (je empfohlene Option). Findings: 3 decision-needed / 7 patch / 3 defer / 9 dismissed (False-Positives: „18 PASS lines"-Claim → 14; Wanduhr-Datumsgruppen-Verdacht → Vertrag-§5-Datumsgruppen-Pflicht; Zeilenanker-Off-by-one → exakt; CONSIST-2-ad-hoc-Rollback → korrekte §5.9-Pkt.-5-Semantik; „Nur compiler.md mutiert" → D-3-Scope-Klausel-Misread; „die Baseline" → in §5.9 Pkt. 6 definiert; frontmatter-Status-Timing / fehlender Verification-Transkript → by-design; CONSIST-3-raw-SHA-vs-Setup → korrekt). **Patches:** (1) **D1**: `deferred-work.md` append — zwei Delokalisierungs-Blöcke (Terminologie-Drift `INPUT_UNCOMMITTED`/`UNCOMMITTED_INPUT` pre-existing §5.9/§5.11, Sandbox nutzt §5.9-Label; Misch-Run-Coverage Neu-Anlage+Update → Home Story 3.8) → das done-Bullet („Delokalisierungs-Doku") ist jetzt wahr; in-progress-Bullet-Präzisierung („Defers aus dem Review-Lauf sind im done-Bullet nachgeführt") — Protokollwiderspruch aufgelöst. (2) **D2**: `sprint-status`-Wert `review` im Diff **behalten** (Review-Start-Flip, File-Header-Konvention „review: Implementation complete, ready for review") + 4 Dokumentationsstellen korrigiert (Spec-Code-Map `backlog → review`, SRO-Anker-Text, dieses in-progress-Bullet, §8-Revision-3.2-Klausel „`in-progress`" → „`review` (Impl.-Flip + Review-Start-Flip im selben Commit; finaler `done`-Flip im Step-05-Status-Sync)"). (3) **D3**: `p2_plan`-Element-(1)-Scope-Fix `git status --porcelain -- raw wiki` — exakt wie Instruktion §5.9 Pkt. 6 Element (1) (die dev-interne E1-Ablehnung „Sandbox läuft nur auf sauberen Bäumen" aufgehoben; in den IST-Szenarien wirkungslos, Demo folgt jetzt der Instruktion). **Sandbox-Patches:** CONSIST-1-EC-1-Isolation (Quellen-Löschung **committet** → Element (3) feuert isoliert; Element (1) isoliert über untracked-Datei); **CONSIST-2 Misch-Run-Erweiterung** (Neu-Anlage `delta` + Update `alpha`; Neu-Anlage-Zielpfad `+delta` als erlaubter Plan-Freeze-Teil; Duplikat-Kontrolle in `p2_plan`; Voll-Rollback → **Neu-Anlage-Absenz** via `assert_restored`-Neu-Anlage-Guard — Guard erstmals real geübt); CONSIST-5-`raw/`-SHA gg. `$BASE`-Blob (tautologischer Selbstvergleich entfernt, Muster CONSIST-4); **CONSIST-6 committierter Zustand gültig** (Body-Zeile zitiert `raw/alpha-v2.md#S-3` mit vorhandener `sources`-Nachführung `id: s3` + `generated.at`-Bump — §5.9-Pkt.-2-Update-Form vollzogen, kein mehrdeutiger Referenz-Demo); `rollback()`-Doku-Block (Voll-Rollback = §6-Pkt.-3-Teilzustand; in der Sandbox sind ungetrackte `wiki/`-Dateien lauf-eigener Teilzustand, fremde Änderungen schützen vorher Stash/Scratch nach §5.11 Pkt. 3 — AD-17e); Tippfehler (`porcelan`/`texuelle`/`Ferien-Zustand`). **Instruktions-Patch:** §5.13 Pkt. 7 Determinismus-Vertrag für „Post-Zustand" um den **dokumentierten `generated.at`-Wanduhr-Gap** ergänzt (§5.10 Pkt. 8, A0-20-Konvention, Home Story 3.8) — konsistent zu §5.10/§5.12, die das Gap bereits ausweisen. **Defers:** 3 → `deferred-work.md` Section „Deferred from: code review of … (Story 3.7, 2026-08-20)" (CONSIST-7-Label-Präzisierung; A0-20-Post-Zustand-Negativkontrolle → Story 3.8; pre-existing-Zeitpunktswort-Fuge §5.9 „Anfang der Mutationsphase" vs. §5.13/I/O-Matrix „vor der Mutationsphase" — §5.9 wortlautgeschützt). **Sandbox re-executiert:** CONSIST-1..CONSIST-7, **Exit 0, 14 harte PASS-Assertionen** (7 Szenario-Ende + 4 `assert_restored` — CONSIST-2 neu — + 2 `assert_invariant` — CONSIST-2-Endprobe durch Rollback-Flow ersetzt — + 1 `assert_frontmatter`); einzige HARD-FAIL-Zeile = intendierte CONSIST-2-Freeze-Negativkontrolle (Ghost `gamma`); CONSIST-7 non-vakuum (plan_sha `b855ee9a…` byte-identisch über beide Runs). **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation; `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert (AD-3).
- **Story 3.7 → `done` (Step-04-Review-Abschluss, 2026-08-20):** Der Review-Abschluss-Flip `in-progress → done` (Sprint-Sync-Konvention, Story-3.1/3.2/3.3/3.4/3.5/3.6-Präzedenz) ist hier als eigener dokumentierter Schritt nachgeführt; `sprint-status.yaml`-Key `3-7-reason-mutate-trennung-und-konsistenz-endzustand-sicherstell`**`review`** (Review-Schritt; das `done`-Flip ist Workflow-Konvention des Review-Abschlusses — Step-05 setzt Spec-Frontmatter `status: 'done'`), `last_updated` → 08-20-2026 00:30; Spec-Frontmatter `status: 'in-review' → 'done'`, `review_loop_iteration: 0`; Spec-`## Suggested Review Order` (Review-Trail: §5.13-Reason/Mutate-Sektion → §7/§8-Nachweis → Sandbox-Nachweis → Story-Protokoll/Defers) mit klickbaren `path:line`-Ankern (343/356/358/362/420/461 in `schema/compiler.md`). **Review-Ergebnis (Review-Loop 1, 3 Subagenten — blind-hunter / edge-case-hunter / verification-gap, kein Loopback):** keine intent_gap/bad_spec; Stapel Autofix-Patches — **Spec/SRO/Code-Map-Anker** auf IST-Zeilen korrigiert (§5.13 Einstieg Z. 343, Änderungsplanung Z. 356, Zustands-Restaurations-Invariante Z. 358, keine Engine Z. 362, §7-Bullet Z. 420, §8-Revision-3.2 Z. 461; §6-Start Z. 364, §8-AD-6 Z. 430; SRO-Sprint-Status-Label „in-progress (Implementierung)", keine `done`-Transition im Diff), **„fünf AD-6-Phasen" → „vier"** (Design Notes + §5.13-Intro-Post-Tabelle + Rev-3.2 + Boundaries + Review-Hinweis — konsistent zur AD-6-Rule und der 4-Zeilen-Zuordnungstabelle; Reconcile in die Analyse-Zelle gefasst; `fünf` in compiler.md = 0), **CONSIST-6-Sequenz** (`assert_frontmatter` + `log_commit` VOR `git commit` — der Commit enthält alpha + log.md mit Plan- und SUCCESS-Bullets; Commit enthält den §6-Pkt.-4-Nachweis, Commit-Boundary AD-17f), **CONSIST-7-`log_sha`-Vakuum** (log_sha nach Rollback ist Baseline-Konstante → nur Kommentar; Determinismus-Zeuge = `plan_sha`/`plan_state` aus dem committeten Plan-Capture-Baum, non-vakuum), **CONSIST-1-EC-1-Negativkontrolle** (P2-Element (3), fehlende `raw/alpha-v2.md`-Existenz → `p2_plan` muss `return 1`, textuell benannt, keine Mutation), **pgrep-Robustheits-Guard** (KEINE_ENGINE-Negativkontrolle: `command -v pgrep` → sonst `ps`-Fallback — pgrep auf Git-Bash-Host nicht vorhanden; vorher stille vacuöse Negativkontrolle, jetzt reeller `ps aux`-Scan), **`assert_restored`-Neu-Anlage-Guard** (`git cat-file -e "$BASE:wiki/$p"` — nicht-Baseline-Pfad darf nach Rollback nicht existieren), **Setup-Existenz-Assert** (CONSIST-4: `git cat-file -e "$BASE:raw/..."` ersetzt toten `|| sha256sum`-Fallback ohne pipefail), **Tippfehler `inv_viol` „§5.9 Pkt. 8" → „Pkt. 5"**, **plan-run.capture-Disclaimer** (nur deterministischer Sandbox-Zeuge, kein §5.13-Artefakt; „kein Artefakt-File" bleibt Ask-First-Norm), **Delokalisierungs-Doku** (deferred-work.md append-only: Terminologie-Drift `INPUT_UNCOMMITTED`/`UNCOMMITTED_INPUT` pre-existing §5.9/§5.11, §5.11-Wortlaut geschützt — XY nutzt `INPUT_UNCOMMITTED` wie §5.9-P2-Element (1); Misch-Run-Coverage Neu-Anlage+Update → Story 3.8), **Rejects** dokumentiert (u.a. E1 full-repo-P2-Check — Instruktionstext „Working-Copy von raw/ und wiki/" korrekt; Sandbox läuft nur auf sauberen Bäumen). **Sandbox re-executiert:** CONSIST-1..CONSIST-7, **Exit 0, 14 harte PASS-Assertionen**, einzige HARD-FAIL-Zeile = intendierte CONSIST-2-Negativkontrolle (Freeze-Verletzung auf `gamma`); CONSIST-7 non-vakuum (plan_sha byte-identisch über beide Runs); keine ungewollten `cat:`/`sha256sum:`-Zeilen; Zeilenanker real. **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story D-3); `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert (AD-3); Validator-Verdikt auf Ist-Bundle (human-mechanisch, `schema/validator.md` Rev 9, D-3): alle `wiki/`-Dateien SUCCESS.
- **Story 3.7 → `in-progress` (Reason/Mutate-Trennung & Konsistenz-Endzustand, Verankerung §5.13, 2026-08-20):** `schema/compiler.md` Revision 3.2 — neue Sektion **§5.13 „Reason/Mutate-Phasen-Trennung & Konsistenz-Endzustand (Story 3.7)“** (nach §5.12, vor §6): verbindliche Verankerung von **AD-6/A0-7** (Reason/Mutate-Trennung; A0-7-AC-2: konsistenter Endzustand bei Abbruch). Die **§0-Ablaufstruktur (0)(5) bleibt unverändert** (deterministische Takt-Folge, keine Um-Nummerierung); §5.13 ordnet nur logisch zu (AD-6-Phase ↔ §0-Zuordnungstabelle). Inhalte: P2-Block (§5.9 Pkt. 6) institutionalisiert als **Änderungsplanung** (Wortlaut-unverändert referenziert, Rückverweis); **Plan-Freeze** (Veränderungs-Sperre: erlaubte Pfad-Menge = Kandidatenliste Neu-Anlage log.md index.md, Verletzung = Ghost-Diff §5.9 Pkt. 5); **Zustands-Restaurations-Invariante** (Post-Rollback-Diff gg. Baseline leer, Bundle == Baseline valid committet, deterministisch, ohne Wanduhr A0-20); kein Teilerfolg (Commit-Boundary = Mutations-Boundary, AD-17f); VALIDATION_FAIL (Rollback, keine weiteren Mutationen) vs. VALIDATION_SUCCESS (Mutationen als Ganzes committen, §6-Pkt.-4-Nachweis); **KEINE_EIGENE_ENGINE** (D-3/AD-11: logische Trennung in einer Session, kein Prozess/Server/MCP). §7-Bullet ergänzt (Nachweis-Block), §8-AD-6-Anker, Revisionslog **Revision 3.2** mit Abschlussklausel (AD-3 — `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert; keine neue §7-Klasse; kein Standalone; keine Vertragsänderung; kein neuer Prädikat-/Format-/Frontmatter-Key; keine Workflow-Engine; §0 unverändert; Commit-Boundary-Regel unverändert). `sprint-status.yaml`-Key `3-7-reason-mutate-trennung-und-konsistenz-endzustand-sicherstell`**`review`** (Implementierungs-Flip `in-progress` + Review-Start-Flip `review` im selben Commit; finaler `done`-Flip im Step-05-Status-Sync), `last_updated` → 08-20-2026 00:30 (Story 3.7). **Sandbox-Nachweis** (`_bmad-output/implementation-artifacts/sandbox-3-7/run-sandbox.sh`, `/tmp`-Baum, Linux-Semantik, nie der reale `wiki/`-/`raw/`-Baum): **CONSIST-1..CONSIST-7, Exit 0, 14 harte PASS-Assertionen** — CONSIST-1 konsistente Änderungsplanung (P2-Block) aus committetem Input + **Plan-Defizit-Abbruch VOR der Mutationsphase** (uncommitteter Input AD-17a); CONSIST-2 **Plan-Freeze** (Verletzung auf Nicht-Plan-Pfad `gamma` erkannt, Ghost-Diff-Rollback); CONSIST-3 **Zustands-Restaurations-Invariante** (Post-Rollback-Diff leer, Bundle == Baseline, SHA-256 byte-identisch, `raw/` unverändert AD-3); CONSIST-4 kein Teilerfolg als fertige Mutation (Commit-Boundary = Mutations-Boundary AD-17f); CONSIST-5 **VALIDATION_FAIL** (§6-Pkt.-3-Rollback, keine weiteren Mutationen); CONSIST-6 **VALIDATION_SUCCESS** (Mutationen als Ganzes committet, Diff-Selbsttest ohne Ghost-Diff, §6-Pkt.-4-Nachweis, kein Wanduhr-Trigger A0-20); CONSIST-7 **Determinismus-Zwei-Run nicht-vakuum** (identische Plan-/Rollback-/State-Outputs, AD-17h/A0-19; der Plan wird nach Rollback aus dem committeten Baum `git show`-gelesen — der einzige deterministische Zeuge, da `rollback` auf Baseline resettet) + **KEINE_ENGINE-Negativkontrolle** (kein Prozess/Server/MCP — D-3/AD-11, AC-4). Die einzige HARD-FAIL-Zeile im Sandbox-Output ist die intendierte CONSIST-2-Negativkontrolle (Freeze-Verletzung auf `gamma` — erwarteter Non-Zero-Exit, vom Szenario hart assertiert). **Keine Story-3.7-Defers** (per Implementierungsstand, per Spec-README: keine Home-3.7-Defers; Defers aus dem Review-Lauf sind im done-Bullet nachgeführt). **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story D-3); `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert (AD-3); Validator-Verdikt auf Ist-Bundle (human-mechanisch, `schema/validator.md` Rev 9, D-3): alle `wiki/`-Dateien SUCCESS.
## 2026-08-19
- **Story 3.6 → `done` (Step-04-Review-Abschluss, 2026-08-19):** Der Review-Abschluss-Flip `in-progress → done` (Sprint-Sync-Konvention, Story-3.1/3.2/3.3/3.4/3.5-Präzedenz) ist hier als eigener dokumentierter Schritt nachgeführt; `sprint-status.yaml`-Key `3-6-…`**`done`**, `last_updated` → 08-19-2026 22:10; Spec-Frontmatter `status: 'in-review' → 'done'`, `review_loop_iteration: 0`; Spec-`## Suggested Review Order` (Review-Trail: §5.12-Leasing-Staleness-Sektion → §7/§8-Nachweis → Sandbox-Nachweis → Story-Protokoll/Defers) verankert. **Review-Ergebnis (Review-Loop 1, 3 Subagenten — blind-hunter / edge-case-hunter / verification-gap, kein Loopback):** keine intent_gap/bad_spec; Stapel Autofix-Patches (Terminologie-Inversion „jünger→älter" in §5.12 Pkt. 1/3/6 + §8-Revisionslog + log.md + Spec, Gen kleiner = älter; Generations-Quellen-Präzedenz deterministisch gepinnt — committeter `lease-granite-root`-Marker gewinnt, sonst `lease/`-Baumableitung, sonst Startwert `gen = 0`; STALE-1-kern generationenbasiertes TTL gegen **dieselbe** `id` durchgesetzt, STALE-3-Re-Akquise, STALE-5-Same-id-A/B, holder_id-genuine Ableitung, baseline_commit-Merge-Base-Diskrepanz real, STALE-4-**lesender-**`raw/`-Bind (Recovery-Basis Zugriffs-/Consistency-Basis), Marker-Idempotenz-Regex, STALE-6-Full-State-Invariante, log_bullet-Datumsgruppen); **1 neuer Defer**`deferred-work.md` append-only (Schicksal des `lease/<area>/<id>`-Branch nach Übernahme/Stale-Markierung — Home: spätere Instruktions-/Sandbox-Runde oder Story 3.8). **Sandbox re-executiert:** STALE-1..STALE-6 + Erhaltungs-Invariante, **Exit 0, 12 harte PASS-Assertionen**; AD-3 geprüft (`schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert); Validator-Verdikt auf Ist-Bundle: alle `wiki/`-Dateien SUCCESS (keine Inhalts-Mutation). **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story).
- **Story 3.6 → `in-progress` (Lease-Staleness & Recovery-Basis, Verankerung §5.12, 2026-08-19):** `schema/compiler.md` Revision 3.1 — neue Sektion **§5.12 „Lease-Staleness & Recovery-Basis (Story 3.6)“** (nach §5.11, vor §6), die **verbindliche Verankerung der Staleness-/Recovery-Dimension** (AD-17d, A0-15; §5.11-Seam-Kriterium S-1 und Pkt.-7-Text sowie §5.11 Pkt. 1 „verbleibt bis Story 3.6“ textuell unverändert — Haltbarkeits-Fuge): (1) **Lease-Registrierung & generationenbasiertes TTL** — Registrierung im **Clone-Root-State** (nicht `wiki/`/`raw/`/Concept-Frontmatter, Vertrag §3.1–§3.7 unverändert), monotoner Run-Generator (**`generation`-Zähler je Clone-Root**, deterministisch aus dem committeten Git-State ableitbar: `lease/`-Baumableitung oder Mono-Commit-`lease-granite-root`-Marker), **TTL-Ablauf-Kriterium generationen-basiert** (ältere Erzeugungs-Generation = stale, blockiert keinen nachfolgenden Run, I/O-Matrix `STALE_ABLAUF`), **kein Wanduhr-Timestamp im Lockfile-/Registrierungs-Format** (A0-20; streng durchsetzendes Zeit-TTL = Ask-First); (2) **holder_id-Ableitung** (deterministischer Default `holder_id := <producer>-<id>`, reproduzierbar aus dem committeten Git-State; **Story-3.5-Defer aufgegriffen**); (3) **Verwaist-Klassifikation, Übernahme & Stale-Markierung** (AD-17e/AD-17g) — `VERWAIST_UEBERNEHMEN` gg. erneute Merge-Base-Prüfung (Pkt.-4-Regel) mit log.md-Protokoll, `VERWAIST_STALE_MARKIEREN` via Registry-Marker der aktuellen Generation (Blockade aufgehoben); verwaiste Leases **nie still gelöscht** (AD-17e); (4) **baseline_commit-Merge-Base-Diskrepanz-Regel**`git merge-base` gewinnt, notierter `<Baseline-Commit>` bleibt Sekundär-Fingerprint, Fallback ohne Boundary (alle `raw/`-Dateien Zuwachs, Merge-Base = ältester Fundamentpunkt, §5.9 Pkt. 6 R-1/AD-14); gilt auch bei Lease-Übernahme (**Defer aufgegriffen**); (5) **`raw/`-Recovery-Basis & native `git stash`-Variante** — `raw/` immutable AD-3 als Zugriffs-/Consistency-Basis, Real-Baum-Beweis auf Sandbox-Evidenzwege beschränkt (EC-1-Grenze), `git stash push -- <Pfade>` als zweite textuell zulässige Schutzvariante (byte-identisch, nie gelöscht, Restore dokumentiert; **Defer aufgegriffen**); (6) **Registrierungs-Invariante & kumulativer Registry-Aufbau über Runs** (Vertrag §5) — `Gen > erzeugend oder gleiche Gen`, hält den sichtbar höchsten Reg-Generator, kein eigener `# Log`-Stand in der Registry (`wiki/log.md` alleiniger Aufzeichnungs-Ort; **Defer aufgegriffen**); (7) **`log.md`-Eintragspflicht & Determinismus-Vertrag** (AD-17h/A0-19) — Registrierung/TTL, Lease-Übernahme, Stale-Markierung, Recovery-Basis-Nutzung als datumsgruppierte Einträge (neueste zuerst, `<Baseline-Commit>` D-2), **deterministisch aus dem committeten Git-State**, kein Wanduhr-Timestamp steuert einen Vorgang. **§7-Vorbehalt `Lease-Staleness/Recovery` (`:376`) aufgelöst:** „**in §5.12 dieser Instruktion verankert (Story 3.6)**“ (§5.11-Pkt.-7-Seam-Satz und §7-Leasing-Enum-Bullet-Text unverändert). **§8-Normreferenzen** AD-17d/A0-15 von reiner Story-Zuordnung auf **§5.12-Anker** angehoben (`AD-17d (Lease-Staleness, §5.12)`, `A0-15 (Lease-Staleness, §5.12)`). **§8-Revisionslog Revision 3.1** mit Abschlussklausel (keine Änderung an `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` AD-3; **keine neue §7-Invaliditätsklasse**; **kein Standalone** D-3; keine Vertragsänderung; **kein neuer Frontmatter-Key für Lease-Metadaten**; kein Prädikat-/Format-Key; Commit-Boundary-Regel unverändert). **Sandbox `sandbox-3-6/run-sandbox.sh` re-executierbar (Muster sandbox-3-5, `/tmp`-Baum, `core.autocrlf false`-Pin für deterministische `git stash`-Roundtrips; nie der reale `wiki/`-`/raw/`-Baum):** **STALE-1 STALE_ABLAUF** (abgebrochener Run hinterlässt Lease + Registrierung ohne Freigabe; nachfolgender Run klassifiziert sie generationenbasiert als stale — **kein Blockade-fail**, akquire run-b erfolgreich; Lockfile + Registry-Zeile bleiben, AD-17e; kein Wanduhr-Timestamp A0-20; log.md-TTL-Eintrag Pkt. 6a/7a), **STALE-2 VERWAIST_UEBERNEHMEN** (Übernahme gg. erneute Merge-Base-Prüfung `git merge-base == $BASE`, log.md-Übernahme-Eintrag Pkt. 6b/7b, holder_id-Ableitung Pkt. 2, nichts still gelöscht AD-17e), **STALE-3 VERWAIST_STALE_MARKIEREN** (Registry-Marker `stale: run-a (Gen 2)`, `lease_active=false` → Blockade aufgehoben, log.md-Eintrag Pkt. 6c/7c, Gen-Invariante gehalten, Lockfile+Zeile bleiben AD-17e), **STALE-4 RECOVERY_RAW_BASIS** (`raw/`-SHA-256 vor/nach identisch — immutable AD-3, EC-1-Grenze; native `git stash push`/`pop` um `wiki/alpha.md` byte-identischer Restore via SHA-256, nie gelöscht; log.md-Recovery-Eintrag Pkt. 6d/7d), **STALE-5 REGISTRIERUNGS-INVARIANTE** (drei Runs in EINER `registry/wiki` — Gen 3 == höchster, Regression auf Gen 1 zurückgewiesen (Invariante Pkt. 6); verwaiste Kanten run-a/run-b/run-c nie gelöscht AD-17e; HOLD gegen aktive Lease deterministisch (akquire run-c verweigert), kein Abbruch-Text; kein Wanduhr), **STALE-6 DETERMINISMUS** (AD-17h/A0-19: zwei identische Runs → Registry- und `log.md`-SHA-256 **byte-identisch**, identische Stale-Markierungs-Klassifikation); **Exit 0, 6/6 harte PASS-Szenarien** (re-executiert, 08-19-2026). **4 Defers aufgegriffen (Story 3.5, Home 3.6):** `deferred-work.md` append-only — vier `### Aufgegriffen`-Blöcke (holder_id-Quelle → §5.12 Pkt. 2; baseline_commit-Diskrepanz → §5.12 Pkt. 4; Sandbox-log-Akkumulator/cumulative Registry → §5.12 Pkt. 6; native `git stash`-Variante → §5.12 Pkt. 5), je Status `aufgegriffen (Home erledigt in §5.12 …)` + Sandbox-Nachweis; keine neuen Story-3.6-Defers. **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story; `sprint-status.yaml`/`deferred-work.md`/`sandbox-3-6/` liegen außerhalb `wiki/` und sind nicht Teil der Diff-Probe). **Validator-Verdikt (per-Datei, human-mechanisch ausgeführte Text-Instruktion `schema/validator.md` Rev 9, D-3 — kein CLI; unverändert zur Story 3.5, Story 3.6 mutiert keine Concept-Inhalte):** alle **7** `wiki/`-Dateien **SUCCESS**`wiki/index.md` (Punkt 11, Bundleroot), `wiki/knowledge-kompilation-inkrementell.md`, `wiki/llm-wiki-prinzip.md`, `wiki/wissensarchitektur-trennung-states.md` (Punkte 1/2/6/7/8/9/11/12/13/14, EC-1), `wiki/log.md` (frontmatterlos, Punkt 10), `wiki/wissensarchitektur/index.md` (frontmatterlos, Punkt 10/11), `wiki/wissensarchitektur/source-material.md` (Punkte 1/2/6/7/8/9/11/12/13/14, EC-1; Punkt 11 inkl. Area-Lesart Rev 9). `schema/validator.md`/`schema/wiki-compiler.md`/`raw/` unverändert (AD-3, via `git status` geprüft); keine neue §7-Klasse; kein Standalone (D-3). `sprint-status.yaml`-Key `3-6-…`**`in-progress`**, `last_updated` → 08-19-2026 21:30.
- **Story 3.5 → `done` (Step-04-Review-Abschluss, 2026-08-19):** Der Review-Abschluss-Flip `in-progress → done` (Sprint-Sync-Konvention, Story-3.1/3.2/3.3/3.4-Präzedenz) ist hier als eigener dokumentierter Schritt nachgeführt; `sprint-status.yaml`-Key `3-5-…`**`done`**, `last_updated` → 08-19-2026 20:37; Spec-Frontmatter `status: 'in-review' → 'done'`, `review_loop_iteration: 0`; Spec-`## Suggested Review Order` (Review-Trail: §5.11-Leasing-Sektion → §7/§8-Nachweis → Sandbox-Nachweis → Story-Protokoll/Defers) verankert. **Review-Ergebnis (Review-Loop 1, 3 Subagenten — blind-hunter / edge-case-hunter / verification-gap, kein Loopback):** keine intent_gap/bad_spec; Stapel Autofix-Patches (Text-Fixes (§5.11): Pkt.-1-Querverweis „Pkt. 3" → „Pkt. 2", UNCOMMITTED_INPUT als dieselbe §5.9-P2-Prüfung deklariert, „neueste zuerst"-Datumsgruppe, Lease-Freigabe als deterministischer Pkt.-1-Sub-Bullet + Pkt.-6-Eintragstyp (e), testbares 3.5/3.6-Seam-Kriterium, AD-17d/A0-15-Norm-Rückverweis, §8-Revision 3.1; Sandbox: Header-Bullet-Paare, L2-Lease-Hold-Exit-Assertion, L4-Restore-Weg + UNCOMMITTED_INPUT-Abbruch-Wirkung, L6-BUILD_HEAD, L5-Klassifikations-Bullet, N1-§5.10-Pkt.-8-Orphan-Nachbarschaft, D2-Kumulative-Aufzeichnung); **4 Defers**`deferred-work.md` append-only (holder_id-Quelle · baseline_commit-Merge-Base-Diskrepanz-Regel · Sandbox-log-Akkumulator [D2 schließt] · native `git stash`-Variante — Home je Story 3.6/3.8). **Sandbox re-executiert:** L1L6 + N1 + D1 + D2, **Exit 0, 21 harte PASS-Assertionen**; AD-3 geprüft (`schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert); Validator-Verdikt auf Ist-Bundle: alle `wiki/`-Dateien SUCCESS (keine Inhalts-Mutation). **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story).
- **Story 3.5 → `in-progress` (Leasing & Dirty-Tree-Schutz, Verankerung §5.11, 2026-08-19):** `schema/compiler.md` Revision 3.0 — neue Sektion **§5.11 „Leasing & Dirty-Tree-Schutz für konkurrierende Producer (Story 3.5)“** (nach §5.10, vor §6): Lease-Akquise auf **`lease/<area>/<id>`-Branches** vom Merge-Base mit **Lockfile** (`lease/<area>/<id>.lock`, semantisch identisch in jedem Adapter, A0-12; deterministische Felder `area`/`id`/`producer`/`baseline_commit`/`holder_id` — kein Zeitstempel, AD-17h), Basis-Commit = eindeutiger Commit-Object-Wert (Merge-Base-Disziplin); **Root-Scope-Lease** (AD-17b, A0-13: `wiki/` inkl. `log.md`, `index.md`, aller Root-Dateien; kein Bereich jenseits `wiki/`); **Dirty-Tree-Schutz** (AD-17e/f, A0-16: Pre-Mutation-Prüfung, Stash/Scratch-Zone außerhalb `wiki/`, fremde uncommittete Änderungen NIE gelöscht, log.md-Dokumentation, UNCOMMITTED_INPUT-Abbruch „published/committed Input erforderlich“ AD-17a); **kein textueller Auto-Merge** (AD-17c, A0-14: compiler-vermittelter AD-16-Pfad, Default Erhaltung, log.md-Klassifikations-Eintrag, Eskalation AD-17g); **Commit-Boundary = Mutations-Boundary** unverändert (§0/§5.3); `log.md`-Eintragspflicht (Akquise/Schutz/Klassifikation/Eskalation, `<Baseline-Commit>`, D-2); **Determinismus-Vertrag** (AD-17h/A0-19) · **Lease-Staleness/Recovery bleibt → Story 3.6** (AD-17d, A0-15). §7-Vorbehalt `:357` **aufgelöst** (→ §5.11), §8-Normreferenzen um AD-17b/c/d/e-f/g + A0-12..A0-16 ergänzt, Abschlussklausel (AD-3, keine neue §7-Klasse, kein Standalone D-3, keine Vertragsänderung, kein neuer Frontmatter-Key). `sprint-status.yaml`-Key `3-5-…`**`in-progress`**. **Sandbox `sandbox-3-5/run-sandbox.sh` re-executierbar (Muster Story 3.4, /tmp-Baum):** L1 Lease-Akquise (Branch-Form, Lockfile-Felder, Merge-Base = eindeutiger Commit-Object-Wert), L2 Lease-Hold (zweite Akquise verweigert, Lockfile unverändert, keine Mutation), L3 Root-Scope (index/log/Root-Dateien erfasst; raw//lease/ keine Mutationsziele), L4 Dirty-Tree-Schutz (Pre-Mutation-Prüfung erkennt Fremd-Aenderung, Scratch-Zone byte-identisch, NIE gelöscht, log.md-Dokumentation; UNCOMMITTED_INPUT-Abbruch), L5 NO_AUTO_MERGE (Merge-Versuch scheitert; AD-16-Erhaltung + Eskalation AD-17g, beide Behauptungen erhalten), L6 COMMIT_BOUNDARY (Zwischenstand nie committet; validierte Mutation committet; invalidierter Zwischenstand → Validierungs-FAIL → Rollback §5.3), N1 ??-Ghost-Diff-Negativkontrolle (Ghost-Datei als Duplikat/Ghost-Diff verworfen, Kontrolle nicht vacuous), D1 Determinismus (Lockfile-Inhalt + Merge-Klassifikation Zwei-Run-identisch, AD-17h/A0-19); **Exit 0**, **21 harte PASS-Assertionen** (2 HARD-FAIL-Zeilen sind die intendierte N1-Ghost-Erkennung). **Review-Loop-1-Patches (Step-04, kein Loopback, 2026-08-19):** log-Helfer → **Header-Bullet-Paare** je Eintrag (Vertrag-§5-Datumsgruppe, neueste zuerst, wie §5.9 Pkt. 4); **L1 Lease-Freigabe (Release, deterministisch, §5.11 Pkt. 1)**`free_lease` entfernt nach committetem Run das Lockfile und dokumentiert den Abschluss als **log.md-Freigabe-Eintrag** (+ log_release-Helfer; Lockfiles häufen sich nicht; eine ohne Freigabe beendete Lease verbleibt → **Story 3.6**); L2 `akquire`-Exit-Status != 0 als Fehlerpfad-Assertion; **L4 Restore-Weg** (Scratch → Bundle, byte-identischer Restore; Fremd-Aenderung nie gelöscht) + **UNCOMMITTED_INPUT-Abbruch-Wirkung hart assertiert** (`HEAD` unverändert `[ "$(git rev-parse HEAD)" = "$BASE" ]`, `ALPHA_ONLY` exakt „alpha" — **dieselbe Pre-Run-Prüfung** wie §5.9-P2-Element (1) `INPUT_UNCOMMITTED`, kein zweiter Abbruch-Pfad, §5.11 Pkt. 3); L5 Merge-Klassifikations-Bullet in Datumsgruppen-Form (`-- '- Merge-Klassifikation: …'`); **L6** Widerspruchs-Tautologie (`BROKEN_HEAD`/`COMMIT_AFTER_RUN`) → einzelnes `BUILD_HEAD`, Frontmatter-Negativtest subshell-gewrappt (Exit-1-safe); N1-Header um §5.10-Pkt.-8-Orphan-Nachbarschaft + §5.9-Pkt.-5-Erhaltungs-Invariante; L3-`??`-Sicht-Assertion (`^?? wiki/beta.md`); **neues D2 „Kumulative Koordinations-Aufzeichnung"** — 4 Koordinationsentscheidungen (log_lease + log_dirty + log_merge + log_release) in EINEM `log.md`: `HEADERS = 4`, jede Bullet präsent, erst an der Commit-Boundary committiert — PASS. **Seam-Kriterium 3.5/3.6 (compiler.md §5.11 Pkt. 7):** 3.5 = committeter-Git-State-Determinismus (AD-17h), 3.6 = Zeit-/Umgebungs-Zustands-Frage (TTL-Ablauf, verwaiste/hängende Leases, `raw/`-Recovery). **4 Defers → `deferred-work.md`** (holder_id-Uniqueness-Quelle; baseline_commit-Merge-Base-Diskrepanz-Regel; Sandbox-log-Akkumulator vs. isolierte Szenarien [D2 schließt]; native `git stash`-Variante ungetestet — Home je Story 3.6). Sandbox nach allen Patches re-executiert: **Exit 0, 21 PASS**. **Validator-Verdikt auf Ist-Bundle:** `schema/validator.md`/`schema/wiki-compiler.md`/`adapters/`/`raw/` unverändert (AD-3); alle `wiki/`-Dateien SUCCESS (keine Inhalts-Mutation); `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag).
- **Story 3.4 → `done` (Step-04-Review-Abschluss, 2026-08-19):** der Review-Abschluss-Flip `in-progress → done` (Sprint-Sync-Konvention, Story-3.1/3.2/3.3-Präzedenz) ist hier als eigener dokumentierter Schritt nachgeführt; `sprint-status.yaml`-Key `3-4-…`**`done`**, `last_updated` → 08-19-2026 16:40 (Präzisions-Rückgewinnung auf HEAD-Format `HH:MM`); Spec-Frontmatter `status: 'in-review' → 'done'`, `review_loop_iteration: 0`; Spec-`## Spec Change Log`-Review-Loop-1-Eintrag + `## Suggested Review Order` (Review-Trail: Synthese-Sektion → §7/§8 → Sandbox-Nachweis → Provenienz/Status) verankert. **Review-Ergebnis (Loop 1, 3 Subagenten — blind-hunter / edge-case-hunter / verification-gap, kein Loopback):** keine intent_gap/bad_spec; Stapel Patches (compiler.md §5.10: Reflektiertheits-Selbsttest-Muster auf Zeilenanfangs-Label erweitert `^(Quelle|Source) [A-Z][A-Za-z0-9_ -]*:`, **Body-Reihenfolge deterministisch** über Beleg-Anker LC_ALL=C, **Konsolidierungs-Kriterium** Befund-Äquivalenz, Duplikat-Fall + Orphan-Kontrolle in Pkt. 8, Stil-/Genus-Korrekturen; Sandbox: `git add -A`-wiki-Staging entfernt → Pkt.-8-`??`-Sicht lebendig, **S5-Pkt.-8-`??`-Negativkontrolle** (Ghost-Datei-HARD-FAIL), **N1**-Stimulus-Kommentar, **neue Szenarien N2 Disagreement (AD-16, §5.10 Pkt. 3/7)** + **N3 AD-4c-Übernahme-Marker** — erstmals = **10 Szenarien S1S6 + N1N3 + FW**, Exit 0 dreimal re-executiert, 30 harte PASS-Assertionen; S1/S2-log.md-Multi-Source-Listen; log.md-/Spec-/sprint-status-Konsistenz); **4 Defers**`deferred-work.md` append-only (AD-16/AD-4c-reale-Anwendung Home Epic-4, Orphan-Kontrolle Home Story 3.8, Umlaut/Em-Dash-Sandbox-Normalisierung Home Story 3.8, Frozen-„Nickel"-Typo Re-Negotiation); Rejects dokumentiert. **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story); `schema/validator.md`/`schema/wiki-compiler.md`/`raw/` unverändert (AD-3, geprüft). Sandbox re-executiert: **10/10 Szenarien PASS, Exit 0**.
- **Story 3.4 — Step-03-Abschluss Audit (2026-08-19):** **Sandbox-Nachweis re-executiert (Story-3.4-Sandbox, `bash _bmad-output/implementation-artifacts/sandbox-3-4/run-sandbox.sh`, Linux-Semantik auf einem `/tmp`-Baum, Exit 0)** — jetzt **S1S6 + N1N3 + Form-Wahl-Probe FW = 10 Szenarien** (zuvor 7): **N1 NO_OP-SYNTHESE** ergänzt (deckt die I/O-Matrix-Zeile `NO_OP_SYNTHESE`, Story-3.3-U4-Muster: zweite committete Quelle mit redundanter Evidenz zum selben Thema → keine Form greift → **No-Op als Nicht-Form**: volle Byte-Identität von `alpha.md`/`log.md`/`index.md`, kein `generated.at`-Bump, kein sources-Zusatz, kein `log.md`-Eintrag, Probe leer = Ghost-Diff-negativ — PASS), **N2 DISAGREEMENT** (AD-16-Default, §5.10 Pkt. 3/7: widersprüchliche Aussagen zweier Quellen werden **nicht** still zu einer scheinbar eindeutigen Aussage zusammengeführt; beide Behauptungen + je Beleg bleiben, kein `(e; f)`-Falsch-Multi-Beleg, `Disagreement:`-Eintrag in `log.md` — Epic-4-Interface — PASS) und **N3 AD-4c-UEBERNAHME-MARKER** (Kontext-Marker-Muster „übernommen aus `gamma` auf Basis von `raw/gamma-v1.md#S-1`, nicht eigenständig belegt"; eigenständig belegte Aussagen tragen den Marker nicht; `raw/gamma-v1.md` wird **nicht** als eigene `sources`-Quelle eingetragen — PASS). **S5-Pkt.-8-`??`-Negativkontrolle** nun lebendig: eine ungetrackte Nicht-Ziel-Datei (`ghost.md`) außerhalb der erlaubten Ziel-Pfade wird von der `??`-Sicht als Duplikat/Ghost-Diff HARD-FAIL erkannt (Story-3.3-U9-Muster, nicht vacuous). **S5-Mechanik korrigiert** (auditierte `&&`-Verkettung von `assert_invariant`/`assert_frontmatter` ersetzt): die Erhaltungs-Invariante wird in Non-Exiting-Varianten aufgespalten (`inv_viol` + `assert_frontmatter_ok`), S5-Setup als regelkonforme Anlage (delta + Index-Link + log-Eintrag) restrukturiert — der Verstoß sitzt jetzt ausschließlich in der **Struktur-Ebene** (unbefugter Key `foo:`); Path-Set-Ebene teils erwartet gehalten, teils das Erkennen des Struktur-Verstoßes hart assertiert (P2-Element (6), Vertrag §3.3/§3.4-Subset — nicht vacuous) — PASS. **Matrix-Test-Audit (step-03):** alle 7 I/O-Matrix-Zeilen abgedeckt+bestanden — HAPPY_SYNTHESE_NEUANLAGE→S1, HAPPY_SYNTHESE_KONSOLIDIERUNG→S2, HAPPY_SYNTHESE_UPDATE→S4, NO_OP_SYNTHESE→N1, ANEINANDERREIHUNG_NEGATIV→S3, STRUKTUR_ERHALT→S5, SYNTHESE_OVERLAP_FORMCROSS→FW. Spec-`## Tasks & Acceptance`: alle 4 Execution-Tasks `[x]`. Layout-/Struktur-/AD-3-/Erhaltungs-Invariante-Verifikation erneut bestanden (`git status --porcelain -- wiki/` ausschließlich `wiki/log.md`; `schema/validator.md`/`schema/wiki-compiler.md`/`raw/` unverändert).
- **Story 3.4 «Wissen aus mehreren Sources synthetisieren — gemischte claim-granulare Provenienz operationalisieren» (Implementierung, Instruktions-Story D-3; `sprint-status.yaml`: Key `3-4-wissen-aus-mehreren-sources-synthetisieren` **`in-progress`**):** `schema/compiler.md`**Revision 2.9** — die **Synthese-Dimension** (AD-4, FR-7; §7-Vorbehalt `:343` aufgelöst) als neue Sektion **§5.10 „Synthese aus mehreren Sources (Story 3.4)"** verankert (nach §5.9, vor §6): (1) **Synthese-Stimulus** — ≥ 2 belegende `raw/`-Quellen desselben Themas per §2-Interpretation → eine Synthese-Einheit; einzelne Quelle bleibt auf §5.9-/§3.2-Pfad; (2) **Ein-Ziel-Repräsentation (FR-7 AC-1)** — ein Synthese-Concept über einen Ziel-Pfad (§5.7-Routing), `sources`-Liste ≥ 2 Einträge, **deterministisch lexikografisch nach `resource` (LC_ALL=C, AD-17h/A0-19)**, getrennte Zusammenfassungs-Concepts je Quelle verboten (FR-7); (3) **gemischte claim-granulare Provenienz (AD-4a/4b, A0-3)** — je Aussage Inline-`raw/`-Verweis §5.5, **Multi-Beleg-Konsolidierung** (§5.5-Semikolon-Form, voller Pfad je Beleg; keine Beleg-Tilgung AD-4), **AD-16-Default** (widersprüchliche Aussagen bleiben, Disagreement in `log.md` — Epic-4-Interface); (4) **AD-4c-Übernahme-Marker** („übernommen aus `<Concept>` auf Basis von `<source>`, nicht eigenständig belegt" — nie alleinige Provenienz); (5) **Reflektiertheits-Selbsttest (FR-7 AC-4/NFR-7)** — keine per-Source-Zusammenfassungs-Struktur („Quelle A: …/Quelle B: …"), grepbasiert `grep -nE 'Quelle [A-Z]:|Source [A-Z]:'`, Befund = textuell benannter Instruktions-Selbsttest-FAIL (NFR-4), vor Run-Abschluss zu beheben; (6) **§5.6-Pin unverändert** + **Form-Wahl-Klassifikationsprobe (Story-3.3-Defer U2/U7)** — Überlapp-Einheiten an die §5.9-Abgrenzungs-Reihenfolge `Korrigieren → Präzisieren → Erweitern → No-Op` (erste zutreffende Form, AD-17h), Textgenauigkeits-Rahmen der übrigen Formen je Teilbestand; **(7) `log.md`-Eintragspflicht** — „Story 3.1-Update" bei Synthese-Update, Anlage-Eintrag bei neuem Synthese-Concept (disambiguierbar), Multi-Source-Liste + `<Baseline-Commit>` (R-1); (8) **Erhaltungs-Invariante (§5.9 Pkt. 5 gilt unverändert) + Determinismus-Vertrag** — Ziel-Pfad via §3.2/§5.7, `sources`-Lexikografie, Konsolidierung/Form-Zuordnung deterministisch; `generated.at`-Wanduhr-Gap bleibt A0-20-Konvention, Home Story 3.8. **§7:** Synthese-Vorbehalt **aufgelöst** („in §5.10 verankert"); Scope-Einleitung um §5.10 geöffnet; verbleibende 3.x-Themen: Leasing/Dirty-Tree → Story 3.5/3.6. **§8:** Revisionslog **Revision 2.9** mit Abschlussklausel (keine Änderung an `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` AD-3; **keine neue §7-Invaliditätsklasse**; **kein Standalone** D-3; keine Vertragsänderung; **keine fünfte Update-Form** — Abgrenzungs-Reihenfolge §5.9 unverändert, Synthese = Querschnitt; kein Leasing-Scope; Commit-Boundary-Regel unverändert). **Sandbox-Nachweis (re-executiert 2026-08-19, ab Workspace-Root, `bash _bmad-output/implementation-artifacts/sandbox-3-4/run-sandbox.sh`; Linux-Sandbox-Semantik auf einem `/tmp`-Baum, nie der reale `wiki/`-Baum; Exit **0**, zweimal re-executiert):** Mini-Bundle mit `alpha`/`gamma`-Root-Concepts; Szenarien **S1S6 + N1N3 + Form-Wahl-Klassifikationsprobe FW (10)**, harte Pass/Fail-Assertionen (Exit 1; damit inzwischen **10 Szenarien, Exit 0**, zweimal re-executiert): **S1 NEU-ANLAGE** (zwei Quellen `raw/synth-a.md`+`raw/synth-b.md`**ein** Synthese-Concept `delta`, `sources` ≥ 2 lexikografisch LC_ALL=C — PASS, gemischte §5.5-Belege je Aussage — PASS, keine per-Source-Struktur — PASS, Index-Link Punkt 11 + Anlage-Eintrag — PASS, Probe `{delta index log}` — PASS, Frontmatter — PASS), **S2 KONSOLIDIERUNG** (redundante Aussage in beiden Quellen → **eine** konsolidierte Aussage mit Multi-Beleg-Semikolon-Form `(raw/synth-c.md#S-1; raw/synth-d.md#S-1)` — PASS, keine Beleg-Tilgung AD-4 — PASS, Probe `{delta index log}` — PASS), **S3 NEGATIV-KONTROLLE ANEINANDERREIHUNG** („Quelle A:/Quelle B:"-Struktur wird vom Reflektiertheits-Selbsttest erkannt — nicht vacuous — und durch integrierte, provenance-versehene Aussagen umgebaut (NFR-4) — PASS), **S4 SYNTHESE-UPDATE** (zwei Quellen treffen den bestehenden Pfad `alpha` → §5.9-Formwahl **ERWEITERN**, `sources`-Zuwachs `s2`+`s3` lexikografisch, bestehende belegte Aussagen byte-identisch, »Story 3.1-Update«-Eintrag, Probe `{alpha log}` — PASS; Index-Link unverändert, §5.9 Pkt. 3), **S5 STRUKTUR-/FRONTMATTER-INVARIANTE** (unbefugter Key `foo:` im Synthese-Concept → Frontmatter-Subset-HARD-FAIL, Pkt. 8/P2-Element (6) — PASS; **Pkt.-8-`??`-Negativkontrolle lebendig**: ungetrackte Nicht-Ziel-Datei `ghost.md` → Duplikat/Ghost-Diff-HARD-FAIL, nicht vacuous), **S6 ZWEI-RUN-IDENTITÄT (AD-17h/A0-19)** (zwei unabhängige Synthese-Runs über dieselben zwei Quellen → byte-identisches Ergebnis: `delta.md`/`log.md`/`index.md`-SHA-256 identisch je Lauf, auch nach Commit — PASS), **N2 DISAGREEMENT (AD-16, §5.10 Pkt. 3/7)** (widersprüchliche Quellen-Befunde → beide Behauptungen + je Beleg bleiben, kein `(e; f)`-Falsch-Multi-Beleg, `Disagreement:`-Eintrag in `log.md` — Epic-4-Interface — PASS), **N3 AD-4c-ÜBERNAHME-MARKER** (Kontext-Marker „übernommen aus `gamma` auf Basis von `raw/gamma-v1.md#S-1`, nicht eigenständig belegt"; eigenständig belegte Aussagen tragen den Marker nicht; `raw/gamma-v1.md` als übernommene Quelle nicht in `sources` — PASS), **FW FORM-WAHL-KLASSIFIKATIONSPROBE** (Story-3.3-Defer U2/U7: gemischte Einheit mit Ersetzungs-Befund → erste zutreffende Form **KORRIGIEREN**; Ablösung mit Ersetzungs-Multi-Beleg, alter Wortlaut erhalten AD-16-Default, Nebenbefund byte-identisch, `sources` ≥ 2 lexikografisch, Probe `{alpha log}` — PASS). **Erhaltungs-Invariante §5.9 Pkt. 5 wird hart erzwungen** (Proben-Einträge normalisiert ⊆ {betroffener Pfad, log} Neu-Anlage-Zielpfade Index; `??`-Sicht = keine neue Datei außer echten Ziel-Pfaden; kein Ghost-Diff lässt sich still durchschleusen). **Status-/Diff-Nachweis:** nach diesem Instruktions-Run zeigt `git status --porcelain -- wiki/` ausschließlich `wiki/log.md` (dieser Eintrag) — Erhaltungs-Invariante gewahrt, keine Concept-Inhalts-Mutation (Instruktions-Story, Demonstration per Sandbox). **Validator-Verdikt (per-Datei, human-mechanisch ausgeführte Text-Instruktion `schema/validator.md` Rev 9, D-3 — kein CLI; unverändert zur Story 3.3, Story 3.4 mutiert keine Concept-Inhalte):** alle **7** `wiki/`-Dateien **SUCCESS**`wiki/index.md` (Punkt 11, Bundleroot), `wiki/knowledge-kompilation-inkrementell.md`, `wiki/llm-wiki-prinzip.md`, `wiki/wissensarchitektur-trennung-states.md` (Punkte 1/2/6/7/8/9/11/12/13/14, EC-1), `wiki/log.md` (frontmatterlos, Punkt 10), `wiki/wissensarchitektur/index.md` (frontmatterlos, Punkt 10/11), `wiki/wissensarchitektur/source-material.md` (Punkte 1/2/6/7/8/9/11/12/13/14, EC-1; Punkt 11 inkl. Area-Lesart Rev 9). `schema/validator.md`/`schema/wiki-compiler.md`/`raw/` unverändert (AD-3, via `git status` geprüft); keine neue §7-Klasse; kein Standalone (D-3); keine fünfte Update-Form. Spec-Frontmatter: `status: 'in-progress'`, `review_loop_iteration: 0` (zum Audit-Zeitpunkt).
- **Story 3.3 → `done` (Step-04-Review-Abschluss, 2026-08-19):** der Review-Abschluss-Flip `in-progress → done` (Sprint-Sync-Konvention, Story-3.1/3.2-Präzedenz: Review-Abschluss setzt `done` im selben Loop) ist hier als eigener dokumentierter Schritt nachgeführt; `sprint-status.yaml`-Key `3-3-…`**`done`**, `last_updated` → 08-19-2026 13:21; Spec-Frontmatter `status: 'done'`, `review_loop_iteration: 0`; Spec-`## Suggested Review Order` verankert (Review-Trail: Abgrenzungs-Mechanik → Struktur-Invariante/P2 → Sandbox-Nachweis → Provenienz/Status). **Review-Ergebnis (Loop 1, 3 Subagenten, kein Loopback):** keine intent_gap/bad_spec; 1 Stapel Patches (Präzedenz-Reihenfolge + No-Op-Nicht-Form + Korrigieren-Wortlaut-Erhaltung in `schema/compiler.md`; Sandbox U1U9 mit 2 neuen Negativ-Kontrollen U8/U9, vollen byte-Identitäts-Assertionen, reellen `S-N`-Ankern, `-eq 1`-Konsolidierung, Frontmatter-Reihenfolge/Duplikat); 5 Defers → `deferred-work.md`; Rejects dokumentiert. **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag) — keine Concept-Inhalts-Mutation (Instruktions-Story); `schema/validator.md`/`schema/wiki-compiler.md`/`raw/` unverändert (AD-3). Sandbox re-executiert: **9/9 PASS, Exit 0**.
- **Step-04-Review Loop 1 / Patch-Runde (Story 3.3, 2026-08-19):** bmad-code-review, 3 Subagenten (blind-hunter 9, edge-case-hunter 2+Minors, verification-gap 18 Findings); Klassifikation (Dedupe → Severity → Route, s. Spec-`## Spec Change Log` Review-Loop-1-Eintrag): **kein intent_gap, kein bad_spec** (kein Loopback) — **patch** (auto-fixiert) + **defer** (5 Einträge → `deferred-work.md` append-only) + **reject** (noise). **Patches (auto-fixiert, erneut verifiziert):** (1) **`schema/compiler.md` §5.9 Pkt. 2 — Operationelle-Ebene:** **Abgrenzungs-Reihenfolge `Korrigieren → Präzisieren → Erweitern → No-Op`** (strikt pro Evidenz-Einheit, erste zutreffende Form — überlappende Kriterien deterministisch gebunden, AD-17h/A0-19); **No-Op als Nicht-Form** geklärt (eigenes Abgrenzungskriterium + Erhaltungsregel „volle Byte-Identität"); Korrigieren-Struktur-Erhaltung präzisiert (**Original-Wortlaut bleibt als abgelöster Bestand** erhalten, nur die Aussage-Fortschreibung wechselt); at↔AD-17h-Gap-Kreuzreferenz auf `generated.at`-Konvention (Home Story 3.8). (2) **Sandbox `run-sandbox.sh` (jetzt 9 Tests U1U9, Exit 0):** U1/U2/U3 byte-Identität auf **alle drei** bestehenden Aussagen erweitert (Lücke aus V-1); **U8** neu — unbefugter Frontmatter-Key `foo:` im YAML → Struktur-Ebene-HARD-FAIL (Pkt. 5/P2-Element (6)) — **U9** neu — ungetrackte neue Datei `wiki/neu.md``??`-Sicht-Duplikat-HARD-FAIL; U7 `-le 1`**`-eq 1`** + konsolidierter log-Eintrag verlinkt jetzt **beide** raw/-Quellen (`raw/alpha-v2.md + raw/alpha-v3.md`, Pkt. 4); `assert_frontmatter` um **canoniche Reihenfolge** + **Duplikat-Prohibition** erweitert; **reale `S-N`-Anker** (Markdown-Headings) in allen raw/-Evidenzdateien statt Prosa-„Stelle S-N" — die `#S-N`-Fragmente lösen jetzt im Rohdokument auf (§5.5-Anker-Semantik); U3 verändert den Wortlaut der abgelösten Aussage **nicht** mehr (om `rotierte`-Tense). (3) **`wiki/log.md`:** Spec-Frontmatter-Status-Mismatch korrigiert (`in-progress``in-review`, Review-Handoff). (4) **`sprint-status.yaml last_updated`:** Präzisions-Regression zurückgesetzt (`08-19-2026 13:21`, HEAD-Format `08-19-2026 13:14`-Familie); General-Verhalten des Sync-Steps als Defer notiert. **Defers (5, `deferred-work.md` append-only):** last_updated-Präzision (Sync-General), frozen Story-3.1-Typos „Schärferung/Formata" (Re-Negotiation), U6-„auch nach Commit"-Überzeichnung + at↔AD-17h-Gap (Home Story 3.8), U2-Selbsterfüllung + U7-Ordnungs-Rationale, Umlaut/Em-Dash-Normalisierungs-Politik im Sandbox-Evidenztext. **Rejects (noise):** U6-log.md-SHA-Reproduzierbarkeit (random `$BASE`-SHA konstruktionsbedingt), Diff-Artefakt-Pfad-Präfix, Spec-Change-Log „leer" (per Konvention erst in Review-Loops befüllt). **Re-executierte Verifikation (2026-08-19, ab Workspace-Root):** Sandbox **9/9 PASS, Exit 0** (re-runnable `bash _bmad-output/implementation-artifacts/sandbox-3-3/run-sandbox.sh`); `grep -n "Struktur-Erhaltungsregel\|operationelle\|Revision 2.8" schema/compiler.md` → 5 Marker; AD-3 `git status --porcelain -- schema/validator.md schema/wiki-compiler.md raw/` leer; kein Standalone (D-3), keine neue §7-Klasse, kein Leasing-Scope. Spec-Frontmatter: `status: 'in-review'`, `review_loop_iteration: 0`; Spec-`## Spec Change Log` Review-Loop-1-Eintrag befüllt.
- **Story 3.3 «Bestehende Concepts erweitern/präzisieren/korrigieren — Update-Formen operativ schärfen» (Implementierung, Instruktions-Story D-3; `sprint-status.yaml`: Key `3-3-bestehende-concepts-erweitern-präzisieren-korrigieren` bleibt **`in-progress`** — der Review-Abschluss-Flip `done` erfolgt gemäß Workflow-Konvention durch den Review-Schritt):** `schema/compiler.md`**Revision 2.8** — die drei Update-Formen **operationell ausformuliert** (deterministische Brücke Regel → Run, AD-17h/A0-19; kein neuer normativer Inhalt, kein Schema-/Validator-/`raw/`-Change AD-3; der frozen Story-3.1-Regeltext bleibt unverändert als normative Basis, die operationellen Regeln sind die Präzisierungsebene darunter — keine Re-Negotiation): (1) **§5.9 Pkt. 2 — Präzisierungsebene je Update-Form** (Sub-Bullet an die Commit-Boundary-Regel angefügt): je Form **(a) Abgrenzungskriterium** (aus der committeten Evidenz — neue belegte Aussage → **Erweitern**; Schärfung einer bestehenden Formulierung/Abgrenzung ohne Ersatz → **Präzisieren**; Ersetzung einer fehlerhaften/überholten → **Korrigieren**; keines davon → **No-Op**, engere Auslegung — gleicher Git-State + gleiche Eingabemenge → identischer Update-Vorgang), **(b) Struktur-Erhaltungsregel** (das Geschützte aus FR-6/AC-2: Frontmatter-Subset — nur `sources`-Zuwachs um echten neuen Beleg + `generated.at`-Bump, kein neuer Key, keine Entfernung ohne Beleg; bestehende belegte Aussagen nicht umgeschrieben ohne dass Präzisieren/Korrigieren greift; §5.5-Inline-Verweise gültig soweit Beleg Body-Bestand; §5.6-Linkform unverändert, keine neuen Links außer bei echten Beziehungen) und **(c) Textgenauigkeits-Rahmen** (Schärfen an der Aussage selbst, kein Satz-Umbau, kein Neuschreiben ohne Ersetzungsbeleg). (2) **§5.9 Pkt. 5 — Erhaltungs-Invariante um den Struktur-Erhaltungs-Bezug ergänzt:** die Diff-Probe (§5.9 Pkt. 5, D-1-Form) verifiziert zwei Ebenen — die Pfad-Mengen-Ebene (bestehender Teilmenge-Vergleich) und die **Struktur-Ebene je berührtem Pfad** (pro betroffenem Concept-Pfad über die Pkt.-2-Regeln geprüft: Frontmatter-Subset, keine Umschreibung belegter Aussagen außerhalb der Formen, Inline-Verweise, Linkform; Verstöße textuell benannt NFR-4, vor dem Commit zu beheben, sonst Ghost-Diff mit Rollback). (3) **§5.9 Pkt. 6 — P2-Check-Block um den Struktur-Erhaltungs-Check erweitert** (Element (6), zusätzliches textuelles Element: keine unbefugten Keys — Vertrag §3.3/§3.4-Subset, keine stille Löschung — AD-16/„Korrigieren"-Form, Links unverändert/keine neuen ohne echte Beziehung — §5.6-Pin). (4) **§8 Revisionslog Revision 2.8** mit Abschlussklausel (keine Änderung an `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` AD-3; keine neue §7-Invaliditätsklasse; kein Standalone D-3; keine Vertragsänderung; Commit-Boundary-Regel unverändert; kein Leasing-Scope — AC-4 → Story 3.5/3.6, AD-17.3-Hinweis unverändert in §7). **Sandbox-Nachweis (re-executiert 2026-08-19, ab Workspace-Root, `bash _bmad-output/implementation-artifacts/sandbox-3-3/run-sandbox.sh`; Linux-Sandbox-Semantik auf einem `/tmp`-Baum, nie der reale `wiki/`-Baum; Exit **0**):** Mini-Bundle mit Concept `alpha` + nicht-betroffenem Kontroll-Concept `beta`; committete Neuevidenz je Szenario; alle drei Update-Formen + No-Op durchgespielt: **U1 ERWEITERN** (neue belegte Aussage angefügt, bestehende drei Aussagen byte-identisch — PASS; Probe `{alpha log}` ⊆ erlaubte Menge — PASS; Frontmatter-Konformität — PASS), **U2 PRAEZISIEREN** (Aussage an ihr selbst geschärft, Position/Struktur erhalten, Beleg nachgeführt §5.5 — PASS; Probe `{alpha log}` — PASS; Frontmatter — PASS), **U3 KORRIGIEREN** (fehlerhafte Aussage explizit abgelöst + Ersetzungsbeleg, keine stille Löschung AD-16-Default — PASS; Probe `{alpha log}` — PASS; Frontmatter — PASS), **U4 NO_OP** (Evidenz bereits vollständig enthalten — byte-identisch, kein `at`-Bump, kein `sources`-Zusatz, kein `log.md`-Eintrag — PASS; Probe leer = Ghost-Diff-negativ — PASS), **U5 NEGATIV-KONTROLLE** (simulierter Ghost-Diff auf `beta` wird von der Assertions-Mechanik zuverlässig als HARD-FAIL erkannt — PASS, Mechanik nicht vacuous), **U6 ZWEI-RUN-IDENTITÄT** (AD-17h/A0-19: zwei unabhängige Runs über dieselbe Evidenz → byte-identischer Update-Vorgang — SHA-256 `6b148dd1…` (alpha.md) / `a6d08427…` (log.md) identisch je Lauf, auch nach Commit — PASS), **U7 MEHRFACH_TREFFER** (I/O-Matrix-Zeile; zwei Neuevidenzen `raw/alpha-v2.md` + `raw/alpha-v3.md` desselben Runs treffen denselben Concept-Pfad `alpha`**ein konsolidiertes Update**: eine Body-Mutation, ein `log.md`-Eintrag, ein konsolidierter `sources`-Zuwachs `s2`+`s3`, ein `generated.at`; Zuwachs-Sicht-Ordnung `v2`-vor-`v3` (lexikografischer Tie-Break bei Body-Ende); bestehende drei Aussagen byte-identisch; Probe `{alpha log}` — PASS; Frontmatter-Konformität — PASS). Die **Erhaltungs-Invariante (§5.9 Pkt. 5) wird als harte Assertion erzwungen**: Proben-Einträge (normalisiert: `wiki/`-Präfix + `.md`-Suffix strippend) ⊆ {betroffener Concept-Pfad, log}; bei Verstoß oder neuer Datei (`??`-Sicht) → HARD-FAIL + Exit 1; kein Ghost-Diff lässt sich still durchschleusen (U5). **Status-/Diff-Nachweis:** nach diesem Instruktions-Run zeigt `git status --porcelain -- wiki/` ausschließlich `wiki/log.md` (dieser Eintrag) — Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt, keine Concept-Inhalts-Mutation (Instruktions-Story, kein neues committetes `raw/`-Material; Demonstration per Sandbox). **Validator-Verdikt (per-Datei, human-mechanisch ausgeführte Text-Instruktion `schema/validator.md` Rev 9, D-3 — kein CLI; unverändert zur Story 3.2, Story 3.3 mutiert keine Concept-Inhalte):** alle **7** `wiki/`-Dateien **SUCCESS**`wiki/index.md` (Punkt 11, Bundleroot), `wiki/knowledge-kompilation-inkrementell.md`, `wiki/llm-wiki-prinzip.md`, `wiki/wissensarchitektur-trennung-states.md` (Punkte 1/2/6/7/8/9/11/12/13/14, EC-1), `wiki/log.md` (frontmatterlos, Punkt 10), `wiki/wissensarchitektur/index.md` (frontmatterlos, Punkt 10/11), `wiki/wissensarchitektur/source-material.md` (Punkte 1/2/6/7/8/9/11/12/13/14, EC-1; Punkt 11 inkl. Area-Lesart Rev 9). `schema/validator.md`/`schema/wiki-compiler.md`/`raw/` unverändert (AD-3, via `git status` geprüft); keine neue §7-Klasse; kein Standalone (D-3). Spec-Frontmatter: `status: 'in-review'` (Step-04-Review-Handoff), `review_loop_iteration: 0`.
- **Step-04-Review Loop 3 / Patch-Runde (Story 3.2, 2026-08-19):** `schema/compiler.md`**Revision 2.7** (D-3-Instruktions-Patch, kein neuer Inhalt; bmad-code-review Loop 3, 4 Layer; Nutzer-Entscheidungen D-1/D-2/D-3/D-4/D-5 = 1/1/1/1/1, jeweils empfohlene Option; + Patches P-1/P-2). (1) **D-1 — Statuskette abgeschlossen:** der Review-Loop-Abschluss-Flip `in-progress → done` (Sprint-Sync-Konvention; Story-3.1-Präzedenz: Review-Abschluss setzt `done` im selben Loop) ist mit dieser Zeile als eigener dokumentierter Schritt nachgeführt; `sprint-status.yaml`-Key `3-2-…` bleibt **`done`** (die gefrorene Always-Klausel `→ in-progress` beschreibt den Implementierungsstand; Review-Handoff/-Abschluss ist der übliche Folgezustand, s. Sprint-Status-Workflow-Kommentar). (2) **D-2 — Sandbox erweitert:** `run-sandbox.sh` um **T5 `LINK_FOLLOWING_ZYKLUS`** (Zyklus alpha ↔ omega via Backlink; besuchte Menge → endliche, doppelungsfreie Candidate-Liste `omega`, `alpha` — der Zyklus endet), **T6 `TRAVERSAL_REACH_ONLY`** (Term `trafo-gebiet` trifft **nur** die Area-`index.md` → die gewurzelten Concept-Pfade `trafo/delta`, `trafo/epsilon` sind die Kandidaten; `index.md` selbst ist kein Concept-Kandidat) und **T7 `TERM_ABLEITUNG_SYNONYM`** (Registry-Test-Doppel: `Quanten Protocol` → Normalisierung → `quanten-protocol` (Canon-Treffer), `QuantenProtocol``quantenprotocol` (Variante-Treffer) → canonische Form `quanten-protocol`; Negativ-Fall `nicht-in-registry` → wie notiert, kein stiller Ausschluss); T2-Kommentar zu `index` korrigiert (Stufe-a-Treffer auf `wiki/index.md` löst Stufe b aus — kein Concept-Kandidat); **P-1** — T1/T4 jetzt mit harten Pass/Fail-Asssertionen (`exit 1` bei Abweichung). (3) **D-3 — Selbsttest-Beleg (b) neu belegt:** die Rev-2.5-Log-Zeile (b) beschrieb einen **nicht committierten** Baum (Term `quanten-protocol`, `sub/beta.md`, SHA-256 `159092bb…`) — Stale-Evidenz-Falle (B1-Präzedenz); die Rev-2.5-Zeile bleibt **historisch unverändert** (append-only, Vertrag §5), der korrigierte Nachweis steht in dieser Zeile (re-executierte Sandbox-Ausgabe, s. (5)(b)). (4) **D-4 — §3.2-Pkt.-3b-Ordnung:** Stufe-a-Treffer jetzt **rein lexikografisch (LC_ALL=C)** innerhalb jeder Stufe; die Term-Verarbeitungsreihenfolge dient nur der Interpretation/Erhebung, **nicht** der Listen-Ordnung (dieselbe Treffermenge → identische Liste, AD-17h/A0-19). (5) **D-5 — `schema/canonical-terms.md`-Lookup-Semantik:** Lookup-Verfahren deterministisch fixiert (lowercasing → `[-_ ]``-`-Kollaps → **Lookup der normalisierten Form**; Spalten tragen ausschließlich normalisierte Formen), **Eindeutigkeits-Invariante** (jede normalisierte Form in genau einem Eintrag — Canon **oder** Variante, nie beides/zweimal) + **Konflikt-Verfahren** (keine stille Anhängung; `deferred-work.md`/Ask-First, analog zur Umbenennungs-Regel). (6) **P-2 — Typos korrigiert:** `Determinsmus``Determinismus` (compiler.md §8-Referenz, diese Log, `deferred-work.md`-Belege), `§3.2-beankert``§3.2-angeankert` (Rev-2.5-Log-Zeile), `Membrum``Mitglied` (Spec-Design-Notes), `Konventionelle Determinismus-Lücke``Bekannte Determinismus-Lücke` (`deferred-work.md`-Beleg; `compiler.md:53` sagt „Bekannte"), `Resovierung``Auflösung` (Spec-Change-Log/-Verification). **Re-executierte Selbsttest-Belege (2026-08-19, ab Workspace-Root; Sandbox-Run exit 0):** (a) live: `grep -rl 'A0-18' --exclude=log.md wiki/` → exakt `wiki/knowledge-kompilation-inkrementell.md` (ein Concept-Pfad, `log.md` ausgeschlossen); (b) **Mini-Sandbox** (`_bmad-output/implementation-artifacts/sandbox-3-2/run-sandbox.sh`, re-executierbar): alle **7** Tests **PASS** — T1 Membership (exakt `alpha`; Kontaminations-Kontrolle ohne Exklusion trifft zusätzlich `log`), T2 Zwei-Run-Identität (identisch), T3 NO_MATCH (leer), T4 Vereinigung `alpha,gamma` (hart assertierte), T5 LINK_FOLLOWING_ZYKLUS (endlich, doppelungsfrei, Zyklus endet), T6 TRAVERSAL_REACH_ONLY (`trafo/delta`, `trafo/epsilon`), T7 TERM_ABLEITUNG_SYNONYM (beide Varianten → `quanten-protocol`; Negativ-Fall wie notiert); (c) `git status --porcelain -- wiki/` nach diesem Run: ausschließlich `wiki/log.md` (dieser Eintrag) — Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt, kein Ghost-Diff (die Instruktions-Story mutiert keine Concept-Inhalte). **Abschlussklausel Rev 2.7:** `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` unverändert (AD-3); keine neue §7-Invaliditätsklasse; kein Standalone (D-3); keine Vertragsänderung; Commit-Boundary-Regel unverändert. `sprint-status.yaml`: Key bleibt `done`, `last_updated` → 08-19-2026. Spec-Frontmatter: `status: 'done'`, `review_loop_iteration: 3`; Spec-`### Review Findings` abgehakt (5 Decisions + 2 Patches + 4 Defers → `deferred-work.md`).
- **Step-04-Review Loop 2 / Patch-Runde (Story 3.2, 2026-08-19):** `schema/compiler.md`**Revision 2.6** (D-3-Instruktions-Patch, kein neuer Inhalt; bmad-code-review VG-Findings verarbeitet). (1) **§4-Überschrift wiederhergestellt** — die §3.2-Einfügung (Rev 2.5) hatte die Überschrift **`## 4. Synthetisieren (Provenienz & Trust)`** verdrängt (der §3.2-Sektionskopf ersetzte die §4-Überschrift; der gesamte Frontmatter-Body hing kopflos unter §3.2; alle §4-Referenzen wären dangling geblieben). Der §4-Kopf ist zwischen §3.2-Body und dem Frontmatter-Body wieder eingefügt. (2) **rg-Flag-Defekt behoben (`--exclude` ist kein rg-Flag):** die Rev-2.5-Form in diesem Log- plus dem §3.2-Eintrag, §3-Pkt.-2, §3.2-Pkt.-2a, §5.9-Worked Example (Pkt. 7) und §7 nutzten `rg -l '<term>' --exclude=log.md wiki/` — nicht-existent (ripgrep 14.1.1: `rg --exclude``unrecognized flag`; GNU grep unterstützt `--exclude`, ripgrep nutzt `-g '!log.md'` / `--glob '!log.md'`). Die Instruktion nutzt jetzt tool-korrekte Formen: rg `rg -l '<term>' -g '!log.md' wiki/` (native Glob-Exklusion) bzw. GNU grep `grep -rl '<term>' --exclude=log.md wiki/`; die §5.6-Formeln (bereits GNU-grep) und §5.9-Pkt.-7-Erhebung adoptieren die Exklusion. Dieser Eintrag zitiert den alten Defekt **historisch** (verlaufsgetreue Log-Führung; die operative Form ist jetzt tool-korrekt). (3) **§5.9-Worked Example (Pkt. 7) auf die Exklusions-Form gehoben** (`rg -l 'FR-12' -g '!log.md' wiki/`), Kommentar `wiki/log.md` exkludiert gemäß §3.2-Pkt.-2a. (4) **Mini-Sandbox re-executierbar verankert** (`_bmad-output/implementation-artifacts/sandbox-3-2/run-sandbox.sh`, Muster Story-3.1-Sandbox S1S6): Tests T1T4 (Membership-Pin — Term auf Concept-Bodies UND `log.md` verteilt, Candidate-Liste nur Concept-Pfade; Zwei-Run-Identität AD-17h; NO_MATCH → leere Candidate-Liste → UNTOUCHED_CONCEPT; Mehrfach-Treffer → Vereinigung + lexikografische Ordnung). (5) **`deferred-work.md`-Em-Dash-Eintrag** append-only ergänzt (Home: Story 3.8) — die §3.2-Pkt.-1b-Kollaps-Klasse deckt En-Dash/Bindestrich/Unterstrich/Leerzeichen, aber **nicht** den Em-Dash `—`; dieser Handoff wird nicht stillschweigend gelöst, sondern als offene Determinismus-Frage dokumentiert. **Re-executierte Selbsttest-Belege (2026-08-19, ab Workspace-Root):** (a) rg-Form real: `rg -l 'A0-18' -g '!log.md' wiki/` → exakt `wiki/knowledge-kompilation-inkrementell.md`; ohne Exklusion `rg -l 'A0-18' wiki/` → zusätzlich `wiki/log.md` (Selbstkontamination — der §3.2-Pkt.-2a-Fall, reell belegt); (b) GNU-grep-Äquivalent `grep -rl 'A0-18' --exclude=log.md wiki/` → identisch `wiki/knowledge-kompilation-inkrementell.md`; (c) `rg -l 'FR-12' -g '!log.md' wiki/``wiki/knowledge-kompilation-inkrementell.md` (§5.9-WE-Korrektur reell); (d) Mini-Sandbox T1T4 → siehe Rev-2.6-Eintrag; (e) `git status --porcelain``wiki/` nur `log.md` (dieser Eintrag; Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt), `schema/compiler.md` + `deferred-work.md` sind außerhalb `wiki/` (kein Teil der Diff-Probe). **Abschlussklausel Rev 2.6:** `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` unverändert (AD-3, geprüft via `git status`); keine neue §7-Invaliditätsklasse; kein Standalone (D-3); keine Vertragsänderung; Commit-Boundary-Regel unverändert. (Der Rev-2.5-Implementierungs-Eintrag oben bleibt unverändert — dokumentiert den Zustand bei Rev-2.5-Veröffentlichung inkl. der damaligen `--exclude`-Form; historische Korrektheit des Logs.)
- **Story 3.2 «Relevanzbestimmung textual-deterministisch umsetzen (grep/ripgrep + Markdown-Traversal + Link-Following)» (Implementierung, Instruktions-Story D-3; `sprint-status.yaml`: Key `3-2-relevanzbestimmung-textual-deterministisch-umsetzen-grep-rip` `backlog`**`in-progress`**):** `schema/compiler.md`**Revision 2.5** — die beiden **Story-3.2-Vorbehalte aufgehoben** (§3 Pkt. 2 + §7) und die feinkörnige Relevanz-Findungsmechanik als neue Sektion **§3.2 „Relevanzbestimmung (Story 3.2)"** verankert (nach §3, vor §4; Pkt. 2 bleibt Kern-Anker „Erhebung nach §3.2"): (1) **Term-Ziehverfahren deterministisch** — bedeutungstragende Token-Folgen nach §2-Interpretation; Normalisierung lowercasing + `[-_ ]``-`-Kollaps (En-Dash/Bindestrich/Unterstrich/Leerzeichen); **kanonischer Schreibweisen-Resolver als committete, append-only Registry `schema/canonical-terms.md`** (canon. Form + erlaubte Varianten, `[]`; Bestandteil des Git-States → Auflösung pinbar, AD-17h/A0-19); genau eine canon. Form je Semantik (A0-18); **kein stiller Ausschluss** nicht auflösbarer Varianten (Verwendung wie notiert); mehrere Terme je Einheit → Vereinigung; **bekannte Determinismus-Lücke**: Em-Dash `—` fällt nicht unter den `[-_ ]`-Kollaps → an **Story 3.8** übergeben (nicht still hinzugefügt); (2) **dreistufige term-übergreifende Erhebung über `wiki/`** — (a) `rg -l '<term>' --exclude=log.md wiki/` (GNU-grep-Äquivalent `grep -rl '<term>' --exclude=log.md wiki/`; **`log.md` strukturell exkludiert** — die Candidate-Liste ist auf Concept-Pfade definiert, `log.md` ist kein Kandidat), (b) `index.md`-Traversal (gewurzelte Erreichbarkeit Root → Area → Concept, §5.8; TRAVERSAL_REACH_ONLY; fehlende Bundleroot → Run-FAIL V-1), (c) Link-Following mit **besuchter Menge** (file-relativ, §5.7 Pkt. 4; Zyklen enden — LINK_FOLLOWING_ZYKLUS); (3) **Candidate-Liste + Determinismus-Vertrag** — relative OKF-Pfade ohne `.md` (Strip `wiki/`-Präfix + `.md`-Suffix), **Zuwachs-Sicht-Ordnung** mit Reihenfolge auch für Stufe-b/c (lexikografischer Tie-Break; AD-17h/A0-19), keine Duplikate (besuchte Menge), NO_MATCH → leere Candidate-Liste → UNTOUCHED_CONCEPT (Story-3.1-Pfad, Ghost-Diff-negativ); Determinismus-Selbsttest (Membership + Zwei-Run-Identität) unten belegt. **§8-Normreferenzen:** AD-13 (bereits gelistet, §3.2-beankert), **A0-18** (Deterministische Relevanzbestimmung, §3.2), **A0-19** (Determinismus-Vertrag — war im Ist-§8 noch nicht gelistet, als Determinismus-Referenz ergänzt, §3.2/AD-17h) und **PRD OQ-3** (Compilation Scope, §3.2) ergänzt; `schema/canonical-terms.md` als Resolver-Registry referenziert. **Abschlussklausel Rev 2.5:** `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` unverändert (AD-3); keine neue §7-Invaliditätsklasse; kein Standalone (D-3); keine Vertragsänderung; Commit-Boundary-Regel unverändert. **`deferred-work.md`:** der Story-3.1-Defer-Eintrag `epic-3-context.md` („Home: Story-3.2-Handoff") als **aufgegriffen** markiert (append-only); der F17/Em-Morphologie-Handoff (Story 3.8) bleibt bestehen. **Determinismus-Selbsttest (Membership + Identität, re-executiert 2026-08-19, ab Workspace-Root):** (a) `grep -rl 'A0-18' --exclude=log.md wiki/` zweimal ausgeführt → beide Ausgaben **identisch**, exakt `wiki/knowledge-kompilation-inkrementell.md` (ein Concept-Pfad; `log.md` ausgeschlossen — der `--exclude=log.md`-Fakt ist ehrlich dokumentiert: ohne die Exklusion würde `log.md` ab dem Moment selbst „Kandidat", in dem dieser Eintrag `A0-18` zitiert — die B1-`log.md`-Kontamination ist damit geschlossen); (b) **mini-Sandbox-Baum** (`/tmp/sb32-…`, Term `quanten-protocol` auf Concept-Bodies **und** `log.md` verteilt) → exakte Candidate-Liste nur Concept-Pfade (`wiki/alpha.md`, `wiki/sub/beta.md`; `log.md` ausgeschlossen, `wiki/gamma.md` ohne Term nicht getroffen); normalisiert `alpha`, `sub/beta`; **Zwei-Run-Identität** (SHA-256 `159092bb…` ≡); Kontrolle ohne `--exclude``log.md` wird Kandidat (B1-Falle belegt und geschlossen); (c) §5.6-Formeln unverändert re-executierbar: Formel 2 (Form-Check) `0` (Exit 0), Formel 3 (Dangling-Check) keine Ausgabe, Formel 4 Ist-Zählung **38** (kein `wiki/`-Dateimenge-Change durch Story 3.2 — keine Re-Baseline nötig). **Validator-Lauf** (human-mechanisch ausgeführte Text-Instruktion `schema/validator.md` Rev 9, D-3 — kein CLI): alle **7** `wiki/`-Dateien **SUCCESS** (Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1 — unverändert zur Story 3.1, Story 3.2 mutiert keine Concept-Inhalte; `wiki/log.md` bleibt frontmatterlos, Punkt 10); das per-Datei-Verdikt ist der Ausführungs-Nachweis der Spec-Verification Pkt. 4 und AC 5. `git status --porcelain -- wiki/` nach diesem Run: ausschließlich `log.md` (modifiziert) — Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt, kein Ghost-Diff.
- **Story 3.1 «Inkrementellen Datenfluss implementieren (Interpret → Reconcile → Synthesize → Update)» → `done` (bmad-code-review Loop 2, 4 Layer: blind-hunter / edge-case-hunter / verification-gap / acceptance-auditor; Diff-Baseline `802a557``efc543c`; Nutzer-Entscheidungen D-1/D-2/D-3/D-4 = 1/1/1/1, jeweils empfohlene Option):** `schema/compiler.md`**Revision 2.4.2** (alle 4 Decision-Resolutions + 16 Patches, rein textuell — kein Code, kein Standalone, keine neue §7-Klasse): (1) **D-1: Diff-Selbsttest (Pkt. 5) operationalisiert** — Probe = `git diff --name-only <Baseline-Commit> -- wiki/` **plus** `git status --porcelain -- wiki/` (erfasst ungetrackte `??`-Dateien — die Duplikat-Kontrolle braucht diese Sicht; `git diff` allein ist blind dafür), **Probe-Zeitpunkt vor dem Commit** (am Ende des P2-Blocks, nach den Mutationen; nach dem Commit wäre die Probe vacuous, AD-17f), erlaubte Menge um **Neu-Anlage-Zielpfade** (§5.1/§5.7) ergänzt (Misch-Runs: keine fälschlichen Ghost-Diffs), **Pfad-Normalisierung** (Strip `wiki/`-Präfix + `.md`-Suffix vor dem Teilmenge-Vergleich), **Rollback-Mechanik** deterministisch benannt (`git checkout -- <wiki/pfad>` für modifizierte Pfade, ungetrackte löschen, Index `git checkout -- <index>`); (2) **D-2: R-1-Baseline deterministisch**`<Baseline-Commit>` (HEAD der vorherigen Mutations-Boundary, AD-17f) wird vom Producer **im `wiki/log.md`-Run-Eintrag notiert** (voller SHA; AD-14: Git liefert Historie, nicht Domain-State — deshalb die Notiz); **Diskrepanz-Regel**: `git diff` gewinnt, SHA-256 bleibt Sekundär-Fingerprint; **Fallback**: ohne vorherige Mutations-Boundary gelten alle `raw/`-Dateien als Zuwachs; (3) **D-3: INPUT_UNCOMMITTED-Abbruch implementiert** — neuer P2-Check-Block-Element (1) **Input-Zustand**: Working-Copy von `raw/`+`wiki/` gegen HEAD prüfen, bei Abweichung **benannter Abbruch „published/committed Input erforderlich"** (AD-17a) vor Interpretation und vor jeder Mutation — die gefrorene I/O-Matrix-Verpflichtung ist damit als Zustandsprüfung + Abbruchmeldung umgesetzt (zuvor nur Referenz auf §1 Pkt. 1); die **Spec↔Anker-Divergenz** (frozen Spec zitiert 3× „§1.1", §1 ist eine nummerierte Liste Pkt. 14 ohne §1.1-Label) ist als dokumentierte Fußnote in Rev-2.4.2 gesichert (Spec bleibt frozen); (4) **D-4: Sandbox-Edge-Test-Nachweis** — die fünf I/O-Matrix-Szenarien (HAPPY_PATH_UPDATE, UNTOUCHED_CONCEPT, CONCEPT_COLLISION_BESTEHEND, CHANGE_DETECTION, PRE_RUN_RECONCILE) + die D-3-Abbruch-Kontrolle sind als re-executierbares Skript (`_bmad-output/implementation-artifacts/sandbox-3-1/run-sandbox.sh`, `bash …` ab Workspace-Root, Sandbox-Bäume unter `/tmp`) mit **konkreten deterministischen Ausgaben** in der Spec-`## Verification Record (Ausführungs-Beleg, 2026-08-19)` verankert — die Verweise „in der Spec-Verification enthalten" (dieses Log, `deferred-work.md`) sind damit auflösbar; (5) **Instruktions-Präzisierungen:** P2-Block-Zeitpunkt (nach Reconcile, am Anfang der Mutationsphase; Diff-Probe am Block-Ende), **No-Op-Kandidat**-Regel (Evidenz bereits vollständig enthalten → keine Mutation/kein `at`-Bump/kein `log.md`-Eintrag, byte-identisch), **Mehrfach-Treffer-Reihenfolge** für alle Einheiten (Zuwachs-Sicht-Ordnung; lexicografisch nur Tie-Break — AD-17h), **Update-Pfad-Rollback** in §5.3 Pkt. 3 (modifizierte Pfade aus Baseline-Commit wiederherstellen), **`generated.at`↔AD-17h-Gap** explizit benannt (Home: Story 3.8 — Wanduhr-`at` erzeugt bei gleichem Input unterschiedliche Bundle-States; Konvention A0-20 bleibt bindend, Wechsel = Ask-First), Term-Ableitung als §2-Interpretation abgegrenzt (Erhebung mit festem Term deterministisch; Term-Mechanismus Story 3.2), Link-Following mit besuchter Menge (keine Schleife bei zyklischen Links), **Worked Example (Pkt. 7) auf den realen Ist-Baum korrigiert** (`rg -l 'FR-12' wiki/` trifft `wiki/knowledge-kompilation-inkrementell.md`, nicht `wissensarchitektur/source-material.md` — das Rev-2.4.1-Beispiel enthielt den Term nicht), stale-Anker (`§3.2-Kollisionsprüfung`, `§3-Voraussetzungsprüfung`, §5.8-Pkt.-3-Zeiger „Pkt. 1" → „Pkt. 2") nachgeführt. **Abschlussklausel Rev 2.4.2:** `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` unverändert (AD-3); keine neue §7-Invaliditätsklasse; kein Standalone (D-3); keine Vertragsänderung; Commit-Boundary-Regel unverändert. **Review-Loop-2-Aufarbeitung zum Implementierungs-Eintrag (2026-08-18, oben):** (a) der dortige (b)-Diff-Selbsttest-Beleg zitierte die Vor-Rev-2.4.1-Form `git diff --stat -- wiki/` — die operative Probe ist seit Rev 2.4.2 die D-1-Form (`git diff --name-only <Baseline-Commit> -- wiki/` + `git status --porcelain -- wiki/`); (b) der Implementierungs-Eintrag dokumentierte „Revision 2.4" — der Story-3.1-Commit `efc543c` enthält **Revision 2.4 + 2.4.1** (Step-04-Review-Patch-Runde 2026-08-18, in `deferred-work.md` als „Story-3.1-Review-Protokoll" protokolliert) und ist jetzt auf **2.4.2** (dieser Eintrag) fortgeführt; (c) Statuskette: `in-progress` (Implementierungs-Eintrag) → `review` (Review-Handoff `efc543c`) → **`done`** (dieser Eintrag — Loop-2-Abschluss: 4 Decision-Resolutions + 16 Patches, keine unresolved Findings; spec-Frontmatter `status: 'done'` + `review_loop_iteration: 2` deckungsgleich). **Selbsttest-Beleg (re-executiert 2026-08-19, ab Workspace-Root, D-1-Probe-Form; `<Baseline-Commit>` = `802a5576eb4bbf54761a947e43e68b7e7ea9d67d` = Review-Baseline, hier als Konventions-Demonstration notiert — bei echten Run-Einträgen ist es der HEAD der vorherigen Mutations-Boundary, D-2):** (a) Instruktions-Integrität — `grep -n "5.9" schema/compiler.md` → §5.9-Sektion vorhanden; `grep -n "Aktualisierung ist Epic 3" schema/compiler.md`**kein Treffer** (Hold ersetzt, unverändert); (b) **Diff-Selbsttest (Erhaltungs-Invariante)**`git diff --name-only 802a557… -- wiki/` → ausschließlich `wiki/log.md` (dieser Eintrag; keine Concept-Datei, kein Index, kein Ghost-Diff auf nicht betroffenen Pfaden — die Instruktions-Story mutiert keine Concept-Inhalte; FT-6/FR-12) + `git status --porcelain -- wiki/`` M wiki/log.md` (tracked, modifiziert — im erlaubten Satz; **keine** `??`-Einträge = keine ungetrackten neuen Dateien = kein Duplikat); normalisiert: `log` ⊆ erlaubte Menge (`log.md`); (c) **Validator-Lauf** (human-mechanisch ausgeführte Text-Instruktion `schema/validator.md` Rev 9, D-3 — kein CLI): alle **7** `wiki/`-Dateien **SUCCESS** (Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1 — unverändert zur Story 2.5, Story 3.1 mutiert keine Concept-Inhalte); das per-Datei-Verdikt ist der Ausführungs-Nachweis der Spec-Verification Pkt. 3 und AC 5; (d) **Sandbox-/Edge-Tests (I/O-Matrix)** — ausgeführt, echte Outputs in der **Spec-`## Verification Record (Ausführungs-Beleg, 2026-08-19)`** (re-executierbar: `bash _bmad-output/implementation-artifacts/sandbox-3-1/run-sandbox.sh`): S1 HAPPY_PATH_UPDATE (Probe → `alpha`, `log`; 0 untracked), S2 UNTOUCHED_CONCEPT (leere Probe), S3 CONCEPT_COLLISION_BESTEHEND (nur `M`-Einträge, kein `??`), S4 CHANGE_DETECTION (außschließlich `raw/alpha-v2.md`; SHA-256 `21e7fc1d…` identisch), S5 PRE_RUN_RECONCILE (Run-FAIL V-1, Zustand sauber), S6 INPUT_UNCOMMITTED (benannter Abbruch „published/committed Input erforderlich (AD-17a)"). `sprint-status.yaml`: `3-1-inkrementellen-datenfluss-implementieren-interpret-reconcile` `review`**`done`**, `last_updated` → 08-19-2026.
## 2026-08-18
- **Story 3.1 «Inkrementellen Datenfluss implementieren (Interpret → Reconcile → Synthesize → Update)» (Implementierung, Instruktions-Story D-3):** `schema/compiler.md`**Revision 2.4** (inkrementeller Datenfluss als Erweiterungs-Instruktion, rein textuell — kein Code, kein Standalone, keine neue §7-Klasse): (1) **§3 Reconcile** — Pkt. 2 Kollision-Hold durch **Update-Routing** ersetzt (bestehende Wissenseinheit → **Update-Kandidat im bestehenden Concept-Pfad**, kein Duplikat, kein stummer Überschreib, AD-16-Default-Erhaltung; der Epic-3-Abbruch entfällt) + **textuell-deterministische Kandidatenliste** (Konzept-/Term-Überschneidung via `grep`/`ripgrep`, `index.md`-Traversal, Link-Following — AD-13; feinkörniger Relevanz-Mechanismus Story 3.2 vorbehalten); (2) **neue §5.9 «Inkrementelles Update bestehender Concepts (Story 3.1)»** (nach §5.8, vor §6): Update-Stimulus = Reconcile-Kandidatenliste (§3 Pkt. 2); Mutationsmechanik — **Erweitern** (Absatz/Beleg ergänzen), **Präzisieren** (Aussage schärfen, Beleg neu/nachgeführt, §5.5), **Korrigieren** (ersetzte Aussage + Ersetzungsbeleg, keine stille Löschung, AD-16-Default), `sources` nur um echte neue Belege ergänzen (§5.5-Pkt.-1b-Relokation, Vertrag §3.3-Subset), `generated.at` = aktueller Run-Zeitstempel (A0-20, einmalige `at`-Festlegung pro Run), vorhandenes human-`verified` bleibt stehen; Index-/Link-Form unverändert (§5.6-Pin, kein neuer Link bei reinem Body-Update); **`log.md`-Eintragspflicht** (Vertrag §5, „**Story 3.1-Update**"-Markierung; Disagreement-Fälle dokumentiert — Epic-4-Interface, keine Korrektur-Klassifikation hier); **Erhaltungs-Invariante (FT-6/FR-12) + re-executierbarer Diff-Selbsttest** — nach jedem Run `git diff --stat -- wiki/`, geänderte Dateien ⊆ (betroffene Concepts `log.md` nachgeführte `index.md`), Ghost-Diff = textuell benannter Instruktions-Verstoß (NFR-4), nie „Regenerate Everything" (AD-5, A0-6); **Run-Vorphase-Bausteine** — Defer **R-1** Input-Zuwachserkennung (Change-Detection via `git diff` auf `raw/` und/oder SHA-256-Record aus `raw/**/source.md`) und Defer **P2** Pre-Run-Reconcile-Check-Block (Zielpfade, Quellen-Existenz EC-1, Betroffenheits-Kandidatenliste, `wiki/index.md`-V-1) als wiederverwendbare textuelle Check-Blöcke (D-3, keine neuen Prozesse); Worked Example; (3) **§0-Aufruf** — sechs Phasen für Neu-Anlage- und Update-Variante präzisiert (Reconcile/Mutieren betreffen auch bestehende Concepts; AD-17a-Input-Regel referenziert, §1.1 bleibt); (4) **§5.7 Pkt. 3 / §5.8 Pkt. 2/3** — Top-Level-Kollisions-Referenz auf das Update-Routing (§3 Pkt. 2/§5.9) nachgeführt (die bisherige Epic-3-Abbruch-Formulierung „aktualisieren ist Epic 3" ist entfernt: Das Update lebt in §5.9; das Schutzprinzip der Erhaltung — „nicht stumm überschreiben" — bleibt als AD-16-Default in §3 Pkt. 2/§5.9 erhalten); (5) **§7-Selbstbegrenzung** — Update-Thema **aus dem Epic-3-Vorbehalt entlassen**, Scope-Einleitung um die Update-Variante geöffnet; die verbleibenden 3.x-Themen im Vorbehalt benannt: Synthese über mehrere Concepts → Story 3.4 (AD-4/FR-7), Leasing/Dirty-Tree-Schutz → Story 3.5/3.6 (AD-17a..f), Relevanz-Verfeinerung → Story 3.2; (6) **§8-Normreferenzen** um A0-6/FR-6/FR-12 ergänzt (AD-5/AD-6/AD-17h bereits gelistet) + **Revisionslog 2.4** mit Abschlussklausel (kein Vertrag-/Validator-/`raw/`-Change, keine neue §7-Klasse, kein Standalone, Commit-Boundary-Regel unverändert). **`deferred-work.md`:** Defer **R-1** (Input-Zuwachserkennung) und **P2** (Pre-Run-Reconcile-Check-Block) als **aufgegriffen (2026-08-18, Story 3.1 — §5.9)** markiert (append-only, bestehende Einträge unverändert). `schema/wiki-compiler.md`/`validator.md`/`raw/` unverändert (AD-3); keine neue §7-Klasse; kein Standalone (D-3). **`sprint-status.yaml`:** `3-1-inkrementellen-datenfluss-implementieren-interpret-reconcile` `backlog`**`in-progress`** (dieser Statuswechsel findet mit Story 3.1 statt; Sprint-Status bereits synchronisiert) → **`review`** (Review-Handoff, der übliche Folgezustand nach dem Implementierungs-Eintrag, s. Sprint-Status-Workflow-Kommentar „Dev moves story to 'review'"). **Selbsttest-Beleg (re-executierbar, ab Workspace-Root):** (a) Instruktions-Integrität — `grep -n "5.9" schema/compiler.md` → neue §5.9-Sektion gefunden; `grep -n "Aktualisierung ist Epic 3" schema/compiler.md`**kein Treffer** (Hold ersetzt); §7 enthält „Update" nur noch als „aus dem Vorbehalt entlassen"-Verweis, nicht als offenes Vorbehalts-Thema; (b) **Diff-Selbsttest (Erhaltungs-Invariante)**`git diff --stat -- wiki/`: ausschließlich die von Story 3.1 berührten Dateien (`wiki/log.md`; keine Concept-Datei, kein Index, kein Ghost-Diff auf nicht betroffenen Pfaden — die Instruktions-Story mutiert keine Concept-Inhalte; FT-6/FR-12); (c) **Validator-Lauf** (human-mechanisch ausgeführte Text-Instruktion `schema/validator.md`, D-3 — kein CLI): alle **7** `wiki/`-Dateien **SUCCESS** (Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1 — unverändert zur Story 2.5, Story 3.1 mutiert keine Concept-Inhalte); das per-Datei-Verdikt ist der Ausführungs-Nachweis der Spec-Verification Pkt. 3 und AC 5. Sandbox-/Edge-Tests (I/O-Matrix): siehe Spec-Verification — isolierte Sandbox-Bäume für HAPPY_PATH_UPDATE (Update-Routing: bestehender Pfad aktualisiert, kein Duplikat), UNTOUCHED_CONCEPT (kein Diff auf nicht betroffenem Pfad), CONCEPT_COLLISION_BESTEHEND (Update statt Duplikat), CHANGE_DETECTION (nur Zuwachs über `git diff`/SHA-256-Record), PRE_RUN_RECONCILE (Check-Block vor jeder Mutation; fehlende Bundleroot → Run-FAIL, V-1) — deterministische Formel-Ausgaben/Nachweise je Szenario.
- **Validierungs-Revision 9 (autorisiert; Epic-2-Retro F-02/AI-2-R-5, de-dupliziert mit `code-review-2-1-item-2`; ausgeführt 2026-08-18, Quelle: `_bmad-output/implementation-artifacts/spec-autorisierte-validator-revision-9-punkt-11-area-lesart.md`):** `schema/validator.md`**Revision 9**. Fünf inhaltliche Änderungen, keine neue §7-Klasse (kein Punkt 15; Vertrag `schema/wiki-compiler.md` + Instruktion `schema/compiler.md` + `raw/` + `adapters/` + alle `wiki/`-Concept-Dateien unverändert, AD-3/D-3): (1) **Punkt-11-Area-Lesart formalisiert** (§3 Zelle: Für ein Area-Concept genügt die file-relative Referenz in der Area-`index.md` des nächsten Vorfahren; identitätsstiftend ist das Pärchen Area-Präfix (= bundle-relativer Verzeichnispfad der Area-`index.md`) + Link-Ziel ohne `.md`-Endung (AD-7a), textuelle Nennung der Bundle-Identität entfällt — Live: `wissensarchitektur/source-material` über `](source-material.md)` in `wiki/wissensarchitektur/index.md`; Normalisierung: `.`/`./`-Strip, `..` nicht Teil der Ein-Ebenen-Form); (2) **Punkt-4-Vorlage um `resolved=<pfad>`-Token ergänzt + Semantik verankert** (`…|file://|resolved=<pfad>`; §6.2: nur bei Ablehnung durch aufgelöste Lage außerhalb `raw/`, Wert = aufgelöster workspace-relativer Pfad) — Fixture 4a ableitbar; (3) **Innen-Ebenen-Punkt-6-Fixtures in §7.3** (Negativ: `role: x` in `sources`-Eintrag → FAIL Punkt 6; Positiv-Gegenzeile ausschließlich erlaubte Keys → SUCCESS); (4) **§7-Fixtures 11a** (Negativ: Area-Concept unverlinkt → `Concept nicht verlinkt=wissensarchitektur/source-material` am realen Live-Area-Namen; Positiv: file-relativ verlinkt → SUCCESS); (5) §8-Normreferenz-Notiz „Story 2.3 (Link-Form)" um die Rev-9-Area-Lesart ergänzt. Nachgeführt: Header auf „Revision 9" + Revisionslog-Eintrag Revision 9 (append-only, bestehende Einträge unangetastet). **Zertifizierung (mechanisch, D-3):** (a) Fixture 4a isoliert — Sample `sources: [{resource: README.md}]` mit existierender `README.md` an der Workspace-Root → `FAIL … Punkt 4: resource ausserhalb raw/ oder unzulaessiger Pfad (…|resolved=README.md)`, kein Vorab-FAIL durch Punkt 3/andere Punkte (Punkt-4-vor-3-Priorität §6.2); (b) Innen-Ebenen-Sample isoliert — `sources:\n - resource: raw/prd/prd-wow20-2026-08-14.md\n role: x` (Datei existiert, sonst-valides Sample) → genau `Punkt 6: nicht autorisiertes Feld (Key=role) bzw. unautorisierter Key in sources/generated/verified`, kein anderer Punkt (Isolations-Prinzip §7.3); (c) Punkt-11-Area-Lesart-Fixtures — Negativ 11a (Area-`index.md` verlinkt `source-material.md` **nicht**) → `FAIL … Punkt 11: Index-Regel verletzt (Concept nicht verlinkt=wissensarchitektur/source-material)`; Positiv 11a (file-relativer `](source-material.md)`-Link, Live-Lage) → SUCCESS (kein „nicht verlinkt"-FAIL); (d) **reales Bundle gegen den revidierten Validator (human-mechanisch ausgeführte Text-Instruktion)** — alle **7** `wiki/`-Dateien weiterhin **SUCCESS** (Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1; Punkt 11 inkl. Area-Lesart), identisch zur Story-2.4/2.5-Lage — keine neu ausgelösten FAILs, Abschluss-Eigenschaft des §7-Katalogs gewahrt. **Mechanische Belege (ausgeführt 2026-08-18):** (e) AD-3/D-3-Freeze — `git diff --name-only <base>..HEAD -- schema/wiki-compiler.md schema/compiler.md raw/ adapters/`**0 Treffer** (keine dieser Dateien geändert); (f) Live-Invariant der 7/7-SUCCESS-Behauptung — `grep -qF '](source-material.md)' wiki/wissensarchitektur/index.md`**exit 0** (Area-Lesart lebend verankert). `sprint-status.yaml`: `code-review-2-1-item-2` und `epic-2-retro-item-14-…` (AI-2-R-5) → `done` (closed 2026-08-18, resolution mit Rev-9 + ref auf die Rev-9-Runde).
- **Story 2.5 «Progressive Discovery über `index.md` bereitstellen» (Implementierung, inkl. Review-Loop-1-Korrektur + Review-Loop-3-Patches, bmad-code-review 2026-08-18, 4 Layer; Nutzer-Entscheidungen 1/1):** `schema/compiler.md`**Revision 2.3** (neue §5.8 „Progressive Discovery über `index.md` (Story 2.5)"): (1) **Discovery-Pfad** — Bundleroot `wiki/index.md` → Area-`index.md` (frontmatterlos) → Area-Concepts in gepinnter §5.6-Form; Root-Concepts direkt aus der Bundleroot (AD-9, FR-11; gewurzelte Erreichbarkeit Root → Area → Concept, §5.7 Pkt. 5); (2) **gewurzelte Erreichbarkeit als deterministisches Discovery-Kriterium + re-executierbarer Selbsttest** (`UNREACHABLE AREA: <area>` für von der Bundleroot unverlinkte Area — AD-9; `NESTED AREA: <area>` für Zwei-Ebenen-Kandidaten, geprüft über **zwei Läufe** der Selbsttest-Formel: (A) Ein-Ebenen-Area-`index.md` → Root-Verlinkungsstatus, (B) `find wiki -mindepth 3 -type f -name "*.md"` → jede Datei in Tiefe ≥ 3 ist ein Zwei-Ebenen-Kandidat, Meldung je Verletzung genau eine; beide Läufe ohne Ausgabe = Discovery-SUCCESS; Instruktions-Selbsttest, schließt die Validator-Navigation-Lücke ohne Validator-Change — kein neuer §7-Punkt, AD-3); (3) **konsolidierte Zwei-Ebenen-Kartografie** (antwortet und schließt **Defer F-07**): Root + eine Area-Ebene; `wiki/a/b/` ist **keine zugelassene Anlageform**`wiki/a/b/concept.md`-Kandidat (auch **ohne** `index.md`; die Area-ohne-Index-Lücke, die der reine `index.md`-Scan übersähe) wird durch den **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** angehalten (keine Datei, kein Index-Link, textuelle Meldung `NESTED AREA: <area>`, Run „teilweise erfolgreich", NFR-4) — **Loopback-1-Renegotiation (menschen-autorisierte Option A):** Träger ist der §5.8-lokale Hold, **nicht** der §3.2-Kollisions-Hold (der bleibt der Dateikollision *bestehender* Concepts vorbehalten — ein brandneuer Zwei-Ebenen-Pfad kollidiert nie mit einem existierenden); (4) **Suche = Consumer-grep** (`grep -rn <term> wiki/` rekursiv bzw. `rg <term> wiki/`, AD-13 — keine Such-Datenbank, kein Embedding, kein Index-Datei-Format; NFR-3), (5) **Discovery-Demo (optional, kein MOVE)** — bei Durchführung: Formel-4-Re-Baseline-Pflicht (neuer Zuwachs-Run), sonst bleibt Formel 4 `38 ≡ 38`. Nachgeführt: **§7** Story-2.5-Vorbehalt auf „Suche"-Rest gekürzt (Navigation/Area-Indizes jetzt §5.8-verankert, Suche = Consumer-Thema; die Vorbehalt-Zeile lag in der Baseline `main` bei Z. 253, nach dem §5.8-Einschub bei Z. 285), **§8** Normreferenzen (AD-9/AD-13 → §5.8, FR-11 → §5.7 Pkt. 5/§5.8, NFR-3 neu) + Revisionslog **2.3**. **Selbsttest-Beleg (re-executiert, die gehärtete Loop-3-§5.8-Pkt.-2-Selbsttest-Formel von `schema/compiler.md` §5.8 Pkt. 2 (CWD-Präguard, Erreichbarkeits-Check auf Markdown-Linksyntax `](` per `grep -qF`, `LC_ALL=C sort -u`) als wörtlicher Einzel-Quote-`sh -c '…'`-String — Live-Baum: keine Ausgabe, Exit 0; CWD-Präguard-Kontrolle außerhalb der Workspace-Root: `SELBSTTEST-SETUP-Fehler: Workspace-Root (wiki/index.md fehlt)` + Exit 1):** Area `wissensarchitektur` aus der Bundleroot verlinkt (Root→Area, Selbsttest-Lauf A); die Area→Concept-Verlinkung (`source-material.md` in der Area-`index.md`) ist durch den **Validator Punkt 11** mechanisch abgedeckt (kein Duplikat im Selbsttest). **Sandbox-/Edge-Tests (I/O-Matrix, deterministische Formel-Ausgaben):** (a) HAPPY — gewurzelte Erreichbarkeit ohne Verletzung; (b) **AREA_UNREACHABLE** — Area-`index.md` existiert, Bundleroot unverlinkt → `UNREACHABLE AREA: <area>` (textuell benannter Instruktions-Selbsttest-Befund, kein Validator-Punkt); (c) **NESTED_AREA_KANDIDAT**`wiki/a/b/index.md`- und `wiki/a/b/concept.md`-Kandidaten (je einzeln) → `NESTED AREA: a` (erste Ebene der nicht-zulässigen Struktur; bei mehreren Dateien unter derselben ersten Ebene Konsolidierung über `LC_ALL=C sort -u`); Sandbox-Nachweis auf einem synthetischen Baum mit angelegter Testdatei (Zwei-Zustands-Klarstellung Loop-3-Decision-2: die Formel meldet bestehende Tiefe-≥-3-Dateien; der Hold-Zeitpunkt hält den Erstellungskandidaten an, ohne Datei). Die Sandbox-Kontrollen decken die I/O-Matrix-Szenarien **AREA_UNREACHABLE** und **NESTED_AREA_KANDIDAT** ab. §5.6-Formeln unverändert re-executierbar: Formel 2 (Form-Check) `0` (Exit 0), Formel 3 (Dangling-Check) keine Ausgabe, Formel 4 `38 ≡ 38` (Ist ≡ Extraktion aus dem Run-Kopf `862cf41` — keine neue Baseline nötig, keine `wiki/`-Dateimenge-Änderung durch Story 2.5; die Demo ist optional und würde bei Durchführung die Re-Baseline auslösen). Validator-Lauf (human-mechanisch ausgeführte Text-Instruktion `schema/validator.md`, D-3 — kein CLI): alle 7 `wiki/`-Dateien SUCCESS (Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1) — unverändert zur Story 2.4; das per-Datei-Verdikt ist der Ausführungs-Nachweis für die Spec-Verification Pkt. 3 und AC 5. `sprint-status.yaml`: `2-5-progressive-discovery-über-index-md-bereitstellen` `backlog`**`in-progress`** (Implementierungs-Eintrag) → **`review`** (Review-Handoff, dieser Eintrag — die gefrorene Spec-Vorgabe „→ `in-progress`" beschreibt den Implementierungsstand, der Review-Handoff ist der übliche Folgezustand, s. Sprint-Status-Workflow-Kommentar „Dev moves story to 'review'"); Loop-3-Abschluss mit diesem Review: `review`**`done`** (Sprint-Status synchronisiert, spec-Frontmatter `status: 'done'` deckungsgleich, `review_loop_iteration` → 3). `schema/wiki-compiler.md`/`validator.md`/`raw/` unverändert (AD-3); keine neue §7-Klasse; kein Standalone (D-3); keine Vertragsänderung.
- **Story 2.4 «Deterministische Bereichszuordnung & Concept-Hierarchie» (Review-Loop 2, bmad-code-review, 4 Layer):** 3 `decision-needed` (Nutzer-Entscheidungen 1/1/1) + 11 `patch` umgesetzt, 4 `defer` (s. `deferred-work.md`), 8 dismissed. `schema/compiler.md`**Revision 2.2**: (1) **Formel 3 quellenbasierte `../schema/*`-Exklusion** (Decision 2): die Exklusion greift nur, wenn die Quell-Datei auf Bundleroot-Ebene liegt (`dirname <quelle>` = `wiki`); aus Area-Quellen läuft einstufiges `../schema/…` durch Auflösung + Containment + Existenztest (Prosa war bereits „nur aus Root-Dateien", die Formel folgt jetzt der Prosa); (2) **Formel 4 Re-Baseline auf den Run-Kopf** (Decision 1): Extraktions-Commit `862cf410c624072833cd959da9a2fb26235716f6` statt `66451b6…` — der gepinnte Selbsttest lief auf dem Zuwachs-Baum deterministisch `38 ≠ 30` = Run-FAIL (bekannt-böser Zustand aus Loop-1-A2, nur halb geheilt); jetzt **38 ≡ 38** (re-executiert: Ist=38, Extraktion `862cf41`=38; `66451b6`/`30` dokumentiert den Vor-Zuwachs-Zustand, bleibt als Referenz dieses Runs); (3) **§5.7 Pkt. 1(a) Treffer-Prädikat + Tie-Break** (Decision 3): „inhaltlich deckungsgleichen Eintrag" (Urteil, AD-13-Verstoß) ersetzt durch textuelles Prädikat (Identität des Link-Ziels ≡ kanonischer Name des Themas) + Mehrfachtreffer-Regel (Bundleroot-Links vor Area-Links, dann lexicografische Pfad-Reihenfolge); (4) file-relative Pin-Wortwahl in §5.3 Pkt. 3 (Oxymoron „file-relativ bundle-relativ" aufgelöst), §6.6-Zelle und §7-Bullet nachgeführt; (5) §7-Scope-Einleitung „Root-Ebene" → „Root-Ebene und in Areas gemäß §5.7"; (6) Typos („akte-Baseline" → „aktuelle Baseline", Doppel-Leerzeichen §6.6); (7) „Kopf dieser Spezifikation" → „Baseline-Commit des letzten Zuwachs-Runs". `wiki/wissensarchitektur/index.md`: Prosa auf den tatsächlichen Area-Inhalt gekürzt (nur `source-material.md` existiert; Link-Form/Discovery-Topics waren übergezeichnet). **Negativ-Test-Nachweis (Sandbox-Baum, exakte Formel-Ausgabe):** (a) **TOP_LEVEL_COLLISION** — Kandidat mit ID `llm-wiki-prinzip`: `wiki/llm-wiki-prinzip.md` existiert → §3.2-Hold „Concept existiert bereits — Aktualisierung ist Epic 3" (keine Datei, kein Index-Link, kein `log.md`-Eintrag); (b) **AREA_WITHOUT_INDEX** — Sandbox-`wiki/foo/` ohne `index.md`: wörtliche Punkt-11-Meldung `FAIL wiki/foo/ Punkt 11: Index-Regel verletzt (Area ohne index.md=foo)` (Validator-§7.1-Fixture-Wortlaut, kein inventiertes `AREA_WITHOUT_INDEX`-Label); (c) **DIVING_NON_EXISTENT**`[v](../fehlt.md)` aus Area-Concept → `DANGLING: ../fehlt.md`; (d) **Out-of-Bundle-Escape** (Loop-1-A1-Kontrolle) — `[x](../../README.md)``DANGLING: ../../README.md`, `[y](../../schema/compiler.md)``DANGLING: ../../schema/compiler.md`; (e) **In-Bundle-`../schema/` aus Area (Loop-2-Kontrolle)**`[z](../schema/compiler.md)` aus `wiki/wissensarchitektur/source-material.md``DANGLING: ../schema/compiler.md` (vor dem Loop-2-Patch: still exkludiert, leere Ausgabe — Sandbox-Nachweis des gefixten Löchs). Positiv-Kontrolle nach allen Patches: Formel 2 (Form-Check) = `0` (Exit 0), Formel 3 (Dangling) = keine Ausgabe, Formel 4 = `38 ≡ 38` (beide re-executiert). Status-Nachführung (korrigiert zum obigen Implementierungs-Eintrag): `sprint-status.yaml` `2-4-…` `backlog``in-progress` (Implementierungs-Eintrag) → **`review`** (Review-Handoff, dieser Eintrag); die gefrorene Spec-Vorgabe („→ `in-progress`") beschreibt den Implementierungsstand, der Review-Handoff ist der übliche Folgezustand (s. Sprint-Status-Workflow-Kommentar „Dev moves story to 'review'"). Loop-Abschluss mit diesem Review: `review`**`done`** (Sprint-Status synchronisiert, `sprint-status.yaml` `last_updated` nachgeführt; spec-Frontmatter `status: 'done'` deckungsgleich, `review_loop_iteration` → 2). Validator-Lauf-Korrektur zum obigen Eintrag: die gültige Datei-Zählung ist **7** `wiki/`-Dateien (Bundleroot, `log.md`, 3 Root-Concepts, Area-`index.md`, Area-Concept) — der obige Verweis auf „Punkt 9/10" für die Differenz zur Spec-Zahl 6 war falsch belegt (Punkt 9 = `okf_version`/`type: bundle`-Verbot außerhalb der Bundleroot; `log.md` wird über Punkt 10/V-2 mitvalidiert); die Spec-Zahl 6 ist eine frozen-Defizitzählung (Defer in `deferred-work.md`). `schema/wiki-compiler.md`/`validator.md`/`raw/` unverändert (AD-3); keine neue §7-Klasse; kein Standalone (D-3).
- **Story 2.4 «Deterministische Bereichszuordnung & Concept-Hierarchie» (Implementierung):** `schema/compiler.md`**Revision 2.1** (neue §5.7 „Deterministische Bereichszuordnung & Concept-Hierarchie": Routing-Regel textual-deterministisch — (a) First-Class-Link aus dem bestehenden `index.md`-Baum → Bereich `wiki/<area>/<concept>.md`, (b) Default Root-Ebene, neue Areas nur konsolidiert; nie Embedding/Vector, AD-7c/A0-10/AD-13; kanonische ID-Normalisierung AD-7a/A0-8 mit Beispieltabelle; Top-Level-Kollisions-Hold → fixierter §3.2, kein neues Prädikat, kein MOVE; file-relatives Link-Auflösungsmodell inkl. Out-of-Bundle-`..`-Containment; Area-`index.md`-Regel mit wörtlicher Punkt-11-Meldung `FAIL … Punkt 11: Index-Regel verletzt (Area ohne index.md=<area>)` — kein inventiertes Label; Worked Example). Nachgeführt: §5.1 Pkt. 1, §5.3 Pkt. 3 (Index-Regel area-bewusst), §5.6 Pkt. 1/2/3/4/5 (file-relativ; `../`-Exklusion aufgelöst; Formel 3 mit Quell-Datei-Spur + in-Bundle-`..`-Auflösung + Containment — Out-of-Bundle-`..`-Escape wird `DANGLING`; Formel 4 neu auf `baseline_commit` `66451b6e6c9e139fb3aa3bbf4b01291e1e2d273a` (deklarierte `baseline_commit`-Werte der Spec-Frontmatter, nicht mehr Story-2.3-`7e1f449…`; Loop-2: Re-Baseline auf den Run-Kopf `862cf41`, s. obiger Review-Eintrag), Basename-Filter `grep -v "log.md$"`), §6 Pkt. 2, §6.6, §7, §8. `deferred-work.md`: drei Story-2.4-namige Einträge geschlossen (`umgesetzt`): bundlerelativ-vs-dateirelativ (→ §5.7 Pkt. 4 file-relativ), Cross-Page-Anker-Stale-Evidenz (→ Ist-Verhalten Fragment-Strip, keine Dangling-Ausgabe), künftiges Area-`log.md`-Baseline-Bruch (→ Formel 4 Basename-Filter). Neue Area `wiki/wissensarchitektur/` angelegt: `wiki/wissensarchitektur/index.md` (frontmatterlos, Vertrag §2/§6, Validator Punkt 10; verlinkt das Area-Concept in der gepinnten §5.6-Form) + `wiki/wissensarchitektur/source-material.md` (Area-Concept `type: concept`, `sources` s1=architecture-spine + s2=prd, §5.5-Inline-Verweise + Kontext-Marker, Body-Links auf Root-Concepts in file-relativer `../`-Form: `llm-wiki-prinzip.md`, `wissensarchitektur-trennung-states.md`, `knowledge-kompilation-inkrementell.md`). `wiki/index.md`: neue **Area-Sektion** verlinkt `wissensarchitektur/index.md` (die 3 bestehenden Root-Concept-Links + die 3 `../schema/`-Links byte-identisch, Null-Migration). **Formel-4-Re-Baseline:** Ist-Zählung auf dem neuen Baum = **38** (`log.md`-exkludiert; `grep -roE '\(raw/'`), Baseline-Extraktion aus `66451b6` = **30** (alter Baum, 4 nicht-`log.md`-Dateien: `index.md` + 3 Root-Concepts; `git ls-tree -r + git show`, Basename-`log.md`-Filter) — Dokumentation verlangt die aktuelle Baseline aus `66451b6` (`38 ≠ 30`, kein Fehlalarm: Zuwachs-Re-Baseline; Loop-2-Korrektur: Re-Baseline auf den Run-Kopf `862cf41`, `38 ≡ 38`, s. obiger Review-Eintrag); die exakte Ist-Zahl hängt am finalen Concept/Body-Stand und wird in der Spec-Verification des Runs belegt. `sprint-status.yaml`: `2-4-deterministische-bereichszuordnung-concept-hierarchie` `backlog`**`in-progress`** (dieser Statuswechsel findet mit diesem Eintrag statt). Validator-Lauf: alle **7** `wiki/`-Dateien SUCCESS (`index.md` + `log.md` + 3 Root-Concepts + Area-`index.md` + Area-Concept; Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1; die Spec-Verification nennt erwartungsseitig „6 `wiki/`-Dateien" — die Differenz erklärt sich durch das reservierte `log.md` (Protokoll, wird mitvalidiert, Punkt 9/10), die Validator-Effort-Zahl dieser erfolgten Ausführung ist 7). `schema/wiki-compiler.md`/`validator.md`/`raw/` unverändert (AD-3); keine neue §7-Klasse; kein Standalone (D-3).
## 2026-08-17
- **Story 2.3 «Concepts verlinken — eine erlaubte Linkform» (Implementierung):** Linkform auf **bundle-relativ mit `.md`-Endung** gepinnt (Rationale: die 3 bestehenden Concept-Links in `wiki/index.md` sind bereits in dieser Form → Null-Migration; Ziele sind explizite Dateien, auch mit Areas eindeutig; Standard-Markdown-Tools lösen ohne Konventionswissen auf — AD-7b, A0-9, FR-10, AD-8). Veränderte Dateien: `schema/compiler.md`**Revision 1.8** (neue §5.6 „Concept-Links (Story 2.3)": Pin, Geltungsbereich Concept-Bodies + `index.md` mit Ausnahmen `raw/`-Provenienz (§5.5)/`../schema/`/`http`/Gleichseit-Anker, **vier** re-executierbare Selbsttest-Formeln (Bestands-, Form-, Dangling-, Kontakt-mit-`raw/`-Unverändert-Check, AD-17h), NFR-4-Regel, Worked Example; die „bis Story 2.3"-Klauseln in §5.3 Pkt. 3 + §5.5 Pkt. 1 referenzieren §5.6; §7-Bullet, §8-Normreferenzen AD-7b/AD-8/FR-10/A0-9 + Revisionslog 1.8), `wiki/wissensarchitektur-trennung-states.md` (zwei inhaltsbegründete Cross-Links in gepinnter Form: → `llm-wiki-prinzip.md`, → `knowledge-kompilation-inkrementell.md`, je mit §5.5-konformem Kontextsatz/Inline-`raw/`-Verweis; keine Frontmatter-/`sources`-Änderung), `deferred-work.md` (Linkform-Eintrag geschlossen). `wiki/index.md` unverändert (die 3 Concept-Links bereits in gepinnter Form; die 3 `../schema/`-Links außerhalb des Pin-Wirkungsbereichs). `sprint-status.yaml`: `2-3-concepts-verlinken-eine-erlaubte-linkform` `backlog`**`in-progress`** (dieser Statuswechsel findet mit diesem Eintrag statt). Kontakt-mit-`raw/`-Unverändert: die Vorkommen-Zählung der Inline-`raw/`-Verweis-Muster unter `wiki/` (Selbsttest-Formel §5.6 Pkt. 3, Formel (4)) ist identisch zur aus `baseline_commit` `7e1f449` dynamisch extrahierten Baseline (**30**, `log.md`-exkludiert; `git ls-tree` + `git show`, deterministisch re-executierbar). Validator-Lauf: alle 5 `wiki/`-Dateien SUCCESS (Punkte 1/6/11/14, EC-1; der Punkt-11-Check bleibt strukturell unverändert und akzeptiert beide Schreibweisen — keine neue §7-Klasse, kein Validator-Change).
- **Story 2.2 «Claim-granulare Provenienz dokumentieren» → `done` (bmad-code-review 2026-08-17, 4 Layer, abgeschlossen):** Review auf `bb32acd → story-2-2` — 1 `decision-needed` (D1 Referenzform → Option 1: Komma-Form als zulässige Variante), 12 `patch` (alle umgesetzt), 4 `defer`, 2 dismissed. `schema/compiler.md`**Revision 1.7**: defekte Selbsttest-Grep-Formel behoben (ungeschlossene ERE `'(raw/|]\(raw/'``'\(raw/'`), Komma-Form + Multi-Beleg-Serialisierung in §5.5 Pkt.1, Relokations-Sub-Bullets als 1a/1b nummeriert, drei Marker-Muster, Forward-Referenz-Disambiguierung auf `Story 3.1: Inkrementellen Datenfluss implementieren`, §8-Normreferenzen um AD-4a/AD-9/AD-13/AD-14/AD-16/FR-16/A0-3 ergänzt. `wiki/knowledge-kompilation-inkrementell.md` Forward-Referenz-Zitat disambiguiert. Defer W2W4 (Fragment-Existenz, Marker-Grammatik, `sources`-`id`-Eindeutigkeit — keine re-runnable Prüfung ohne Standalone, D-3) + W1 (sources-Closure) in `deferred-work.md`. Re-Verifikation: `sh -c "grep -nE '\(raw/' wiki/*.md"` 27 Treffer, alle 3 Diagramm-Marker + Forward-Referenz mit exaktem Token, `sources`-`id` je Concept eindeutig, `wiki-compiler.md`/`validator.md`/`raw/` unverändert. Klassifikation: `review-2-2-klassifikation.md`. `sprint-status.yaml`: Story 2.2 → `done`.
- **Story 2.2 «Claim-granulare Provenienz dokumentieren» — Nachrüstung (Datei-Bodies, `index.md`, `log.md`):** `schema/compiler.md` um §5.5 „Claim-granulare Provenienz" erweitert (nach §5, vor §6): Inline-`raw/`-Verweis je belegter Aussage + `id`-Attribution (Vertrag §3.3), Kontext-Marker je Übernahme (übernommen aus `<raw-Quelle>` (rohe Quelle) bzw. übernommen aus `<Concept>` auf Basis von `<raw-Quelle>`, jeweils „nicht eigenständig belegt"), eindeutiges `id`-Scoping je Concept, Selbsttest-Kriterien (AD-4a/4c, AD-13, AD-17h); Revisionslog (§8) → Revision 1.5 (Nachrüstung) bzw. 1.6 (Review-Patch-Runde: Stellen-Kennungs-Semantik, volle Pfade, Direktübernahme-Marker, worked example, korrigierte Grep-Formel), §7-Selbstbegrenzung entsprechend angepasst. `wiki/index.md` (Descriptions um `(aus <raw-Pfad>)`), `wiki/knowledge-kompilation-inkrementell.md`, `wiki/llm-wiki-prinzip.md`, `wiki/wissensarchitektur-trennung-states.md` nachkonformiert — jede belegte Aussage trägt Inline-Verweis; Übernahmen tragen Kontext-Marker (keine Selbstreferenz, keine Concept-`id`-Fragmente `#s1`/`#s2`). **Diagramm-Quell-Deklaration:** Das ASCII-Diagramm in `wiki/knowledge-kompilation-inkrementell.md` (Datenfluss) stammt aus `raw/architecture-spine/architecture-spine-2026-08-14.md#AD-5` — zusätzlicher `sources`-Eintrag (`id: s2`) ergänzt; das Diagramm in `wiki/wissensarchitektur-trennung-states.md` (Sources → Compilation → Knowledge Bundle → Consumers) aus `raw/prd/prd-wow20-2026-08-14.md` (§ 8.3 Separation of Concerns) — zusätzlicher `sources`-Eintrag (`id: s2`) ergänzt. `sources`-`id` je Concept eindeutig; keine unautorisierten Keys. `wiki-compiler.md`/`validator.md`/`raw/` unverändert. Validator-Lauf: alle 5 `wiki/`-Dateien SUCCESS (Punkte 1/6/11/14, EC-1) — Story 2.2 `review`.
- **Story 2.1 «Concepts aus Source Material erzeugen (OKF-Konform)» → `done` (Human-Review-Freigabe erteilt):** Nutzer hat die verbleibende Schwelle (menschliche Review-Freigabe) überschritten — Status `review``done`, `sprint-status.yaml` nachgeführt. Alle 8 ACs PASS, kein AC-/Vertrags-Blocker; offene Folge-Arbeit (autorisierte Validator-Rev 9) ist kein Story-2.1-Blocker und bleibt als Action-Item `code-review-2-1-item-2` in `deferred-work.md` verankert.
- bmad-code-review Re-Run Story 2.1 (unabhängig, 4 Layer, Stand nach Validator-Rev-8): alle 8 ACs PASS, 17 Patch / 4 Defer / 2 Dismiss. 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 08-17), `wiki/index.md` (Baumdiagramm um Root-Concepts-Ebene), Doku-/Referenz-Konsistenz (`deferred-work.md` Dedupe + n=21, `review-input-dryrun-…md` 16+2-Auflösung, `epic-2-context.md` AD-4c tautologisch, spec Verification/Change-Log, `sprint-status.yaml` closed-Datum). 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`).
- **Story 2.1 «Concepts aus Source Material erzeugen (OKF-Konform)» → `review` (Freigabe zur Human-Review):** Option-A-Voraussetzung erfüllt — autorisierte Validator-Revision 8 ausgeführt und zertifiziert (s. Eintrag 2026-08-16). `spec-2-1-…`-Re-Review-Verdikt aktualisiert: Story ist `done`-fähig; einzige verbleibende Schwelle ist die menschliche Review-Freigabe (`review``done`). Action-Item `code-review-2-1-item-1-autorisierte-validator-revision-option``done` (Autorisations-Runde: `validator-revision-8-autorisationsrunde-f14-innen-ebenen.md`). `sprint-status.yaml`: Story 2.1 → `review`.
## 2026-08-16
- Autorisierte Validator-Revision 8 (Option-A-Heilung Story 2.1, ausgeführt 2026-08-17): `schema/validator.md` Revisionslog-Eintrag „Revision 8" + Header-Revisionszahl auf 8 angehoben (behebt OBS-1: Header „Revision 6" vs. Log „Revision 7"). Drei Änderungen: (1) F-14-Negativ-Fixture 4a in §7.1 (Punkt 4: `resource: README.md` außerhalb `raw/`, existierend → `FAIL … Punkt 4`; Retrospective F-14); (2) Innen-Ebenen-Key-Subset formalisiert — Punkt-6-Zelle verweist auf die §7.3-Isolations-Notiz (autorisiert, Revision 8); (3) Revisionslog nachgeführt. Vertrag `schema/wiki-compiler.md` und `schema/compiler.md` unverändert (keine neue §7-Invaliditätsklasse). Zertifizierung selbstgeprüft: Fixture 4a isoliert → FAIL Punkt 4 (resolved=README.md) (Punkt 3 nicht verletzt, keine anderen Punkte); Innen-Ebenen-Sample (`sources`-Eintrag mit `role: x` bei existierender `raw/`-Datei) → FAIL Punkt 6 (Key=role); reales Bundle (5 `wiki/`-Dateien) → SUCCESS (keine neu ausgelösten FAILs).
- `schema/compiler.md` auf Revision 1.3 — §1-Überschrift ins Deutsche, Prüfgrundlage auf validator.md Revision 7 angeglichen, §6.6-canonical-Reihenfolge-Zeile von ✗- auf reine ✓-Vorgabe korrigiert (kein Validator-FAIL, Label §4.2 statt „§6.4"), §1.2/§1.4-Evidenz-Widerspruch aufgelöst (Artefakt-Ausnahme als dokumentarische Konvention). `wiki/log.md`-Demonstrationslauf-Einträge an Vertrags-§5-Format angeglichen (`- neu:` … angelegt (sources: …)). Story 2.1 bleibt `in-progress` (Option A: Heilung der validator.md-Rev-7-Klarstellung über die nächste autorisierte Validator-Revision).
- Step-04-Review (Story 2.1): Nachschärfungen aus den drei Review-Layern (Blind Hunter, Edge Case Hunter, Verification Gap) angewendet — `schema/compiler.md` auf Revision 1.2 (Input-Regel auf AD-17a referenziert statt AD-17.2, `sources`-Eintrag-Key-Subset in §4.2/§6.5/§6.6 ergänzt, `status`-Absenz an Vertrag §3.6 angebunden, Bereichs-Ziel-Klarstellung bis Story 2.4, §6.6-Fehlerursachen korrigiert, AD-17f als Commit-Boundary sichtbar), `schema/validator.md` auf Revision 7 (§7.3-Isolations-Hinweis auf Innen-Ebenen-Key-Subset erweitert), `wiki/index.md`-Workspace-Absatz korrigiert (`schema/` = drei Artefakte: Vertrag, Validator, Compiler), `sprint-status.yaml`: Story 2.1 → `review` (Review begonnen). `at`-Zeitstempel der drei Concepts (`2026-08-16T09:23:33Z` = 11:23:33 Lokalzeit +0200) decken sich mit den Datei-Mutationszeitpunkten (11:24) — im Review geprüft.
- neu: `llm-wiki-prinzip` angelegt (sources: raw/prd/prd-wow20-2026-08-14.md) — Root-Concept, Trust-Metadaten A0-20 (`generated { by: wow-compiler/0.1.0, at: <ISO-8601-Datetime> }`, `verified` ungesetzt)
- neu: `knowledge-kompilation-inkrementell` angelegt (sources: raw/epics/epics-2026-08-14.md) — Root-Concept, Trust-Metadaten A0-20
- neu: `wissensarchitektur-trennung-states` angelegt (sources: raw/architecture-spine/architecture-spine-2026-08-14.md) — Root-Concept, Trust-Metadaten A0-20
- Retrospective-Follow-up (AI-1/F-01): `schema/validator.md` auf Revision 3 — `at`-Nur-Datum-Toleranz zurückgenommen. `at: 2027-01-01` ist jetzt FAIL nach Punkt 14 (reine Datumsangabe ≠ ISO-8601-Datetime); Positiv-Fixture 14c neu mit `±HHMM`-Form (`+0200`) belegt. Vertrag `schema/wiki-compiler.md` unverändert (autorisiert). Validator-Zertifizierung zugehörig geprüft: Fixture 14c (Negativ) erzeugt FAIL.
- Retrospective-Follow-up (AI-2/F-02): `schema/validator.md` auf Revision 4 — neue Fixture-Tabelle §7.3 für die §6-Fachprüfungen (EC-1 Existenz, EC-3 Kalender, stale_after-WARN, EC-11 non-md). Zertifizierung gegen erweiterte Fixtures selbstgeprüft — Ergebnis: PASS (je §6-Fixture isoliert geprüft, genau die angesprochene Prüfung löst aus; EC-1/EC-3-FAILs sind Run-FAIL, WARN ist Berichtskanal, non-md wird ignoriert ohne Verdikt).
- Retrospective-Follow-up (AI-3/F-03): `schema/validator.md` auf Revision 5 — §3.2-Voraussetzungsprüfungen als fachliche Prüfklasse V-1/V-2 gelabelt (Verdikt `FAIL (Voraussetzung) … (V-1|V-2)` statt `FAIL (Struktur)`), §5-Grammatik/Selbstbegrenzung sowie §7.1/§7.3-Fixtures angeglichen. Zertifizierung: V-1/V-2-Fixtures selbstgeprüft — PASS (isolierte Auslösung; kein §7-Punkt-Nr.-Konflikt).
- Retrospective-Follow-up (AI-4/F-09): `raw/*/source.md`-Provenienz korrigiert — `_bmad-output/` IST versioniert; Herkunft auf Commit `6cc667d` gestützt und SHA-256 der Herkunftsdatein aufgenommen (byte-identisch zur materialisierten Evidenz, geprüft).
- Retrospective-Follow-up (AI-5/F-05): `schema/validator.md` auf Revision 6 — BOM-/Leerzeilen-Stripping der Frontmatter-Erkennung von Punkt 10 auf Punkte 2/8 ausgedehnt (einheitliche §3-Präambel). Zertifizierung: neue Positiv-Fixtures 2a/8b (BOM + Leerzeile vor `---`) → SUCCESS; geprüft gegen isolierte Samples — PASS.
- Retrospective-Follow-up (AI-7): Defer-Kontexte gesichert — F-04, F-06, F-07, F-08, F-11, F-14 als Folge-Aufgaben in `deferred-work.md` notiert (mit Epic-2/3/Validator-Zuordnung); F-06/F-08 zusätzlich als „Offene Punkte" direkt im Validator (Rev. 6) verankert.
- Retrospective-Follow-up (AI-6/F-10): Mechanische Validator-Verifikation nachgeschärft — spec-1-4-Verification enthält jetzt einen strengen, deterministischen Vertrag↔Validator↔Fixtures-Abgleich (14 Punkte, keine Punkt 15, Verifikations-Beleg-Tabelle) als Pflicht-Re-Check bei jeder Autorisierung. Bleibt innerhalb der D-3-Grenze (kein Standalone-Programm); dokumentarisch-mechanisch statt Existenz-Grep.
## 2026-08-15
- Validator-Zertifizierung: `schema/validator.md` (Revision 2) gegen die Referenz-Fixtures (§7) selbstgeprüft — Ergebnis: PASS (alle Negativ-Fixtures erzeugen FAIL, alle Positiv-Fixtures SUCCESS; maschinenlesbares Verdikt gemäß §5 bestätigt). Jede Negativ-Fixture wird je Fixture isoliert gegen ein sonst-valides Sample geprüft, sodass genau ihr zugehöriger Punkt auslöst (kein Vorab-FAIL durch andere Punkte).