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>
17 KiB
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. 1240–1330) 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 (
betavs.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-
atim 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ängig → B1/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. 3Zelle 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. Derraw/-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):
- 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). - 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 (derat-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.mdbleibt ohne Frontmatter (Punkt 10). Innerhalb einer Datumsgruppe (HeaderYYYY-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). Einlog.md-Body-Eintrag trägt keinen Wanduhr-generated.at-/verified[].at-Wert als Text (derat-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 + ~1–2 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. 3sagt bereits „Befund-Äquivalenz, nicht Wort-Identität"): der freie CREATE-Body-Wortlaut wird als zweite benannte Ausnahme-Klasse nebenatbehandelt; 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)
bash -n+ Voll-Lesedurchgangschema/compiler.md(keine Fugen-Identitäts-Brüche; alle§-Verweise intakt).- 12 Sandbox-Suiten re-executieren (Sub-Runs, fail-fast;
sandbox-3-1..3-12, jeexit 0). - Re-Run #6: grüner Voll-Lauf des Gates (
_bmad-output/implementation-artifacts/sandbox-3-13/run-sandbox.sh, ~2.5–3.5 h, Background-Subagent,CLAUDE_BIN= echte winpty-freieclaude.exeper P-3-Override, P-16-Floor 32000). - Erwartetes A/B-Ergebnis je Option:
- (a): E.4
NON_AT=0(oderNON_ATnur in explizit als zweiter Ausnahme-Klasse ausgewiesenen Body-Wortlaut-Zellen),AT=4→ grün; F/G laufen (G-1..G-8 + Porcelain). - (b): E.4
NON_AT=0 AT=4(nur UPDATE-Pfadalpha+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.
- (a): E.4
- AD-3-Porcelain:
git status --porcelaindes realen Ist-Baums nach Lauf leer;schema/-Diffs nur die autorisierten Rev-3.8-Änderungen;raw//adapters//validator.md/wiki-compiler.md/canonical-terms.mdunverä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).