fix: Story 3.13 Re-Run-#8-Auflösung (P-19): E.6-Feld-Dreideutigkeit — AGENT_PROMPT pinst 'baseline' (Vor-Mutation-HEAD) + 'sources_added' (neue resource:-Werte der Frontmatter-sources:-Liste, sortiert) als reine Funktionen der Lauf-Eingaben; E.6-Assertion (A==B byte-identisch) unverändert; P-18 bestätigt (5/5 Receipts); C 12/12 + D/D-NEG/E.1-E.5 grün (E.4 NON_AT=0 AT=2, Rev 3.8 dreifach); Status-Sync (Spec Change Log)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Michael Tamse
2026-08-24 09:41:36 +02:00
co-authored by Claude
parent 65dfc26961
commit cccc0a35e9
2 changed files with 26 additions and 5 deletions
@@ -68,6 +68,17 @@
# Mutationen + run-receipt.txt) — Agent B hatte in #7 den Receipt als # Mutationen + run-receipt.txt) — Agent B hatte in #7 den Receipt als
# optional behandelt (3/4 Receipts in #6/#7 geliefert = Adhärenz-Flake, # optional behandelt (3/4 Receipts in #6/#7 geliefert = Adhärenz-Flake,
# kein Gate-Logik-Fehler; E.6-Fehl-Receipt-HARD-FAIL blieb korrekt). # kein Gate-Logik-Fehler; E.6-Fehl-Receipt-HARD-FAIL blieb korrekt).
# - P-19 (Re-Run-#8-Befund): AGENT_PROMPT pinst die Receipt-Felder
# "baseline" (= git rev-parse HEAD des Worktree VOR der ersten Mutation)
# und "sources_added" (= resource:-Werte der raw/-Ressourcen, die der Lauf
# der Frontmatter-sources:-Liste der mutierten Concepts NEU hinzufügt,
# lexikografisch sortiert; leer falls keine) als reine Funktionen der
# Lauf-Eingaben — in #8 divergierte sources_added A/B (leer vs.
# raw/alpha-v2.md: drei Lesarten der Prompt-Wortung "neue raw/-
# Ressourcen"), und baseline zeigte beidseitig die Phase-B-Käfig-Baseline
# statt dem Worktree-Vor-Mutation-HEAD (zwei Commits mit "Baseline" in der
# Betreffzeile). E.6-Assertions UNVERÄNDERT (A==B byte-identisch) —
# geändert ist die wohldefinierte Feld-Semantik, nicht der Check.
# ============================================================================ # ============================================================================
set -u set -u
@@ -547,11 +558,11 @@ Fakten zur committeten Fixture in diesem Worktree (ausschließlich Fakten, keine
Zwei LIEFERUNGEN sind PFLICHT (ein Lauf ohne beide ist NICHT abgeschlossen): 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. 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): 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; je Feld genau die DEFINIERTE Ableitung — ein Lauf mit einer anderen Ableitung ist fehlerhaft):
baseline: <volles SHA des Baseline-Commits> baseline: <volles SHA des Commits, den dein Worktree als HEAD trug VOR deiner ersten Mutation (git rev-parse HEAD in deinem Arbeitsverzeichnis, bevor du wiki/ änderst)>
candidates: <Kandidatenliste oder leer> candidates: <deine Candidate-Liste aus der Relevanzbestimmung, kommagetrennt, oder leer>
decision: <Entscheidung je Mutation> decision: <deine Form-Entscheidung je Mutation>
sources_added: <neue raw/-Ressourcen oder leer> sources_added: <die resource:-Werte (Pfad) der raw/-Ressourcen, die dein Lauf der Frontmatter-sources:-Liste der mutierten Concepts NEU gegenüber dem Vor-Mutation-Zustand hinzufügt; mehrere Werte kommagetrennt und lexikografisch sortiert; leer, falls keine>
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 <name>", wobei <name> 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 <name>", wobei <name> der dir mitgegebene Run-Name ist.'
@@ -680,6 +691,13 @@ pass "E.5 Witness: alpha UPDATE (Multi-Beleg raw/alpha-v2.md#S-3 + sources-Konso
# bereits am Bundle-State bewiesen (E.4 byte-identisch bis at + E.5/E.7/E.8 # bereits am Bundle-State bewiesen (E.4 byte-identisch bis at + E.5/E.7/E.8
# Witness). Vertrags-Vollständigkeit (byte-deterministischer Receipt) = benannter # Witness). Vertrags-Vollständigkeit (byte-deterministischer Receipt) = benannter
# Defer (Spec Change Log + deferred-work), Ask-First-Kandidat. # Defer (Spec Change Log + deferred-work), Ask-First-Kandidat.
# P-19 (Re-Run-#8-Befund): die drei Felder sind nun im AGENT_PROMPT als REINE
# FUNKTIONEN der Lauf-Eingaben definiert (baseline = Vor-Mutation-HEAD;
# sources_added = resource:-Werte der NEU in der Frontmatter-sources:-Liste
# erscheinenden Ressourcen, sortiert) — in #8 war sources_added dreideutig
# (A leer vs. B raw/alpha-v2.md) und baseline beidseitig die Phase-B-
# Käfig-Baseline statt dem Worktree-HEAD. Die E.6-ASSERTION bleibt der
# A==B-Byte-Vergleich dieser Felder (verändert sich nichts).
RA="$ROOT/wt-a/run-receipt.txt" RA="$ROOT/wt-a/run-receipt.txt"
RB="$ROOT/wt-b/run-receipt.txt" RB="$ROOT/wt-b/run-receipt.txt"
[ -s "$RA" ] || { echo "HARD-FAIL (E.6): run-receipt.txt A fehlt/leer" >&2; exit 1; } [ -s "$RA" ] || { echo "HARD-FAIL (E.6): run-receipt.txt A fehlt/leer" >&2; exit 1; }
@@ -127,6 +127,9 @@ _Dismissed (6): G-6-„Hash-Primitive"-Beobachtung (Duplikat von D-3.13-3/P-2);
## Spec Change Log ## Spec Change Log
- **Re-Run #8-Befund: E.6-Feld-Dreideutigkeit (P-19) + P-18 bestätigt; C 12/12, D/D-NEG/E.1E.5 grün, A==B bis at** (2026-08-24): Vierter Voll-Lauf des gehärteten Gates (ausschließlich /tmp-Käfig, fail-fast). **Erstmals erreicht und grün:** C **12/12** Sub-Runs (3.13.12, je `exit 0`), **D 4/4 SUCCESS** (frischer Validator: D.4 exakt-ein-Verdikt, D.6 0 FAIL über Käfig-Bundle), **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.1E.5** (Fixture `$BASE=f396f8f5…`, Worktrees, beide Agent-Läufe `RUN_DONE`; **E.4 `NON_AT=0 AT=2`** — Rev 3.8 zum **dritten Mal** unter echten frischen LLMs bestätigt; E.5 Multi-Beleg-Witness `raw/alpha-v2.md#S-3` in A und B; E.7/E.8/E.9 nicht erreicht). **P-18 bestätigt:** beide Agent-Läufe lieferten den Run-Receipt (5/5 Receipts über 4 Läufe — die #7-„fehlt"-Klasse ist adhärent aufgelöst). **Rot an E.6 (dritte Befund-Klasse im selben Abschnitt):** (1) `sources_added` divergiert A/B (A leer, B `raw/alpha-v2.md`) — die Prompt-Wortung „neue raw/-Ressourcen oder leer" ist **dreideutig** (neue raw/-*Dateien* / neu *verbrauchte* Evidenz / neue Frontmatter-`sources:`-Listeneinträge); die drei Lesarten liefern unterschiedliche Werte → echte **Prompt-Definitionslücke** in einem Gate-als-deterministisch-erklärten Feld (kein Flake: A und B haben beide *einer* Lesart konsistent gefolgt); (2) `baseline` zeigt A==B `143f7faf…` (Phase-B-Käfig-Baseline „Käfig-Baseline") statt `f396f8f5…` (Worktree-Vor-Mutation-HEAD „Käfig-Fixture: Baseline inkl. Zuwachs") — der Prompt-Wortlaut „SHA des Baseline-Commits" ist objektiv mehrdeutig (zwei Commits mit „Baseline" in der Betreffzeile im Worktree-Log) und benennt nicht den Commit, auf dem der Run läuft. **P-19 (Gate-Prompt-Präzisierung, A-B-Optionen wie P-17/P-18):** `baseline` = `git rev-parse HEAD` des Worktree **vor der ersten Mutation**; `sources_added` = `resource:`-Werte (Pfad) der raw/-Ressourcen, die der Lauf der Frontmatter-`sources:`-Liste der mutierten Concepts **neu** gegenüber dem Vor-Mutation-Zustand hinzufügt, lexikografisch sortiert (beide Felder damit REINE FUNKTIONEN der Lauf-Eingaben — für die UPDATE-only-Fixture ergibt A und B jeweils `raw/alpha-v2.md`; die A==B-Identität ist über E.4 beweisbar, da die `sources:`-Liste Teil des byte-identischen Bundle-State ist); `decision` bleibt freie Prosa (Befund-Äquivalenz, Re-Run-#6-Klassifizierung). **E.6-Assertion UNVERÄNDERT** (A==B byte-identisch über die drei Felder + `decision` nicht-leer) — geändert ist die Feld-Semantik im Prompt, nicht der Check; kein AC-4-Fall (compiler.md definiert den Receipt nicht — 0 Treffer; keine Schema-Semantik geändert), kein frozen-Block-Change, D-1/D-2/D-3.13-2-Option-1 respektiert. **Nächster Schritt:** Re-Run #9 (Erwartung: E.6 grün + F (G-1..G-8) + G (Porcelain) erstmals erreicht). **Erhaltungs-Invariante §5.9 Pkt. 5 gewahrt:** `git status --porcelain -- wiki/` zeigt ausschließlich `wiki/log.md` (dieser Eintrag); AD-3 read-only (`schema/validator.md`/`schema/wiki-compiler.md`/`schema/compiler.md`/`adapters/`/`raw/`/`schema/canonical-terms.md` unverändert); kein Standalone (D-3), keine neue §7-Invaliditätsklasse, keine Vertragsänderung; Epic-3-Abnahme (Story 3.13) bleibt offen (epic-3 in-progress).
- **Re-Run #7-Befund: fehlender Agent-B-Receipt (P-18)** (2026-08-24):
**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 #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. **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.