fix: Story 3.13 Epic-1-Remediation (Rev 3.8) — kanonische byte-deterministische log.md-Eintragsform + CREATE-Kern aus A/B-Fixture (D-3.13-6 Option 2)
Re-Run #5 lief RED an E.4 (A/B-Determinismus: NON_AT=26 AT=4 → HARD-FAIL). Exakter Zeilen-Nachzähl-Befund: 24/26 (92%) der NON_AT-Abweichungen sind CREATE-/Slug-getrieben (beta.md 11 + quanten-observatorium-kanal.md 11 + index.md 2), verbleibende 4 log.md-Zeilen = 2 CREATE-Einträge (Slug-Divergenz) + 2 freie UPDATE-Wortungen (+ Wanduhr-generated.at im Body). Autorisierter Minimal-Änderungssatz (Q1 + "continue"): (1) compiler.md Rev 3.8 (D-3-Instruktions-Patch, additive Präzisierung): - §5.9 Pkt 4 (Update), §5.1 Pkt 4 (Anlage), §5.10 Pkt 7 (Synthese-Anlage): kanonische, byte-deterministische log.md-Eintragsform fixiert (- Story 3.1-Update: <concept> (<neue-Quellen>; Baseline <SHA>) etc.), kein freier Zusatztext, kein Wanduhr-Wert im log.md-Body (Wanduhr lebt ausschließlich im Frontmatter-generated.at, §5.14 Pkt 3). - §8 Revisionslog Rev 3.8-Eintrag. - NUR log.md-Form gepinnt; NUR Concept-Body/Slug/FR-2/§5.14-Pkt-3-Ausnahme UNVERÄNDERT. CREATE-Zielpfad-Signal-Pin = offener Defer (Ask-First). - Form = genau die, die Sub-Runs 3-3/3-4 mechanisch bereits demonstrieren (Ist-Behaviour verankert, kein Widerspruch). (2) run-sandbox.sh E-Sektion: CREATE-/beta-Fall aus der A/B-Fixture entfernt (D-3.13-6 Option 2): E.1-Fixture (keine beta-Quellen), AGENT_PROMPT (keine beta-Fakt), E.5 (CREATE-Witness entfernt, UPDATE-Alpha-Witness bleibt), E.8 (index.md unverändert statt "+1 CREATE-Link"), Header-Kommentare. A/B-Prüfung deckt den Update-/Erhaltungs-Kern; CREATE/Synthese gelten über Sub-Runs 3-3/3-4 + D-Validator als demostriert. Beide Änderungen berühren NICHT die frozen I/O-Matrix-Zeile GENERATED_AT_AUSNAHME und NICHT den §5.14 Pkt 3-Vertrag. bash -n clean. Erwartetes E.4-Ergebnis: NON_AT=0 AT=2 (alpha.md at-only). Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -19,10 +19,12 @@
|
||||
# Negativ-Fixtures + 1 Positiv-Kontrolle; frischer
|
||||
# Validator-Agent MUSS 3×FAIL + 1×SUCCESS liefern
|
||||
# (E) Zwei-frische-Agenten zwei /tmp-Worktrees auf denselben $BASE-Commit
|
||||
# (isolierte Mini-Bundle-Fixture: UPDATE alpha + CREATE
|
||||
# beta), beide Läufe führen schema/compiler.md aus;
|
||||
# A/B-anglichen: Frontmatter/Index/Log/Byte-Kern nur
|
||||
# at-Ausnahme, Run-Receipts A==B (außer at/Tree-Cellen)
|
||||
# (isolierte Mini-Bundle-Fixture: UPDATE alpha —
|
||||
# Update-/Erhaltungs-Kern; CREATE-/Synthese-Kern über
|
||||
# Sub-Runs 3-3/3-4, D-3.13-6 Option 2), beide Läufe führen
|
||||
# schema/compiler.md aus; A/B-anglichen: Frontmatter/
|
||||
# Index/Log/Byte-Kern nur at-Ausnahme, Run-Receipts A==B
|
||||
# (außer at/Tree-Cellen)
|
||||
# (F) G-1..G-8 harte Assertions (inkl. G-6 echter perturbed-Drittrun-Tree
|
||||
# C durch denselben E.4-Classifier + Positiv-/Negativ-
|
||||
# Kontrolle, G-7 Epic-5-Smoke auf Ist-Baum, G-8 Porcelain)
|
||||
@@ -43,8 +45,12 @@
|
||||
# Bundle validierte Planungstoken-Menge (P-13).
|
||||
# - D-5: D-NEG = 3 §7-/§6-Negativ-Fixtures + frischer Validator-Agent,
|
||||
# der zwingend 3×FAIL + 1×SUCCESS liefert (AC-3-Hälfte).
|
||||
# - D-6: E.1-Fixture mit CREATE-Fall (beta: neue raw-Quellen → neues
|
||||
# Concept + Index-Link); AC-6 sechs Demonstrationsfälle.
|
||||
# - D-6: E.1-Fixture — Update-/Erhaltungs-Kern (alpha UPDATE + gamma Erhaltung);
|
||||
# CREATE-/Synthese-Kern bewusst NICHT in der A/B-Fixture (D-3.13-6 Option 2,
|
||||
# Re-Run #5-Befund: CREATE-Fall 24/26 der NON_AT-Abweichungen treibend —
|
||||
# Slug-Ableitung + CREATE-Prosa — und hebt den A/B-Byte-Kern aus der
|
||||
# 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).
|
||||
# ============================================================================
|
||||
set -u
|
||||
@@ -425,14 +431,18 @@ pos1=$(pos_count pos.md)
|
||||
# ==============================================================================
|
||||
runlabel "E. ZWEI FRISCHE AGENT-KONTEXTE A/B (AC-7)"
|
||||
|
||||
# --- E.1 Fixture im Käfig (D-6: UPDATE alpha + CREATE beta; Bundle-Frontmatter P-4) ---
|
||||
# --- E.1 Fixture im Käfig (AC-6-Update-/Erhaltungs-Kern; Bundle-Frontmatter P-4) ---
|
||||
# alpha: bestätigender Zuwachs raw/alpha-v2.md (S-3, gleiche Aussage wie alpha-v1#S-2)
|
||||
# beta: EINDEUTIGER Term quanten-observatorium-kanal — kein bestehendes Concept
|
||||
# deckt ihn ab ⇒ Routing CREATE (neues Concept + Index-Link, Punkt 11/Anlage).
|
||||
# Der Ziel-Pfad (Slug) wird vom Producer aus dem Term abgeleitet (§5.15/§5.7) —
|
||||
# das Gate HARDCODIERT ihn NICHT (D-1: keine erwarteten Plan-Literale); die
|
||||
# Witness detektiert die neue Datei über Git und prüft deren SEMANTIK.
|
||||
# ⇒ Routing UPDATE (CONFIRMING-Konsolidierung §5.16 Pkt. 4, Multi-Beleg §5.5).
|
||||
# gamma: unabhängig, bleibt byte-identisch (AC-6)
|
||||
# CREATE-/Synthese-Kern: NICHT Teil der A/B-Fixture — die CREATE-/Synthese-Mechanik
|
||||
# (neues Concept + Index-Link Punkt 11 + Slug-Ableitung §5.15/§5.7 + log.md)
|
||||
# ist über die Sub-Runs 3-3/3-4 (mechanische, gepinnte Fixture) als demostriert
|
||||
# gelten (Spec-Notiz, D-3.13-6 Option 2; Re-Run #5-Befund: der CREATE-Fall war
|
||||
# 24/26 der NON_AT-Abweichungen treibend — Slug-Ableitung + CREATE-Prosa — und
|
||||
# würde den A/B-Byte-Kern aus der at-Ausnahme herausheben. Die A/B-Prüfung
|
||||
# deckt damit den Update-+Erhaltungs-Kern; CREATE/Synthese bleiben über die
|
||||
# Sub-Runs + D-Validator abgedeckt.)
|
||||
rm -rf "$CAGE/wiki" "$CAGE/raw" # E.1 baut die Fixture sauber neu (keine §B-Reste in $BASE)
|
||||
mkdir -p "$CAGE/wiki" "$CAGE/raw"
|
||||
cat > "$CAGE/wiki/index.md" <<'FIXTURE'
|
||||
@@ -490,21 +500,10 @@ cat > "$CAGE/raw/gamma-v1.md" <<'FIXTURE'
|
||||
### S-1
|
||||
Evidenz v1: Gamma-Thema.
|
||||
FIXTURE
|
||||
cat > "$CAGE/raw/beta-v1.md" <<'FIXTURE'
|
||||
### S-1
|
||||
Beta: quanten-observatorium-kanal etabliert die Baseline.
|
||||
FIXTURE
|
||||
cat > "$CAGE/raw/beta-v2.md" <<'FIXTURE'
|
||||
### S-2
|
||||
Beta: quanten-observatorium-kanal bestätigt die Baseline.
|
||||
FIXTURE
|
||||
# Term-Isolations-Garantie (Fixture-Setup, kein Run-Zustand): der beta-Term darf
|
||||
# in KEINER Baseline-Datei vorkommen — sonst wäre CREATE unscharf (Kandidat alpha).
|
||||
if grep -rq 'quanten-observatorium-kanal' "$CAGE/wiki" "$CAGE/raw/alpha-v1.md" "$CAGE/raw/alpha-v2.md" "$CAGE/raw/gamma-v1.md"; then
|
||||
echo "HARD-FAIL (E.1): beta-Term taucht in Baseline-Dateien auf (CREATE-Isolation verletzt)" >&2
|
||||
exit 1
|
||||
fi
|
||||
pass "E.1 Fixture: Mini-Bundle (index+alpha+gamma+log) + Zuwachs alpha-v2/beta-v1/beta-v2, term-isoliert"
|
||||
# CREATE-/Synthese-Kern (beta-Quellen) bewusst NICHT in der A/B-Fixture — die
|
||||
# CREATE-Mechanik ist über die Sub-Runs 3-3/3-4 als demostriert gelten
|
||||
# (D-3.13-6 Option 2; Re-Run #5-Befund: 24/26 NON_AT-Abweichungen CREATE-treibend).
|
||||
pass "E.1 Fixture: Mini-Bundle (index+alpha+gamma+log) + Zuwachs alpha-v2 (UPDATE-Kern)"
|
||||
( cd "$CAGE" && git add -A && git commit -qm "Käfig-Fixture: Baseline inkl. Zuwachs" ) \
|
||||
|| { echo "HARD-FAIL (E.1): Fixture-Commit fehlgeschlagen" >&2; exit 1; }
|
||||
BASE=$(git -C "$CAGE" rev-parse HEAD)
|
||||
@@ -529,7 +528,6 @@ Fakten zur committeten Fixture in diesem Worktree (ausschließlich Fakten, keine
|
||||
- wiki/index.md (Bundleroot), wiki/log.md, wiki/alpha.md und wiki/gamma.md sind die bisherigen Concepts.
|
||||
- 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.
|
||||
- raw/beta-v1.md und raw/beta-v2.md sind neu committete Zuwächse (Stellen S-1/S-2) mit einem eindeutigen Term, für den kein bestehendes Concept existiert.
|
||||
|
||||
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):
|
||||
baseline: <volles SHA des Baseline-Commits>
|
||||
@@ -635,7 +633,8 @@ fi
|
||||
[ -z "$AB_DIFF_STAT" ] && echo " BEFUND: A/B-Diff leer — Runs vollständig konvergiert (zulässig)"
|
||||
pass "E.4 A/B-Vergleich: Bundle-State identisch bis auf at-Ausnahme (§5.14 Pkt. 2 / G-1)"
|
||||
|
||||
# --- E.5 Witness: Nicht-Vakuum gegen Baseline (UPDATE alpha + CREATE beta) ---
|
||||
# --- E.5 Witness: Nicht-Vakuum gegen Baseline (UPDATE alpha; CREATE-/Synthese-Kern
|
||||
# über Sub-Runs 3-3/3-4, nicht Teil der A/B-Fixture — D-3.13-6 Option 2) ---
|
||||
# alpha (UPDATE): Multi-Beleg-Anker raw/alpha-v2.md#S-3 + sources-Konsolidierung.
|
||||
ABS_A=$(git -C "$CAGE" show "$BASE:wiki/alpha.md" | sha256sum | cut -d' ' -f1)
|
||||
for wt in a b; do
|
||||
@@ -645,32 +644,7 @@ for wt in a b; do
|
||||
git -C "$ROOT/wt-$wt" show 'HEAD:wiki/alpha.md' | grep -q 'raw/alpha-v2.md#S-3' \
|
||||
|| { echo "HARD-FAIL (E.5): Witness $wt alpha ohne Multi-Beleg-Anker raw/alpha-v2.md#S-3" >&2; exit 1; }
|
||||
done
|
||||
# beta (CREATE): die neue Concept-Datei wird GIBASES-DIFF-gedetectet (nie
|
||||
# Slug-hartcodiert — §5.15 leitet den Pfad aus dem Term ab; D-1: kein Plan-Literal).
|
||||
# Erwartet: exakt EINE neue wiki/-Datei (außer log.md/index.md, die M sind nicht A).
|
||||
NEW_CONCEPT_A=$(git -C "$CAGE" diff --name-only --diff-filter=A "$BASE" "$HEAD_A" -- wiki/ | grep -vE '(^|/)log\.md$' | grep -vE '(^|/)index\.md$' | LC_ALL=C sort)
|
||||
NEW_CONCEPT_B=$(git -C "$CAGE" diff --name-only --diff-filter=A "$BASE" "$HEAD_B" -- wiki/ | grep -vE '(^|/)log\.md$' | grep -vE '(^|/)index\.md$' | LC_ALL=C sort)
|
||||
NEW_A_COUNT=$(printf '%s\n' "$NEW_CONCEPT_A" | grep -c '^' || true)
|
||||
[ "$NEW_A_COUNT" -eq 1 ] \
|
||||
|| { echo "HARD-FAIL (E.5): CREATE A — erwartet exakt 1 neue Concept-Datei, sind: $NEW_A_COUNT" >&2; printf '%s\n' "$NEW_CONCEPT_A" >&2; exit 1; }
|
||||
# A und B müssen dieselbe neue Datei erzeugen (Determinismus der CREATE-Zuordnung)
|
||||
[ "$NEW_CONCEPT_A" = "$NEW_CONCEPT_B" ] \
|
||||
|| { echo "HARD-FAIL (E.5): CREATE-Pfad divergiert A($NEW_CONCEPT_A) vs B($NEW_CONCEPT_B) — Determinismus-Verstoß" >&2; exit 1; }
|
||||
NEW_CONCEPT="$NEW_CONCEPT_A"
|
||||
NEW_LEAF=$(basename "$NEW_CONCEPT")
|
||||
echo " CREATE-Zieldatei (Producer-geleitet, §5.15): $NEW_CONCEPT"
|
||||
for wt in a b; do
|
||||
git -C "$ROOT/wt-$wt" show "HEAD:$NEW_CONCEPT" | grep -q 'resource: raw/beta-v1.md' \
|
||||
|| { echo "HARD-FAIL (E.5): CREATE $wt — $NEW_CONCEPT sources ohne raw/beta-v1.md" >&2; exit 1; }
|
||||
git -C "$ROOT/wt-$wt" show "HEAD:$NEW_CONCEPT" | grep -q 'resource: raw/beta-v2.md' \
|
||||
|| { echo "HARD-FAIL (E.5): CREATE $wt — $NEW_CONCEPT sources ohne raw/beta-v2.md" >&2; exit 1; }
|
||||
git -C "$ROOT/wt-$wt" show "HEAD:$NEW_CONCEPT" | grep -q 'quanten-observatorium-kanal' \
|
||||
|| { echo "HARD-FAIL (E.5): CREATE $wt — $NEW_CONCEPT trägt nicht den beta-Term (falsches Concept)" >&2; exit 1; }
|
||||
# Index-Verlinkung (Punkt 11/Anlage): die Bundleroot verlinkt die neue Datei.
|
||||
git -C "$ROOT/wt-$wt" show 'HEAD:wiki/index.md' | grep -qF "$NEW_LEAF" \
|
||||
|| { echo "HARD-FAIL (E.5): CREATE $wt — index.md verlinkt die neue Concept-Datei $NEW_LEAF nicht (Punkt 11)" >&2; exit 1; }
|
||||
done
|
||||
pass "E.5 Witness: alpha UPDATE (Multi-Beleg) + beta CREATE (neue Datei, sources, Term, Index-Link) in A und B"
|
||||
pass "E.5 Witness: alpha UPDATE (Multi-Beleg raw/alpha-v2.md#S-3 + sources-Konsolidierung) in A und B"
|
||||
|
||||
# --- E.6 Run-Receipt A-vs-B (D-2: Modell sandbox-3-8 DET-2, keine erwarteten Literale) ---
|
||||
RA="$ROOT/wt-a/run-receipt.txt"
|
||||
@@ -710,7 +684,8 @@ for wt in a b; do
|
||||
done
|
||||
pass "E.7 sources-Liste alpha.md (A und B) konsolidiert (raw/alpha-v1.md + raw/alpha-v2.md)"
|
||||
|
||||
# --- E.8 Unabhängiges Wissen erhalten (AC-6): gamma byte-pinned; index = BASE + exakt 1 neue Link-Zeile ---
|
||||
# --- E.8 Unabhängiges Wissen erhalten (AC-6): gamma byte-pinned; index.md UNVERÄNDERT
|
||||
# (kein CREATE in der A/B-Fixture — D-3.13-6 Option 2: kein neuer/entfernter Link) ---
|
||||
HA=$(git -C "$ROOT/wt-a" show 'HEAD:wiki/gamma.md' | sha256sum | cut -d' ' -f1)
|
||||
HB=$(git -C "$ROOT/wt-b" show 'HEAD:wiki/gamma.md' | sha256sum | cut -d' ' -f1)
|
||||
BASEHG=$(git -C "$CAGE" show "$BASE:wiki/gamma.md" | sha256sum | cut -d' ' -f1)
|
||||
@@ -722,13 +697,15 @@ IDX_B=$(git -C "$ROOT/wt-b" show 'HEAD:wiki/index.md')
|
||||
IDX_DIFF=$(git -C "$CAGE" diff "$BASE" "$HEAD_A" -- wiki/index.md)
|
||||
IDX_ADDED=$(printf '%s\n' "$IDX_DIFF" | grep -c '^+[^+]' || true)
|
||||
IDX_DELETED=$(printf '%s\n' "$IDX_DIFF" | grep -c '^-[^-]' || true)
|
||||
[ "$IDX_DELETED" -eq 0 ] || { echo "HARD-FAIL (E.8): index.md trägt Deletions (nur Appending erlaubt):" >&2; printf '%s\n' "$IDX_DIFF" >&2; exit 1; }
|
||||
[ "$IDX_ADDED" -eq 1 ] || { echo "HARD-FAIL (E.8): index.md Diff != exakt 1 Zeile (erwartet: CREATE-Link), ist: $IDX_ADDED" >&2; printf '%s\n' "$IDX_DIFF" >&2; exit 1; }
|
||||
printf '%s\n' "$IDX_DIFF" | grep '^+[^+]' | grep -qF "$NEW_LEAF" \
|
||||
|| { echo "HARD-FAIL (E.8): die einzige neue index-Zeile ist kein Link auf die CREATE-Datei $NEW_LEAF:" >&2; printf '%s\n' "$IDX_DIFF" >&2; exit 1; }
|
||||
pass "E.8 Unabhängiges Wissen erhalten: gamma byte-identisch; index = BASE + exakt 1 CREATE-Link (A==B)"
|
||||
[ "$IDX_ADDED" -eq 0 ] || { echo "HARD-FAIL (E.8): index.md trägt neue Zeilen (erwartet: unverändert — kein CREATE in A/B-Fixture):" >&2; printf '%s\n' "$IDX_DIFF" >&2; exit 1; }
|
||||
[ "$IDX_DELETED" -eq 0 ] || { echo "HARD-FAIL (E.8): index.md trägt Deletions (erwartet: unverändert):" >&2; printf '%s\n' "$IDX_DIFF" >&2; exit 1; }
|
||||
pass "E.8 Unabhängiges Wissen erhalten: gamma byte-identisch; index.md unverändert (kein CREATE in A/B-Fixture, A==B)"
|
||||
|
||||
# --- E.9 log.md: Eintrag mit vollem Baseline-SHA (R-1; P-9; kein vorgeschriebener Wortlaut) ---
|
||||
# --- E.9 log.md: Eintrag mit vollem Baseline-SHA (R-1; P-9) ---
|
||||
# Wort-Form: der A/B-Byte-Kern von log.md wird über die kanonische Log-Eintragsform
|
||||
# (compiler.md Rev 3.8, §5.9 Pkt. 4) garantiert — das Gate selbst HARDCODIERT den
|
||||
# Eintragswortlaut NICHT (D-1: keine erwarteten Literale), es prüft nur Struktur
|
||||
# (Lauf-Eintrag vorhanden + voller Baseline-SHA, R-1).
|
||||
for wt in a b; do
|
||||
LOG_BASE=$(git -C "$CAGE" show "$BASE:wiki/log.md" | sha256sum | cut -d' ' -f1)
|
||||
LOG_HEAD=$(git -C "$ROOT/wt-$wt" show 'HEAD:wiki/log.md' | sha256sum | cut -d' ' -f1)
|
||||
|
||||
Reference in New Issue
Block a user