#!/usr/bin/env bash # ============================================================================ # Sandbox Story 3.10 — Inkrementelle Update- & Synthese-Erhaltung + Hold-Ausbau # (schema/compiler.md §5.16, Revision 3.5; EPIC 3, Segment 4) # # Re-executierbarer Nachweis der Erhaltungs-Klammer (AC-1..AC-8). Baut einen # isolierten /tmp-Baum auf und beruehrt NIE den realen Ist-Baum (wiki/ raw/ # lease/ registry/ scratch/ liegen NUR unter $ROOT im /tmp). Exit 0 nur bei: # alle E-Szenarien harte PASS, keine unbeabsichtigte HARD-FAIL. # # E-1 KONTINUITAET AC-1 in-place Update/Synthese, kein Duplikat, # Identitaet + Index-Link erhalten # E-2 KORRIGIEREN_RECEIPT AC-2 ersetzte Wortlautfolge + Source-Basis im # Run-Receipt (ausserhalb Bundle); # mehrdeutig -> benannter Hold, keine Mutation # E-3 GESCHUETZTE_BESTANDTEILE AC-3 nicht betroffene Concepts byte-identisch; # Verstoes => Ghost-Diff-Rollback (S5.9 Pkt.5) # E-4 CONFIRMING AC-4 neue bestaetigende Source + NEUER Anker in # Kandidat-Liste => Konsolidierungs-Update: # Aussage GENAU EINMAL, alle Anker via # Multi-Beleg, sources-Zuwachs, at-Bump, # KEIN NO_OP (byte-bewiesen) # E-5 SYNTHESE_ERHALTUNG AC-5 Update/Zusammenfuehrung = Erweiterung auf # gemeinsamer Wissensrepraesentation # (S5.10-Pkt.-2/3/5), keine A|B-Aneinanderreihung # E-6 NO_OP_BYTE_ERHALTEND AC-6 volle Evidenzanker-Menge bereits im Body # => byte-erhaltender NO_OP (keine Mutation, # kein at-Bump, kein sources-Zusatz); # fehlender Anker => CONFIRMING (nicht NO_OP) # E-7 SELBSTTEST_AKTUELLER_RUN AC-7 Provenienz-/Link-Selbsttest aus dem AKTUELLEN # Run: Baseline = aktuelles , # erwartete Deltas = Kandidaten-Liste (fuer # die Erhebungs-Stufen a/b/c) u. Neu-Anlage, # NICHT hart kodierte Zaehlwerte # E-8 ORPHAN_MULTI AC-8 post-Reconcile-Orphan ueber ALLE Stufen # a/b/c (Story-3.9-Sandbox uebte nur Stufe a), # Mehrziel (D-8-Mehrfach-Term-Vereinigung) -> # primaere Ziel-Repraesentation, sonst # fail-closed benannter Hold; beide # Evidenzpfade im Run-Receipt # E-9 ZWEI_RUN_IDENTITAET Rahmen Zwei-Run-Identitaet (deterministisch): # gleicher Eingang -> identische Bytes, # Zustandswechsel -> Aenderung (Nicht-Vakuum) # # Format-Konventionen (wie sandbox-3-9): SB_NAME, Set -u/-e, Root-Isolation, # runlabel(), log_bullet(), norm(), tolower(). LC_ALL=C fuer deterministische # Sortierung. Fallback-Geldschrank: der reale Ist-Baum darf NIE angefasst werden. # ============================================================================ set -u set -e set -o pipefail # ----- Sicherheitsnetz: alle Szenario-Baeume werden NUR unterhalb von SB_DIR # angelegt; SB_DIR liegt fest in /tmp. Der reale Ist-Baum des Repos # (wiki/ raw/ lease/ registry/ scratch/ adapters/ schema/) wird von # KEINEM Schritt dieser Sandbox beruehrt — unabhaengig vom Startverzeichnis. # ----------------------------------------------------------------------------- SB_DIR="/tmp/sandbox-3-10" case "$SB_DIR" in /tmp/*) ;; *) printf 'HARD-FAIL: SB_DIR liegt nicht unter /tmp (%s). Sandbox abgebrochen.\n' "$SB_DIR" >&2 exit 1 ;; esac SB_NAME="sb310" SB_RUN_TS=$(date +%Y%m%d-%H%M%S) RECEIPTS_DIR="$SB_DIR/receipts-$SB_RUN_TS" mkdir -p "$RECEIPTS_DIR" PASS=0 FAIL=0 FAILED_NAMES="" log_bullet() { printf '%s\n' "$*"; } runlabel() { # runlabel