143 lines
5.5 KiB
Bash
143 lines
5.5 KiB
Bash
#!/usr/bin/env bash
|
|
# Story 3.2 — Sandbox-Tests der textuell-deterministischen Relevanzbestimmung (§3.2)
|
|
# Re-executierbar: bash run-sandbox.sh (ab Workspace-Root; Sandbox unter /tmp/sb32)
|
|
# Zweck: Membership-Pin + Zwei-Run-Identität + NO_MATCH (leere Candidate-Liste)
|
|
# + log.md-Kontaminations-Pin (der Term liegt AUCH in log.md — die Candidate-Liste
|
|
# bleibt trotzdem auf Concept-Pfade definiert, §3.2-Pkt.-2a).
|
|
set -u
|
|
ROOT=$(mktemp -d /tmp/sb32-XXXXXX)
|
|
SB="$ROOT/sb"
|
|
mkdir -p "$SB/wiki" "$SB/raw"
|
|
cd "$SB"
|
|
git init -q
|
|
git config user.email "sandbox@test"
|
|
git config user.name "Sandbox"
|
|
|
|
# ---------- Mini-Baum: Concept-Bodies + log.md, die den EXAKTEN Test-Term tragen ----------
|
|
cat > wiki/index.md <<'EOF'
|
|
# Index
|
|
- [Alpha](alpha.md)
|
|
EOF
|
|
cat > wiki/alpha.md <<'EOF'
|
|
---
|
|
type: concept
|
|
sources:
|
|
- resource: raw/alpha-v1.md
|
|
id: s1
|
|
generated:
|
|
by: wow-compiler/0.1.0
|
|
at: 2026-08-16T09:00:00Z
|
|
---
|
|
Das Alpha-Protokoll verwendet deterministische-relevanz-bestimmung für den Abgleich.
|
|
EOF
|
|
cat > wiki/beta.md <<'EOF'
|
|
---
|
|
type: concept
|
|
sources:
|
|
- resource: raw/beta-v1.md
|
|
id: s1
|
|
generated:
|
|
by: wow-compiler/0.1.0
|
|
at: 2026-08-16T09:00:00Z
|
|
---
|
|
Beta beschreibt ein anderes, hier nicht betroffenes Thema.
|
|
EOF
|
|
# log.md trägt denselben Term — der Kontaminations-Fall, den die Exklusion entschärft:
|
|
cat > wiki/log.md <<'EOF'
|
|
# Log
|
|
|
|
## 2026-08-19
|
|
- Story-3.2-Update: alpha (raw/alpha-v2.md; deterministische-relevanz-bestimmung).
|
|
EOF
|
|
cat > raw/alpha-v1.md <<'EOF'
|
|
Evidenz v1: deterministische-relevanz-bestimmung (Stelle S-1).
|
|
EOF
|
|
cat > raw/beta-v1.md <<'EOF'
|
|
Evidenz v1: Beta-Thema (Stelle S-1).
|
|
EOF
|
|
git add -A
|
|
git commit -qm "Baseline"
|
|
BASE=$(git rev-parse HEAD)
|
|
echo "BASELINE-COMMIT: $BASE (Sandbox-Root: $ROOT; loeschbar: rm -rf $ROOT)"
|
|
echo
|
|
|
|
# ---------- Helfer: candidate-Erhebung mit tool-korrekter Exklusion (§3.2-Pkt.-2a) ----------
|
|
# rg-Form: rg -l '<term>' -g '!log.md' wiki/
|
|
# grep-Form:grep -rl '<term>' --exclude=log.md wiki/
|
|
terms() { # $1=Term; nutzt rg wenn vorhanden (native -g-Exklusion), sonst grep --exclude
|
|
if command -v rg >/dev/null 2>&1; then
|
|
rg -l "$1" -g '!log.md' wiki/
|
|
else
|
|
grep -rl "$1" --exclude=log.md wiki/
|
|
fi
|
|
}
|
|
# Normalisierung der Ausgabe: wiki/-Präfix + .md-Suffix strippen (§3.2-Pkt.-3a)
|
|
normalize() { sed -e 's|^wiki/||' -e 's|\.md$||'; }
|
|
|
|
# =====================================================================
|
|
runlabel() { echo; echo "########## $1 ##########"; }
|
|
|
|
runlabel "T1: Membership-Pin — Term trifft Concept-Body UND log.md; Candidate-Liste nur Concept-Pfade"
|
|
echo "--- Kandidaten-Erhebung: terms 'deterministische-relevanz-bestimmung' (Exklusions-Form) ---"
|
|
terms 'deterministische-relevanz-bestimmung' | normalize
|
|
echo "--- Erwartet: AUSSCHLIESSLICH 'alpha' (Concept-Pfad, ohne wiki/ + ohne .md) ---"
|
|
echo "--- Kontaminations-Kontrolle: was OHNE Exklusion getroffen würde (rg-OHNE -g / grep-OHNE --exclude) ---"
|
|
if command -v rg >/dev/null 2>&1; then
|
|
rg -l 'deterministische-relevanz-bestimmung' wiki/ | normalize
|
|
else
|
|
grep -rl 'deterministische-relevanz-bestimmung' wiki/ | normalize
|
|
fi
|
|
echo "--- OHNE Exklusion trifft es 'alpha' UND 'log' — die Exklusion (§3.2-Pkt.-2a) ist damit reell getestet ---"
|
|
|
|
# =====================================================================
|
|
runlabel "T2: Zwei-Run-Identität (AD-17h/A0-19) — zwei unabhängige Läufe, byte-identische Candidate-Liste"
|
|
FIRST1=$(terms 'deterministische-relevanz-bestimmung' | normalize)
|
|
SECOND1=$(terms 'deterministische-relevanz-bestimmung' | normalize)
|
|
FIRST2=$(terms 'alpha' | normalize)
|
|
SECOND2=$(terms 'alpha' | normalize)
|
|
echo "Lauf 1 (Term deterministische-relevanz-bestimmung): $FIRST1"
|
|
echo "Lauf 2 (Term deterministische-relevanz-bestimmung): $SECOND1"
|
|
echo "Lauf 1 (Term alpha): $FIRST2 # 'index' ist der legitime Stufe-b-Traversal-Treffer (Bundleroot verlinkt alpha.md), kein Kontaminations-Fehler"
|
|
echo "Lauf 2 (Term alpha): $SECOND2 # identische Ausgabe (Zwei-Run-Identität, AD-17h)"
|
|
if [ "$FIRST1" = "$SECOND1" ] && [ "$FIRST2" = "$SECOND2" ]; then
|
|
echo "RESULT: IDENTISCH (gleicher Git-State + gleiches Eingabeset -> identische Candidate-Liste, AD-17h)"
|
|
else
|
|
echo "RESULT: ABWEICHUNG (Determinismus-Vertrag verletzt)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# =====================================================================
|
|
runlabel "T3: NO_MATCH — Term trifft kein bestehendes Concept -> leere Candidate-Liste -> UNTOUCHED_CONCEPT"
|
|
echo "--- Kandidaten-Erhebung: terms 'vollkommen-neuer-gamma-termin' ---"
|
|
RES=$(terms 'vollkommen-neuer-gamma-termin' | normalize)
|
|
echo "Candidate-Liste: '${RES}' (leer = gewuenscht)"
|
|
if [ -z "$RES" ]; then
|
|
echo "RESULT: LEER (NO_MATCH -> UNTOUCHED_CONCEPT: keine Mutation, kein log.md-Zusatz; leere Menge ⊆ erlaubte Menge)"
|
|
else
|
|
echo "RESULT: FEHLER (erwartet leer)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# =====================================================================
|
|
runlabel "T4: Determinismus-Vertrag praktisch — Term in Mehrfach-Konzepten, Konsolidierung zur Vereinigung"
|
|
cat > wiki/gamma.md <<'EOF'
|
|
---
|
|
type: concept
|
|
sources:
|
|
- resource: raw/gamma-v1.md
|
|
id: s1
|
|
generated:
|
|
by: wow-compiler/0.1.0
|
|
at: 2026-08-16T09:00:00Z
|
|
---
|
|
Gamma teilt den Term deterministische-relevanz-bestimmung (Stelle S-1).
|
|
EOF
|
|
git add -A; git commit -qm "Zuwachs gamma (teilt den Term)"
|
|
echo "--- Kandidaten-Erhebung (Term in alpha + gamma): ---"
|
|
terms 'deterministische-relevanz-bestimmung' | normalize | LC_ALL=C sort
|
|
echo "--- Erwartet: alpha, gamma (beide Concept-Pfade, lexikografisch; log ABGESCHNITTEN) ---"
|
|
|
|
echo
|
|
echo "===== Sandbox abgeschlossen (alle 4 Tests) ====="
|
|
echo "Sandbox-Root: $ROOT"
|