Re-Open-Scope (approved, ProMods; Epics-ACs Z. 357-370): zwei frische Agent-Kontexte in getrennt aufgebauten (sauberen) Worktrees (Q-6/A0-19 — eine zweite Ausführung in derselben Session genügt nicht), kanonisches Eingabemanifest (Baseline-Commit, geordnete Sources, output-sichtbare Run-/Zeit-/Identitätswerte), Run-Receipt außerhalb des Bundles (Candidates, Reihenfolge, Plan, Entscheidungen, Output-Hashes), keine hart codierten erwarteten Pläne/Concept-Bodies, keine pauschale verified-Maskierung (nur benannte at-Ausnahme). - schema/compiler.md §5.14: Zwei-Run-Bestätigungs-Mechanik + §8-Revision-3.3-Klausel + Re-Open-Delta auf getrennte Worktrees/Manifest/Receipt/no-hardcode/no-masking umgestellt; §5.13-"in einer Session" unverändert (AD-6-Phasen-Disziplin, Fugen-Identität) - sandbox-3-8/run-sandbox.sh: DET-2 auf zwei getrennte Worktrees (wt-a/wt-b) + manifest.yaml + receipts/-Dateien außerhalb des Bundles umgebaut; Candidate-Ableitung aus Git-State via deterministischem Stufe-a-Match (nicht hart codiert); Receipt-Abgleich als tatsächlicher Zwei-Run-Vergleich (diff der beiden Receipts, nicht je Lauf gg. Baseline); non-vakuum-Witness (Run-alpha-SHA != Baseline-alpha-SHA); Subshell für Worktree-cwd-Isolation. Exit 0, DET-1..DET-8 harte PASS - spec-3-8: Re-Open-Delta-Intent, Tasks & AC-3/4/5, SRO auf Worktrees angepasst - wiki/log.md: Story-3.8-Re-Open-Delta-Eintrag (Verankerung, Sandbox-Nachweis Exit 0, Erhaltungs-Invariante, Validator-Verdikt 7/7 SUCCESS, Revision 3.3) - sprint-status.yaml: last_updated nachgeführt; Key 3-8 in-progress - epic-3-context.md: neu kompiliert (Story-Liste/Stories 3.9-3.13 synchron) Validator-Verdikt (human-mechanisch, schema/validator.md Rev 9, D-3 — kein CLI): alle wiki/-Dateien 7/7 SUCCESS (keine Inhalts-Mutation). Erhaltungs-Invariante §5.9 Pkt. 5: git status --porcelain -- wiki/ zeigt ausschließlich wiki/log.md. AD-3 read-only (validator/wiki-compiler/adapters/raw/canonical-terms) unverändert. Co-Authored-By: Claude <noreply@anthropic.com>
32 KiB
title, type, created, status, baseline_commit, review_loop_iteration, course_correction, context
| title | type | created | status | baseline_commit | review_loop_iteration | course_correction | context | |
|---|---|---|---|---|---|---|---|---|
| Story 3.8 — Determinismus-Vertrag (AD-17h) als Agent-Instruktions-Validator umsetzen | feature | 2026-08-20 | in-progress | c4cdf4b93e |
0 | _bmad-output/planning-artifacts/sprint-change-proposal-2026-08-20.md |
|
Re-Open-Delta (Story-3.8-Neu-Verhandlung, 2026-08-20)
Neu verhandelt durch genehmigtes Sprint-Change-Proposal — _bmad-output/planning-artifacts/sprint-change-proposal-2026-08-20.md (Status: approved; approved_by: ProMods; explizite Chat-Freigabe). Der Plan korrigiert die zyklische Behauptung, Story 3.8 sei abgeschlossen, während Epic 3 seine zugesagten Verträge noch nicht als kohärentes System-Inkrement belegt. Story 3.8 wurde daher aus review nach in-progress zurückgenommen und mit erweitertem Scope wieder eröffnet (Epics-Datei ACs Z. 357–370):
- Getrennte Worktrees + frische Agent-Kontexte (Q-6/A0-19): „zwei frische Agent-Kontexte in getrennt aufgebauten Worktrees; eine zweite Ausführung in derselben Session genügt nicht".
- Kanonisches Eingabemanifest: hält Baseline-Commit, geordnete Source-Eingaben und jeden im Bundle sichtbaren Run-/Zeit-/Identitätswert explizit fest.
- Run-Receipt außerhalb des Knowledge Bundle: Candidate-Liste, Reihenfolge, Plan, Entscheidungen und Output-Hashes.
- Keine Hartcodes, kein pauschales Maskieren: weder erwartete Pläne noch Concept-Bodies werden im Test hart codiert;
verified-Ereignisse werden niemals pauschal aus dem Vergleich maskiert.
Dieser Frozen-Intent wurde nur in dem Umfang geändert, den dieses Re-Open-Delta verlangt (documenthuman respektierend; Appendix: fehlendes </frozen-after-approval>-Schließtag nach dem Spec Change Log ergänzt). Die ACs in _bmad-output/planning-artifacts/epics.md (Z. 357–370) sind die verbindliche Neu-Verhandlung; abweichende Alt-Formulierungen (namentlich „in einer Session") sind auf den Re-Open-Stand korrigiert.
Intent
Problem: AD-17h/FT-10/A0-19 verlangen: Über denselben Git-State + dasselbe Eingabeset erzeugen zwei unabhängige Runs denselben Bundle-State; eine Abweichung ist ein Fehler der AD-16-Klassifikation, kein Rauschen. Das Enforcement lebt im MVP (D-3, Q-6) als Agent-Instruktions-Validator und muss mechanisch bestätigt sein, bevor es tragend wird. Der Ist-Zustand der Instruktion verankert den Vertrag zwar an vielen Stellen (AD-17h-Rückverweise in §3.2/§5.9/§5.10/§5.11/§5.12/§5.13), aber es fehlt die geschlossene, aus dem committeten Git-State ableitbare Bestätigungs-Mechanik: Es gibt keinen normativen Ort, der definiert, (a) was genau der „Bundle-State" ist, (b) wie die Zwei-Run-Bestätigung mechanisch abläuft, (c) welche Ausnahmen vom byte-identischen Vergleich gelten (namentlich der dokumentierte generated.at-Wanduhr-Gap, A0-20) und (d) wie eine festgestellte Abweichung klassifiziert wird (AD-16-Klassifikationsfehler). Mehrere bekannte Lücken sind hierher gewandert (Em-Dash-Normalisierung, Kollaps-Reichweite, Match-Scope, at-Gap, Orphan-Politik, Misch-Run-Coverage).
Approach: Neue Sektion §5.14 „Determinismus-Vertrag & Agent-Instruktions-Validator (Story 3.8)" (nach §5.13, vor §6): definiert (1) den Bundle-State als deterministische Projektion des committeten Git-States (vergleichbare Zustandsmenge, at-Feld als benannte Ausnahme), (2) die Zwei-Run-Bestätigungs-Mechanik als textuell festgehaltenes, re-executierbares Prüfverfahren — im Re-Open-Stand in zwei getrennten, sauberen Worktrees mit frischen Agent-Kontexten (Q-6/A0-19; eine zweite Ausführung in derselben Session genügt nicht); Vergleichs-Operandum = committeter Baum; identische Plan-/Kandidaten-/Reihenfolge-Outputs; kein neuer Prozess/Server/MCP, D-3 — unter einem kanonischen Eingabemanifest (Baseline-Commit, geordnete Source-Eingaben, output-sichtbare Run-/Zeit-/Identitätswerte) und mit einem Run-Receipt (Candidate-Liste, Reihenfolge, Plan, Entscheidungen, Output-Hashes) außerhalb des Knowledge Bundle; (3) die Ausnahme-Menge des Bundle-State-Vergleichs (der generated.at-Wanduhr-Gap als dokumentierte A0-20-Konvention; sonst byte-identisch) und (4) die Abweichungs-Klassifikation (jede Abweichung außerhalb der Ausnahme = AD-16-Klassifikationsdefekt, textuell benannt, NFR-4). Die Zwei-Run-Bestätigung wird als Sandbox-Szenario mechanisch demonstriert (zwei Worktrees, zwei unabhängige Läufe); weder Pläne noch Concept-Bodies werden im Test hart codiert, verified-Ereignisse werden niemals pauschal aus dem Vergleich maskiert (nur die benannte at-Ausnahme). Die bekannten Lücken (Em-Dash, Kollaps-Reichweite, Match-Scope, Orphan) werden als geschlossene, deterministische Regeln in die Instruktion gehoben — keine offenen Fragen verbleiben, die die Zwei-Run-Identität gefährden.
Boundaries & Constraints
Always:
- Nur
schema/compiler.md(neue §5.14 + §7-Auflösung des Determinismus-Vorbehalts + §8 Revisionslog Revision 3.3 + gegebenenfalls Kollaps-/Match-Scope-/Orphan-Präzisierungen in §3.2/§5.10) mutiert (D-3).schema/validator.md,schema/wiki-compiler.md,adapters/,raw/read-only (AD-3). Kein Standalone (D-3), keine eigene Workflow-Engine/kein neuer Prozess/Server/MCP (AD-6, AD-11). Keine neue §7-Invaliditätsklasse, kein Vertrags-Change, kein neuer Prädikat-/Format-/Frontmatter-Key. - Deterministisch aus dem committeten Git-State ableitbar (AD-17h/A0-19): Bundle-State-Vergleich, Zwei-Run-Bestätigungs-Mechanik, Ausnahme-Menge, Abweichungs-Klassifikation. Keine Wanduhr/
now-Steuerung der Bestätigungs-Mechanik. - Der
generated.at-Wanduhr-Gap bleibt als dokumentierte Ausnahme bestehen (A0-20-Konvention, §5.9 Pkt. 2, §5.10 Pkt. 8, unverändert bindend bis Ask-First-Wechsel). §5.14 definiert die Behandlung vonatim Bundle-State-Vergleich (Ausnahmemenge), ändert aber nicht dasgenerated.at-Verhalten selbst. - Bei einer Abweichung zweier Runs: die Abweichung ist ein AD-16-Klassifikationsfehler (kein akzeptables Rauschen, FT-10/AD-17h-AC); die textuelle Benennung (NFR-4) ist verpflichtend.
- Die normalisierenden Lücken-Schließungen (Em-Dash in der Kollaps-Klasse, Kollaps-Reichweite bei Läufen/führenden/trailenden Separatoren, Wortgrenzen-/Frontmatter-Scope der Stufe-a-Erhebung) werden als deterministische Regel-Ergänzungen in §3.2 umgesetzt — append-only/kein Umbruch des bestehenden §3.2-Wortlauts; die Orphan-Politik (§5.10 Pkt. 8) wird zu einer deterministischen Reconcile-Orphan-Regel präzisiert.
- Die Bestätigung ist agent-instruction-basiert (D-3, Q-6): zwei frische Agent-Kontexte in getrennt aufgebauten (sauberen) Worktrees führen die Instruktion jeweils einmal aus und belegen die Zwei-Run-Identität (Q-6, A0-19) — eine zweite Ausführung in derselben Session genügt nicht; kein dedizierter Validator-Prozess, keine extra Runtime.
Ask First:
- Änderung des
generated.at-Verhaltens selbst (z. B. Ableitungataus dem Git-State statt Wanduhr) — §5.14 definiert nur seine Behandlung im Vergleich, der Konventionswechsel wäre Ask-First. - Einführung einer eigenständigen, ausführbaren Validator-Datei (separates Skript/Programm außerhalb der Instruktion als Enforcer) statt der textuellen Agent-Instruktions-Disziplin — wäre ein Realisierungswechsel weg vom D-3/Q-6-Modell.
- Kollaps-Reichweite bei Läufen/führenden/trailenden Separatoren anders zu definieren als „Kollaps auf genau ein
-+ Trim" (z. B. Doppel-Bindestrich-Erhaltung) — jede andere Wahl bricht bestehende Sandbox-Erwartungen. - Umbenennung/Neudefinition der vorhandenen §3.2-Erhebungsstufen (a/b/c) oder deren Reihenfolge.
Never:
raw/-Inhalte verändern (AD-3); uncommittete fremdewiki/-Änderungen löschen (AD-17e); textueller Auto-Merge bei Branch-Konvergenz (AD-17c); Wanduhr/now-Zeitstempel als Bestätigungs-Steuergröße; eigener# Log-Stand in der Registry; Standalone-Compiler/eigene LLM-Runtime (D-3, AD-11); Änderung anschema/validator.md/schema/wiki-compiler.md/adapters/; neuer Frontmatter-Key; neue §7-Invaliditätsklasse; neuer Prädikat-/Format-Key; eigene Workflow-Engine; neuer dedizierter Prozess/Server/MCP als Enforcer.
I/O & Edge-Case Matrix
| Scenario | Input / State | Expected Output / Behavior | Error Handling |
|---|---|---|---|
| BUNDLE_STATE_DEFINITION | gleicher committeter Git-State + gleiche Eingabemenge | Bundle-State definiert als deterministische Projektion: Datei-Gesamtheit unter wiki//raw/ gg. Baseline, Plan-/Kandidaten-/Reihenfolge-Outputs; generated.at als benannte Ausnahme |
textuell begründet (NFR-4), keine Lücke |
| ZWEI_RUN_IDENTISCH | zwei unabhängige Runs, gleicher Git-State + Eingabeset | identische Bundle-States bis auf benannte at-Ausnahme; Sandbox-Assertion nicht-vakuum (echte Content-Identität) |
PASS; bei Abweichung außerhalb Ausnahme: AD-16-Klassifikationsdefekt |
| ZWEI_RUN_ABWEICHUNG | zwei Runs, gleicher State, verschiedene Ausgabe | Abweichung = Fehler der AD-16-Klassifikation (kein Rauschen); textuell benannt, Run korrigiert/rollt zurück | NFR-4-Benennung; AD-17h-AC |
| AT_GAP_AUSNAHME | zwei unabhängige Runs, gleicher Input | generated.at darf abweichen (A0-20-Konvention, §5.9 Pkt. 2) — einzige benannte Ausnahme im Bundle-State-Vergleich; übrige Teile byte-identisch |
dokumentiert (kein stiller Ausschluss) |
| NORMALISIERUNG_EM_DASH | Term mit Em-Dash — |
Em-Dash in die Kollaps-Klasse aufgenommen ([-–— _]→-); identische canonische Form wie En-Dash/Bindestrich/Unterstrich/Leerzeichen |
deterministisch, kein stiller Ausschluss |
| NORMALISIERUNG_KOLLAPS | Term mit Läufen/führenden/trailenden Separatoren | Kollaps-Reichweite definiert: Kollaps auf genau ein - + Trim (führende/trailende entfernt), Läufe auf ein - |
deterministisch, glaubhaft re-executierbar |
| MATCH_SCOPE_STUFE_A | Stufe-a-grep-Treffer mit/ohne Wortgrenze, Frontmatter-Treffer | Match-Semantik fixiert: ganzes Wort (Wortgrenzen), Frontmatter exkludiert (nur Body) | deterministisch, keine falschen Kandidaten |
| ORPHAN_POLITIK | neu committete raw/-Evidenz ohne Ziel-Pfad-Treffer |
Orphan bleibt unzugeordnet, wird in log.md als verwaist protokolliert, kein Banner, keine stille Vorbearbeitung |
deterministische Reconcile-Orphan-Regel (AD-16-Default) |
Code Map
schema/compiler.md— primär mutiert (D-3): neue Sektion §5.14 „Determinismus-Vertrag & Agent-Instruktions-Validator (Story 3.8)" (nach §5.13, vor §6; Fixierung: §5.13-Ende Z. 362, §6-Start Z. 364 — neue Sektion zwischen beide, §5.14 Z. 364–381 ca.); §0-Phasen-Listentext unverändert; §5.13 Pkt. 7 „Home Story 3.8" — wird auf §5.14-Anker umgehängt (diegenerated.at-Gap-Ausnahme ist jetzt in §5.14 definiert statt nur deklariert; Home-Verweis bleibt, wird aber auf die §5.14-Definition verlagert); §3.2 Normalisierungs-Lücken (Em-Dash in Kollaps-Klasse Z. 51; Kollaps-Reichweite; Match-Scope Z. 55) — als Regel-Ergänzungen aufgelöst; §5.10 Pkt. 8 Orphan-Politik Z. 301 — zur deterministischen Reconcile-Orphan-Regel präzisiert; §7 (Z. 409ff.) Determinismus-Vorbehalt „Em-Dash-Lücke an Story 3.8 übergeben" — aufgelöst, Verankerung in §5.14 benannt; §8-NormreferenzAD-17h(Z. 430) auf §5.14-Anker angehoben (mit derat-Ausnahme-Nennung); Revisionslog-Eintrag Revision 3.3 nach Z. 461. Anker (IST-Zeilen nach Implementierung): §5.14-Sektion Z. ≈364; §7-Determinismus-Bullet nach Z. 420; §8-AD-17h in Z. 430; Revisionslog Revision 3.3 nach Z. 461.wiki/log.md— append (append-only, Vertrag §5): Story-3.8-Eintrag (Verankerung, Sandbox-Nachweis, Statuswechsel, Validator-Verdikt); bestehende Bullets unverändert._bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh— neu (re-executierbar, Muster sandbox-3-7, Exit 0): Szenarien DET-1..DET-8 (s. Design Notes), harte Pass/Fail-Assertionen, Zwei-Run-Identität nicht-vakuum, keine Berührung des realen Ist-Baums._bmad-output/implementation-artifacts/sprint-status.yaml— mutiert:3-8-determinismus-vertrag-ad-17h-als-agent-instruktions-validatobacklog→in-progress(Implementierungs-Flip) →review(Review-Start-Flip, Step-04; finalerdone-Flip im Step-05);last_updated(FormatMM-DD-YYYY HH:MM, HEAD-Präzision)._bmad-output/implementation-artifacts/deferred-work.md— append (append-only): ggf. Story-3.8-Defers; die bestehenden „Home: Story 3.8"-Einträge werden aufgegriffen/geschlossen — nicht als Nur-Read-markiert, sondern als aufgehobene Homes gekennzeichnet (Status-Eintragung). Stand: mehrere determinismus-bezogene Defer-Homes (Em-Dash, Kollaps, Match-Scope, Orphan,at-Gap, Misch-Run-Coverage) werden in §5.14/§3.2/§5.10 geschlossen; verbleibende Homes (falls nicht schließbar) bleiben offen mit verbleibendem Ziel._bmad-output/implementation-artifacts/epic-3-context.md,spec-3-7-…md— read-only (continue-context; Kette unverändert).
Read-only evidence (AD-3): schema/validator.md, schema/wiki-compiler.md, adapters/, raw/ (inkl. raw/architecture-spine/…md AD-17h/Q-6/FT-10/D-3, raw/epics/epics-2026-08-14.md A0-19/A0-20 — normativer Rückbezug, keine Mutation). schema/canonical-terms.md bleibt append-only-Registry (keine Änderung an Bestandseinträgen; die Em-Dash-/Kollaps-Schließung lebt als Regel in compiler.md §3.2, nicht als Registry-Edits — §3.2-Pkt.-1b-Kollaps-Klasse ist die zentrale Normalisierungsregel).
Tasks & Acceptance
Execution:
schema/compiler.md— §5.14 einfügen (nach §5.13, vor §6): Bundle-State-Definition, Zwei-Run-Bestätigungs-Mechanik (agent-Instruktions-basiert, D-3/Q-6, re-executierbare Formeln),at-Ausnahme-Menge, Abweichungs-Klassifikation als AD-16-Klassifikationsdefekt; §0/§5.13/§6 Wortlaut-unverändert referenzieren; kein neuer Prädikat-/Format-/Frontmatter-Keyschema/compiler.md— §3.2-Normalisierungs-Lücken schließen (Em-Dash-Klasse, Kollaps-Reichweite, Match-Scope der Stufe a) — als deterministische Regel-Ergänzungen ohne Umbruch des bestehenden §3.2-Wortlauts; Orphan-Politik §5.10 Pkt. 8 zur deterministischen Reconcile-Orphan-Regel präzisierenschema/compiler.md— Revision 3.3 in §8 belegen (AD-17h auf §5.14-Anker,at-Ausnahme-Nennung, Abschlussklausel); §7-Determinismus-Vorbehalt auflösen (Verankerung in §5.14)_bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh— Szenarien DET-1..DET-8 (Bundle-State-Definition, Zwei-Run-identisch nicht-vakuum, Zwei-Run-Abweichung klassifiziert,at-Gap-Ausnahme, Em-Dash-, Kollaps-, Match-Scope-, Orphan-Szenario), Exit 0_bmad-output/implementation-artifacts/sprint-status.yaml— Key3-8-…→in-progress(Implementierung) →review(Review-Start);_bmad-output/implementation-artifacts/deferred-work.md— Story-3.8-Defers bzw. aufgegriffene/geschlossene „Home: Story 3.8"-Einträge kennzeichnenwiki/log.md— (Implementierung) Story-3.8-Eintrag,sprint-status.yaml→ in-progress (Implementierung) bzw.review(Review-Start, Step-04); Review-Abschlussdoneim Review-Schritt (Workflow-Konvention)schema/compiler.md§5.14 — Re-Open-Delta: Zwei-Run-Bestätigung auf zwei getrennte saubere Worktrees + frische Agent-Kontexte umgestellt (Q-6/A0-19; „in einer Session" ersetzt); kanonisches Eingabemanifest (Baseline-Commit, geordnete Sources, output-sichtbare Run-/Zeit-/Identitätswerte) und Run-Receipt (Candidates, Reihenfolge, Plan, Entscheidungen, Output-Hashes) außerhalb des Bundles eingefordert; Verbot von hart codierten erwarteten Plänen/Concept-Bodies und pauschalerverified-Maskierung (nur benannteat-Ausnahme)_bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh— Re-Open-Delta: DET-2 auf zwei getrennte Worktrees/independ. Läufe umgestellt (Manifest + Receipt-Szenario, keine hart codierten erwarteten Bundle-Outputs, verified nicht pauschal maskiert) — Exit 0
Acceptance Criteria:
- Given einen Fixieren Git-State + feste Eingabemenge, when zwei unabhängige Runs ausgeführt werden, then produziert §5.14-Wortlaut identische Bundle-States bis auf die benannte
at-Ausnahme (FT-10, AD-17h, AC-1). - Given eine Abweichung bei zwei solchen Runs, when sie festgestellt wird, then wird sie als Fehler im AD-16-Klassifikations-Mechanismus behandelt und textuell benannt (nicht als akzeptables Rauschen) (AD-17h, AC-2).
- Given der MVP (D-3), when der Agent-Instruktions-Validator ausgeführt wird, then laufen die beiden Ausführungen in getrennten sauberen Worktrees und frischen Agent-Kontexten; eine zweite Ausführung in derselben Session genügt nicht (Q-6, A0-19; AC-3).
- Given das kanonische Eingabemanifest, when ein Run geplant wird, then hält es Baseline-Commit, geordnete Source-Eingaben und jeden im Bundle sichtbaren Run-/Zeit-/Identitätswert explizit fest; der Run-Receipt enthält Candidate-Liste, Reihenfolge, Plan, Entscheidungen und Output-Hashes außerhalb des Knowledge Bundle (AC-4).
- Given der Zwei-Run-Nachweis, when Pläne und Bundle-State verglichen werden, then dürfen weder erwartete Pläne noch Concept-Bodies hart codiert werden;
verified-Ereignisse werden niemals pauschal aus dem Vergleich maskiert (AC-5). - Given der Validator, when umgesetzt, then hält er keine Embedding-/Vector-Infrastruktur vor (AD-13; FT-3, FT-4; AC-4) und erzeugt keine eigene Runtime/kein neues Werkzeug (D-3, AD-11).
Spec Change Log
Review-Loop-1 (2026-08-20, Step-04)
Ergebnis: keine intent_gap / kein bad_spec; 0 Loopback. Review-Schicht 3 Subagenten (blind-hunter / edge-case-hunter / verification-gap, synchron); Triage: 14 Patch / 0 defer / Rest Reject (ausführliche Reject-Begründung im Story-Protokoll wiki/log.md). Alle Patches rein dokumentarischer Natur (Klarstellung/Verweis/Status); Semantik unverändert, keine neue Vertragsentscheidung.
Patch-Stapel (in dieser Runde angewandt):
- §3.2-Pkt.-1b (b): paketierte Kollaps-Klasse in der Operativ-Klausel auf die geschlossene
[-–— _]-Klasse angehoben; Verweis auf den Append-Block als maßgeblich (KEEP: die append-only-Schließung bleibt unverändert; der Operativ-Satz ist jetzt konsistent). - §3.2-Pkt.-2a: Match-Scope (ganze Wörter über den Body, exklusiv Frontmatter) in die operative Stufe-a-Formel gewirkt — Einzel-Term-Klausel + Mehrfach-Term-Vereinigung (Pkt. 1c) verdeutlicht; Body-Abgrenzung (nach der zweiten
----Zeile) bestimmt. - §3-Pkt.-2-Kandidatenliste (und damit §5.9-Worked Example): Stufe-a-Scope-Verweis ergänzt.
- §5.14-Pkt.-2: Zwei-Run-Abgleich als Vergleich der beiden Run-Ausgänge gegeneinander (nicht nur je Lauf gg. Baseline) verdeutlicht — Beispiel
git diff <Run-A> <Run-B>ergänzt. - §5.14-Pkt.-1-Intro: AD-3-Schutzliste um
adapters/ergänzt. - §5.10-Pkt.-8: die pre-existing-Orphan-Obligationsformulierung als vorbestehend markiert (Verweis auf die neue deterministische Regel unten; keine Staffelung an Story 3.8/Epi-4 mehr).
deferred-work.md: Bezugs-Eintrag-Nummern der Story-3.2-review-Defers korrigiert (Kollaps Eintrag 3 → 2; Match-Scope Eintrag 2 → 1).wiki/log.md: „8### Aufgegriffen-Blöcke" → „7### Aufgegriffen-Blöcke + 1### Aufgegriffen (teilweise)".sandbox-3-8/run-sandbox.sh: DET-2-at-Maskierungszweck als Kommentar klargestellt (belegt die Nicht-at-Bestandteile; at-Varianz demonstriert DET-4); DET-1-Demo-Kommentar (Kandidaten-/Form-Outputs als redaktionell verdichtete Run-Feststellungen).sprint-status.yaml: Key3-8-…→review(Review-Start-Flip; finalerdone-Flip im Step-05).spec-Frontmatter:status: 'in-review'(Review-Start per Step-04),review_loop_iteration: 0unverändert; SRO-Review-Loop-1-Hinweis ergänzt.
Rejected-Findings (Kurznotation, nicht Teil der Patches): Stufe-a-Formel-Änderung nicht nötig (die Formel rg -l/grep -rl + Scope-Klausel bleibt die Instruktionsform; die Wortgrenzen-/Frontmatter-Semantik reist über die Pkt.-2a-Klausel, nicht über ein Flag); DET-2-Plan-Literal (dev-demo, echte Content-Hashes decken; Kandidaten-Ableitung über DET-1/DET-8); DET-8-hardcodierter Verwaist-Befund (Mechanik textuell, Existenz-negativ-Kontrolle hart); §5.14-raw/-Input-Verdacht (Pkt.-1a nennt raw/-Zuwächse bereits explizit „als Input"); §5.14-„kommt erstellt der Diff" — keine Formel-Verschmelzung; DET-2-maskierte-at (Display-Maske, DET-4 behandelt Varianz); Log-Overcount (Patch 9, siehe oben); Umlaut-Aufschlag (behandelt als Patch-7-Fundament); Sprint-Last-Updated-Timing (Konvention); §3.2-„keine offene Frage"(Umlaut bleibt dokumentiert offen, Wortlaut angepasst).
Re-Open-Implementierung (2026-08-20, Step-03; genehmigtes Sprint-Change-Proposal 2026-08-20)
Neu-Verhandlung: _bmad-output/planning-artifacts/sprint-change-proposal-2026-08-20.md (approved, ProMods, explizite Chat-Freigabe) nimmt Story 3.8 aus review nach in-progress zurück und erweitert den Scope (Epics-Datei ACs Z. 357–370): getrennte saubere Worktrees + frische Agent-Kontexte (Q-6/A0-19), kanonisches Eingabemanifest, Run-Receipt außerhalb des Bundles, keine hart codierten erwarteten Pläne/Concept-Bodies, keine pauschale verified-Maskierung. Dieser Change-Log-Eintrag dokumentiert die Implementierung des Deltas: §5.14-Wortlaut (Zwei-Run-Mechanik auf Worktrees/Manifest/Receipt, Verbot von Hartcodes/pauschaler Maskierung), Sandbox DET-2 auf zwei Worktrees umgestellt. <frozen-after-approval>-Intent ausschließlich im Re-Open-Delta-Umfang angepasst; fehlendes Schließtag nach diesem Change Log ergänzt.
Design Notes
Warum §5.14 als eigene Sektion, nicht §6.5-Erweiterung? §6.5 ist die „Determinismus- & Selbsttest-Norm" mit drei Nachprüf-Kriterien (Vollständige §3-Subset-Konformität, at-Normalform, sources-Existenz) — die projektions-seitige Content-Prüfung je erzeugtem Concept. Der Determinismus-Vertrag (AD-17h/FT-10) ist die Cross-Run-Eigenschaft (zwei unabhängige Runs → gleicher Bundle-State), kein Einzel-Concept-Kriterium. §5.14 ist die geschlossene Verankerung dieser Cross-Run-Eigenschaft: (a) Bundle-State-Definition (welche Zustandsmenge ist „der Bundle-State" — die committete Baum-Projektion unter wiki//raw/ zzgl. Plan-/Kandidaten-/Reihenfolge-Outputs; generated.at als benannte Ausnahme), (b) Zwei-Run-Bestätigungs-Mechanik (agent-Instruktions-basiert; Re-Open-Stand: die beiden Ausführungen laufen in getrennten sauberen Worktrees mit frischen Agent-Kontexten über demselben committeten Git-State und vergleichen die Bundle-States; eine zweite Ausführung in derselben Session genügt nicht — Q-6/A0-19; unter kanonischem Eingabemanifest und mit Run-Receipt außerhalb des Bundles), (c) Ausnahme-Menge (allein generated.at-Wanduhr-Gap, dokumentiertes A0-20; Nichts sonst), (d) Abweichungs-Klassifikation (jede Differenz außerhalb der Ausnahme = AD-16-Klassifikationsfehler; textuell benannt NFR-4; kein stiller Vorbeilass). Damit ist die bisher „offen verankerte" AD-17h-Eigenschaft (viele Rückverweise, kein normativer Ort der Bestätigung) zu einem instruierten, mechanisch bestätigbaren Verfahren verdichtet.
Die Normalisierungs- und Match-Lücken werden deterministisch geschlossen, nicht nur notiert. Die Kollaps-Klasse in §3.2 Pkt. 1b ist [-–_ ] (En-Dash –, Bindestrich -, Unterstrich _, Leerzeichen) — der Em-Dash — fehlt (bekannte Story-3.2-Lücke mit Home Story 3.8). Die Schließung ist eine Ergänzung der Kollaps-Klasse um den Em-Dash ([-–— _] → -) sowie die Festlegung der Kollaps-Reichweite (jedes Vorkommen → genau ein -; führende/trailende Separatoren werden getrimmt — die bereits in der Sandbox etablierte Semantik) und des Match-Scope der Stufe a (Stufe-a-grep-matcht ganze Wörter über den Body, exklusive YAML-Frontmatter — rg -l '<term>' -g '!log.md' wiki/ erhält einen deterministischen Scope; Substring- und Frontmatter-Treffer werden ausgeschlossen). §5.10 Pkt. 8 (Orphan) erhält eine deterministische Reconcile-Orphan-Regel: neu committete raw/-Evidenz ohne Ziel-Pfad-Treffer bleibt unzugeordnet, wird in log.md als verwaist protokolliert (Datumsgruppe, <Baseline-Commit>), kein Banner/keine stille Vorbearbeitung. Diese Schließungen machen die relevanz-/synthese-seitigen Erhebungen über den committeten Zustand vollständig pinbar.
Die Sandbox (DET-1..DET-8, bash run-sandbox.sh, /tmp-Baum, Exit 0) demonstriert die Bestätigung mechanisch.
- DET-1 BUNDLE_STATE_DEFINITION: erzeugt ein Mini-Bundle, definiert/extrahiert die Bundle-State-Projektion (wiki/-Dateien + Plan-/Kandidaten-/Reihenfolge-Outputs) deterministisch
- DET-2 ZWEI_RUN_IDENTISCH (nicht-vakuum): zwei getrennte Worktrees mit frischen Agent-Kontexten (je ein eigener Lauf über demselben committeten Baum) → identische Bundle-States bis auf
at; unter kanonischem Eingabemanifest und mit Run-Receipt (Candidates, Reihenfolge, Plan, Entscheidungen, Output-Hashes) außerhalb des Bundles; die Assertion vergleicht echte Content-Hashes (nicht nur Vorhandensein); keine hart codierten erwarteten Bundle-Outputs,verifiednicht pauschal maskiert (nur die benannteat-Ausnahme) - DET-3 ZWEI_RUN_ABWEICHUNG: künstlich divergenter Lauf → wird als AD-16-Klassifikationsdefekt klassifiziert und textuell benannt (kein Rauschen)
- DET-4 AT_GAP_AUSNAHME: zeigt, dass
generated.at-Wanduhr-Gap die einzige benannte Ausnahme ist (übrige Teile byte-identisch) - DET-5 EM_DASH: Term mit Em-Dash
—normalisiert auf dieselbe canonische Form wie En-Dash/Bindestrich/Unterstrich/Leerzeichen - DET-6 KOLLAPS: Läufe (
a--b), führende (-x), trailende (x-) → Kollaps auf genau ein-+ Trim - DET-7 MATCH_SCOPE: Stufe-a-matcht ganze Wörter über Body, exklusive Frontmatter (Substring-/Frontmatter-Treffer ausgeschlossen)
- DET-8 ORPHAN: neu committete Evidenz ohne Ziel-Pfad-Treffer → unzugeordnet,
log.md-verwaist protokolliert, kein Banner/keine Mutation
(Code-/Zahlgenauigkeiten: Szenario-Labels sind Fixierung der I/O-Matrix; die Implementierung trägt die harten Assertionen in der Sandbox.)
Verification
Commands (re-executierbar, ab Workspace-Root):
bash _bmad-output/implementation-artifacts/sandbox-3-8/run-sandbox.sh— expected: DET-1..DET-8 harte PASS/Fail (Re-Open-Stand: DET-2 in zwei getrennten Worktrees mit frischen Kontexten, Manifest + Receipt außerhalb des Bundles, keine hart codierten Bundle-Outputs,verifiednicht pauschal maskiert), Zwei-Run-Identität nicht-vakuum, Exit 0.grep -n "§5.14\|Revision 3.3" schema/compiler.md— liefert §5.14-Sektion + Revisionslog-Eintrag;grep -n "Determinismus-Vertrag & Agent-Instruktions-Validator" schema/compiler.md— die §5.14-Überschrift wortgleich (inkl. §5.13-Seam-Satz in §5.14-Intro).- Read-only (AD-3):
git status --porcelainzeigt keinen Change anschema/validator.md/schema/wiki-compiler.md/adapters//raw/.schema/canonical-terms.mdunverändert (append-only-Registry unangetastet). - Validator-Lauf: alle
wiki/-Dateien SUCCESS (unverändert, keine Inhalts-Mutation). - Auf den
wiki/-Scope begrenzt (git status --porcelain -- wiki/): ausschließlichwiki/log.md(dieser Eintrag) — Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt;sprint-status.yaml/deferred-work.md/sandbox-3-8/liegen außerhalbwiki/und sind nicht Teil der Diff-Probe.
Zu beachten (beim step-04-Review): (a) §0-Phasen-Listentext, §5.13-Phasen-Disziplin und §6/§6.5 müssen textuell unverändert bleiben — §5.14 verweist auf sie (Fugen-Identität); (b) der generated.at-Wanduhr-Gap bleibt verhaltens-seitig unverändert (A0-20-Konvention); §5.14 definiert nur seine Behandlung im Bundle-State-Vergleich (Ausnahmemenge) — ein Wechsel des generated.at-Verhaltens wäre Ask-First; (c) die vorhandene §8-Revisionslog-Nummer ist 3.2 (Story 3.7); Revision 3.3 ist für Story 3.8 frei (grep-verifiziert: keine 3.3 im Revisionslog); (d) kein neuer §7-Bullet ersetzt einen bestehenden — der Determinismus-Bullet wird ergänzt (Verankerungs-Verweis), die bestehenden Story-Bullets bleiben unverändert; (e) Re-Open-Delta (§5.14): die Zwei-Run-Mechanik nutzt getrennte saubere Worktrees + frische Agent-Kontexte (Q-6/A0-19), ein kanonisches Eingabemanifest und einen Run-Receipt außerhalb des Bundles — keine hart codierten erwarteten Bundle-Outputs, keine pauschale verified-Maskierung (nur at-Ausnahme); die alte Formulierung „in einer Session" ist entfernt.
Suggested Review Order
§5.14-Determinismus-Vertrag (Kern, Einstieg)
- compiler.md:365 — §5.14-Überschrift, Intro mit §5.13-Seam und AD-3-Schutzliste inkl.
adapters/. - compiler.md:369 — Pkt. 1 Bundle-State-Definition: committete Baum-Projektion,
generated.atals benannte Ausnahme (A0-20), FT-10/AD-17h/AC-1. - compiler.md:370 — Pkt. 2 Zwei-Run-Bestätigungs-Mechanik: zweimal über denselben committeten Git-State, Run-A↔Run-B-Abgleich (Beispiel
git diff), keine Wanduhr-Steuerung. - compiler.md:374 — Pkt. 3 Ausnahme-Menge: allein der
generated.at-Wanduhr-Gap; alle übrigen Bestandteile byte-identisch (kein stiller Ausschluss). - compiler.md:375 — Pkt. 4 Abweichungs-Klassifikation: jede Differenz außerhalb der Ausnahme = AD-16-Klassifikationsdefekt, kein Rauschen (NFR-4, Zustands-Restaurations-Invariante).
- compiler.md:376 — Pkt. 5 Normalisierungs-/Match-/Orphan-Schließung: Verankerung auf §3.2-Pkt.-1b / §5.10-Pkt.-8, Erhebungen vollständig pinbar.
§3.2/§5.10-Lückenschließung (deterministische Regel-Ergänzungen)
- compiler.md:54 — §3.2-Pkt.-1b „Geschlossene Determinismus-Lücken": Em-Dash-Kollaps-Klasse
[-–— _], Kollaps-Reichweite (ein-+ Trim), Match-Scope Stufe a (ganze Wörter, Body-exklusiv). - compiler.md:56 — §3.2-Pkt.-2a operative Stufe-a-Mechanik:
rg -l/grep -rl-Sweep + deterministischer Scope-Filter (zweistufig, tool-portabel), Mehrfach-Term-Vereinigung. - compiler.md:302 — §5.10-Pkt.-8 Erhaltungs-Invariante & Determinismus-Vertrag: Reconcile-Orphan-Regel (Zuwachs gg. Baseline, datumsgruppierter
log.md-Eintrag, kein Banner, AD-16-Default).
§7/§8-Nachweis
- compiler.md:476 — Revisionslog Revision 3.3: §5.14-Verankerung, §7-Determinismus-Vorbehalt aufgelöst, §8-AD-17h-Normreferenz auf §5.14-Anker, Abschlussklausel (AD-3/D-3/keine neue §7-Klasse).
Sandbox-Beweis (mechanische Bestätigung)
- run-sandbox.sh:152 — DET-1..DET-8-Szenarien (Bundle-State, Zwei-Run-identisch nicht-vakuum, Zwei-Run-Abweichung,
at-Gap, Em-Dash, Kollaps, Match-Scope, Orphan); Läufe Exit 0 mit 8 harten PASS-Assertionen.
Story-Protokoll/Defers (Peripherie, zuletzt)
- log.md:4 — Story-3.8-Eintrag: Verankerung, Sandbox-Nachweis, Erhaltungs-Invariante, Validator-Verdikt; Revision 3.3.
- deferred-work.md:492 — aufgegriffene/geschlossene „Home: Story 3.8"-Defers (7
### Aufgegriffen+ 1### Aufgegriffen (teilweise), append-only ab Zeile 492). - sprint-status.yaml:61 — Key
3-8-determinismus-…aufreview(Review-Start-Flip Step-04);done-Transition im Step-05.