#!/usr/bin/env bash set -euo pipefail # tests/run_e2e_roundtrip.sh # End-to-End Testpipeline für mindnet WP-03 # # Schritte: # 1) Qdrant truncate (Prefix!) # 2) Import (Apply + Purge) => Create-Fall # 3) Import (Apply - ohne Änderungen) => Idempotenz # 4) Hash-Reporter (Fehlende Hash-Varianten) # 5) Export nach _exportVault # 6) Vergleich Vault vs. Export (Body-Fokus) # 7) Sync-Deletes: Eine Datei temporär „entfernen“, Dry-Run + Apply, dann zurückrollen # # Aufrufe: # ./tests/run_e2e_roundtrip.sh [--vault ./test_vault] [--prefix mindnet] # # ENV: # COLLECTION_PREFIX (Default mindnet) VAULT="./test_vault" PREFIX="${COLLECTION_PREFIX:-mindnet}" while [[ $# -gt 0 ]]; do case "$1" in --vault) VAULT="$2"; shift 2;; --prefix) PREFIX="$2"; shift 2;; *) echo "Unbekannte Option: $1" >&2; exit 2;; esac done echo "== E2E Roundtrip ==" echo "Vault: $VAULT" echo "Prefix: $PREFIX" echo export COLLECTION_PREFIX="$PREFIX" echo "-- 1) Qdrant truncate" python3 -m scripts.reset_qdrant --mode truncate --prefix "$PREFIX" python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" echo echo "-- 2) Import (Create-Fall)" python3 -m scripts.import_markdown --vault "$VAULT" --apply --purge-before-upsert --prefix "$PREFIX" python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" echo echo "-- 3) Import (Idempotenz: keine Änderungen erwartet)" python3 -m scripts.import_markdown --vault "$VAULT" --apply --prefix "$PREFIX" python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" echo echo "-- 4) Hash-Reporter" python3 -m scripts.report_hashes --prefix "$PREFIX" || true echo echo "-- 5) Export nach _exportVault" OUT_DIR="_exportVault" rm -rf "$OUT_DIR" python3 -m scripts.export_markdown --out "$OUT_DIR" --prefix "$PREFIX" echo echo "-- 6) Vergleich Vault vs. Export (Body-Fokus)" python3 tests/compare_vaults.py --src "$VAULT" --dst "$OUT_DIR" --focus body echo echo "-- 7) Sync-Deletes (simuliert)" # wähle eine Datei und verschiebe sie temporär weg TMP_DIR="$(mktemp -d)" SAMPLE_MD="$(find "$VAULT" -type f -name '*.md' | head -n 1 || true)" if [[ -n "${SAMPLE_MD:-}" ]]; then mv "$SAMPLE_MD" "$TMP_DIR/" echo "Temporär entfernt: $(basename "$SAMPLE_MD")" echo " 7a) Dry-Run" python3 -m scripts.import_markdown --vault "$VAULT" --sync-deletes --prefix "$PREFIX" echo " 7b) Apply" python3 -m scripts.import_markdown --vault "$VAULT" --sync-deletes --apply --prefix "$PREFIX" # zurückrollen mv "$TMP_DIR/$(basename "$SAMPLE_MD")" "$SAMPLE_MD" rm -rf "$TMP_DIR" echo " 7c) Re-Import (wieder anlegen)" python3 -m scripts.import_markdown --vault "$VAULT" --apply --prefix "$PREFIX" python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" else echo "Hinweis: Keine MD-Datei im Vault gefunden – Sync-Deletes übersprungen." fi echo echo "== E2E Roundtrip abgeschlossen =="