Files
wow20/_bmad-output/implementation-artifacts/compiler-revision-3-8-autorisationsrunde-create-slug-log-determinismus.md
T
Michael TamseandClaude 2a9fa89f8a docs: Story 3.13 Status-Sync nach Rev-3.8-Ausführung (Spec Change Log + Design Notes + Autorisierungs-Träger §0.1)
Spec-3-13:
- Neues Spec-Change-Log-Top-Eintrag: Epic-1-Remediation (Rev 3.8) +
  A/B-Umfangs-Entscheidung (b) ausgeführt (24/26 NON_AT CREATE-getrieben;
  Minimal-Änderungssatz: (1) CREATE-Kern aus A/B-Fixture, (2) log.md-Pin).
- Design Notes: Allowance-Zeile auf alpha-UPDATE-Witness (raw/alpha-v2.md#S-3)
  umgestellt; Fixture-Beschreibung = 3-12-Muster OHNE CREATE-Kandidat
  (D-3.13-6 Option 2; index/gamma unverändert, IDX_ADDED=0).
- Frozen-Block L12-51 + GENERATED_AT_AUSNAHME-Zeile UNBERÜHRT (diff-geprüft).

Autorisierungs-Träger (compiler-revision-3-8-...):
- §0.1 Ausführungsstatus: B2 (log-Pin) + A/B-Umfang (b) = ANGEWENDET (Rev 3.8,
  Commit 7c3c19b); B1 (Slug) = offener Defer/Ask-First-Kandidat; C (Body-Byte)
  = zurückgewiesen (FR-2-Verstoß). Original-Entwurfstext als historische
  Entscheidungsgrundlage erhalten.

Status: Story 3.13 bleibt in-progress; finaler done-Flip + Review-Loop-2
erfolgen nach grünem Re-Run #6 (Step-05-Status-Sync).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 06:04:04 +02:00

17 KiB
Raw Blame History

title, status, date, owner, related
title status date owner related
Arbeitsauftrag — compiler.md Rev 3.7 → 3.8 (Epic-1-Remediation, Story 3.13): CREATE-Slug + log-Determinismus-Patch AUSGEFÜHRT (Teilumsetzung) — B2 (log-Pin) + A/B-Umfang (b) angewendet, Rev 3.8 committet; B1 (Slug) = offener Defer; C (Body-Byte) = zurückgewiesen (FR-2). Siehe §0.1 Ausführungsstatus. 2026-08-23 ProMods spec-3-13-epic-3-verifikations-und-abnahmegate.md, spec-3-8-determinismus-vertrag-ad-17h-als-agent-instruktions-validato.md, deferred-work.md

Arbeitsauftrag — compiler.md Rev 3.7 → 3.8 (Epic-1-Remediation, Story 3.13)

Stellenwert: Dies ist der Autorisierungs-Träger der separat autorisierten Epic-1-Remediation (AC-4-Pfad; Präzedenz Validator-Rev-8/9, AD-3-Compliance: keine stille Schema-Semantik-Änderung durch das Gate).

0.1 Ausführungsstatus (2026-08-23, Nutzer-Autorisierung „continue" — superset des §0-Empfehlungs-Vorschlags (b))

Dieser Entwurf legte drei Bausteine fest: B1 (CREATE-Slug-Signal), B2 (log-Determinismus), C (CREATE-Body-Byte-Residual, an die A/B-Umfangs-Entscheidung (a)/(b)/(c)/(d) gebunden). Nach der exakten Zeilen-Nachzähl des Re-Run-#5-Befunds (NON_AT=26 AT=4; 24/26 = 92 % CREATE-/Slug-getrieben) und der Nutzer-Autorisierung („continue" auf den empfohlenen Minimal-Änderungssatz) wurde ausgeführt:

Baustein Status Umsetzung
B2 — kanonische, byte-deterministische log.md-Eintragsform ANGEWENDET (Rev 3.8) §5.9 Pkt. 4 (Update), §5.1 Pkt. 4 (Anlage), §5.10 Pkt. 7 (Synthese-Anlage) + §8 Revisionslog. Form = - <Operation>: <concept> (<quellen>; Baseline <SHA>), lex (LC_ALL=C) sortiert, + getrennt, voller SHA, kein freier Zusatztext, kein Wanduhr-at im Body (Wanduhr ausschließlich im Frontmatter-generated.at, §5.14 Pkt. 3). = genau die Form, die Sub-Runs 3-3/3-4 mechanisch bereits demonstrieren.
A/B-Umfang (b) — CREATE aus der A/B-Fixture nehmen (D-3.13-6 Option 1 → Option 2) ANGEWENDET (Gate) run-sandbox.sh E-Sektion: E.1 (keine beta-Quellen), AGENT_PROMPT (beta-Fakt entfernt), E.5 (CREATE-Witness entfernt, UPDATE-alpha bleibt), E.8 (index.md unverändert, IDX_ADDED=0), Header. A/B prüft den Update-/Erhaltungs-Kern; CREATE/Synthese gelten über Sub-Runs 3-3/3-4.
B1 — CREATE-Slug-Signal (Inhalts-Term maßgeblich) ⏸️ DEFER (offen) Nicht in Rev 3.8 — der CREATE-Fall steht nicht mehr in der A/B-Fixture, daher ist der Slug-Pin für den grünen Re-Run #6 nicht erforderlich. Als benannter Defer / Ask-First-Kandidat dokumentiert (in compiler.md Rev 3.8 + Spec Change Log); §5.15 Pkt. 1 (Dateiname→Term) / §5.7 bleiben wie ist.
C — CREATE-Body byte-deterministisch ZURÜCKGEWIESEN (FR-2) Q1-Item (2) = Option (c): ein Byte-Pin des CREATE-Body widerspricht §5.1/FR-2/§5.10 Pkt. 3 („Befund-Äquivalenz, nicht Wort-Identität") direkt — Semantik-Change, kein Bugfix. Bewusst nicht ausgeführt.

Konsequenz für Re-Run #6: erwartetes E.4-Ergebnis NON_AT=0 AT=2 (alpha.md at-only; log.md byte-identisch via gepinnter Form; gamma.md/index.md unverändert). Nicht berührt: frozen I/O-Matrix-Block (inkl. GENERATED_AT_AUSNAHME), §5.14 Pkt. 3 (at-Ausnahme = Feldwerte), §5.10 Pkt. 3 (Body-Wortlaut), §5.1 Pkt. 2 (FR-2). Commit: 7c3c19b (compiler.md Rev 3.8 + Gate + dieser Autorisierungs-Träger). Ausstehend: 12-Sandbox-Re-Execution, Re-Run #6 (grüner Voll-Lauf), Review-Loop-2 + finaler done-Flip (Step-05-Status-Sync nach grünem Re-Run #6).

Unten: der ursprüngliche Entwurfstext (B1 §1, B2 §2, C §3) bleibt als historische Entscheidungsgrundlage erhalten — die ausgeführte Form steht in §0.1; wo B1/B2 im Folgenden als „ready-to-apply" beschrieben sind, gilt: B2 angewendet (genau so wie im Entwurf), B1 nicht angewendet (Defer).

0. Prämisse-Korrektur (warum dieser Entwurf anders aussieht als die Q1-Prämisse)

Die Q1-Autorisierung („(1) CREATE-Slug-Signal pinning, (2) CREATE-Body-kanonische Form (byte-deterministisch), (3) log.md-Regel") beruhte auf dem Befund „26 NON_AT-Zeilen = freie CREATE-Synthese". Gegen den realen A/B-Diff des Re-Run #5 (/tmp/gate-313-run5.log, Z. 12401330) aufgerechnet ist das invertiert:

Quelle NON_AT-Zeilen Natur
wiki/beta.md (gelöscht) 11 = 10 Frontmatter + 1 Body-Satz Frontmatter byte-identisch; gezählt als delete nur wegen Pfad beta
wiki/quanten-observatorium-kanal.md (neu) 11 = 10 Frontmatter + 1 Body-Satz Frontmatter byte-identisch; gezählt als add nur wegen Pfad quanten-…
wiki/index.md 2 (Link-Zeile) Slug-getrieben
wiki/log.md 4 gemischt: Slug-Name + Reihenfolge + Wanduhr-at im Body + freier Wortlaut
Summe 26
  • 22/26 (85 %) sind Slug-getrieben — die 20 Frontmatter-Zeilen sind inhaltlich identisch; git zählt sie als gelöscht+addiert nur weil die Dateinamen divergieren (beta vs. quanten-observatorium-kanal), plus 2 Index-Links.
  • Nur 2 Zeilen sind die eigentliche freie CREATE-Prosa (ein Body-Satz pro Lauf); 4 Zeilen log.md, davon 2 strukturell (Reihenfolge ungepinnt + Wanduhr-at im Body) und 2 frei (Wortlaut).

Quelltext-Verankerungen (Zeilen, schema/compiler.md):

  • §5.14 Pkt. 3 (L375): Zwei-Run-Vergleich lässt genau eine benannte Differenz zu (generated.at); alle übrigen Bestandteile byte-identisch.
  • §5.10 Pkt. 3 (L297): CREATE-/Synthese-Body-Reihenfolge deterministisch gepinnt (lex nach Beleg-Anker, LC_ALL=C); Wortlaut nicht — dort explizit „Befund-Äquivalenz, nicht Wort-Identität".
  • §5.1 Pkt. 2 (L84) + §5 Pkt. 3 (L34, FR-2): Body eigenständig formuliert; „Bloße Kopie … DÜRFEN nicht erzeugt werden"; „Der Body darf keine großen Quell-Exzerpte enthalten".
  • §5.14 Pkt. 2 (L374) + spec-3-8 P-5 (L150): 3.8-Basis nur mechanisch simuliert (Subshell-Läufe), nur UPDATE-Pfad, nie echte frische LLMs; „der Nachweis echter frischer Kontexte erfolgt im Story-3.13-Abnahmegate über reale Agent-Läufe".

Konsequenz: Q1-Item (1) Slug und (3) log-Struktur sind FR-2-sicher, determinismus-pflichtig (routing/log sind ohnehin deterministisch, §5.7/§5.15/§5.10-AD-17h) und frozen-Block-unabhängigB1/B2 unten, ready-to-apply. Q1-Item (2) CREATE-Body byte-deterministisch ist nicht FR-2-sicher (Byte-Pin bricht §5.1/FR-2/§5.10 Pkt. 3) → C unten, an die (a)/(b)/(c)/(d)-Entscheidung gebunden. Der latente Kern: §5.14 Pkt. 3 (Byte-Identität) vs. FR-2/§5.10 Pkt. 3 (freies, nicht-wortidentisches Wortlaut) — in 3.8 durch Simulation verdeckt, in 3.13/E.4 aufgedeckt.

1. B1 — CREATE-Slug-Signal: Inhalts-Term maßgeblich (FR-2-sicher, ready-to-apply)

Problem (AD-16-Instruktionslücke): Bei einem CREATE, dessen raw/-Dateinamen-Stamm vom erkannten Inhalts-Term abweicht (Fixture: raw/beta-v1.md/beta-v2.md, Stamm beta, Inhalts-Term quanten-observatorium-kanal), ist das maßgebliche Slug-Signal nicht deterministisch fixiert:

  • §5.1 Pkt. 1 (L83): „kebab-case-Slug aus der Concept-Identität … Der Dateiname definiert die Concept-Identität (relativer OKF-Pfad ohne .md, AD-7a)" — für ein neues Concept zirkulär (Identität = OKF-Pfad, der noch nicht existiert).
  • §5.15 Pkt. 1 (L383): „dieser kollabierte, lowercasene Dateiname ist der primäre Term je Zuwachs-Datei" — leitet den Term aus dem Dateinamen ab (→ beta).
  • Design-Notes (spec L150): intendiert das Ergebnis als term-geleitet (→ quanten-observatorium-kanal).

Lauf A (wiki/beta.md) folgte §5.15/Dateinamen; Lauf B (wiki/quanten-…) folgte der term-geleiteten Intention → Divergenz = 22/26 NON_AT-Zeilen.

Patch (Bestandsregel, kein neues Prädikat/Kein §7-Key/kein Frontmatter-Key, AD-3/D-3-konform): Der CREATE-Dateiname leitet sich vom erkannten Inhalts-Term (deterministisch erkannte Wissenseinheit, §2-Interpretation/§3.2) ab, nicht vom raw/-Dateinamen-Stamm; der Dateinamen-Stamm ist nur Fallback, wenn er mit dem Inhalts-Term übereinstimmt oder kein abgrenzbarer Inhalts-Term erkannt wird. Abgrenzung: das betrifft ausschließlich die CREATE-Ziel-Namensgebung (Zelle 2, §5.15 Pkt. 3); der Reconcile-/Match-Term (§5.15 Pkt. 1) bleibt textuell unverändert (er dient dem Match auf bestehende Concepts, nicht der Namensgebung neuer).

Vorgeschlagener Wortlaut — §5.1 Pkt. 1 (L83), Bullet 2 ersetzt:

Vorher (L83):

  • Konvention für den Dateinamen: kebab-case-Slug aus der Concept-Identität (kein Sonderzeichen, keine Endung .md-Dopplung). Der Dateiname definiert die Concept-Identität (relativer OKF-Pfad ohne .md, AD-7a).

Nachher (Vorschlag):

  • Konvention für den Dateinamen: kebab-case-Slug (kein Sonderzeichen, keine Endung .md-Dopplung). Der Dateiname definiert die Concept-Identität (relativer OKF-Pfad ohne .md, AD-7a); bei Neu-Anlage (CREATE, §5.15 Pkt. 3 Zelle 2) entsteht der Dateiname deterministisch aus dem erkannten Inhalts-Term der neuen Wissenseinheit (§2-Interpretation/§3.2; Kollaps-/Lowercase-Normalisierung §3.2 Pkt. 1b/§5.15 Pkt. 1) — term-geleitet. Der raw/-Zuwachs-Dateinamen-Stamm ist nur Fallback, wenn er mit dem erkannten Inhalts-Term übereinstimmt oder kein abgrenzbarer Inhalts-Term erkannt wird. Weichen Dateinamen-Stamm und erkannte Inhalts-Term ab, gewinnt der Inhalts-Term (deterministisch; Design-Intention term-geleitet) — die CREATE-Namensgebung ist damit byte-deterministisch aus dem committeten Zustand ableitbar (AD-17h/A0-19); eine Abweichung zweier Runs im CREATE-Slug ist ein AD-16-Klassifikationsdefekt (§5.14 Pkt. 4), kein Rauschen.

Revisionslog (§8): Eintrag Rev 3.8 — §5.1 Pkt. 1 CREATE-Slug-Signal deterministisch (Inhalts-Term maßgeblich, Dateinamen-Stamm nur Fallback); kein Prädikat-/§7-/Frontmatter-Key-Change (AD-3/D-3); §5.15 Pkt. 1-Match-Term unverändert.

2. B2 — log.md-Determinismus: Reihenfolge pinnen + kein Wanduhr-at im Body (FR-2-sicher, ready-to-apply)

Problem (AD-16-Instruktionslücke, 2 der 4 log-Zeilen): log.md-Einträge innerhalb einer Datumsgruppe haben keine deterministische Reihenfolge, und Wanduhr-generated.at-Werte im Body sind nicht untersagt. Lauf A legte die Einträge in einer Reihenfolge, Lauf B in einer anderen, und Lauf B bettete generated.at = 2026-08-23T13:48:23Z in den log-Body ein — beides liegt außerhalb der benannten at-Ausnahme (die gilt nur für das Frontmatter-Feld generated.at/verified[].at, nicht für Body-Text; §5.14 Pkt. 3).

Patch (Bestandsregel-Ergänzung, kein neuer Key):

  1. Innerhalb einer Datumsgruppe (Header = YYYY-MM-DD) werden die Einträge in deterministischer Reihenfolge geführt: lexikografisch nach Concept-Pfad (LC_ALL=C), Tie-Break nach fixer Operations-Reihenfolge (Neu-Anlage → Update → Synthese-Update → Verwaist/Hold). Die Datumsgruppen selbst bleiben „neueste zuerst" (unverändert, §5.1 Pkt. 4).
  2. Wanduhr-Werte im Body sind verboten: ein log.md-Eintrag trägt nur die Datumsgruppen-Header-Zeile, das <Baseline-Commit> und ggf. den Beleg-/sources-Pfad — kein Wanduhr-generated.at-/verified[].at-Wert als Body-Text (der at-Wanduhr-Gap lebt ausschließlich im Frontmatter-Feld, §5.14 Pkt. 3/A0-20). Ein Eintrag mit Wanduhr-Body-Wert ist ein textuell benannter Instruktions-Verstoß (NFR-4).

Vorgeschlagener Wortlaut — §5.1 Pkt. 4 (L87) am Ende ergänzen:

Nachher (Vorschlag, an L87 anfügen):log.md bleibt ohne Frontmatter (Punkt 10). Innerhalb einer Datumsgruppe (Header YYYY-MM-DD) werden die Einträge deterministisch geführt: lexikografisch nach Concept-Pfad (LC_ALL=C), Tie-Break nach fixer Operations-Reihenfolge (Neu-Anlage → Update → Synthese-Update → Verwaist/Hold) — gleiche Eingabemenge ⇒ identische Eintrags-Reihenfolge (AD-17h/A0-19, §5.14). Ein log.md-Body-Eintrag trägt keinen Wanduhr-generated.at-/verified[].at-Wert als Text (der at-Wanduhr-Gap lebt ausschließlich im Frontmatter-Feld, §5.14 Pkt. 3/A0-20); ein solcher Body-Wert ist ein textuell benannter Instruktions-Verstoß (NFR-4).

Konsistenz: identisch in §5.10 Pkt. 7 (L301, Synthese-log.md-Eintragspflicht) spiegeln — Verweis auf die §5.1 Pkt. 4-Reihenfolge-/Wanduhr-Regel (eine Regel, zwei Verankerungen, Fugen-Identitäts-Präzedenz).

Revisionslog (§8): Eintrag Rev 3.8 — §5.1 Pkt. 4/§5.10 Pkt. 7 log-Determinismus (intra-Date-Gruppe-Reihenfolge + kein Wanduhr-at im Body); kein Prädikat-/§7-/Frontmatter-Key-Change.

3. C — CREATE-Body-Byte-Residual (AN NUTZER-ENTSCHEIDUNG (a)/(b)/(c)/(d) GEBUNDEN — NICHT VORFREIGEBEN)

Nach B1+B2 bleibt das eigentliche freie-Prosa-Residual: 1 CREATE-Body-Satz pro Lauf + ~12 log-Wortlaut-Zeilen. Zwei frische LLMs schreiben diesen freien, FR-2-mandatierten, „eigenständig formulierten" Satz nie byte-identisch — und §5.14 Pkt. 3 verlangt Byte-Identität. Das ist der latente Vertragskonflikt. Q1-Item (2) „CREATE-Body kanonische Form (byte-deterministisch)" ist genau dieser Teil und ist NICHT FR-2-sicher (Byte-Pin bricht §5.1/FR-2/§5.10 Pkt. 3). Dieser Abschnitt darf erst nach der Nutzer-Entscheidung umgesetzt werden. Optionen (frozen-Block/Ask-First-Berührung gekennzeichnet):

  • (a) A/B auf Wissens-Ebene für freien Body (frozen-Matrix-Zeile GENERATED_AT_AUSNAHME, spec L49 + AC-7)empfohlen, weil vertragself-konsistent (§5.10 Pkt. 3 sagt bereits „Befund-Äquivalenz, nicht Wort-Identität"): der freie CREATE-Body-Wortlaut wird als zweite benannte Ausnahme-Klasse neben at behandelt; Struktur (Slug/Frontmatter/sources/Provenanz-Anker/Claim-Abdeckung/Index-Link) bleibt byte-streng, freier Wortlaut per Claim-/Provenienz-Abdeckung (nicht byte-weise) verglichen. CREATE bleibt in der A/B-Fixture (AC-6 wie geschrieben). Berührt §5.14 Pkt. 3 (Ausnahme-Menge um zweite Klasse erweitern) + frozen spec L49.
  • (b) CREATE aus A/B-Fixture nehmen (revidiert D-3.13-6 Option 1 → 2) — A/B prüft nur den nachweislich byte-deterministischen UPDATE-Pfad; CREATE + Synthese gelten über Sandbox-Sub-Runs 3-3/3-4 als demostriert. AC-6-Auslegung: „Anlage neuer Wissenseinheit" über die Sub-Runs. Vertrag/frozen-Block/FR-2 unangetastet, kleinster Pfad; CREATE nicht mehr im echten frischen-Agenten-A/B-Nachweis.
  • (c) Kanonischer CREATE-Body (substanzieller compiler.md-Change) — CREATE-Body auf aus raw/ mechanisch abgeleitete Form pinnen (exakte Wortfolge der zuerst-belegenden Quelle, anchor-geordnet). Macht CREATE byte-determinisch, A/B bleibt streng. RISIKO: bricht vmtl. FR-2 („eigenständig formuliert, keine Kopie"); eigener breiterer Autorisationsrunde würdig.
  • (d) Teil-Patch liefern, Residual rot lassen — B1+B2 als Epic-1-Remediation geliefert (beseitigt die 22/26-Slug-Hauptursache — echter, dokumentierter Fortschritt); das kleine Prosa-Residual als benannter Defer an spätere Vertrags-Revision/Epic 4 → Gate bleibt rot auf einem kleinen, ehrlich verstandenen Rest; Story 3.13 in-progress.

4. Verifikationsplan (nach Anwendung der jeweils autorisierten Untermenge)

  1. bash -n + Voll-Lesedurchgang schema/compiler.md (keine Fugen-Identitäts-Brüche; alle §-Verweise intakt).
  2. 12 Sandbox-Suiten re-executieren (Sub-Runs, fail-fast; sandbox-3-1..3-12, je exit 0).
  3. Re-Run #6: grüner Voll-Lauf des Gates (_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh, ~2.53.5 h, Background-Subagent, CLAUDE_BIN = echte winpty-freie claude.exe per P-3-Override, P-16-Floor 32000).
  4. Erwartetes A/B-Ergebnis je Option:
    • (a): E.4 NON_AT=0 (oder NON_AT nur in explizit als zweiter Ausnahme-Klasse ausgewiesenen Body-Wortlaut-Zellen), AT=4grün; F/G laufen (G-1..G-8 + Porcelain).
    • (b): E.4 NON_AT=0 AT=4 (nur UPDATE-Pfad alpha + gamma/index-Erhaltung) → grün; CREATE nicht in A/B (über Sub-Runs 3-3/3-4 belegt).
    • (c): E.4 NON_AT=0 AT=4 (CREATE-Body byte-deterministisch) → grün (vorausgesetzt FR-2-Verstoß als Semantik-Change autorisiert).
    • (d): E.4 NON_AT > 0, nur im kleinen Prosa-Residual → Gate rot, aber auf einem ehrlich isolierten Rest; Befund textuell benannt (NFR-4), Defer angelegt.
  5. AD-3-Porcelain: git status --porcelain des realen Ist-Baums nach Lauf leer; schema/-Diffs nur die autorisierten Rev-3.8-Änderungen; raw//adapters//validator.md/wiki-compiler.md/canonical-terms.md unverändert.

5. Freigabe-Punkte (Nutzer)

  • B1 (Slug) autorisieren? — FR-2-sicher, Q1-item(1), kein frozen-Block.
  • B2 (log-Determinismus) autorisieren? — FR-2-sicher, Q1-item(3), kein frozen-Block.
  • C (Body-Residual) = Option (a) / (b) / (c) / (d)? — (a) berührt frozen spec L49 + §5.14 Pkt. 3; (b) revidiert D-3.13-6; (c) breitere Autorisation (FR-2); (d) Defer.
  • danach: 12-Sandbox-Re-Execution + Re-Run #6 (Task #4/#5).