#!/bin/bash # Master-Task-Handler: verifiziert & validiert Tasks im Mesh-Share automatisch. # Läuft via Cron: */5 * * * * /path/scripts/master-task-handler.sh # Quelle /srv/work — Status=Ordnermodell (todo/inProgress/finished/bugged/completed) set -euo pipefail WORK="/srv/work" TODO="$WORK/todo" INPROG="$WORK/inProgress" FIN="$WORK/finished" BUG="$WORK/bugged" COMP="$WORK/completed" LOCK_TIMEOUT=15 # Minuten STALE_TIMEOUT=30 # Minuten mkdir -p "$TODO" "$INPROG" "$FIN" "$BUG" "$COMP" # 1) Verwaiste Locks bereinigen (>15 min) find "$INPROG" -name "*.lock" -mmin +$LOCK_TIMEOUT -delete 2>/dev/null || true # 2) Stale Dateien in inProgress (ohne Lock, >30 min) -> zurück nach todo for f in "$INPROG"/*.md "$INPROG"/*.json; do [ -f "$f" ] || continue [ -f "$f.lock" ] && continue if [ "$(find "$f" -mmin +$STALE_TIMEOUT 2>/dev/null | wc -l)" -gt 0 ]; then mv "$f" "$TODO/" 2>/dev/null && echo "[$(date)] stale -> todo: $f" fi done # 3) finished/ validieren (Frontmatter + # Ergebnis) for f in "$FIN"/*.md; do [ -f "$f" ] || continue if ! head -20 "$f" | grep -q "^---$" || ! grep -q "^# Ergebnis" "$f"; then mv "$f" "$BUG/" 2>/dev/null && echo "[$(date)] formatfehler -> bugged: $f" continue fi # Optional: Artefakt in completed/ spiegeln # cp "$f" "$COMP/$(basename "$f")" done # 4) bugged/ Retry-Buchhaltung (YAML: retries) for f in "$BUG"/*.md; do [ -f "$f" ] || continue retries=$(grep -m1 "^retries:" "$f" 2>/dev/null | awk '{print $2}' || echo 0) retries=${retries:-0} if [ "$retries" -gt 0 ]; then new=$((retries - 1)) sed -i "s/^retries: .*/retries: $new/" "$f" mv "$f" "$TODO/" 2>/dev/null && echo "[$(date)] retry($new) -> todo: $f" else echo "[$(date)] bleibt in bugged (retries=0): $f" fi done