fix(gates): doc-drift prueft nur done/in_progress-Zeilen auf Datei-Existenz
Some checks failed
gates / quality (push) Has been cancelled

Ein frisch gebootstraptes Projekt hat lauter todo-Zeilen, deren Dateien
absichtlich noch nicht existieren. Vorher schlug das Gate dort faelschlich an.
Jetzt status-bewusst: nur done/in_progress/drift-Zeilen muessen ihre Pfade
belegen. Mehrwortige Testbefehle werden nicht mehr als Pfade fehlinterpretiert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 06:49:16 +02:00
parent 696eddb5ef
commit 874fcd2ea6

View File

@@ -9,20 +9,31 @@ if grep -q '<id / datum>' STATE.md 2>/dev/null; then
echo "GATE: PASS"; exit 0
fi
echo "[drift] pruefe im Manifest referenzierte Pfade..."
# Loop laeuft im Haupt-Shell (Process Substitution), damit fail=1 wirkt.
echo "[drift] pruefe im Manifest referenzierte Pfade (nur done/in_progress/drift)..."
# Nur Pfade aus ERLEDIGTEN Zeilen muessen existieren — 'todo'-Zeilen sind Plan,
# ihre Dateien gibt es absichtlich noch nicht. Treffer in eine Datei sammeln,
# damit fail=1 nicht in einer Pipe-Subshell verloren geht.
miss=$(mktemp)
if [ -f "$man" ]; then
while read -r p; do
# Platzhalter und Nicht-Pfade ueberspringen.
case "$p" in
*" "*|*…*|_*|*path/to*) continue ;;
esac
case "$p" in
*/*|*.py|*.md|*.sh|*.js|*.ts|*.yml|*.yaml|*.json)
[ -e "$p" ] || { echo " - fehlende Referenz: $p"; fail=1; } ;;
esac
done < <(grep -oE '`[^`]+`' "$man" | tr -d '`')
while IFS= read -r line; do
case "$line" in \|*) : ;; *) continue ;; esac # nur Tabellenzeilen
status=$(printf '%s' "$line" | sed 's/^|//; s/|[[:space:]]*$//' \
| awk -F'|' '{print $NF}' | tr -d ' ' | tr 'A-Z' 'a-z')
case "$status" in done|in_progress|drift) : ;; *) continue ;; esac
while IFS= read -r tok; do
case "$tok" in *" "*|*…*|_*|*path/to*) continue ;; esac
case "$tok" in
*/*|*.py|*.md|*.sh|*.js|*.ts|*.yml|*.yaml|*.json|*.conf|*.ini|*.txt)
[ -e "$tok" ] || echo "$status $tok" >> "$miss" ;;
esac
done < <(printf '%s\n' "$line" | grep -oE '`[^`]+`' | tr -d '`')
done < "$man"
fi
if [ -s "$miss" ]; then
while IFS=" " read -r st p; do echo " - fehlende Referenz (Status $st): $p"; done < "$miss"
fail=1
fi
rm -f "$miss"
echo "[drift] STATE.md Stale-Check (Commits seit letzter Aenderung)..."
last_state=$(git log -1 --format=%H -- STATE.md 2>/dev/null || true)