diff --git a/Makefile b/Makefile index 3547175..5015b12 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: install dev prod stop logs remove auth sync sync-projects projects searxng ollama +.PHONY: install dev prod stop logs remove auth sync sync-projects sync-all projects searxng ollama COMPOSE = docker compose @@ -58,17 +58,22 @@ ollama: ollama pull qwen3.5:9b @echo "Ollama bereit — Provider 'Lokal' ist aktiv (Modelle anpassen: backend/config.py + dev-ops/opencode.json)." -sync: +sync: stop @mkdir -p storage/themen + @rm -f storage/creator.db-shm storage/creator.db-wal rsync -avz --progress root@178.104.67.87:/var/www/creator/storage/creator.db storage/ + rsync -avz --progress root@178.104.67.87:/var/www/creator/storage/creator.db-wal storage/ rsync -avz --progress --delete root@178.104.67.87:/var/www/creator/storage/themen/ storage/themen/ @echo "Sync abgeschlossen." # Projekte vom Server holen: `make sync-projects` (auch: `make sync projects`). -# Ohne --delete — lokale Projekte, die es auf dem Server nicht gibt, bleiben. +# Mit --delete — exakter Spiegel: lokale Projekte ohne Server-Pendant werden gelöscht. sync-projects: @mkdir -p projects - rsync -avz --progress root@178.104.67.87:/var/www/creator/projects/ projects/ + rsync -avz --progress --delete root@178.104.67.87:/var/www/creator/projects/ projects/ @echo "Projekt-Sync abgeschlossen." +sync-all: sync sync-projects + @echo "Voller Sync (Themen + Projekte) abgeschlossen." + projects: sync-projects diff --git a/frontend/src/components/BausteinPanel.vue b/frontend/src/components/BausteinPanel.vue index 275a42e..c088fa0 100644 --- a/frontend/src/components/BausteinPanel.vue +++ b/frontend/src/components/BausteinPanel.vue @@ -256,9 +256,14 @@ async function verdictPruefen() { provider: props.provider, messages: pruefDialog(), ...antwortPayload(), aktion: 'antwort_pruefen', }) if (meine !== pruefenRun) return // eine neuere Bewertung läuft → diese verwerfen - // Streak driftfrei aus streakVorFrage neu setzen; Reset beim ersten Erreichen von 3/10. + // Streak driftfrei aus streakVorFrage neu setzen; Reset nur am Deckel der + // aktiven Stufe (Tier 1 → absolviert/3, Tier 2 → verstanden/10). Bei Tier 3 + // läuft die Streak durch 3/10 durch; bei 25 ist eh gemeistert (Score frozen). let neu = res.bewertung === 'gut' ? streakVorFrage.value + 1 : 0 - if ((res.absolviert && !warAbsolviert) || (res.verstanden && !warVerstanden)) neu = 0 + const deckelErreicht = + (!props.tier2 && res.absolviert && !warAbsolviert) || + (props.tier2 && !props.tier3 && res.verstanden && !warVerstanden) + if (deckelErreicht) neu = 0 streak.value = neu applyPruefung(res) if (ziel) {