From ff319ff29103adebf89715972439c86519a55f72 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Thu, 20 Aug 2026 21:07:45 +0200 Subject: [PATCH] feat(deploy): referenz-check.sh - objektiver Fertig-Test fuer die Messlatte Damit 'fertig' keine Auslegungssache ist: derselbe Befehl fuer den Agenten zur Selbstpruefung und fuer die Auswertung. Prueft alle fuenf Kriterien und gibt ein klares Urteil plus Exit-Code. Co-Authored-By: Claude Opus 5 --- deploy/referenz-check.sh | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 deploy/referenz-check.sh diff --git a/deploy/referenz-check.sh b/deploy/referenz-check.sh new file mode 100644 index 0000000..9f1c958 --- /dev/null +++ b/deploy/referenz-check.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# Referenz-Check (20.08.2026): prueft die fuenf Fertig-Kriterien der Messlatte. +# +# Zweck: "fertig" darf keine Auslegungssache sein. Derselbe Befehl fuer den Agenten +# (Selbstpruefung) und fuer die Auswertung. Siehe docs/aufgaben/referenzaufgabe-mem0-ausbau.md +# +# Aufruf: bash deploy/referenz-check.sh [worktree-pfad] +# Exit: 0 = alle Kriterien gruen · 1 = mindestens eines rot +set -uo pipefail + +W="${1:-$HOME/projekte/mc2-referenz}" +LINT="${LINT_RUFF:-$HOME/.venv-lint/bin/ruff}" +PY="${BACKEND_PY:-$HOME/mission-control-v2/backend/.venv/bin/python}" +SMOKE="${SMOKE_SH:-$HOME/mission-control-v2/deploy/self-smoke.sh}" +ROT=0 + +pruef() { # $1=Nummer $2=Beschreibung $3=Ergebnis(0/1) $4=Detail + if [ "$3" -eq 0 ]; then printf ' %s %-34s GRUEN %s\n' "$1" "$2" "${4:-}" + else printf ' %s %-34s ROT %s\n' "$1" "$2" "${4:-}"; ROT=1; fi +} + +[ -d "$W" ] || { echo "ABBRUCH: Worktree nicht gefunden: $W"; exit 1; } +echo "=== Referenz-Check ($W) ===" + +# 1 — Lint +if [ -x "$LINT" ]; then + out="$("$LINT" check "$W" 2>&1)"; rc=$? + pruef 1 "Lint sauber (ruff)" $rc "$(printf '%s' "$out" | tail -1)" +else + pruef 1 "Lint sauber (ruff)" 1 "ruff fehlt unter $LINT" +fi + +# 2 — Backend laedt +out="$(cd "$W/backend" && "$PY" -c 'import app' 2>&1)"; rc=$? +pruef 2 "Backend importierbar (app)" $rc "$(printf '%s' "$out" | tail -1)" + +# 3 — keine mem0-Reste (docs/ ausgenommen: Historie) +n="$(cd "$W" && grep -ril mem0 backend/ mcp/ deploy/ --include='*.py' --include='*.sh' 2>/dev/null | wc -l)" +[ "$n" -eq 0 ]; rc=$? +pruef 3 "Keine mem0-Reste" $rc "$n Datei(en) mit Treffern" +[ "$n" -gt 0 ] && (cd "$W" && grep -ril mem0 backend/ mcp/ deploy/ --include='*.py' --include='*.sh' 2>/dev/null | sed 's/^/ /') + +# 3b — der Sidecar-Ordner selbst +if [ -d "$W/mem0_service" ]; then pruef "3b" "Ordner mem0_service entfernt" 1 "liegt noch da" +else pruef "3b" "Ordner mem0_service entfernt" 0; fi + +# 4 — Selbsttest (laeuft gegen das LAUFENDE System, nicht gegen den Worktree) +if [ -r "$SMOKE" ]; then + out="$(timeout 540 bash "$SMOKE" 2>&1)"; rc=$? + pruef 4 "Selbsttest self-smoke" $rc "$(printf '%s' "$out" | grep -cE '\bPASS\b') PASS / $(printf '%s' "$out" | grep -cE '\bFAIL\b') FAIL" +else + pruef 4 "Selbsttest self-smoke" 1 "nicht lesbar: $SMOKE" +fi + +# 5 — MC2 lebt +curl -s -m 8 localhost:9001/api/health 2>/dev/null | grep -q '"status":"ok"'; rc=$? +pruef 5 "MC2 gesund" $rc + +echo +if [ $ROT -eq 0 ]; then echo " ERGEBNIS: FERTIG — alle Kriterien gruen." +else echo " ERGEBNIS: NICHT fertig — mindestens ein Kriterium ist rot."; fi +exit $ROT