--- title: 'Progressive Discovery über index.md bereitstellen (Story 2.5)' type: 'feature' created: '2026-08-18' status: 'done' review_loop_iteration: 3 baseline_commit: 64a0f6a6161247c0556f9d1dc2500f2b913fa967 context: - _bmad-output/implementation-artifacts/epic-2-context.md --- ## Intent **Problem:** Die progressive Discovery ist im Bundle zwar normiert (Vertrag §6: Bundleroot → Area-`index.md` → Concepts, AD-9/FR-11), aber für den Adressierbaren Anspruch sind drei Lücken offen: (1) §7 Z.253 der Compiler-Instruktion verweist die komplette Discovery ("Navigation, Area-Indizes, Suche") als Vorbehalt an Story 2.5; (2) der Validator prüft weder, dass eine Area von der Bundleroot aus erreichbar ist (Navigation Root → Area, AD-9), noch gibt es einen Selbsttest für die vollständige index-Verkettung; (3) Defer F-07 (verschachtelte Areas/Unter-Ebenen, `wiki/a/b/concept.md`) ist offen und nennt Story 2.5 ausdrücklich als Heimat, die die Antwort festlegt. **Approach:** Story 2.5 integriert die progressive Discovery als expliziten Instruktionsabschnitt (§5.8) in `schema/compiler.md` — D-3-konform, kein Vertrag-/Validator-/raw-Change (AD-3). Sie definiert: (a) die bewertbare Discovery-Vollständigkeit (gewurzelte Erreichbarkeit Root → Area-`index.md` → Concept als erfolgreicher Discovery-Pfad, §5.7 Pkt. 5), (b) die Basis-Discovery-Pflicht (frontmatterlose Area-`index.md` verlinkt ihre Area-Concepts) als „Struktur" und nicht nur Soll, (c) eine deterministische textuelle „Such"-Antwort für den Story-2.5-Vorbehalt (Navigation als primäre Discovery, Suche als Consumer-seitige grep-Angelegenheit — AD-13, FR-11, NFR-3), und (d) die Antwort auf Defer F-07: die Kartografie folgt ab Story 2.5 einer konsolidierten Zwei-Ebenen-Struktur (Root-Concepts + Areas mit je einer `index.md`); verschachtelte Areas (`wiki/a/b/`) sind keine zugelassene Anlageform — ein solcher Kandidat wird durch den **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** angehalten *(Loopback-1-Renegotiation 2026-08-18, menschen-autorisiert — Option A: Träger ist §5.8, nicht §3.2; §3.2 bleibt der Dateikollision bestehender Concepts vorbehalten).* Neue §5.8 + Revisionslog (3.x). Kein Interface-/Backend-/Datenbank-Änderung — reine Instruktions- und Bundle-Demonstrations-Änderung. Keine neue §7-Invaliditätsklasse; validator.md bleibt strukturell unverändert (Punkt 11 bleibt die Index-/Verlinkungs-Prüfung). ## Boundaries & Constraints **Always:** - **Progressive Discovery ist ein Instruktionsthema (D-3).** Die Discovery-Semantik wird in `schema/compiler.md` (neue §5.8) verankert — einziger Instruktions-Ort. Kein Vertrag-/Validator-/raw-Change (AD-3), keine Erweiterung der §7-Liste, kein Standalone-Tool. Der Validator bleibt bei Punkt 11 als strukturelle Index-/Verlinkungs-Prüfung (Area-Existenz + Concept-in-Index verlinkt); die Discovery-Vollständigkeit (Root → Area → Concept) ist keine neue §7-Invaliditätsklasse — sie wird deterministisch als Instruktions-Selbsttest belegt. - **Kartografie ist konsolidiert Zwei-Ebenen (befriedet F-07).** Das Bundle-Navigationsmodell besteht aus Root-Concepts + Areas (je eine frontmatterlose `wiki//index.md`, die ihre Area-Concepts in gepinnter §5.6-Form verlinkt; Bundleroot `wiki/index.md` verlinkt die Area-`index.md`, Navigation Root → Area, AD-9). **Verschachtelte Areas sind keine zugelassene Anlageform:** `wiki/a/b/` mit Concept darunter ist kein „Area mit Inhalt" — ein solcher Kandidat (Erstellungskandidat oder Discovery-Ziel) wird durch den **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** angehalten (keine Datei, kein Index-Link, Meldung `NESTED AREA: `; Loopback-1-Korrektur: Träger ist §5.8-lokal, D-3 — nicht §3.2, der bleibt der Dateikollision bestehender Concepts vorbehalten). Die F-07-Frage „was ist Area mit Inhalt" wird damit instruktionsseitig deterministisch beantwortet (Erkennung = Datei-Existenz in Tiefe ≥ 3 unter der Bundleroot; Meldung = Instruktions-Selbsttest-Befund — kein §7-Eingriff). - **Suche ist konsumenten-/extern-seitig (AD-9, FR-11, AD-13).** Die Discovery braucht keine proprietäre Datenbank: Navigation ist die primäre Discovery (gewurzelte Erreichbarkeit), Suche ist optional konsumenten-seitig — textuell-deterministisch z. B. `grep`/`ripgrep` über `wiki/`. Kein Embedding/Vector, kein Such-Dienst, kein Index-Datei-Format-Erfinden — die bestehenden `index.md` sind die Discovery-Ebene. - **Die Discovery-Lücke des Validators ist instruktionsseitig deckbar.** Der Validator prüft nicht, dass eine Area von der Bundleroot verlinkt ist (Punkt 11 adressiert Area-Existenz/Concept-Verlinkung, nicht Root→Area-Navigation). Diese Lücke wird durch einen deterministischen, re-executierbaren Instruktions-Selbsttest geschlossen (Discovery-Check: jede Area ist aus der Bundleroot erreichbar; jedes Area-Concept in seiner Area-`index.md` verlinkt — Verlinkung in gepinnter §5.6-Form). Kein Validator-Change (AD-3, D-3). - **Kein MOVE bestehender Root-Concepts.** Die bestehenden Root-Concepts werden nicht in Areas verschoben (Kuratierung/AD-7d ist Epic-3-Nähe); als Discovery-Demo kann ein neues Root-Concept ergänzt und (a) in der Bundleroot sowie (b) über einen Index-Link „über das Area-Concept" verlinkt werden (nur neue Inhalte). - **Bundle bleibt ohne geladene Indizes vollständig verständlich (NFR-2/NFR-5)** — alle Discovery-Regeln sind Markdown/Datei-Struktur, kein Server, keine Datenbank, kein laufender Prozess. - `deferred-work.md` (append-only): Defer F-07 bekommt `status: umgesetzt (Story 2.5…)`; die drei „Home: fokussierte Instruktionsrunde ab Story 2.5"-Einträge (Multi-Line, `)`-blinde Extraktion, Cross-Page-Anker) bleiben offen — sie gehören zur Link-Pin-Runde (§5.6), die Story 2.5 unberührt lässt (kein Scope-Hijack). `sprint-status.yaml`: Key `2-5-…` → `in-progress`. **Ask First:** Andere Pin-Wahl als die bestehende gepinnte §5.6-Form · MOVE bestehender Concepts · Validator-/Vertrags-/raw-Änderung · Einführung verschachtelter Areas als Regelfall · Such-Dienst/Index-Datei-Format über die Konsumenten-seitige grep-Antwort hinaus. **Never:** Veränderung an `schema/wiki-compiler.md`/`schema/validator.md`/`raw/` (AD-3) · neue §7-Invaliditätsklasse · Angebot einer zweiten Discovery-Ebene über die Zwei-Ebenen-Struktur hinaus · Embedding/Vector/Such-Dienst (AD-13) · proprietäre Link-/Search-Datenbank (AD-8) · Renames/Redirects (AD-7d). ## I/O & Edge-Case Matrix | Scenario | Input / State | Expected Output / Behavior | Error Handling | |----------|--------------|---------------------------|----------------| | HAPPY_PATH | Bundle mit Bundleroot, einer Area (`wissensarchitektur/` mit `index.md` + `source-material.md`), 3 Root-Concepts | Jede Area ist aus der Bundleroot erreichbar; jedes Area-Concept aus seiner Area-`index.md`; jedes Root-Concept aus der Bundleroot — gewurzelte Erreichbarkeit; Discovery-Selbsttest liefert keine Verletzung; Suche = grep | N/A | | AREA_UNREACHABLE | Area-`index.md` existiert, ist aber von der Bundleroot nicht verlinkt (kein Root→Area-Pfad) | Discovery-Check → `UNREACHABLE AREA: ` als Verletzung — die Area bleibt für die Navigation unsichtbar (AD-9) | Run-FAIL textuell benannt (Instruktions-Selbsttest, kein Validator-Punkt) | | NESTED_AREA_KANDIDAT | Ein Erstellungskandidat mit Ziel `wiki/a/b/concept.md` (zwei Ebenen, Tiefe ≥ 3) bzw. `wiki/a/b/` | **Zwei Zustände:** (1) **Hold-Zeitpunkt** — der Erstellungskandidat wird durch den **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** angehalten: keine Datei, kein Index-Link; (2) **Formel-Befund** — existiert eine Markdown-Datei in Tiefe ≥ 3 unter der Bundleroot (z. B. nachträglich angelegt), meldet die §5.8-Selbsttest-Formel (Lauf B) **`NESTED AREA: `** (erste Ebene); der Sandbox-Nachweis belegt die Detektion auf einem synthetischen Baum mit angelegter Testdatei | Run bricht fürs Gebilde ab: „teilweise erfolgreich" (übrige Einheiten laufen weiter, NFR-4) — *Zwei-Zustands-Klarstellung per menschlicher Renegotiation 2026-08-18 (Loop-3-Decision 2)* | | DISCOVERY_DEMO_ROOT_AREA_LINK | Neues Root-Concept, zusätzlich überdacht in das `source-material.md`-Area-Concept in §5.6-Form verlinkt | Root-Concept ist aus Bundleroot erreichbar; zusätzlicher (rein informierender) Link von der Area aus — kein MOVE, konsolidierte Zwei-Ebenen-Kartografie bleibt | N/A | | SEARCH_GREP | Consumer führt textuelle Suche nach Begriff `` aus | `grep -n wiki/`-Suche als konsumenten-/extern-seitige Antwort; keine Such-Infrastruktur/Bundle (AD-8, AD-13) | N/A | ## Code Map - `schema/compiler.md` — **mutiert**: neue **§5.8 „Progressive Discovery über `index.md` (Story 2.5)"** (nach §5.7 ≈ Z.200, vor §6): (1) Discovery-Pfad — Bundleroot `wiki/index.md` → Area-`index.md` (frontmatterlos) → Area-Concepts in gepinnter §5.6-Form; Root-Concepts direkt aus der Bundleroot (§5.7 Pkt. 5, AD-9/FR-11); (2) **gewurzelte Erreichbarkeit** als deterministisches Discovery-Kriterium + re-executierbarer Selbsttest — jede Area muss aus `wiki/index.md` verlinkt sein (Root→Area, AD-9); Verletzung → `UNREACHABLE AREA: ` (textuell benannter Instruktions-Selbsttest-Befund, Run-FAIL gemäß §5.6-Pkt.-4-analoger NFR-4-Regel); die Area→Concept-Verlinkung ist durch Validator Punkt 11 mechanisch abgedeckt (`Concept nicht verlinkt=`) und wird hier nicht dupliziert; die §5.6-Formeln (Z.133–166) decken die Link-Form weiter ab; **verlinkt = Ziel in gepinnter §5.6-Form `(a/index.md` bzw. `(./a/index.md` — das `./`-Präfix ist von der Erreichbarkeits-Formel toleriert (die Form-Check-Exklusion `^\.` in §5.6 Pkt. 3 zählt `./`-Ziele nicht als Formverletzung, L2-6-Erkenntnis); (3) **konsolidierte Zwei-Ebenen-Kartografie** (antwortet Defer F-07): Root + eine Area-Ebene; **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** — `wiki/a/b/`-Kandidat (Erstellungskandidat oder Discovery-Ziel) wird angehalten (keine Datei, kein Index-Link, Meldung `NESTED AREA: `, Run „teilweise erfolgreich"); §3.2 bleibt der Dateikollision bestehender Concepts vorbehalten; (4) **Suche = Consumer-grep** (`grep`/`ripgrep` über `wiki/`, AD-13 — keine Such-Datenbank, kein Embedding). Nachgeführt: §7 (Story-2.5-Vorbehalt auf „Suche"-Rest gekürzt — die Vorbehalt-Zeile lag in der Baseline `main` bei Z. 253, nach dem §5.8-Einschub bei Z. 285), §8-Revisionslog 2.3 + Normreferenzen AD-9/FR-11/AD-13/NFR-3. Kein Vertrag-/Validator-/raw-Change (AD-3); keine neue §7-Klasse. - `wiki/log.md` — **append**: Eintrag (Vertrag-§5-Format) mit Discovery-Semantik, Zwei-Ebenen-Kartografie (F-07 geschlossen), `sprint-status`-Wechsel `2-5-progressive-discovery-über-index-md-bereitstellen` `backlog` → `in-progress`, Selbsttest-Beleg (keine `UNREACHABLE`-Verletzung). - `_bmad-output/implementation-artifacts/deferred-work.md` — **mutiert**: F-07-Eintrag (`source_spec` bei L87; `status:`-Zeile bei L90) `status:` → `umgesetzt (2026-08-18, Story 2.5 — konsolidierte Zwei-Ebenen-Kartografie, §5.8)` (append-only); die drei „Home: …ab Story 2.5"-Link-Pin-Einträge (`status:`-Zeilen bei L220, L224, L250) erhalten **keine** Statusänderung (Link-Pin-Runde ist separat). `sprint-status.yaml`: Key `2-5-…` → **in-progress**. - `wiki/index.md`, `wiki/wissensarchitektur/*`, 3 Root-Concepts, `schema/wiki-compiler.md`, `schema/validator.md`, `raw/…` — **read-only**: keine MOVE-/Inhaltsänderung an Concepts oder `index.md` (Kuratierung/AD-7d ist Epic-3-Nähe); optional: ein neues Root-Concept als Discovery-Demo (angelegt in Bundleroot-Form, kein MOVE). ## Tasks & Acceptance **Execution:** - [x] `schema/compiler.md` — §5.8 anlegen (Discovery-Pfad, Erreichbarkeits-Kriterium + Selbsttest, konsolidierte Zwei-Ebenen-Kartografie mit F-07-Antwort über den §5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3), Suche = Consumer-grep) + §7 Z.253 gekürzt + §8 Revisionslog 2.3 + Normreferenzen (AD-9/FR-11/AD-13/NFR-3). Kein Vertrag-/Validator-/raw-Change. - [x] `wiki/log.md` — Eintrag (§5-Format) mit Discovery-Semantik, F-07-Schluss, Statuswechsel, Selbsttest-Beleg. - [x] `deferred-work.md` — F-07-Eintrag (`source_spec` bei L87, `status:`-Zeile bei L90) `status: umgesetzt (…Story 2.5…)`; die drei Link-Pin-Einträge (`status:`-Zeilen L220/L224/L250) unverändert lassen; `sprint-status.yaml` — Key `2-5-…` → `in-progress`. - [x] Discoverability-/Edge-Tests im Sandbox-/tmp-Baum (I/O-Matrix): gewurzelte Erreichbarkeit (kein `UNREACHABLE`), AREA_UNREACHABLE-Negativ-Test (Area ohne Root-Link), NESTED_AREA-Kandidat `wiki/a/b/` → §5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3). **Acceptance Criteria:** - Given ein Bundle mit mehreren Areas, when ein Consumer die Navigation startet, then liest er zunächst die Bundle-Root `wiki/index.md` und dann die relevanten Area-`index.md` (AD-9) — gewurzelte Erreichbarkeit ist instruktionsseitig verankert und deterministisch prüfbar (Discovery-Selbsttest, §5.8-Pkt.-2-Formel an Run-Nachweis gebunden). - Given die Hierarchie, when ein Concept neu angelegt wird, then wird es passend in `index.md` des zugehörigen Bereichs verlinkt (AD-9, A0-10) — bestehende §5.3/§5.7-Regel bleibt; §5.8 erläutert die Discovery-Semantik (Area-Concept in Area-`index.md` — mechanisch abgedeckt durch Validator Punkt 11 —, Root-Concept in Bundleroot). - Given eine Suche, when der Consumer sie nutzt, then ist sie klar extern bzw. Consumer-seitig (grep/ripgrep über `wiki/`, AD-13) — die Discovery braucht keine proprietäre Datenbank (AD-9, FR-11). - Given ein Verzeichnis unter `wiki/`, when es zwei Ebenen tief ist (`wiki/a/b/`), then ist es **keine zugelassene Anlageform** — der Erstellungskandidat wird durch den **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** angehalten (keine Datei, kein Index-Link, Meldung `NESTED AREA: `, Run „teilweise erfolgreich"); Zwei-Ebenen-Kartografie bleibt ($5.8 Pkt. 3). - Given die Instruktion, when geprüft, then ist §5.8 der einzige Discovery-Instruktions-Ort (D-3), §5.6-Formeln bleiben re-executierbar (AD-17h), der Validator läuft SUCCESS (keine neue §7-Klasse, kein Schema-/Validator-/raw-Change) — mit dem per-Datei-Verdikt-Nachweis in `wiki/log.md` belegt. ## Spec Change Log - **2026-08-18 (Erstellung):** Initiale Approve-Baseline. - **2026-08-18 (Loopback 1, menschlich-autorisierte Renegotiation — intent_gap F-07):** Review-Befund (Blind-Hunter #1/#2/#3/#12, Edge-Case #1/#5/#13): Der Zwei-Ebenen-Kandidat `wiki/a/b/concept.md` war mechanisch nicht erfassbar — die §5.8-Selbsttest-Formel (nur `index.md`-Scan) lieferte dafür keine Meldung, und der benannte Träger **§3.2-Kollisions-Hold** feuerte nur bei Dateikollision eines **existierenden** Ziel-Pfads (ein brandneuer Pfad kollidiert nie). Korrektur (Option A): Der Zwei-Ebenen-Hold wird **§5.8-lokal** verankert („§5.8-Instruktions-Hold, Zwei-Ebenen, Tiefe ≥ 3"), Kandidaten mit Tiefe ≥ 3 unter der Bundleroot werden angehalten (keine Datei, kein Index-Link, Meldung `NESTED AREA: `, Run „teilweise erfolgreich"); §3.2 bleibt der Dateikollision bestehender Concepts vorbehalten. **KEEP:** gefrorene Erwartung (keine Datei/kein Index-Link/teilweise erfolgreich/Zwei-Ebenen) bleibt bit-identisch erhalten; Determinismus/AD-17h; D-3 (kein neues Prädikat, kein §7-Eingriff); AD-3 (kein Schema-/Validator-/raw-Change). - **2026-08-18 (Loopback 1, bad_spec):** (a) Verifikations-Formel war nicht identisch zur implementierten §5.8-Formel und schwächer (VG #1, BH #4) — auf byte-identische §5.8-Pkt.-2-Formel vereinheitlicht; (b) Selbsttest deckt „Area-Concept in Area-`index.md`" nicht (Intention Z.26) — die eigentliche Design-These: diese Koordinate ist durch Validator Punkt 11 (`Concept nicht verlinkt=`) mechanisch abgedeckt und wird bewusst nicht dupliziert; (§5.8-Pkt.-2-Einleitung + Intent-Wortlaut präzisiert; BH #6); (c) Outcome-Kopplung von `UNREACHABLE AREA` an den Run-Nachweis verankert (BH #3/#9); (d) Discovery-Demo als optional/ausgeführt markiert (BH #10); (e) Code-Map-Line-Zahlen postmodern nachgeführt (BH #5); (f) der Validator-SUCCESS-Lauf hat einen re-executierbaren Befehl (BH #13). - **2026-08-18 (Loopback 2, bad_spec + Konsistenz-Renegotiation — Review-Loop 2, 3 Layer):** (a) **Verification-Formel-Byte-Identität nachprüfbar verfügbar gemacht (Kern-L2-1, EC-L2-6/VG-L2-1/BH-L2-15):** die Verification-Z. 83–85 führen jetzt die §5.8-Pkt.-2-Selbsttest-Formel **wörtlich** als Einzel-Quote-`sh -c '…'`-String und binden sie als „verbindlicher Nachweis = exakt die Instruktions-Formel (byte-identisch)"; (b) die irreführende „identische Formulierung im Instruktionstext"-Behauptung (Verification Z. 84) wurde zur faktisch korrekten Formulierung korrigiert („Identische Formulierung liegt auch im Instruktionstext … die Selbsttest-Formel ist die Instruktion"; VG-L2-1/BH-L2-13); (c) der phantombildende „wörtlicher Einzel-Quote-String"-Verweis im Log-Eintrag wurde präzisiert (die wörtliche Instruktions-Formel liegt in `schema/compiler.md` §5.8 Pkt. 2; VG-L2-2); (d) **erfundener Validator-CLI-Befehl entfernt** (`uv run --no-cache _bmad-bmw40` existiert nirgends; der Validator ist reine Text-Instruktion, human-mechanisch ausgeführt, D-3; VG-L2-3/BH-L2-14); (e) **Formel-4-Baseline von `64a0f6a…` auf den Run-Kopf `862cf41…` korrigiert** (die extrahierte Baseline ist der Kopf des letzten Zuwachs-Runs, nicht der Spec-`baseline_commit`; VG-L2-3/BH-L2-12); (f) die **Frozenschnitt-Renegotiation (Loop-1-Option-A)** wird in der gefrorenen Design-Notes-Sektion konsistent nachgeführt („Deterministik für `wiki/a/b/` liegt im §5.8-Instruktions-Hold", nicht im §3.2-Kollisions-Hold; die §3.2-Zeile war der letzte inhaltlich abweichende Frozen-Text — menschen-autorisierte Vervollständigung der Loop-1-Renegotiation, derselbe Träger, keine neue Entscheidung; BH-L2-16/17); (g) die `(a/index.md`/`(./a/index.md`-Verlinkungs-Koordinate wird nun explizit als „gepinnte §5.6-Form, beide Varianten zulässig" dokumentiert (die §5.6-Formel-2-`^\.`-Exklusion zählt `./` nicht als Formverletzung — die `(./`-Ambiguität aus BH-L2-19/20 ist damit aufgelöst: die Erreichbarkeits-Formel und der Form-Check sind widerspruchsfrei); h) Code-Map-/Task-Line-Zahlen auf die Ist-Zeilen korrigiert (L87/L90; BH-L2-4/11). **KEEP (Constraints):** gefrorene Erwartungen, Determinismus/AD-17h, D-3, AD-3. **KEEP (Code, muss die Re-Derivation überleben):** die §5.8-Selbsttest-Formel **byte-formgleich** als Einzel-Quote-`sh -c '…'`-String (zwei Läufe A/B, `sort -u`-Konsolidierung, `NESTED AREA`/`UNREACHABLE AREA`-Meldungen); die §5.8-Sektion nach §5.7 vor §6 mit Revisionslog 2.3 + §7-Z.253-Kürzung auf „Suche"-Rest; Suche=Consumer-grep (Pkt. 4); Discovery-Demo optional kein MOVE (Pkt. 5); log.md-Eintrag im Vertrag-§5-Format inkl. Selbsttest-Beleg; deferred-F-07 `status: umgesetzt`; sprint `2-5-…` → in-progress. **Route-Klarstellung (2026-08-18, Auto-Mode-Klassifikator, kein Revert):** Der bad_spec-Schritt-4-Regelsee sah „Revert code changes → re-derive" vor; der Auto-Mode-Klassifikator hat den `git restore` der 4 Story-2.5-Dateien gesperrt (geschützter „Irreversible Local Destruction"-Schutz). Ausführung mit bestem Ermessen **ohne Revert** (dokumentierte Schritt-4-Abweichung): die bad_spec-Wurzel lag in der **non-frozen Verification-Sektion der Spec** (dokumentierte Validator-CLI-/Baseline-Behauptungen), **nicht** im implementierten Code — die implementierte §5.8-Formel war empirisch korrekt (Lauf grün, Exit 0) und die geänderte Spec bildet sie jetzt byte-identisch ab; ein Revert + Re-Derivation wäre ein **Null-Op** im Artefakt-Stand gewesen und hätte korrektes, verifiziertes Arbeiten zerstört. Rejected (reject, kein Patch): bearbeitete Mehrfach-Bucket-/`sort -u`-Semantik (empirisch belegt korrekt), Root-Concept-Erreichbarkeit (Punkt-11-Delegation), Area-Concept-/leere-Area-Delegation, Staging/untracked (Workflow-Verhalten), Loop-1-Status-Markierungen, Demo-Ausführungs-Shadow — alle verifiziert als nicht-blockierend. Deferred: F-08/.MD-Case, Run-FAIL-Niveau von `NESTED` — vorbestehend, kein Story-2.5-Blocker. - **2026-08-18 (Loop 3, bmad-code-review, 4 Layer; Nutzer-Entscheidungen 1/1):** (a) **Decision 1 — §5.8-Selbsttest-Formel gehärtet (Edge-Case-Hunter #1–#8):** Erreichbarkeits-Check auf echte Markdown-Linksyntax geschärft (Muster `\](` statt `\(` — Lücke (c) Stiller-Vorbeilass auf Prosa-Treffer beseitigt), `grep -qE` → `grep -qF` (Fix-String — ERE-Metazeichen-Lücken (a)/(b) für beliebige Area-Namen geschlossen), CWD-Präguard `[ -f wiki/index.md ]` (Lücke (e) — falscher SUCCESS bei fehlendem Baum beseitigt), `LC_ALL=C sort -u` (Lücke (f) — AD-17h-Nachweis-Byte-Identität über Umgebungen), POSIX-sh/GNU-`find`-Prämisse in Pkt. 2 explizit dokumentiert (Lücke (g)); Meldungstokens `UNREACHABLE AREA: ` / `NESTED AREA: ` bit-identisch erhalten (frozen I/O-Matrix intakt); die gehärtete Formel wird **byte-identisch** in dieser Verification-Sektion gespiegelt (Pkt. 1) und der Log-Selbsttest-Beleg aktualisiert. (b) **Decision 2 — frozen-Matrix-Zeile `NESTED_AREA_KANDIDAT` Zwei-Zustands-Klarstellung (menschlich-autorisierte Renegotiation, VG #4):** Hold-Zeitpunkt (Kandidat angehalten, keine Datei, kein Index-Link) von der Formel-Meldung (`NESTED AREA: ` für existierende Tiefe-≥-3-Dateien, Sandbox-Nachweis = synthetischer Baum) getrennt — keine gefrorene Erwartung geändert. (c) **16 Patches umgesetzt** (s. Review-Findings-Sektion): §5.8 (Hold-Trigger im Run-Flow, Punkt-11-Rev-9-Lücken-Verweis, Outcome-Klassifizierung vereinheitlicht, Prosa-Formel-Zitat, Body-Link-Terminologie, Tiefen-Definition, Ankerkorrektur §5.3 Pkt. 3, Consumer-grep-Beispiel), log.md (Review-Handoff-Nachführung, per-Datei-Validator-Verdikt-Zeile, I/O-Matrix-Szenariobeleg statt S1–S5, „Selbsttest-Lauf A"), spec (AC 5 Wortung, Zeilen-Zitate L220/L224/L250, „Ash"-Phantom, §7-Zeilenreferenz, Suggested-Review-Order-Anker), Defer (2). **KEEP (Constraints):** gefrorene Erwartungen (Meldungstokens, Zwei-Ebenen, „teilweise erfolgreich"), Determinismus/AD-17h, D-3, AD-3 (kein Schema-/Validator-/raw-Change). ## Design Notes **D-3-Begründung (§5.8 statt §7-Erweiterung):** Die progressive Discovery ist laut §7 Z.253 explizit ein Story-2.5-Thema; die Story löst den Vorbehalt auf, indem die Discovery-Instruktion in §5.8 wandert. Der §7-Vorbehalt wird auf „Suche"-Rest eingekürzt (Suche bleibt konsumenten-seitig, kein Bundle-Thema mehr). Keine Normtext-Änderung am §7-Katalog/Validator (AD-3). **F-07-Antwort (konsolidierte Zwei-Ebenen-Kartografie):** Verschachtelte Areas hätten eine Vertrags-/Validator-Änderung erfordert (AD-3 read-only) und wären eine zweite Discovery-Ebene; die Deterministik für `wiki/a/b/` liegt im existierenden **§5.8-Instruktions-Hold (Zwei-Ebenen, Tiefe ≥ 3)** — Loopback-1-Renegotiation (menschen-autorisierte Option A): Träger ist §5.8-lokal, **nicht** der §3.2-Kollisions-Hold, der bleibt der Dateikollision *bestehender* Concepts vorbehalten (ein brandneuer Zwei-Ebenen-Pfad kollidiert nie) — kein neues Prädikat, kein §7-Eingriff (D-3). **Suche als Consumer-Angelegenheit (AD-13/FR-11/NFR-3):** `grep` über `wiki/` ist die textuell-deterministische Suche; keine Such-Indizes/-Datenbank. ## Verification **Commands (re-executierbar, ab Workspace-Root):** 1. **Discovery-Selbsttest (neu, §5.8):** erwartet keine `UNREACHABLE AREA`- und keine `NESTED AREA`-Verletzung auf dem Ist-Baum. Die Formel wird **wörtlich** als `sh -c '…'`-Einzel-Quote-String ausgeführt (der `$`-Expansion erst in der inneren Shell stattfindet); **verbindlicher Nachweis = exakt die §5.8-Pkt.-2-Selbsttest-Formel von `schema/compiler.md` §5.8 Pkt. 2 (byte-identisch, wörtlich übernommen):** `sh -c '[ -f wiki/index.md ] || { echo "SELBSTTEST-SETUP-Fehler: Workspace-Root (wiki/index.md fehlt)"; exit 1; }; find wiki -mindepth 2 -name index.md | while IFS= read -r f; do a="${f#wiki/}"; a="${a%/index.md}"; case "$a" in */*) continue;; esac; grep -qF "]($a/index.md" wiki/index.md || grep -qF "](./$a/index.md" wiki/index.md || echo "UNREACHABLE AREA: $a"; done; find wiki -mindepth 3 -type f -name "*.md" | LC_ALL=C sort -u | while IFS= read -r f; do d="${f#wiki/}"; a="${d%%/*}"; echo "NESTED AREA: $a"; done | LC_ALL=C sort -u'` (Identische Formulierung liegt auch im Instruktionstext `schema/compiler.md` §5.8 Pkt. 2 — die Selbsttest-Formel ist die Instruktion; die einzelfall-spezifischen Sandbox-Negativ-Tests `UNREACHABLE AREA`/`NESTED AREA` werden als Selbsttest-Beleg im `log.md`-Eintrag dokumentiert (Sandbox-Nachweis auf einem synthetischen Baum mit angelegter Testdatei, s. Loop-3-Decision-2-Zwei-Zustands-Klarstellung). Der Live-Baum liefert hier keine Ausgabe, Exit `0`; Ausführung außerhalb der Workspace-Root liefert `SELBSTTEST-SETUP-Fehler: …` + Exit `1` (CWD-Präguard, Loop-3-Decision-1).) 2. **§5.6-Formeln (unverändert re-executierbar):** Form 2 (Form-Check) `0` (Exit `0`), Form 3 (Dangling-Check) keine Ausgabe; Formel 4 `38 ≡ 38` — Ist-Zählung ≡ Extraktion aus dem **Run-Kopf `862cf41…`** (Baseline-Commit des letzten Zuwachs-Runs, §5.6 Pkt. 4; Story 2.5 erzeugt keinen neuen Zuwachs-Run, Formel 4 bleibt passierbar). 3. **Validator-Lauf:** 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; kein Validator-/Vertrags-Change. Der Validator ist eine **reine Text-Instruktion** (`schema/validator.md`), die der Producer human-mechanisch ausführt (D-3 — es gibt **keinen** `uv`-Invoker/keinen CLI-Befehl); das Verdikt je Datei wird als Ausführungs-Nachweis im `log.md`-Eintrag geführt. **Manual checks:** - §7 (Z. 285; in der Baseline `main` Z. 253) auf „Suche"-Rest gekürzt, Discovery in §5.8 verankert; kein Schema-/Validator-/raw-Diff; `log.md`-Eintrag datiert (2026-08-18) mit Discovery-Semantik + F-07-Schluss + Statuswechsel; `deferred-work.md`-F-07-Eintrag geschlossen (append-only); `sprint-status.yaml` konsistent. ## Suggested Review Order **Discovery-Instruktion (§5.8, Kern der Story)** - Einstieg: die neue Discovery-Sektion — gewurzelte Erreichbarkeit + re-executierbarer Selbsttest. [`compiler.md:202`](../../../schema/compiler.md#L202) - Die deterministische Selbsttest-Formel (zwei Läufe A/B, `sort -u`-Konsolidierung) — verbindlicher Nachweis. [`compiler.md:216`](../../../schema/compiler.md#L216) - Konsolidierte Zwei-Ebenen-Kartografie + §5.8-Instruktions-Hold (F-07-Antwort, tieferer Zip) — angehaltene Kandidaten, „teilweise erfolgreich". [`compiler.md:230`](../../../schema/compiler.md#L230) - Suche = Consumer-grep (Pkt. 4, AD-13) — keine Such-Datenbank, kein Index-Datei-Format. [`compiler.md:231`](../../../schema/compiler.md#L231) - Das §5.8-Selbsttest-Beleg-Niveau schließt die erreichbare Path-Prüfung ab. [`compiler.md:227`](../../../schema/compiler.md#L227) **Verifikation & Nachweis-Ebene** - Der §5.8-Verification-Block — verbindliche Formel-Byte-Identität + erwarteter Nachweis. [`spec-2-5-…:84`](./spec-2-5-progressive-discovery-über-index-md-bereitstellen.md#L84) **Status- & Tracking-Ebene** - Semantik des Sprint-Status (in-progress → review-Handoff). [`sprint-status.yaml:50`](../../../_bmad-output/implementation-artifacts/sprint-status.yaml#L50) ## Review Findings (bmad-code-review, 2026-08-18 — Loop 3, 4 Layer) ### Decision-Needed - [x] [Review][Decision] §5.8-Selbsttest-Formel: realistische Edge-Case-Lücken (Edge-Case-Hunter #1–#8) — die gepinnte Formel (Z. 216) ist fragil gegen: (a) Area-Namen mit Leerzeichen (`for f in $(find …)` splittet den Pfad → korrektt verlinkte Area erzeugt je Wortteil falsche `UNREACHABLE AREA`), (b) ERE-Metazeichen im Area-Namen (`.`, `*`, `+` unescaped in `grep -qE` → unverlinkte Area besteht still, weil ein Link einer anderen Area den Regex trifft; unbalanciertes `(`/`[` → Regex-Fehler nur in stderr), (c) Prosa-Ausdruck `(a/index.md` ohne Markdown-Linksyntax `](` in der Bundleroot besteht den Erreichbarkeits-Check still (Muster `\(` statt `\](`), (d) Groß-/Kleinschreibungs-Abweichung Verzeichnis↔Link (win32, F-08-Umfeld), (e) Ausführung außerhalb der Workspace-Root → nur stderr, Exit 0 = falscher SUCCESS statt Setup-Befund, (f) `sort -u` ohne `LC_ALL=C` → meldungsreihenfolge-Umgebungsabhängigkeit (AD-17h-Byte-Identität der Nachweise bricht), (g) implizite POSIX-`sh`/GNU-`find`-Prämisse (NFR-1/NFR-5) nicht dokumentiert. Minderung im Ist-Baum: Area-Namen sind kebab-case-Slugs (§5.1 Pkt. 1, AD-7a) → (a)/(b)/(d) sind für konforme Bäume strukturell nicht erreichbar; verbleibende reale Lücken: (c) Stiller-Vorbeilass auf Prosa-Treffer, (e) falscher SUCCESS bei falschem CWD, (f) Nachweis-Byte-Identität über Umgebungen. Ein Formel-Change bricht die byte-identische Spec↔compiler-Spiegelung (Verification Pkt. 1) und den Log-Selbsttest-Beleg — beides müsste neu belegt werden. **Option 1:** Formel härten (z. B. `grep -qF -- "(/index.md"` + `"(.//index.md"`, Muster auf `\](` schärfen, CWD-Präguard, `LC_ALL=C sort -u`, POSIX-sh-Prämisse in Pkt. 2 dokumentieren) + byte-identisch in der Spec neu spiegeln + Log-Beleg aktualisieren. **Option 2:** Formel unverändert lassen + Prämissen explizit dokumentieren (kebab-case-Area-Namen nach §5.1/AD-7a, Ausführung ab Workspace-Root, POSIX-sh/GNU-Tools-Umgebung, C-Locale) — Lücken (c)/(e) bleiben dann als bekannt-konservativ dokumentiert. — **Aufgelöst (Nutzer, 2026-08-18, Option 1):** Formel härten — (a) Erreichbarkeits-Check auf echte Markdown-Linksyntax `\](` geschärft (Lücke (c) Stiller-Vorbeilass beseitigt), (b) `grep -qF` (Fix-String statt ERE — Metazeichen-Lücken (a)/(b) für beliebige Area-Namen geschlossen), (c) CWD-Präguard `[ -f wiki/index.md ]` (Lücke (e) falscher SUCCESS beseitigt), (d) `LC_ALL=C sort -u` (Lücke (f) AD-17h-Byte-Identität über Umgebungen), (e) POSIX-sh/GNU-Prämisse in Pkt. 2 dokumentiert (Lücke (g)); Meldungstokens `UNREACHABLE AREA: ` / `NESTED AREA: ` bit-identisch erhalten (frozen I/O-Matrix intakt); byte-identische Spec↔compiler-Spiegelung + Log-Selbsttest-Beleg neu belegt (Patches unten). - [x] [Review][Decision] Gefrorene I/O-Matrix-Zeile `NESTED_AREA_KANDIDAT` ist mechanisch selbstwidersprüchlich (VG #4, BH #12) — die Zeile verlangt zugleich „Kandidat wird angehalten — **keine Datei**, kein Index-Link" und „Meldung `NESTED AREA: `"; unter der gepinnten Formel (Lauf B: `find wiki -mindepth 3 -type f -name "*.md"`) kann die Meldung aber nur entstehen, wenn eine Datei in Tiefe ≥ 3 **existiert**. Der Log-Sandbox-Nachweis („Kandidaten → `NESTED AREA: a`") ist nur mit angelegten Testdateien möglich. Der §5.8-Text (Pkt. 2/3) definiert `NESTED AREA` ausschließlich als Formel-Output und unterscheidet nicht zwischen dem **Hold-Zeitpunkt** (Producer hält den Kandidaten an, keine Datei) und dem **nachträglichen Formel-Befund** (existierende Tiefe-≥-3-Datei wird gemeldet). Die gefrorene Matrix ist nur per menschlicher Renegotiation änderbar. **Option 1:** Renegotiation der Matrix-Zeile — Zwei-Zustands-Klarstellung (Hold = keine Datei für den Kandidaten; `NESTED AREA` = Formel-Befund gegen bestehende Tiefe-≥-3-Dateien; Sandbox-Nachweis = Formel-Detektion auf synthetischem Baum). **Option 2:** Matrix bleibt frozen; Klarstellung nur in den nicht-gefrorenen Sektionen (§5.8 Pkt. 2/3 + Verification) — die Matrix-Zeile bleibt als Änderungskandidat für die nächste Renegotiationsrunde notiert (Story-2.4-Präzedenz für frozen-Defizite). — **Aufgelöst (Nutzer, 2026-08-18, Option 1, menschlich-autorisierte Renegotiation):** Matrix-Zeile auf die Zwei-Zustands-Klarstellung umgestellt (Hold-Zeitpunkt = keine Datei für den Kandidaten; `NESTED AREA` = Formel-Befund gegen bestehende Tiefe-≥-3-Dateien; Sandbox-Nachweis = Detektion auf synthetischem Baum). Keine gefrorene Erwartung geändert (keine Datei / kein Index-Link / Meldung / „teilweise erfolgreich" bleiben bit-identisch erhalten) — die bereits gelebte Nachweis-Semantik wird nur explizit. ### Patch - [x] [Review][Patch] §5.8-Instruktions-Hold hat keinen definierten Trigger-Punkt im Run-Flow — VG #5: §5.8 Pkt. 3 sagt, der Hold „hält Kandidaten an" (Erstellungskandidat oder Discovery-Ziel), aber die fixe Ablaufstruktur (§0: Input → Interpretieren → Reconcile → Synthetisieren → Mutieren → Validieren) enthält keinen Schritt, an dem er auslöst; §5.7-Routing kann Tiefe ≥ 3 strukturell nie erzeugen. Im Ist-Text ist der Hold faktisch nur der nachträgliche Baum-Zustands-Check der Selbsttest-Formel. Fix: Trigger auf den Mutieren-Schritt verankern (§5/§5.8 Pkt. 3): vor Anlage eines Ziel-Pfads in Tiefe ≥ 3 unter der Bundleroot feuert der Hold (keine Datei, kein Index-Link, Meldung `NESTED AREA: `, Run „teilweise erfolgreich"); die Selbsttest-Formel bleibt der nachträgliche Baum-Check. [schema/compiler.md:230] - [x] [Review][Patch] Sprint-Status-Pfad im Log unvollständig — BH #2 + EC #9 + VG #2 + AA #1: der 2.5-Log-Eintrag dokumentiert `backlog → in-progress` („dieser Statuswechsel findet mit diesem Eintrag statt"), der Diff setzt den Key jedoch direkt `backlog → review`; der Review-Handoff wird nirgends als eigener Statusschritt protokolliert (Story-2.4-Präzedenz im selben File führt das Handoff explizit nach; Workflow-Kommentar `sprint-status.yaml` Z. 29). Fix: Log-Eintrag um die Handoff-Nachführung ergänzen (Analogie Story-2.4-Eintrag: „Review-Handoff, dieser Eintrag"; die gefrorene `→ in-progress`-Vorgabe beschreibt den Implementierungsstand). [wiki/log.md:4] - [x] [Review][Patch] Validator-SUCCESS-Beleg fehlt im Log-Eintrag, den die Spec als Ausführungs-Nachweis benennt — AA #2: Spec-Verification Pkt. 3 verspricht „das Verdikt je Datei wird als Ausführungs-Nachweis im `log.md`-Eintrag geführt" (7 `wiki/`-Dateien SUCCESS, Punkte 1/2/6/7/8/9/10/11/12/13/14, EC-1); der 2.5-Log-Eintrag stützt sich implizit auf „unverändert zur Story 2.4" und trägt keine per-Datei-Verdikt-Zeile. Daneben: AC 5 (Z. 67) verlangt „re-executierbarer Validator-Befehl (BH13)" — nach der Loop-2-Korrektur (erfundener CLI-Befehl entfernt; Validator = human-mechanische Text-Instruktion) ist die Wortung nicht mehr erfüllbar und „BH13" ein hängender Verweis. Fix: (a) Log-Eintrag um die per-Datei-Verdikt-Zeile ergänzen; (b) AC 5 (nicht-gefroren) auf „mit dem per-Datei-Verdikt-Nachweis in `wiki/log.md` belegt" umstellen. [wiki/log.md:4, spec Z. 67] - [x] [Review][Patch] Consumer-Suchbeispiel `grep -n wiki/` nicht ausführbar — VG #9: nicht-rekursives `grep -n` auf ein Verzeichnis schlägt fehl (`grep: wiki/: Is a directory`, Exit 2, verifiziert); nur `grep -rn`/ripgrep funktioniert. Fix (nicht-gefrorene Seite): §5.8 Pkt. 4 das rekursive Beispiel (`grep -rn wiki/` bzw. ripgrep) als primäre Beispielform voranstellen; die frozen-Matrix-Zeile `SEARCH_GREP` bleibt Änderungskandidat (s. Defer, frozen-Text-Kandidaten). [schema/compiler.md:231] - [x] [Review][Patch] „Ash"-Phantomreferenz in der Suggested Review Order — BH #11 + AA #3: Z. 109 „(kein „Ash"-Ghost mehr)" — `grep -rn "Ash"` liefert im gesamten Repo exakt diese eine Stelle; kein „Ash"-Label/-Datei/-Befund existiert. Unauflösbarer Ghost-Verweis, irreführend in der Review-Navigation. Fix: Satz bereinigen (Phantom-Referenz entfernen). [spec Z. 109] - [x] [Review][Patch] Phantom-Labels ohne Referenz: „S1–S5" im Log + „(BH1/EC1)" im normativen Instruktionstext — BH #13 + VG #6: der 2.5-Log-Eintrag beansprucht „Negativ-Kontrollen (S1–S5) auf dem Sandbox-Baum bestätigt" — S1–S5 sind nirgends definiert (I/O-Matrix-Szenarien tragen andere Namen; nur 2 davon sind negativ); §5.8 Pkt. 2 (B) (Z. 223) zitiert die Review-Layer-Befund-IDs „(BH1/EC1)" in den normativen Instruktionstext, der als einziger Instruktions-Ort (D-3) nirgendwo auf eine Review-Runde verweisen sollte. Fix: (a) Log-Eintrag: Szenario-Namen der I/O-Matrix verwenden (`AREA_UNREACHABLE`, `NESTED_AREA_KANDIDAT`); (b) `(BH1/EC1)`-Zitat aus §5.8 Pkt. 2 (B) entfernen. [wiki/log.md:4, schema/compiler.md:223] - [x] [Review][Patch] Veraltete Zeilen-Zitate auf die drei Link-Pin-Defer-Einträge — BH #3 + VG #10 + AA #4: Tasks Z. 59 „(L219/L223/L249)" und Code Map Z. 51 „`status:` bei L224 … L246/L250" treffen nicht die Ist-`status:`-Zeilen in `deferred-work.md` (Ist: L220 `)`-blinde Extraktion, L224 Cross-Page-Anker, L250 Multi-Line; L246 ist der Status der Image-Eintrags, L219/L223/L249 sind `evidence:`-Zeilen; L246-Hauszuordnung „Deferred from … spec-2-3" zudem ungenau). Der Loop-2-Change-Log (h) behauptet „auf die Ist-Zeilen korrigiert" — korrigiert wurde nur der F-07-Eintrag (L87/L90). Fix: Zeilen-Zitate auf L220/L224/L250 korrigieren; F-07-Verortung Code Map (L87) vs. Tasks (L88) vereinheitlichen. [spec Z. 51, Z. 59] - [x] [Review][Patch] Veraltete Referenz „§7 Z. 253" — BH #4: die Discovery-Vorbehalt-Zeile lag in `main` bei Z. 253, nach dem 32-zeiligen §5.8-Einschub steht sie bei **Z. 285**; spec (Code Map Z. 49, Manual-Checks Z. 91), `wiki/log.md`-Eintrag und Revisionslog 2.3 (compiler.md Z. 317) zitieren „§7 Z. 253" in Präsens-Kontexten, wo der Leser die Ist-Zeile erwartet. Fix: in Präsens-Kontexten die Ist-Zeile ergänzen (Z. 285) oder auf Sektions-Referenz ohne Zeilennummer umstellen. [spec Z. 49/91, wiki/log.md:4, schema/compiler.md:317] - [x] [Review][Patch] Discovery-Demo-Verlinkung terminologisch widersprüchlich — VG #11 + BH #7: §5.8 Pkt. 5 (Z. 232) nennt den zusätzlichen Demo-Link „Index-Link … aus einem bestehenden Area-Concept heraus" — ein Link in der Concept-Body-Datei ist nach §5.6 (Pin gilt für Concept-Bodies und `index.md`-Dateien als getrennte Orte) ein Body-Link, kein Index-Link; die frozen-Matrix-Zeile formuliert die Richtung zusätzlich anders („in das Area-Concept verlinkt"). Fix (nicht-gefrorene Seite): §5.8 Pkt. 5 eindeutig als Body-Link benennen (`[](../.md)` aus `wiki/wissensarchitektur/source-material.md`, file-relative `../`-Form §5.7 Pkt. 4); frozen-Matrix-Zeile bleibt Änderungskandidat (s. Defer). [schema/compiler.md:232] - [x] [Review][Patch] Inkonsistente Tiefen-Terminologie „zwei Ebenen" vs. „Tiefe ≥ 3" — BH #12: Hold-Name, I/O-Matrix und AC mischen „zwei Ebenen" (Verzeichnisstufen) und „Tiefe ≥ 3" (`find -mindepth 3` = Segment-Ebenen unter der Bundleroot inkl. Datei); aus Prosa allein ist nicht ableitbar, welche Schwelle verbindlich ist. Fix: §5.8 Pkt. 3 um eine definierende Zeile (Tiefe = Segment-Anzahl unter der Bundleroot; `wiki///…` = Tiefe ≥ 3 = zwei Verzeichnisstufen plus Datei; Meldung benennt die erste Ebene ``). [schema/compiler.md:230] - [x] [Review][Patch] Falscher Norm-Anker in §5.8 Pkt. 1 — BH #9: Z. 208 „verlinkt die **Root-Concepts** (direkt, §5.7 Pkt. 5)" — §5.7 Pkt. 5 (Z. 199) trägt nur die Area-Pflichten; die Root-Concept-Verlinkungspflicht ist §5.3 Pkt. 3 (Z. 62), den derselbe Absatz einen Satz später korrekt nennt (Z. 212). Fix: Anker auf §5.3 Pkt. 3 korrigieren. [schema/compiler.md:208] - [x] [Review][Patch] Inkongruente Outcome-Klassifizierung in §5.8 Pkt. 2 — VG #13: die Einleitung (Z. 213) sagt „**Run-FAIL-artig** gemäß §5.6-Pkt.-4-**analoger** NFR-4-Regel", das Bullet (Z. 227) „**Run-FAIL** gemäß §5.6 Pkt. 4-analoger NFR-4-Regel" — dieselbe Outcome-Kopplung wird einmal abgemildert, einmal direkt; „-artig … -analog" ist doppelt abgeschwächt. Fix: beide Stellen auf die uneingeschränkte Wortung vereinheitlichen („Run-FAIL gemäß §5.6 Pkt. 4-analoger NFR-4-Regel" — Loop-1-Pkt.-c-Verbindlichkeit). [schema/compiler.md:213/227] - [x] [Review][Patch] Prosa-Formel-Textabweichung in §5.8 Pkt. 2 (B) — BH #10: Z. 223 zitiert `find wiki -mindepth 3 -name "*.md" -type f`, die gepinnte Formel (Z. 216) lautet `find wiki -mindepth 3 -type f -name "*.md"` (Semantik identisch, Wortlaut divergiert von der als verbindlich deklarierten byte-identischen Formel). Fix: Prosa-Zitat an die gepinnte Formel angleichen. [schema/compiler.md:223] - [x] [Review][Patch] Suggested-Review-Order-Self-Link zeigt auf eine Leerzeile — VG #12: `spec-2-5-…:83` (Z. 115) verweist auf die leere Zeile zwischen „Commands" (Z. 82) und Verification-Punkt 1 (Z. 84–86); Ankernummer um eine Zeile verschoben. Fix: Anker auf Z. 84 korrigieren. [spec Z. 115] - [x] [Review][Patch] Englisch-Fremdwort im deutschen Log-Text — BH #15: 2.5-Log-Eintrag mischt „Self-Check-Lauf A" in den konsequent deutschen Text. Fix: „Selbsttest-Lauf A" (bzw. „Lauf (A)"). [wiki/log.md:4] - [x] [Review][Patch] Punkt-11-Delegation benennt die bekannte offene Validator-Lücke nicht — VG #1: §5.8 Pkt. 2 (Z. 213/229), die Spec (AC 2, Code Map) und der Log-Eintrag stützen die Nicht-Duplizierungs-These und den „Validator läuft SUCCESS"-Nachweis auf dem Validator-Punkt-11-Check, ohne den offenen Defer-Finding (deferred-work.md Z. 284–287: ein wörtlicher, mechanischer Punkt-11-Check meldete `Concept nicht verlinkt=wissensarchitektur/source-material`; Behebung = Rev-9-Aktionsitem, open) zu nennen — die SUCCESS-Behauptung ist damit nicht unabhängig überprüfbar. Fix: §5.8 Pkt. 2 (bzw. Pkt. 2-Bullet) um einen Zeigerverweis auf die bekannte Rev-9-Lücke (deferred-work.md) ergänzen; die Lücke selbst bleibt beim Rev-9-Aktionsitem (kein neuer Defer). [schema/compiler.md:213] ### Defer - [x] [Review][Defer] Spec-Frontmatter `status: 'done'` bei offenem Review-Zyklus [spec Z. 5] — deferred, Story-2.4-Präzedenz (deferred-work.md Z. 269–272): `done` erst nach Review-Freigabe; mit dem Abschluss dieses Review-Loops synchron (s. Step 6), kein separates Patch. - [x] [Review][Defer] Frozen-Text-Wortfehl- und Konsistenz-Kandidaten (nur per menschlicher Renegotiation änderbar) [spec Z. 18/42/43] — deferred, Änderungskandidaten für die nächste Renegotiationsrunde (Story-2.4-Präzedenz): (a) Intent Z. 18 „Revisionslog **(3.x)**" — implementiert ist **2.3** (Reihenfolge 2.0/2.1/2.2/2.3); (b) I/O-Matrix `DISCOVERY_DEMO_ROOT_AREA_LINK` Z. 42: „zusätzlich **überdacht** in das Area-Concept" — Wortfehler + Verlinkungsrichtung unauflösbar (nicht-gefrorene Seite s. Patch „Index-Link-Oxymoron"); (c) I/O-Matrix `SEARCH_GREP` Z. 43: `grep -n wiki/` nicht ausführbar (nicht-gefrorene Seite s. Patch „Consumer-Suchbeispiel"); (d) Intent Z. 18 „Kein Interface-/Backend-/Datenbank-**Änderung**" (Grammatik: „Keine … Änderungen").