Re-Run #5 (Voll-Lauf gehärtetes Gate 915 Z., /tmp/gate-313-run5.log): ROT an E.4 (NON_AT=26 AT=4) — korrekt erkannter, echter AD-16-A/B-Divergenz-Befund in der freien CREATE-Synthese (Slug-Identität beta vs. quanten-observatorium-kanal + freier Body-/log.md-Wortlaut), kein false-PASS; UPDATE-Pfad alpha byte-identisch bis auf at:. Grün: C 12/12, D 4/4 SUCCESS, D-NEG 3xFAIL+1xSUCCESS, E.1-E.3 + beide frische Agent-Läufe (RUN_DONE); F/G nicht demonstriert (fail-fast an E.4). AC-4-Defizit-Roadmap (Nutzer-Entscheidung 2026-08-23): autorisierte Epic-1-Remediation (compiler.md Rev 3.7->3.8: CREATE-Slug-Pin, CREATE-Body-kanonische Form, log.md-Regel) -> 12-Sandbox-Re-Execution -> Re-Run #6. Frozen-Matrix-Zeile VALIDATOR_DEFIZIT auf G-5 FAIL (Non-Zero) korrigiert (Ask-First-Erfüllung). Tasks getickt (5/8); Status-Sync: log.md/epic-3-context/sprint-status (Key bleibt in-progress, last_updated 08-23-2026 17:09); Gate/Schemas/raw unverändert. Co-Authored-By: Claude <noreply@anthropic.com>
46 KiB
title, type, created, status, baseline_commit, review_loop_iteration, context
| title | type | created | status | baseline_commit | review_loop_iteration | context | |
|---|---|---|---|---|---|---|---|
| Story 3.13 — Epic-3-Verifikations- und Abnahmegate | feature | 2026-08-22 | in-progress | c234fc361e |
1 |
|
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/d–h, 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.shaus Repo-Root). Es läuft ausschließlich als/tmp-Kopie des realen Clone-Baums (koppeltgit clone/git worktree add+ Bundle-Kopie), greift nie auf den Ist-Baum zu und hinterlässt den Ist-Baumgit status --porcelain-unverändert (G-8). - Kein
sed -i: alle Mutationen im Gate-Skript übercp/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 realenraw/-Baums + Zuwachs dort), nie als Mutation im realenraw/.- 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 echteswiki/-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 FAIL (Non-Zero), 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 |
Code Map
_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh— neu erzeugt (re-executierbar, Mustersandbox-3-12/run-sandbox.sh820 Z. +sandbox-3-8Zwei-Worktree-Mechanik Z. 249-251/268/281-306/415-433;set -u, keinset -e— negatives Assertion-Idiomcmd && 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-Listesandbox-3-1..3-12,git status --porcelain-Pre-Check; (B) Käfig-Bau —/tmp-Kopie des realen Clone-Baums (liest allewiki/**/*.md-Dateiliste, kopiertschema/raw/…),git init+baseline; (C) 12 Sandbox-Sub-Runs — jebash …/sandbox-3-N/run-sandbox.shmit Exit-Check; (D) Validator-Agent — frischen Sub-Agent-Kontext starten, derschema/validator.mdüber allewiki/-Dateien ausführt undverdict-*.md-Dateien (SUCCESS/FAIL-Format) ablegt; (E) Zwei-frische-Agenten — zwei/tmp-Arbeitskopien (G-Kontext), shared$BASE-Fixture-ROH-Zuwachsraw/alpha-v2.md+Zielwiki/alpha.mdcommittet, beide Runs aufgit 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 derpass()/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): Key3-13-epic-3-verifikations-und-abnahmegatebacklog → done(final);epic-3bleibt solangein-progress;last_updated(FormatMM-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-Baumschema/compiler.md/schema/validator.md/adapters//raw/— read-only verifizieren (kein Diff),schema/canonical-terms.mdunangetastet (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-3Status-Kette prüfen,last_updatedaktualisieren (Step-05 nach Review)_bmad-output/implementation-artifacts/epic-3-context.md— Abnahme-Zeile auf Ist-Zustand nachführenwiki/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 --porcelaindes 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 -ireproduzierbar, arbeitet ausschließlich in temporären Repositories und hinterlässtgit status --porcelainunverändert (AC-2). - Given positive und negative OKF-Fixtures, when validiert wird, then wird der vollständige Vertrag aus
schema/validator.mdüber allewiki/-Dateien ausgeführt; unter anderem fehlendesgenerated.by, kalenderinvalidesgenerated.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.mdausfü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-…aufdonegeflippt und Epic 3 erst nach bestandenem Gate unddonealler Stories 3.8..3.13 aufdonegesetzt; bis dahin bleibt Epic 3in-progress(AC-9).
Review Findings
Review-Loop 1 (bmad-code-review, 4 Layer — blind-hunter / edge-case-hunter / verification-gap / acceptance-auditor, 2026-08-22; Diff c234fc3..894ae34+working tree; 28 eindeutige Befunde nach Dedup aus 43 rohen: 7 decision-needed / 15 patch / 2 defer / 6 dismissed. Hinweis: der Verification-Gap-Layer lieferte nach einem transienten API-Output-Limit-Fehler über einen Größenbegrenzten Retry).
Decision-Needed (7):
- [Review][Decision] D-3.13-1: Agent-Prompt hard-codiert erwartete Plan-/Entscheidungs-/Receipt-/Log-Literale —
AGENT_PROMPT(E.3) diktiert beide frischen Kontexte aufcandidates: alpha,decision: form=konsolidieren;zelle=UPDATE;ziel=alpha,sources_added: raw/alpha-v2.md, die exakte Multi-Beleg-Ergebnisform und die wörtlichelog.md-Zeile (inkl.<volles-SHA>). Verletzt den gefrorenen Boundary „hard-codiert keinerlei erwartete Bodies/Receipts" (AC-4/AC-5, epic-3-context Z. 46; compiler.md §5.14 Pkt. 2: „weder erwartete Pläne noch Concept-Bodies werden im Test hart codiert") und widerspricht dem eigenen deferred-work-„Aufgegriffen"-Block, der die DET-1/DET-2- und R-9-Defer (Plan-/Receipt-Literale) als durch diesen Lauf geschlossen markiert. A==B-Konvergenz ist dadurch prompt-gesteuert, nicht unabhängig ausschema/compiler.mdabgeleitet. Options: (1) Prompt auf Instruktion + Fixture-Fakten beschränken, erwartete Formen/Receipts/Log-Zeile entfernen, Gate-Checks auf A-vs-B + Nicht-Vakuum-Witness gegen Baseline reduzieren (wahrer 3.8-Nachweis); (2) Literalen als „repräsentative Fixture-Vorgabe" dokumentieren und Spec/deferred-work-Klammern nachverhandeln (frisiert die AC-5-Präzedenz). - [Review][Decision] D-3.13-2: AC-7-Hälfte „Run-Receipts … überein" wird nie verglichen — Das Gate vergleicht nur den Bundle-State (
git diff HEAD_A HEAD_B -- wiki/+ sha256 je Datei);run-receipt.txtwird von den Agenten geschrieben, aber nie gelesen, gegreppt, gehasht oder A-vs-B-anglichen (grep: nur Prompt-/Kommentar-Treffer). AC-7 + §5.14 Pkt. 2 nennen den Receipt als „von außen vergleichbaren Nachweis je Lauf". Options: (1) Receipt-Vergleich implementieren (A vs B zeilenweise, keine erwarteten Literale — mit D-3.13-1-Option 1 konsistent); (2) AC-7-Auslegung als „nur Bundle-State" dokumentieren (braucht Intent-Nachverhandlung). - [Review][Decision] D-3.13-3: G-6-Negativ-Kontrolle routet keinen perturbed Run — Die I/O-Matrix-Zeile PERTURBIERTE_ENTSCHEIDUNG (frozen) verlangt: „eine der zwei Runs wird im Script über eine perturbed Option geroutet". Implementiert ist:
git archivedes committeden A-alpha.mdin eine Scratch-Datei,sed-Worttausch, at-normalisierter sha256sum-Vergleich gegen B. Das prüft den Hash-Vergleich, aber weder das E.4-Line-Classifier-Prädikat (das tatsächlich G-1 abwartet) noch einen echten gelaufenen Run. Options: (1) Echten perturbed-Drittrun (3. Agent mit perturbed Option; A-vs-C-Classifier MUSSNON_AT≠0 flaggen) — teuer (~45 min Agent-Lauf); (2) Perturbed-Commit-Tree in einer wt-Kopie committen + denselben E.4-Diff-Classifier darüber fahren (MUSSNON_AT≠0) — deterministisch, ohne 3. Agent; (3) Ist-Lösung als „Prädikat-Negativ-Kontrolle" akzeptieren + I/O-Matrix-Zeile nachverhandeln. - [Review][Decision] D-3.13-4: G-7-Smoke ist enger als die frozen I/O-Matrix CONSUMER_SMOKE — Matrix-Zeile: „Referenz auf PRD/Spec/Spine = Non-Zero"; AC-8: „benötigt er weder Product Brief, SPEC, Architecture Spine noch Story-Historie". Implementiert ist nur
grep '\]\(\.\./(schema|adapters)/'plus Exclusionwiki/index.md+wiki/log.md. Prosa-Referenzen auf PRD/Spine/Story-History in Concept-Bodies oder Links auf andere Nicht-Bundle-Pfade (z. B.../../planning-artifacts/…) passieren. Options: (1) G-7 auf Matrix-Formulierung erweitern (Token-/Link-Prüfung auf PRD/Spec/Spine/Brief/Story-History in allen nicht-exkludierten wiki-Dateien); (2) Enge Grep-Form als hinreichend dokumentieren (Intent-Nachverhandlung). - [Review][Decision] D-3.13-5: AC-3-Negativ-Fixture-Hälfte wird nie ausgeführt — AC-3: „fehlendes
generated.by, kalenderinvalidesgenerated.at, unzulässige Source-Pfade und gebrochene Index-Links verhindern SUCCESS und Commit". Abschnitt D validiert nur das real-grüne Bundle (7/7 SUCCESS); keine Negativ-Fixture (validator.md §7-Katalog: 4aresolved=, Innen-Ebenenrole:, 11a unlinked Area, EC-3-Kalender) wird dem frischen Validator-Agenten vorgelegt. Options: (1) Mini-Baum mit 2–3 §7-Negativ-Fixtures in einen separaten /tmp-Käfig bauen, frischen Validator-Agenten darauf fahren, MUSTFAIL <Punkt>-Verdikte erwarten; (2) Negativ-Hälfte als von Epic-1-Zertifizierungen (log.md-Rev-9-Nachweis) gedeckt akzeptieren + AC-3-Auslegung dokumentieren. - [Review][Decision] D-3.13-6: AC-6-Fixture demonstriert keine „Anlage einer neuen Wissenseinheit" — AC-6 verlangt sechs Demonstrationen, inkl. „Anlage einer neuen Wissenseinheit" und „kohärente Multi-Source-Synthese". Die Fixture ist ein rein CONFIRMING-Update auf das bestehende
alpha(Prompt verbietet neue Concepts, §5.9 Pkt. 3);gamma/indexbleiben byte-identisch. „Multi-Source-Synthese" reduziert sich auf einen Multi-Beleg-Anker an einer bestehenden Aussage. Anlage/Multi-Source-Synthese laufen nur als Sub-Runs sandbox-3-3/3-4 (eigene Isolation, nicht im Acceptance-Fixture-Run). Options: (1) Fixture um einen CREATE-Kandidaten + echten Multi-Source-Synthese-Baustein erweitern (größere Fixture, längere Agent-Läufe, komplexere A/B-Witness); (2) AC-6-Auslegung: „repräsentative Fixture" deckt Update-+Erhaltungs-Kern, CREATE/Synthese gelten über die 12 Sub-Runs als demostriert (Spec-Notiz, kein Code-Change). - [Review][Decision] D-3.13-7: Status-Flip
donegeht dem konvergierten Review voran —sprint-status.yaml-Key 3-13 ist seit Commit6624e07done+ Spec-Frontmatterstatus: done(Commit894ae34, während dieses Reviews angelegt), währendreview_loop_iteration: 0und dieses Review-Loop-1 noch offen ist. Präzedenz 3.7–3.12: „der finaledone-Flip ist der Step-05-Status-Sync nach konvergiertem Review-Loop". Spec-Code-Map bestätigt: Sprint-Status „mutiert nach Gate-Freigabe (Step-05)". Options: (1) Flip aufin-progresszurücknehmen, erst nach konvergiertem Loop finaldone(Präzedenz-konform); (2) Ist-Lage akzeptieren, Loop-Nachschärfung imdone-Eintrag dokumentieren.
Patch (15):
- [Review][Patch] P-1: sandbox-3-1-Sub-Run ist No-Op-Verifier — AC-1/G-4-Green-Claim lügt für Suite 3.1 —
sandbox-3-1/run-sandbox.shhat 0exit 1/fail()-Aufrufe (alle 6 Szenarien drucken nur--- Erwartet: …+ Ist-Ausgabe, impliziter Exit 0); 3-2..3-12 haben harte Exit-Pfade. Das Gate (Abschnitt C) beobachtet nur den Child-Exit-Code → eine Regression in den 3.1-Datenfluss-Szenarien (S1–S6) ist dem Gate unsichtbar; G-4 „12 Sandbox-Sub-Runs alle Exit 0" ist für n=1 vakuum. [sandbox-3-13/run-sandbox.sh:193-196] - [Review][Patch] P-2: E.4-Classifier
*"at: "*ist substring-breit — Jede Diff-Zeile, die das Substringat:enthält (z. B. Body-Zeilen mit „…dat: "), zählt als erlaubte at-Ausnahme; echte Content-Divergenz unter dieser Maske bleibt unsichtbar. Schärfe auf ankerierte at-Feld-Zeilen (Frontmatter^ at:), konsistent mit E.6/G-6. [sandbox-3-13/run-sandbox.sh:531-532] - [Review][Patch] P-3: AC-2-Portabilität gebrochen —
[ -n "${CLAUDE_BIN:-}" ] || CLAUDE_BIN="/d/Apps/nodejs/claude.cmd"(MSYS-Pfad +.cmd),cygpath -w-Aufrufe, GNU-timeout 900/1500/2700(stock macOS/BSD: nicht vorhanden), GNU-sha256sum(BSD:shasum -a 256). Auf stock macOS scheitert das Gate vor der ersten Assertion. Options im Patch: Plattform-Feature-Checks (Kommandopresenz mit klaren Fehlern) + portablen Hash-Fallback + CLAUDE_BIN als Pflicht-Env (oder PATH-claude) statt hartem Default. [sandbox-3-13/run-sandbox.sh:227,237,248,299,306,451,514,556-558] - [Review][Patch] P-4: E-Fixture ist nicht isoliert — echtes wiki//raw/-Overlay bleibt in
$BASE— B kopiert den vollen echtenwiki/(7 Dateien) undraw/(prd/, epics/, architecture-spine/, assets/) in den Käfig; E.1 überlagert nur 4 wiki- + 3 raw-Dateien ohne Löschen des Rests,git add -Acommittet alles.$BASEist damit kein dokumentiertes „Mini-Bundle" (Design Notes), der Prompt-Welt-Claim „enthält: …" (E.3) ist für beide Worktrees falsch, und die verwaisten echten Concepts sind aus der Fixture-Index nicht erreichbar (ein §6-validierender Agent würde Punkt-11-Verstoß melden). [sandbox-3-13/run-sandbox.sh:153-162,325-375] - [Review][Patch] P-5: Kein Cage-Cleanliness-Check zwischen D und E — Nach dem Validator-Agent (Write-enabled, Ausgabe-Pfad absolut außerhalb CWD) fehlt ein
git -C $CAGE status --porcelain-Check; E.1git add -Awürde eine fremde Datei, die der Agent im Käfig hinterließ, still in$BASEcommitten und beide A/B-Runs kontaminieren, ohne Gate-Signal. [sandbox-3-13/run-sandbox.sh:255-296] - [Review][Patch] P-6: „genau ein Verdikt je Datei" wird nicht erzwungen; Summe nie mit Dateizahl abgeglichen — Exhaustivitäts-Loop nutzt
grep -qE(Mindestens-1); duplizierte/konfligierende Verdikt-Zeilen für denselben Pfad passieren;VERDICT_LINES/SUCCESS_VERDICTSwerden nur ausgegeben, nie mitWIKI_MD_COUNTverglichen — der Pass-Text-Claim „genau ein Verdikt je Datei" (und das abgeleitete „7/7 SUCCESS") ist damit überzeichnet. [sandbox-3-13/run-sandbox.sh:285-302] - [Review][Patch] P-7: G-5/AC-4-Defizit-Route ist vakuüm + Remediation-Text nie emittiert — Bei Defizit bricht D hart ab, ohne den geforderten Text „Bedarf einer separat autorisierten Epic-1-Remediation" zu benennen; F erreicht G-5 nur im grünen Zustand, wo es bedingungslos
pass-t. Boundary (frozen) verlangt: „erkennt das Gate ein Validator-Defizit, schlägt G-5 fehl (Non-Zero) … benennt den Bedarf". (Zusätzlich: frozen I/O-Matrix-Zeile VALIDATOR_DEFIZIT sagt „G-5 PASS" — offenbar Tippfehler gegen Boundary/AC-4; im Patch mitnachführen, frozen-Block nur nach menschlicher Bestätigung.) [sandbox-3-13/run-sandbox.sh:277,296,633-638] - [Review][Patch] P-8: Protokoll-Marker
VALIDATOR_DONE/RUN_DONE <name>nie verifiziert — Beide Prompts verlangen exakte Abschluss-Marker, das Gate greift die.out-Dateien nur im Fehlschlagsfall tail; ein Agent ohne Marker passiert trotzdem. [sandbox-3-13/run-sandbox.sh:244,306,432,451] - [Review][Patch] P-9: Präskriptiver kanonischer
log.md-Eintrag wird nie gegen den Run-Endzustand geprüft — E.4 vergleicht nur A-vs-B, E.5/E.7 lesen nuralpha.md, E.8 pinntindex.md/gamma.md; eine Verletzung der §5-Log-Pflicht (fehlender Eintrag,---Form) ist A==B-konsistent möglich und passiert (Kultur-Vergleich: sandbox-3-4 prüft Wortlaut hart). [sandbox-3-13/run-sandbox.sh:512-540,560-571,599-609] - [Review][Patch] P-10: AC-6 „Source-Immutabilität" fehlt als Assertion in E — Nach beiden Agent-Läufen wird nie geprüft, dass
raw/in wt-a/wt-b byte-identisch zu$BASEist (Agenten haben Edit-Tool; Prompt-Verbot ist keine Assertion). [sandbox-3-13/run-sandbox.sh:512-609] - [Review][Patch] P-11: G-8-Invariante mit
--untracked-files=no+ ohne Negativ-Kontrolle — Der Spec-Wortlaut sagt „git status --porcelainleer" (inkl. Untracked); beide Checks (A Pre-Check + G End) exkludieren Untracked → eine im Repo abgelegte Gate-Datei passiert. Kein Negativ-Test (Kultur: 3-11/3-12 üben Guards negativ). [sandbox-3-13/run-sandbox.sh:107,717-757] - [Review][Patch] P-12: log.md-Evidenz fehl-labelliert;
$BASE-SHA nicht reproduzierbar — Die „(20/27/40/51/60/68 PASS)"-Zahlen sind kumulativePASS_COUNT-Schnappschüsse, nicht pro-Sektion-Zählungen;$BASE=5024d751…ist ein /tmp-Commit (Zeitstempel-abhängig, nicht re-ableitbar). Beleg-Formulierungen an die tatsächliche Semantik ausrichten (kumulative Zählung deklarieren; SHA als Lauf-Beleg ohne Re-Derivations-Claim). (Reconciliation:PASS_COUNT=70selbst stimmt exakt mit dem aktuellen Skript.) [wiki/log.md Story-3.13-Eintrag] - [Review][Patch] P-13: G-7 greift den /tmp-Käfig-Spiegel statt des Ist-Baums — Nach
cd "$CAGE"verbleibt die CWD im Käfig; der G-7-Loop liest$frelativ dazu → der Spiegel, nicht der reale Baum (heute äquivalent, da Spiegel aus dem Ist-Baum gebaut; bei Divergenz prüft der Smoke den falschen Baum; fehlende Datei →grepExit 2 → still „keine Verletzung"). Relativ$REPO_ROOTgreifen. [sandbox-3-13/run-sandbox.sh:166,686-700] - [Review][Patch] P-14: Toter Code + fehlendes Cleanup —
cmd_or_fail()(definiert, nie aufgerufen), Restkommentar$*/"$@"/SC2034,fail()/FAILED(nie inkrementiert →RUN_FAILED-Zweig unerreichbar),C_FAILED(fail-fast-Exit vor Guard), doppelte Porcelain-LesungG8_PORCELAIN+G8_TRAIL, keintrap/Cleanup für$ROOT(wächst je Lauf). [sandbox-3-13/run-sandbox.sh:52-61,193-207,717-746,765-771] - [Review][Patch] P-15: Spec-Design-Notes-Beispiel invalid + ≠leer-Pin widerspricht Implementierung —
git diff --stat "$ROOT/wt-a" "$ROOT/wt-b" -- wiki/vergleicht Verzeichnis-Pfade (kein tree-ish → schlägt fehl); der gepinnte Kommentar „≠ leer (nicht-vakuum)" widerspricht der implementierten Allowance-leerer-Diff + Witness-Nicht-Vakuum. Beispiel aufHEAD_A/HEAD_B-Form korrigieren + Pin-Wortlaut an Implementierung angleichen (Design Notes sind editierbar; der frozen-Block oben bleibt unangetastet). [spec-3-13-epic-3-verifikations-und-abnahmegate.md:Design Notes]
Defer (2):
- [Review][Defer] W-1: Timeout-Budgets (2700 s) an der Grenze zu beobachteten Agent-Laufzeiten [sandbox-3-13/run-sandbox.sh:451-453] — deferred, pre-existing: Laufzeit-Variation ist Modell-/Token-Latenz (Skript-Kommentar dokumentiert A:~30 min, B: >35 min); kein deterministischer Defekt, A0-20-konform; Beobachtung für spätere Sandbox-Härtung.
- [Review][Defer] W-2:
PASS_COUNTdriftet bei Bundle-/Referenzwachstum [sandbox-3-13/run-sandbox.sh:42-109,184-196,285-288] — deferred, pre-existing: Loop-basierte Zählung (12 Referenz-Sandboxen + 7 Wiki-Dateien) ist design-immanent driftanfällig; Beleg-Zahl ist Lauf-Momentaufnahme (P-12 klärt die Label-Form); keine Gate-Semantik-Folge.
Dismissed (6): G-6-„Hash-Primitive"-Beobachtung (Duplikat von D-3.13-3/P-2); „E.5/E.7-Witness stärker als reiner A/B-Vergleich" (unter D-3.13-1 subsumiert); „Status-Dokumente stützen sich auf geschwächte Assertions" (Konsequenz, kein eigener Befund); „$BASE-SHA nicht reproduzierbar / PASS_COUNT-Drift" (Duplikat von P-12/W-2, Reconciliation: 70 stimmt exakt mit dem aktuellen Skript); „review_loop_iteration: 0" (unter D-3.13-7 subsumiert); „12 Suiten alle hart"-Claim (Duplikat von P-1).
Spec Change Log
Nutzer-Entscheidungen Re-Run-#5-Nachbearbeitung (2026-08-23, ProMods-Response auf den E.4-Befund): (1) AC-4-Auflösung = autorisierte Epic-1-Remediation — schema/compiler.md-Patch (Rev 3.7 → 3.8) mit drei Bestandsregeln: CREATE-Slug-Signal pinning (Inhalts-Term maßgeblich — Design-Notes-L146-Intention), CREATE-Body-kanonische Form (byte-deterministisch), log.md-Regel (Wortlaut/Reihenfolge + kein Wanduhr-at im Body); danach 12-Sandbox-Re-Execution + Re-Run #6 (grüner Voll-Lauf). Die Remediation ist eine separat autorisierte Instruktions-Änderung im Präzedenz-Stil der autorisierten Validator-Revisionen 8/9 (AD-3-Compliance: keine stille Schema-Semantik-Änderung durch das Gate). (2) Frozen-I/O-Matrix-Zeile VALIDATOR_DEFIZIT korrigiert (Ask-First-Erfüllung durch die Nutzer-Bestätigung): „G-5 PASS" → „G-5 FAIL (Non-Zero)" — entspricht der implementierten Boundary/AC-4-Semantik (Non-Zero-Exit + Remediation-Text); der Renegotiation-Kandidat (Review-Loop-1, P-7) ist damit geschlossen. (3) Tasks & Acceptance: erledigte Tasks getickt (Gate-Skript gebaut, read-only-Verifizierung, epic-3-context, log.md, Porcelain-Nachweis); offene Tasks (Gate-bis-Exit-0, sprint-status done-Flip, deferred-work-Defers) bleiben offen bis Re-Run #6 grün.
Re-Run-#5-Ausführung (Voll-Lauf des gehärteten Gates 915 Z., 2026-08-23; Gate ROT an E.4 — korrekt erkannter echter AD-16-A/B-Divergenz-Befund, kein false-PASS; keine Patches, keine Gate-/Schema-/Fixture-Änderung — Befund nur dokumentiert, AC-4-Defizit-Roadmap): A/B-Voll-Lauf mit echten frischen Agent-Kontexten (CLAUDE_BIN = winpty-freie claude.exe per P-3-Override, P-16-Floor 32000 aktiv). Grün: A (Setup + Porcelain-Pre-Check), B (Käfig + git init + Baseline), C 12/12 Sandbox-Sub-Runs (fail-fast, je exit 0), D 4/4 SUCCESS (frischer Validator-Agent: D.1 VALIDATOR_DONE, D.4 exakt-ein-Verdikt-pro-Datei, D.5/D.6 0 FAIL — über die P-4-isolierte Mini-Fixture index/alpha/gamma/log; bewusste Verengung ggü. dem 08-22-Erst-Lauf „7/7" über die damals nicht-isolierte Fixture, kein Regression), D-NEG 3×FAIL + 1×SUCCESS (neg-1 fehlendes type, neg-2 okf_version außerhalb Bundleroot, neg-3 at: 2026-02-31; Positiv-Kontrolle SUCCESS), E.1 (Term-Isolation), E.2 ($BASE=ad8179d6f36dc98511f38948f21353ac1f12648d), E.3 (Worktrees wt-a/wt-b), Lauf A + Lauf B mit RUN_DONE-Markern (echte frische Kontexte). Rot an E.4: A/B-Classifier: NON_AT=26 AT=4 → HARD-FAIL (E.4) → exit 1. Divergenz-Klassifikation (alle 26 NON_AT-Zeilen im CREATE-Pfad, d. h. in freier Form-Synthese): (a) Slug-/Datei-Identität — Lauf A wiki/beta.md (Slug aus dem raw-Dateinamen-Stamm „beta") vs. Lauf B wiki/quanten-observatorium-kanal.md (Slug aus dem Inhalts-Term); die Fixture bietet zwei konkurrierende Slug-Signale (Dateinamen-Stamm „beta" + „Beta:"-Inhaltslabel vs. Inhalts-Term); die Design Notes (L146) intendieren das Ergebnis als „term-geleitet" (Lauf B), aber compiler.md §5.1 Pkt. 1 („kebab-case-Slug aus der Concept-Identität; der Dateiname definiert die Concept-Identität") / §5.15 Pkt. 1 (Dateiname→primärer Term — für beta-v1 wäre „beta" der primäre Dateiname-Term) / §5.7 lassen offen, welches Signal bei einem CREATE-Slug maßgeblich ist, wenn Dateinamen-Stamm und Inhalts-Term divergieren → Instruktionslücke (AD-16); (b) freier Form-Body-Wortlaut — zwei frische LLMs schreiben nie byte-identische CREATE-Bodies (§5.9 Pkt. 2 „eigenständig formuliert"); compiler.md enthält keinen Wortlaut-Pinning-Mechanismus (§5.10 Pkt. 3 pinnt nur die Reihenfolge, nicht den Wortlaut) → Byte-Identität einer freien CREATE-Synthese ist unter der aktuellen Instruktion nicht erfüllbar; (c) log.md — freier Form-Wortlaut + ungepinnte Eintrags-Reihenfolge an einem Datum + Lauf B bettet eine Wanduhr-generated.at in den log-Body ein (außerhalb der benannten at-Ausnahme; der geankerte E.4-Classifier maskiert sie korrekt nicht; compiler.md regelt nicht, ob Log-Einträge at-Werte tragen dürfen). Entscheidender Befund: der UPDATE-Pfad (wiki/alpha.md, CONFIRMING-Konsolidierung §5.16 Pkt. 4) ist byte-identisch bis auf at: konvergiert (sie fügt nur einen deterministischen Provenienz-Anker, keinen freien Wortlaut hinzu) — der Defekt ist damit exakt auf die freie CREATE-Synthese isoliert; der Vertrag ist dort erfüllbar. Konsequenz (AC-4 / §5.14 Pkt. 4): ein Exit 0 des Gates ist nicht innerhalb der aktuellen Autorität erreichbar — eine Behebung läge in compiler.md (AD-3 read-only), oder in einer Änderung des Gate-A/B-Vergleichsverhaltens (A0-20 Ask-First), oder in der Design-Notes-vorgeschriebenen Fixture (L146, außerhalb der Autorität); die korrekte Route ist der AC-4-Defizit-Pfad: Story 3.13 bleibt offen und benennt den Bedarf für eine separat autorisierte Epic-1-Remediation (compiler.md-Determinismus-Coverage für CREATE-Body-/Log-Wortlaut, z. B. Wortlaut-Pin oder Normalisierte-Vergleichsreichweite — menschliche Entscheidung) bzw. eine menschliche A/B-Vergleichsumfangs-Entscheidung; das Gate ändert die Schema-Semantik nicht still und verantwortet die vollständige Ausführung des bestehenden Vertrags. Bewusste Nicht-Änderung (kein P-18): kein Fixture-Rename — die Design Notes (L146) schreiben diese konkrete Fixture vor (raw/beta-v1.md+beta-v2.md, Term quanten-observatorium-kanal); ein Rename würde das Gate gegen die Spec (Sole-Source-of-Truth) stellen und die AD-16-Signal-Ambiguität verschleiern, statt sie zu benennen; die Befund-Isolation liegt in der obigen Klassifikation, nicht in einem Fixture-Edit. Gate 915 Z. unverändert, bash -n clean. Nicht demonstriert im Voll-Lauf: F (G-1..G-8 inkl. G-6 perturbed-Tree + wt-c2-at-only-Kontrolle) und G (Porcelain-Endinvariante) liefen nicht (fail-fast an E.4). Re-Run-Status: #2 rot (winpty, E.3 rc=1), #3 rot (D.4-falsch-rot + E.3-Token-Cap), #4 vor D gestoppt (Env 16000 → P-16-Floor), #5 rot (E.4 — echter AD-16-A/B-Defekt in freier CREATE-Synthese; Gate korrekt, kein false-PASS); finaler done-Flip + Review-Loop-2 ausstehend, abhängig von separat autorisierter Epic-1-Remediation bzw. menschlicher A/B-Umfangs-Entscheidung (AC-4/AC-9).
Re-Run-#3/#4-Auflösung (Voll-Lauf-Re-Runs des gehärteten Gates, 2026-08-23) — Patches P-16/P-17 (Gate-Umgebung + D.4-Pfad-Toleranz; keine AC-/Intent-/Boundary-Änderung, frozen-Block unangetastet): P-16 (CLI-Per-Response-Output-Token-Limit, E.3-Compiler-Läufe): der frische claude -p-Agent-Lauf bricht ab mit „API Error: Claude's response exceeded the 16000 output token maximum" (E.3 braucht eine einzige große Antwort: compiler.md lesen + mehrere Writes + Receipt). Befund Re-Run #4: die Session-Umgebung exportiert bereits CLAUDE_CODE_MAX_OUTPUT_TOKENS=16000 (CLI trägt das Modell-Built-in in die Child-Env weiter), daher greift ein ${VAR:-32000}-Default nie. Lösung = Floor-Semantik (Bodengranze): geerbte numerische Werte unter 32000 werden auf 32000 angehoben, höhere Werte bleiben erhalten (P-3-Override-Semantik), leer/nicht-numerisch → 32000. Belege: A/B-Test (5000-Zeilen-Output: 1698 Zeilen abgebrochen bei 16000 vs 5002 Zeilen vollständig bei 32000) + 6/6-Subshell-Unit-Test. P-17 (D.4-Verdikt-Pfad-Matching): der Validator-Agent schrieb in der alten Prompt-Wortung „gepunktete Pfad" (Dotted-Form wiki.alpha.md) bzw. konnte absolute/backslash-Pfade liefern — 4 gültige Verdicts existierten, das Regex matchte nichts (falsch-rot D.4 bei grünem D.5/D.6, Re-Run #3). Lösung: norm_verdict_path()-Normalisierer (Backslash→Slash, Quote-/./-Strip, Abschnitt bei wiki/, Dotted-Form-Regression mit concepts/-Subpfad-Erhaltung) + diagnostischer Verdict-Zeilen-Dump; angewendet in D.4 (Exhaustivität/Eindeutigkeit) und D-NEG-Zählern; Prompt-Wortung präzisiert („RELATIVE PFAD zum Käfig-Root mit Schrägstrichen", explizite Negativ-Beispiele). Beleg: 21/21-Test inkl. Negativ-Kontrollen (andere Dateien dürfen nicht matchen). Umgebungshinweis (kein Patch): die headless/Background-Aufrufe des Gates benötigen CLAUDE_BIN auf die echte, winpty-freie claude.exe (der C:\Users\mita\bin\claude-Shim ist winpty-PTY-wrapped und bricht ohne TTY ab — stdin is not a tty, rc=1; P-3-Override kanalisiert ALLE Agent-Aufrufe durch CLAUDE_BIN; Re-Run #2-Vollbeweis, D-NEG 5/5 im Re-Run #3). Re-Run-Status: #2 rot (winpty, E.3 rc=1), #3 rot (D.4-falsch-rot + E.3-Token-Cap; 12/12 Sub-Runs grün, D-NEG 5/5), #4 nach A.5+12/12-Sub-Runs vor D gestoppt (Env-Befund 16000 → Floor-Fix, ~1,5 h gespart); Gehärtetes Gate 915 Z., bash -n clean; Re-Run #5 ausstehend.
Review-Loop-1 (bmad-code-review, 4 Layer, 2026-08-22; 28 eindeutige Befunde: 7 decision-needed / 15 patch / 2 defer / 6 dismissed) — Befundauflösung 2026-08-23 (ProMods, „Ich folge Deinen Empfehlungen"): keine intent_gap/bad_spec — kein Loopback (Step-04 nicht ausgelöst). Nutzer-Entscheidungen (alle empfohlene Option): D-3.13-1 = Option 1 (AGENT_PROMPT nur Instruktion + Fixture-Fakten; Gate-Checks = A-vs-B + Nicht-Vakuum-Witness gegen Baseline); D-3.13-2 = Option 1 (Run-Receipt A-vs-B-Vergleich, keine erwarteten Literale — Modell sandbox-3-8 DET-2, at-/Pfad-Zellen gefiltert); D-3.13-3 = Option 2 (G-6 = perturbed committeter Tree wt-c + at-only-Kontrolle wt-c2, deterministisch durch denselben E.4-Classifier, kein 3. Agent — deterministische Realisierung der frozen-Matrix-Zeile PERTURBIERTE_ENTSCHEIDUNG: divergente Bäume werden erkannt, Non-Zero-Exit, kein false-PASS); D-3.13-4 = Option 1 (G-7 = generische Link-Auflösung + geschlossene, am realen Bundle validierte Planungstoken-Menge); D-3.13-5 = Option 1 (D-NEG: separater /tmp-Käfig mit 3 §7-/§6-Negativ-Fixtures + Positiv-Kontrolle; frischer Validator-Agent MUSS 3×FAIL + 1×SUCCESS liefern); D-3.13-6 = Option 1 (Fixture um CREATE-Fall erweitert: neue raw-Quellen beta-v1/v2 → neues Concept (Pfad term-geleitet, §5.15/§5.7 — nicht hart-codiert) + Index-Link; Multi-Beleg raw/alpha-v1.md#S-2; raw/alpha-v2.md#S-3); D-3.13-7 = Option 1 (Status-Revert: sprint-status.yaml-Key + Spec-Frontmatter done → in-progress; finaler done-Flip erst nach konvergiertem Loop + grünem Re-Run, Präzedenz 3.7–3.12). Patches (alle 15 angewendet): P-1 (sandbox-3-1 harte Exit-Pfade, separat re-executiert: 14 PASS, FAILED=0, Exit 0), P-2..P-14 in sandbox-3-13/run-sandbox.sh (839 Z.), P-15 in dieser Spec (Design Notes: --stat-Beispiel auf $HEAD_A/$HEAD_B-Form; ≠leer-Pin auf Allowance-leerer-Diff + Witness-Nicht-Vakuum; Fixture-Satz um CREATE-Kandidat). Renegotiation-Kandidat (frozen I/O-Matrix, unangetastet): Zeile VALIDATOR_DEFIZIT trägt „G-5 PASS" — widerspricht der Boundary „schlägt G-5 fehl (Non-Zero)" und AC-4; Boundary/AC-4 gilt implementiert (Gate-Flip auf Non-Zero + Remediation-Text „Bedarf einer separat autorisierten Epic-1-Remediation"); die Matrix-Zeile ist als Nachverhandlungs-Kandidat notiert (frozen-Block erst nach menschlicher Bestätigung änderbar — Ask-First). Spec-Frontmatter: status: 'done' → 'in-progress', review_loop_iteration: 0 → 1 (D-3.13-7). Defer W-1/W-2 unverändert (bereits [x]).
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):
# 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 (Commits der Worktrees als tree-ishes):
git diff --stat "$HEAD_A" "$HEAD_B" -- wiki/ # Allowance: leer (voll konvergiert) ODER at-only; Nicht-Vakuum sichert der Witness (E.5: alpha ≠ Baseline, CREATE-Datei, Index-Link)
Die repräsentative Fixture nimmt das 3-12-Sandbox-Muster (Mini-Bundle wiki/index.md+alpha.md+gamma.md+log.md, raw/alpha-v1.md+raw/gamma-v1.md als Baseline, CONFIRMING-Zuwachs raw/alpha-v2.md → Update von alpha.md (Multi-Beleg raw/alpha-v1.md#S-2; raw/alpha-v2.md#S-3), CREATE-Kandidat raw/beta-v1.md+raw/beta-v2.md (eindeutiger Term quanten-observatorium-kanal, kein bestehendes Concept → neue Concept-Datei mit term-geleitetem Pfad gemäß §5.15/§5.7 + Index-Link), gamma.md/index.md bleiben für unabhängiges Wissen byte-identisch bzw. um exakt eine Link-Zeile wachsen) — in den /tmp-Käfig gebaut und als $BASE committet, nie das reale Bundle.
Verification
Commands:
bash _bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh-- expected: 12 Sandbox-Sub-Runs (jedeexit 0), Validator-Integration, Zwei-frische-Agenten A/B-Identität (nurat-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: keinesed -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 -
Zwei-frische-Agenten A/B (AC-7): getrennte Worktrees auf
$BASE,git diff A B -- wiki/nurat-Zellen, Negativ-Kontrolle perturbed.run-sandbox.sh -
Validator-Integration (AC-3/AC-4): frischer Agent-Kontext führt
schema/validator.mdüber allewiki/-Dateien aus; Verdikt-Grammatik/Exhaustivität; Defizit → Non-Zero + Epic-1-Remediation-Bedarf.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
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 -
Abnahme-Zeile von „…als abgeschlossen…Zwei-frische-Agenten-Kontexte…" auf Ist-Zustand nachgeführt.
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 -
Key 3-13 →
done(final, nach Review), Epic-3 bleibt bis zum Gate-Abschlussin-progress.sprint-status.yaml