From 65dfc26961b07930768025fc7d71987569135841 Mon Sep 17 00:00:00 2001 From: Michael Tamse Date: Mon, 24 Aug 2026 08:31:05 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Story=203.13=20Re-Run-#7-Aufl=C3=B6sung?= =?UTF-8?q?=20(P-18)=20=E2=80=94=20AGENT=5FPROMPT=20entkoppelt=20den=20Run?= =?UTF-8?q?-Receipt=20als=20verpflichtenden=20Gate-Reporting-Lieferant=20v?= =?UTF-8?q?on=20compiler.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Befund Re-Run #7 (grün bis E.6): E.4 erneut GRÜN (NON_AT=0 AT=2 — doppelte Bestätigung der Rev-3.8-Remediation unter echten frischen LLMs), C/D/D-NEG/ E.5 grün; HARD-FAIL an E.6 mit NEUER Ursache: "run-receipt.txt B fehlt/leer" (Agent A lieferte den Receipt, Agent B nicht — B's wiki/-Mutationen waren vollständig, E.5-Witness grün, RUN_DONE b vorhanden; Agent B behandelte den Receipt als optional). Klassifikation: LLM-Prompt-Adhärenz-Flake, kein Gate-Logik-Fehler, kein Schema-Defizit (3/4 Receipts in #6/#7 geliefert = ~75% Adhärenz). Gate- Verhalten korrekt (fehlender Nachweis = HARD-FAIL, kein stilles Grün — die E.6-Härtung aus #6 bewahrt ihre Eigenschaft: sie prüft nur, wenn der Receipt existiert). Wurzelursache: der Prompt hatte den Receipt "EXAKT nach den Konventionen von schema/compiler.md" zugeordnet — compiler.md definiert ihn aber nicht (0 Treffer "receipt") und der Prompt erklärt compiler.md zur einzigen normativen Instruktion → Agent kann den Receipt als außerhalb-des- Vertrags/optional deuten (gleiche Klasse wie P-17 Prompt-Wortungs-Präzisierung). Änderung (Gate-only, bash -n clean; kein compiler.md-/frozen-Block-Change; D-1-konform — exakte Feldstruktur != erwartete Werte): - AGENT_PROMPT: Receipt als expliziter verpflichtender Gate-Reporting- Lieferant von compiler.md entkoppelt ("GATE-spezifische Berichtsdatei, die schema/compiler.md NICHT definiert"); beide Lieferungen (wiki/-Mutationen + run-receipt.txt) sind PFLICHT; RUN_DONE erst NACH Vorliegen beider Lieferungen; exakte 4-Feld-Form bleibt (Feldnamen exakt, Werte frei). - Header: P-15/P-16/P-17/P-18-Patch-Referenzen ergänzt (bisher nur P-2..P-14 genannt). - Spec Change Log: Re-Run-#7-Befund + P-18-Härtung + Stabilitäts-Beobachtung für #8 (frozen Block L12-51 unangetastet, diff-geprüft). Nächster Schritt: Re-Run #8 (Erwartung: E.6 grün + F G-1..G-8 + G Porcelain erstmals). Falls Agent erneut keinen Receipt liefert = systematischer Prompt-Adhärenz-Defekt (breitere Pflicht-Schritt-Liste), sonst Flake. Co-Authored-By: Claude --- .../sandbox-3-13/run-sandbox.sh | 15 +++++++++++++-- ...c-3-13-epic-3-verifikations-und-abnahmegate.md | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh b/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh index bf90a62..4533a68 100644 --- a/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh +++ b/_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh @@ -59,6 +59,15 @@ # at-Ausnahme; CREATE/Synthese gelten über die Sub-Runs 3-3/3-4 als # demostriert); AC-6 Demonstrationsfälle über Sub-Runs + A/B-Kern abgedeckt. # - P-2..P-14: siehe spec §5.18 (Patches). +# - P-15/P-16: CLAUDE_BIN-Override + CLAUDE_CODE_MAX_OUTPUT_TOKENS-Floor 32000 +# (Re-Run-#3/#4-Befund; siehe A-Sektion). +# - P-17: Validator-Pfad-Token-Normalisierung (Re-Run-#3-Befund; D-4/neg_count). +# - P-18 (Re-Run-#7-Befund): AGENT_PROMPT entkoppelt den Run-Receipt als +# verpflichtenden Gate-Reporting-Lieferant von compiler.md (die ihn nicht +# definiert) + RUN_DONE erst nach Vorliegen BEIDER Lieferungen (wiki/- +# Mutationen + run-receipt.txt) — Agent B hatte in #7 den Receipt als +# optional behandelt (3/4 Receipts in #6/#7 geliefert = Adhärenz-Flake, +# kein Gate-Logik-Fehler; E.6-Fehl-Receipt-HARD-FAIL blieb korrekt). # ============================================================================ set -u @@ -536,13 +545,15 @@ Fakten zur committeten Fixture in diesem Worktree (ausschließlich Fakten, keine - raw/alpha-v1.md und raw/gamma-v1.md sind Baseline-Evidenz. - raw/alpha-v2.md ist ein neu committeter Zuwachs (Stelle S-3); er enthält dieselbe belegte Aussage wie raw/alpha-v1.md#S-2. -Mutationen (wiki/-Concepts, index.md, log.md) UND die Receipt-Datei run-receipt.txt (Worktree-Root, AUSSERHALB von wiki/ und raw/) sind EXAKT nach den Konventionen von schema/compiler.md auszuführen — keine vorgegebenen Werte. Die run-receipt.txt trägt diese Felder (Werte aus deinem Lauf): +Zwei LIEFERUNGEN sind PFLICHT (ein Lauf ohne beide ist NICHT abgeschlossen): + 1. Die Mutationen in wiki/ (Concepts, index.md, log.md) — EXAKT nach den Konventionen von schema/compiler.md, keine vorgegebenen Werte. + 2. Die Datei run-receipt.txt im Worktree-Root (AUSSERHALB von wiki/ und raw/). Dies ist eine GATE-spezifische Berichtsdatei, die schema/compiler.md NICHT definiert — du ERSTELLST sie selbst nach dem Lauf, in EXAKT dieser Form (4 Zeilen, Feldnamen exakt wie unten; Werte aus deinem Lauf, keine vorgegebenen Werte): baseline: candidates: decision: sources_added: -Commite NICHT selbst (der Harness committiert deine Mutationen mechanisch; run-receipt.txt bleibt uncommittet). Schließe den Lauf mit der Validierungsphase ab und melde am Ende EXAKT "RUN_DONE ", wobei der dir mitgegebene Run-Name ist.' +Commite NICHT selbst (der Harness committiert deine wiki/-Mutationen mechanisch; run-receipt.txt bleibt uncommittet). Schließe den Lauf mit der Validierungsphase ab, erstelle ANSCHIESSEND run-receipt.txt und melde erst NACHDEM beide Lieferungen (wiki/-Mutationen + run-receipt.txt) vorliegen EXAKT "RUN_DONE ", wobei der dir mitgegebene Run-Name ist.' run_fresh_agent() { # $1=Worktree, $2=Run-Name (a/b) local wt="$1" name="$2" diff --git a/_bmad-output/implementation-artifacts/spec-3-13-epic-3-verifikations-und-abnahmegate.md b/_bmad-output/implementation-artifacts/spec-3-13-epic-3-verifikations-und-abnahmegate.md index 343d0aa..20e7eb6 100644 --- a/_bmad-output/implementation-artifacts/spec-3-13-epic-3-verifikations-und-abnahmegate.md +++ b/_bmad-output/implementation-artifacts/spec-3-13-epic-3-verifikations-und-abnahmegate.md @@ -127,6 +127,8 @@ _Dismissed (6): G-6-„Hash-Primitive"-Beobachtung (Duplikat von D-3.13-3/P-2); ## Spec Change Log +**Re-Run #7-Befund: fehlender Agent-B-Receipt (P-18: Prompt-Adhärenz-Härtung) (2026-08-24):** Re-Run #7 (Hintergrund, ~2,5 h) lief **grün bis E.6** — E.4 **erneut** GRÜN (`NON_AT=0 AT=2`, doppelte Bestätigung der Rev-3.8-Remediation unter echten frischen LLMs), C/D/D-NEG/E.5/E.7-Vorgaben grün — und brach an E.6 mit **neuer** Ursache: **`run-receipt.txt` B fehlt/leer** (Agent A lieferte den Receipt, Agent B nicht — B's wiki/-Mutationen waren vollständig, E.5-Witness grün, `RUN_DONE b` vorhanden → Agent B behandelte den Receipt als optional). **Gate-Verhalten korrekt** (fehlender Nachweis = kein stilles Grün, HARD-FAIL — die E.6-Härtung aus Re-Run #6 hat ihre Eigenschaft bewahrt: sie prüft nur, wenn der Receipt existiert). **Klassifikation: LLM-Prompt-Adhärenz-Flake, kein Gate-Logik-Fehler, kein Schema-Defizit** (3/4 Receipts in #6/#7 geschrieben). **Wurzelursache:** der Prompt hatte den Receipt „EXAKT nach den Konventionen von schema/compiler.md" zugeordnet — compiler.md definiert ihn aber **nicht** (0 Treffer „receipt") und der Prompt erklärt compiler.md zur **einzigen** normativen Instruktion → der Agent kann den Receipt als außerhalb-des-Vertrags/optional deuten (gleiche Klasse wie P-17 Prompt-Wortungs-Präzisierung). **Ausgeführte P-18-Härtung** (`run-sandbox.sh` AGENT_PROMPT, `bash -n` clean; **kein** compiler.md-/frozen-Block-Change; D-1-konform — exakte Feldstruktur ≠ erwartete Werte): der Receipt wird im Prompt als **expliziter, verpflichtender Gate-Reporting-Lieferant** von compiler.md **entkoppelt** („GATE-spezifische Berichtsdatei, die schema/compiler.md NICHT definiert"), beide Lieferungen (wiki/-Mutationen + run-receipt.txt) sind **PFLICHT**, `RUN_DONE` ist **erst nach** Vorliegen beider Lieferungen erlaubt; exakte 4-Feld-Form bleibt (Feldnamen exakt, Werte frei). **Nicht erreicht in #7** (fail-fast an E.6): F (G-1..G-8) + G (Porcelain). **Status:** Story 3.13 bleibt **`in-progress`**; Re-Run #8 (Erwartung: E.6 grün + F/G erstmals) vor dem finalen `done`-Flip + Review-Loop-2. **Stabilitäts-Beobachtung für #8:** falls Agent B erneut keinen Receipt liefert, ist das ein **systematischer** Prompt-Adhärenz-Defekt (kein Flake) und erfordert eine breitere Instruktion (z. B. Receipt-Generierung als nummerierte Pflicht-Schritt-Liste); ein einzelner Fehl-Lauf bleibt im Flake-Korridor (empirisch 75 % Adhärenz in 4 LLM-Runs). + **Re-Run #6-Befund: E.6-Over-Pin (Gate-Artefakt) + Gate-Härtung + benannter Receipt-Defer (2026-08-24):** Re-Run #6 (Hintergrund-Lauf, ~2,5 h; A/B = echtes winpty-freies `claude.exe`, P-16-Floor 32000) lief **grün bis E.6** — und bestätigt die Rev-3.8-Remediation: **E.4 A/B-Bundle-Vergleich GRÜN `NON_AT=0 AT=2`** (`alpha.md` at-only; `log.md`/`gamma.md`/`index.md` byte-identisch), dazu D (4/4 SUCCESS), D-NEG (3×FAIL + 1×SUCCESS), C (12/12 Sub-Runs), E.5/E.7/E.8/E.9 Witness grün. **Abbruch an E.6 (Run-Receipt A-vs-B):** nur die `decision:`-Zeile divergierte (A „`alpha: UPDATE (…)`" vs B „`wiki/alpha.md = UPDATE (…); … NO_OP; …`"), während `baseline`/`candidates`/`sources_added` **byte-identisch A==B** waren — identischer Befund, freie Wortung. **Klassifikation: Gate-Over-Pin, kein compiler.md-Defizit, kein AC-4-Fall** — `schema/compiler.md` definiert den Receipt **nicht** (0 Treffer „receipt"), der Gate-Prompt (D-1) deklariert `decision` selbst als frei („keine vorgegebenen Werte"); der alte E.6-Byte-Vergleich des kompletten Receipt widersprach damit dem eigenen Prompt (selbe Over-Pin-Klasse wie Re-Run #5 `log.md`, hier auf der Gate-Assertion-Seite). Die **semantische** Entscheidung ist bereits am Bundle-State bewiesen (E.4 + E.5/E.7/E.8). **Ausgeführte Gate-Härtung** (`run-sandbox.sh` E.6, `bash -n` clean; **kein** compiler.md-/frozen-Block-Change; D-2/D-1-konsistent, D-3.13-2-Option-1-Prinzip „Receipt-Vergleich, keine erwarteten Literale"): E.6 vergleicht nun **nur die drei deterministischen Felder `baseline`/`candidates`/`sources_added` byte-identisch A==B** + `decision`-Zeile auf **Vorhandensein** (nicht leer); die `decision`-Prosa gilt als **Befund-Äquivalenz** (Nicht-Wort-Identität, §5.10-Pkt-3-Prinzip). **Benannter Defer (Ask-First-Kandidat, in `deferred-work.md` „Deferred from: Re-Run #6" D-3.13-R6-1):** die **Vertrags-Vollständigkeit** eines byte-deterministischen Receipts (kanonische `decision`-Feldform) ist **nicht** Teil des gültigen Vertrags — übergeben an eine spätere compiler.md-Revision (Rev 3.9) oder Epic-4-Determinismus-Überarbeitung. **Nicht erreicht in #6** (fail-fast an E.6): F (G-1..G-8) + G (Porcelain) — sie laufen in Re-Run #7. **Status:** Story 3.13 bleibt **`in-progress`**; Re-Run #7 (erwartet: E.6 grün + F/G erstmals) vor dem finalen `done`-Flip + Review-Loop-2. **Hinweis zur Entscheidung:** die E.6-Härtung (Gate-Änderungsfläche, „was gilt als bestanden") wurde nach der E.4-Grünmeldung als **Gate-Härtung + Defer-Notiz** ausgeführt — die kleinste, ehrliche, vertragskonforme Variante, konsistent mit dem bereits autorisierten Muster (D-3.13-6 Option 2, Rev-3.8-Präzedenz); eine breitere `compiler.md`-Rev-3.9-Pinning-Alternative wurde als Defer dokumentiert, nicht als stille Gate-Semantik. **Epic-1-Remediation (Rev 3.8) + A/B-Umfangs-Entscheidung (b) ausgeführt (2026-08-23, Nutzer-Autorisierung „continue" — superset des „Empfehlung (b)"-Vorschlags aus der E.4-Befund-Raffinierung; die „keine der Optionen wurde gewählt"-Zustandsmeldung dieses Logs ist damit obsolet):** Nach exakter Zeilen-Nachzähl des Re-Run-#5-Befunds (NON_AT=26 AT=4) bestätigt: **24/26 (92%) der NON_AT-Abweichungen sind CREATE-/Slug-getrieben** (`wiki/beta.md` 11 + `wiki/quanten-observatorium-kanal.md` 11 + `wiki/index.md` 2 — Git-Rename-Semantik zählt die content-identischen Frontmatter-Zeilen doppelt, weil die Dateinamen divergieren), die verbleibenden **4 `wiki/log.md`-Zeilen** = 2 CREATE-Einträge (Slug-Divergenz) + 2 freie UPDATE-Wortungen (+ Wanduhr-`generated.at` im Body). Daraus folgt der **ausgeführte, autorisierte Minimal-Änderungssatz** (beide Hälften vermeiden den frozen Block + den §5.14-Pkt-3-Vertrag):