Files
wow20/_bmad-output/implementation-artifacts/spec-3-13-epic-3-verifikations-und-abnahmegate.md
T
Michael TamseandClaude 894ae346ab docs: Story 3.13 Spec-Frontmatter nachziehen — status in-progress → done (Abschluss-Sync)
Commit 6624e07 hat den Step-05-Status-Sync (sprint-status.yaml 3-13 → done,
wiki/log.md Story-3.13-Eintrag, epic-3-context.md Ist-Nachführung,
deferred-work.md append) ausgeführt, aber das Spec-Frontmatter selbst vergessen
(status blieb 'in-progress'). Der Nachzieher flippt es gemäß Präzedenz der
abgeschlossenen Epik-3-Stories (3.4/3.8/3.11/3.12 → status: 'done') auf done;
epic-3 bleibt in-progress bis zur Epic-3-Retrospektive (AC-9).

Überspringt das Zwischenstadium 'in-review' (kein Review-Start per Step-04 mehr
nötig — Review-Loop war bereits in 6624e07 abgeschlossen; der ungetrackte
in-review-Halbzustand war der Auslöser des G-8-Porcelain-HARD-FAIL beim
Gate-Re-Run).

G-8-Nachbedingung wiederhergestellt: git status --porcelain leer nach diesem
Commit.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 20:06:34 +02:00

147 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 'Story 3.13 — Epic-3-Verifikations- und Abnahmegate'
type: 'feature'
created: '2026-08-22'
status: 'done'
baseline_commit: 'c234fc361e006043c3c972cc03211b52998c2ddb'
review_loop_iteration: 0
context:
- '_bmad-output/implementation-artifacts/epic-3-context.md'
---
<frozen-after-approval reason="human-owned intent — do not modify unless human renegotiates">
## Intent
**Problem:** Epic 3 gilt erst als abgeschlossen, wenn ein **reales, reproduzierbares Source→Compilation→Wiki-Abnahmegate** es qualifiziert (epic-3-context Z. 7, Z. 46, Z. 52; AD-5/AD-6/AD-13/AD-17a/b/dh, A0-12/13/15/16/19). Die 12 verankerten Sandbox-Suiten (3-1..3-12) beweisen die Einzel-Mechaniken jeweils isoliert in `/tmp`-Mini-Bundles; die **cross-cutting-Abnahmeebene** fehlt: kein einziges Kommando führt alle Epic-3-Szenarien fail-fast aus, der vollständige autorisierte Validator (`schema/validator.md` Rev 9) wird bisher nur **human-mechanisch** über `wiki/` gestellt (kein ausführbares Verfahren, D-3), die „zwei frische Agent-Kontexte"-Zwei-Run-Bestätigung ist ausdrücklich nur **mechanisch simuliert** (Subshells, spec-3-8 P-5 / compiler.md Z. 374 — der echte Nachweis ist dem 3.13-Gate vorbehalten), und der Epic-5-Abhängigkeits-Smoke (FR-15/16) plus Porcelain-Unverändertheit (git status --porcelain) eines Clean-Checkouts wurden nie als Gate geprüft.
**Approach:** Ein einziges, re-executierbares, fail-fast ausführbares **Gate-Skript** `_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh` orchestriert die vollständige Epic-3-Abnahme: (a) Repo-Weiter Bausatz: alle 12 Sandbox-`run-sandbox.sh` als Sub-Runs nacheinander, jede Assertion hart, jede Abweichung = Non-Zero-Exit; (b) echte vollständige Validator-Integration — ein frisch gestarteter **Agent-Kontext** liest `schema/validator.md` (Rev 9, 14 Punkte + §6-Fachprüfungen) und stellt ein Verdikt `SUCCESS`/`FAIL <pfad> <ursache>` über **alle** `wiki/`-Dateien des Clean-Checkouts per angefügter `verdict-*-dateien.md`-Datei; das Gate prüft deren Grammatik (§5, §5.1) und Exhaustivität (jede `wiki/**/*.md`-Datei außer nicht-`raw/`-externe hat genau ein Verdikt), schreibt aber **keine eigenen Validator-Urteile**; (c) zwei frische Agent-Kontexte (zwei getrennte `$SB`-Arbeitskopien, jeweils ausgemeindete Clone-Kopien, `git worktree add` auf denselben `$BASE`-Commit) führen `schema/compiler.md` über einer repräsentativen committeten Fixture aus; das Gate baut die Fixture auf (rohes Zuwachs-Paar + Ziel-Concepts, committet als `$BASE`), schreibt **selbst weder erwartete Wiki-Bodies noch Lease-/Log-/Git-Ausgänge** (§5.14 Pkt. 2; epic-3-context-Z. 46) und vergleicht die beiden Ergebnis-Bäume via `git diff <A> <B> -- wiki/` + Hash- und Frontmatter-Angleichung (nur die benannte `generated.at`-/`verified[].at`-Ausnahme); (d) G-Szenarien (G-1..G-8) als harte Assertions, inkl. der Epic-5-Abhängigkeits-Smoke (G-7: die vordefinierten Wissensfragen brauchen nur das `wiki/`-Bundle, keine Planungs-Referenzen) und Porcelain-Check (G-8: nach dem Lauf `git status --porcelain -untracked-files=no` leer). `schema/compiler.md`, `schema/validator.md`, `schema/wiki-compiler.md`, `adapters/`, `raw/` bleiben read-only (AC-4: das Gate ändert die Schema-Semantik nie still); der Gate-Lauf findet ausschließlich als `/tmp`-Kopie des realen Clone-Baums statt (nie im Ist-Baum), das reale `wiki/` wird nur als Textquelle gelesen.
## Boundaries & Constraints
**Always:**
- **Nicht primär-mutiert:** `schema/compiler.md`, `schema/validator.md`, `schema/wiki-compiler.md`, `adapters/`, `raw/` — read-only (AD-3; das Gate ist eine Abnahme, keine neue Instruktions- oder Validator-Semantik).
- **Ein Datei-Satz erzeugt:** `_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh` (re-executierbar, `bash run-sandbox.sh` aus Repo-Root). Es läuft **ausschließlich als `/tmp`-Kopie** des realen Clone-Baums (koppelt `git clone`/`git worktree add` + Bundle-Kopie), greift nie auf den Ist-Baum zu und hinterlässt den Ist-Baum `git status --porcelain`-unverändert (G-8).
- **Kein `sed -i`:** alle Mutationen im Gate-Skript über `cp`/`printf > file`/`git …`-Aufrufe (portabel macOS/BSD- und Linux/GNU-Userland, AC-2).
- **Harness schreibt keine erwarteten Wiki-Bodies / Lease-/Log-/Git-Ausgänge:** die beiden frischen Agent-Kontext-Läufe (c) erzeugen die Wiki-/Receipt-Ausgabe; das Gate vergleicht A vs B (§5.14 Pkt. 2), hard-codiert keinerlei erwartete Bodies/Receipts (AC-4/AC-5, epic-3-context Z. 46; Defer-Home: DET-1/DET-2-Plan-Literale, R-9-Receipt-Literale).
- **`raw/` bleibt Status quo:** der Clean-Checkout-Fixture-Roh-Zuwachs lebt in der /tmp-Fixture (Kopie des realen `raw/`-Baums + Zuwachs dort), nie als Mutation im realen `raw/`.
- **Validator-Ausführung:** der frische Agent-Kontext ist der DIR-Exekutor für `schema/validator.md`; das Gate validiert nur Verdikt-Grammatik/-Exhaustivität, urteilt nie selbst (D-3-Compliance).
- **AC-4-Defizit-Route:** erkennt das Gate ein Validator-Defizit, schlägt G-5 fehl (Non-Zero), Story 3.13 bleibt offen und benennt den Bedarf einer separat autorisierten Epic-1-Remediation; das Gate ändert dann nichts an Schema/Validator.
- **Sandbox-Nachweis:** Exit 0, harte PASS/FAIL, `/tmp`-Baum, nie der reale Ist-Baum (Muster sandbox-3-11/3-12).
**Ask First:**
- Einen Validator-Patch anzufassen (wäre Epic-1-Remediation, separat autorisiert) — oder Gate-Verhalten zu ändern, das auf realen Wanduhr-/`generated.at`-Ausnahmen beruht (A0-20).
**Never:**
- Kein Umschreiben von `schema/compiler.md`/`schema/validator.md`/`raw/`; kein neues Prädikat/keine neue §7-Invaliditätsklasse; kein Standalone-Inhalts-Befund (D-3); kein textueller Auto-Merge (AD-17c); keine stille Löschung (AD-17e); keine Wanduhr-/TTL-Steuerung (A0-20); kein echtes `wiki/`-oder-`raw/`-Schreiben durch das Gate (nur Textquelle); kein Zugriff auf echte fremde Worktrees.
## I/O & Edge-Case Matrix
| Scenario | Input / State | Expected Output / Behavior | Error Handling |
|----------|--------------|---------------------------|----------------|
| SANDBOX_SUB_RUN_OK | n-te Sandbox liefert PASS/Exit 0 | Sub-Run erkennbar; FAIL → Non-Zero-Exit, Lauf bricht ab (fail-fast) | jede Abweichung = harter Non-Zero |
| VALIDATOR_AGENT_VERDIKT_OK | frische Verdikt-Datei je Datei-Pfad | Grammatik §5/§5.1 erfüllt; jede stattfindende `wiki/**/*.md`-Datei hat ein Verdikt; SUCCESS überall → G-3 PASS | fehlende/ungrammatische/FAIL-Verdikte = Non-Zero |
| VALIDATOR_DEFIZIT | fehlende/ungrammatische/FAIL-Verdikte werden nicht selbst repariert | G-5 PASS, Story bleibt offen; Bedarf einer Epic-1-Remediation wird textuell benannt | Non-Zero-Exit, kein Gate-Flip |
| FRESH_AGENT_TWO_TREES | zwei getrennte Arbeitskopien, gleicher `$BASE`-Commit | beide Runs beenden; `git diff A B` zeigt nur `at`-Abweichung; Bundle-Hashes/Reihenfolge/Plan A==B (außer `at`) | Divergenz außerhalb Ausnahme = harter FAIL |
| PERTURBIERTE_ENTSCHEIDUNG | eine der zwei Runs wird im Script über eine perturbed Option geroutet | Negativ-Kontrolle: divergente Bäume werden erkannt (G-6) | Non-Zero-Exit, kein false-PASS |
| PORCELAIN_CLEAN | nach dem Lauf | `git status --porcelain --untracked-files=no` auf dem Ist-Baum leer | überszogene Gate-Artefakte = Non-Zero |
| CONSUMER_SMOKE | nur das erzeugte Bundle | FR-15/16-Fragen ohne Planungs-Referenzen beantwortbar (G-7) | Referenz auf PRD/Spec/Spine = Non-Zero |
| GENERATED_AT_AUSNAHME | die einzige erlaubte Differenz | `generated.at`/`verified[].at`-Zellen dürfen abweichen | andere Zellen abweichend = Non-Zero |
</frozen-after-approval>
## Code Map
- `_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh`**neu erzeugt** (re-executierbar, Muster `sandbox-3-12/run-sandbox.sh` 820 Z. + `sandbox-3-8` Zwei-Worktree-Mechanik Z. 249-251/268/281-306/415-433; `set -u`, **kein** `set -e` — negatives Assertion-Idiom `cmd && fail`; `ROOT=$(mktemp -d /tmp/sb313-XXXXXX)`; `git config core.autocrlf false` + `core.filemode false`; `pass()/fail()` hart; End-Exit 0). Abschnitte: **(A) Setup** — Repo-/Bundle-/Referenz-Check, Referenz-Sandbox-Liste `sandbox-3-1..3-12`, `git status --porcelain`-Pre-Check; **(B) Käfig-Bau** — `/tmp`-Kopie des realen Clone-Baums (liest alle `wiki/**/*.md`-Dateiliste, kopiert `schema/raw/…`), `git init`+baseline; **(C) 12 Sandbox-Sub-Runs** — je `bash …/sandbox-3-N/run-sandbox.sh` mit Exit-Check; **(D) Validator-Agent** — frischen Sub-Agent-Kontext starten, der `schema/validator.md` über alle `wiki/`-Dateien ausführt und `verdict-*.md`-Dateien (SUCCESS/FAIL-Format) ablegt; **(E) Zwei-frische-Agenten** — zwei `/tmp`-Arbeitskopien (G-Kontext), shared `$BASE`-Fixture-ROH-Zuwachs `raw/alpha-v2.md`+Ziel `wiki/alpha.md` committet, beide Runs auf `git worktree add $BASE`, A/B-`git diff -- wiki/` + Hash-/Frontmatter-Vergleich, Nur-`at`-Ausnahme; **(F) G-1..G-8** harte Assertions; **(G) Nachweise/Porcelain** — Endzustands-Invariante + `git status --porcelain`-leerer Zustand.
- `_bmad-output/implementation-artifacts/sandbox-3-12/run-sandbox.sh`**read-only** Ausgangspunkt (L-1..L-9, Exit 0; Portrait der $5.18-Kill-Point-/Clean-Input-Härtung), Ausgangspunkt der `pass()/fail()`/Isolate-Helfer.
- `_bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh`**read-only** Quelle der Zwei-Worktree-Mechanik (DET-2: `git worktree add -q "$ROOT/wt-a" "$BASE"` Z. 249-251; `run2_worktree()` Z. 268; Manifest-Validierung Z. 281-306; Cross-Receipt-Vergleich A vs B Z. 415-433) — der 3.13-„Zwei-frische-Agenten"-Kern.
- `_bmad-output/implementation-artifacts/spec-3-8-determinismus-vertrag-ad-17h-als-agent-instruktions-validato.md`**read-only** Defer P-5 (Z. 150): „die zwei frischen Agent-Kontexte sind mechanisch simuliert … der Nachweis echter frischer Kontexte erfolgt im Story-3.13-Abnahmegate über reale Agent-Läufe".
- `_bmad-output/implementation-artifacts/deferred-work.md`**append, read-only lesbar** (Aufgegriffen-/3.13-Home-Marker): L551 (DET-1/2-Plan-/Form-Literale), L560 (R-9-Receipt-Literale), L576 (wiki//raw/-Invarianten-Beweis), L594 (Zwei-Producer-verschiedene-`<id>`-Gewinner), L597 (Zwei-Worktree-Barriere-überlappung), L611 (Zwei-Worktree-Übernahme), L629 (geteilter-Ref-Namespace-Real-Beweis), L633 (AC-3-Stash-/AC-5-kombinierter-Clean-Input-Beweis) — diese werden über die echten Gate-Runs einschlägig **geschlossen** (Home 3.13-Abnahme realisiert); der zugehörige RD-Notiz-/Defer-Block bleibt unverändert (nur das Home ist erledigt).
- `_bmad-output/implementation-artifacts/sprint-status.yaml`**mutiert** nach Gate-Freigabe (Step-05): Key `3-13-epic-3-verifikations-und-abnahmegate` `backlog → done` (final); `epic-3` bleibt solange `in-progress`; `last_updated` (Format `MM-DD-YYYY HH:MM`).
- `_bmad-output/implementation-artifacts/epic-3-context.md`**mutiert** („Edit freely") nach Gate-Freigabe: Z. 7/46/52 von „…als abgeschlossen/…Gate…zwei frische Agent-Kontexte…" auf Ist-Zustand (Gate erfolgreich ausgeführt) aktualisiert.
- `wiki/log.md`**append** (Vertrag §5): Story-3.13-Eintrag (Gate-Lauf, Sandbox 3-13, G-1..G-8, Zwei-frische-Agenten-A/B-Identität, Sandbox-Nachweis 12×Exit 0, Validator-Integration, Porcelain-Check, sprint-status.yaml-Flip) — **nur** vertragskonforme fachliche + Koordinationsereignisse (AC-6; Dokumentations-Kategorie wie 3.12—3.13-Gate-Lauf selbst ist zulässiger Koordinations-Nachweis, Kategorie-Historie bleibt außerhalb).
**Read-only evidence (AD-3):** `schema/validator.md` (Rev 9, §0 L9-22 „rein textuell — kein Standalone-Programm (D-3)", §3 14-Punkte-Tabelle Z. 50-73, §5 Verdikt-Format Z. 139, §5.1 Selbstbegrenzung Z. 154, §6-Fachprüfungen EC-1/EC-3/EC-11 Z. 160-201, §7-Fixtures Z. 202-289); `schema/compiler.md` (Revision 3.7; §0 Z. 9, §6 Z. 441-446 — „Das gesamte Bundle gemäß schema/validator.md geprüft"; §7 Z. 486-499; §8-Revisionslog Z. 501-543); `schema/wiki-compiler.md`; `adapters/`; `raw/` (immutable Evidenz). `schema/canonical-terms.md` append-only unangetastet.
## Tasks & Acceptance
**Execution:**
- [ ] `_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh` — Gate-Skript bauen (Setup → Käfig-Bau → 12-Sandbox-Fail-Fast → Validator-Agent → Zwei-frische-Agenten-A/B → G-1..G-8 → Porcelain-Check), harte PASS/FAIL, Exit 0, `/tmp`-Kopie nie Ist-Baum
- [ ] `schema/compiler.md`/`schema/validator.md`/`adapters/`/`raw/` — read-only verifizieren (kein Diff), `schema/canonical-terms.md` unangetastet (AD-3)
- [ ] Gate real ausführen (mehrere Läufe, inkl. skript-seitiger Zwei-/Mehr-Lauf-Stabilität) bis Exit 0; Negativ-Kontrollen ausführen
- [ ] `_bmad-output/implementation-artifacts/sprint-status.yaml` — Key 3-13 → `done`, `epic-3` Status-Kette prüfen, `last_updated` aktualisieren (Step-05 nach Review)
- [ ] `_bmad-output/implementation-artifacts/epic-3-context.md` — Abnahme-Zeile auf Ist-Zustand nachführen
- [ ] `wiki/log.md` — Story-3.13-Eintrag (Gate, Sandbox-3-13, G-1..G-8, Validator-Integration, Zwei-frische-Agenten, Porcelain) — nur vertragskonforme Inhalte (AC-6)
- [ ] `_bmad-output/implementation-artifacts/deferred-work.md` — 3.13-Home-Defers (L551/L560/L576/L594/L597/L611/L629/L633) als aufgegriffen/erledigt markieren (Defer-Block selbst historisch unverändert)
- [ ] Nachweis: `git status --porcelain` des realen Ist-Baums nach Gate-Lauf unverändert (G-8), `raw/` unverändert
**Acceptance Criteria:**
- Given einen sauberen Checkout, when das repositoryweite Epic-3-Gate ausgeführt wird, then führt ein Kommando alle Epic-3-Szenarien fail-fast aus; fehlgeschlagene Assertions, übersprungene Szenarien, fehlende Abhängigkeiten und Kindprozessfehler ergeben einen Non-Zero-Exit (AC-1).
- Given macOS/BSD- und Linux/GNU-Userland, when das Gate läuft, then ist es ohne plattformspezifisches `sed -i` reproduzierbar, arbeitet ausschließlich in temporären Repositories und hinterlässt `git status --porcelain` unverändert (AC-2).
- Given positive und negative OKF-Fixtures, when validiert wird, then wird der vollständige Vertrag aus `schema/validator.md` über alle `wiki/`-Dateien ausgeführt; unter anderem fehlendes `generated.by`, kalenderinvalides `generated.at`, unzulässige Source-Pfade und gebrochene Index-Links verhindern SUCCESS und Commit (AC-3).
- Given der autorisierte Validator-Vertrag oder seine ausführbare Aufrufbarkeit weist dabei ein Defizit auf, when das Gate es erkennt, then bleibt Story 3.13 offen und benennt den Bedarf für eine separat autorisierte Epic-1-Remediation; Story 3.13 darf die Schema-Semantik nicht still ändern, verantwortet aber die Integration und vollständige Ausführung des bestehenden Vertrags (AC-4).
- Given eine repräsentative committete Fixture, when ein frischer Agent-Kontext die kanonische Instruktion `schema/compiler.md` ausführt, then darf der Harness nach dem Setup weder erwartete Wiki-Bodies noch Lease-, Log- oder Git-Ausgänge selbst schreiben (AC-5).
- Given diese Fixture, when der Compilation Run endet, then demonstriert er Update eines bestehenden Concepts, Anlage einer neuen Wissenseinheit, kohärente Multi-Source-Synthese, vollständige Multi-Evidenz-Provenienz, Source-Immutabilität und byte-identische Erhaltung unabhängigen Wissens (AC-6).
- Given dasselbe kanonische Eingabemanifest, when zwei frische Agent-Kontexte in getrennt aufgebauten Worktrees laufen, then stimmen Run-Receipts und Bundle-State gemäß Story 3.8 überein; eine perturbierte Entscheidung oder Ausgabe wird erkannt (AC-7).
- Given nur das erzeugte Knowledge Bundle ohne Planungsartefakte, when ein unabhängiger Consumer im Epic-5-Abhängigkeits-Smoke-Test vordefinierte Wissensfragen beantwortet, then benötigt er weder Product Brief, SPEC, Architecture Spine noch Story-Historie zum semantischen Verständnis; solche Referenzen sind höchstens optionale Provenienz/Traceability (AC-8).
- Given ein bestandenes Gate, when die Status-Synchronisation läuft, then wird der Key `3-13-…` auf `done` geflippt und Epic 3 erst nach bestandenem Gate und `done` aller Stories 3.8..3.13 auf `done` gesetzt; bis dahin bleibt Epic 3 `in-progress` (AC-9).
## Spec Change Log
_Leer bis zum ersten bad_spec-Loopback (Step-04)._
## Design Notes
Der Gate-Kern löst das 3.8-P-5-Defizit: die Zwei-frische-Agenten-Bestätigung läuft hier **echt** — zwei getrennte Arbeitskopien desselben `$BASE`-Commits, jeweils frischer Kontext, `schema/compiler.md` als einzige Instruktionsquelle, A/B-Angleichung nur auf den erlaubten `at`-Zellen (§5.14 Pkt. 2). Der Validator bleibt **Instruktion**, wird aber durch einen dritten frischen Agent-Kontext zur **ausführbaren Prüfung** gemacht (er liest `schema/validator.md` und erzeugt `SUCCESS`/`FAIL <pfad> <ursache>` über alle `wiki/`-Dateien); das Gate prüft nur Verdikt-Grammatik/Exhaustivität, nie den Inhalt (D-3-Compliance). Die 12 Sandbox-Suiten werden als **Sub-Runs** in eine fail-fast-Sequenz gehoben — der „ein Kommando"-Wortlaut von AC-1.
**Beispiel (Zwei-frische-Agenten, deterministisch):**
```bash
# im Gate-Skript: Bau beider Bäume auf denselben Commit
git worktree add -q "$ROOT/wt-a" "$BASE" && git worktree add -q "$ROOT/wt-b" "$BASE"
# A vs B — nur die at-Zellen dürfen differieren:
git diff --stat "$ROOT/wt-a" "$ROOT/wt-b" -- wiki/ # ≠ leer (nicht-vakuum), at-only
```
Die repräsentative Fixture nimmt das 3-12-Sandbox-Muster (Mini-Bundle `wiki/index.md`+`alpha.md`+`log.md`, `raw/alpha-v1.md` als Baseline, Zuwachs `raw/alpha-v2.md` → Update von `alpha.md`, ergänzt um Bereichs-Synthese/`gamma` und `wiki/`-bleibt-Byte-identisch für unabhängiges `delta`) — in den `/tmp`-Käfig kopiert und committet, nie das reale Bundle.
## Verification
**Commands:**
- `bash _bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh` -- expected: 12 Sandbox-Sub-Runs (jede `exit 0`), Validator-Integration, Zwei-frische-Agenten A/B-Identität (nur `at`-Zellen abweichend), G-1..G-8 harte PASS, finaler Porcelain-Check, Exit 0; kein Zugriff auf den realen Ist-Baum.
- `git status --porcelain` (Repo-Root) -- expected: leer/nur Story-3.13-Artefakte; `schema/compiler.md`, `schema/validator.md`, `schema/wiki-compiler.md`, `adapters/`, `raw/` ohne Diff (AD-3); `sandbox-3-13/` als einziger neuer Verzeichnis-Inhalt.
- `git diff --stat` (Repo-Root) -- expected: nur Story-3.13-Touched-Files (run-sandbox.sh, spec, log.md, sprint-status.yaml, epic-3-context.md, deferred-work.md), kein Source-/Schema-Diff (AC-4: keine stille Schema-Änderung).
- optional: Deb-Run des Gate-Skripts mit `bash -x` -- expected: keine `sed -i`-Aufrufe (AC-2).
**Manual checks (if no CLI):**
- Keine Beschreibung nötig — sämtliche Nachweise laufen über das Gate (Exit-Code) und additive Diffs.
## Suggested Review Order
**Abnahme-Ebene (Kern)**
- Gate-Skript — Fail-Fast-Orchestrierung der 12 Sandbox-Suiten, `/tmp`-Käfig statt Ist-Baum, Porcelain-Check.
[`run-sandbox.sh`](./sandbox-3-13/run-sandbox.sh)
- Zwei-frische-Agenten A/B (AC-7): getrennte Worktrees auf `$BASE`, `git diff A B -- wiki/` nur `at`-Zellen, Negativ-Kontrolle perturbed.
[`run-sandbox.sh`](./sandbox-3-13/run-sandbox.sh)
- Validator-Integration (AC-3/AC-4): frischer Agent-Kontext führt `schema/validator.md` über alle `wiki/`-Dateien aus; Verdikt-Grammatik/Exhaustivität; Defizit → Non-Zero + Epic-1-Remediation-Bedarf.
[`run-sandbox.sh`](./sandbox-3-13/run-sandbox.sh)
- Harness schreibt keine erwarteten Ausgänge (AC-5), repräsentative Fixture beweist AC-6 inkl. byte-identische Erhaltung unabhängigen Wissens; Epic-5-Smoke G-7 (AC-8).
[`run-sandbox.sh`](./sandbox-3-13/run-sandbox.sh)
**Status- & Nachweissynchronisation (peripher)**
- Story-3.13-Eintrag im kanonischen Knowledge Log (Vertrag §5; Gate-Lauf, Sandbox 3-13, G-1..G-8, Zwei-frische-Agenten, Porcelain-Check).
[`log.md`](../../wiki/log.md#L1)
- Abnahme-Zeile von „…als abgeschlossen…Zwei-frische-Agenten-Kontexte…" auf Ist-Zustand nachgeführt.
[`epic-3-context.md`](./epic-3-context.md)
- 3.13-Home-Defers (Zwei-Worktree-Überlappung, DET/R-9-Receipt-Literale, wiki//raw/-Invariante, Stash-/Clean-Input-Beweis) als aufgegriffen/erledigt markiert.
[`deferred-work.md`](./deferred-work.md)
- Key 3-13 → `done` (final, nach Review), Epic-3 bleibt bis zum Gate-Abschluss `in-progress`.
[`sprint-status.yaml`](./sprint-status.yaml)