diff --git a/DESIGN.md b/DESIGN.md index a5d1321..1686fbe 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -14,7 +14,9 @@ wird nach „lernt sich gut zusammen" (Backward Design), nicht nach „ist diese ``` E0 Korpus Themen: N Recherche-Sweeps (Curricula/Lehrbuch/Syllabus/Übungen) → Snapshots Uni: Dateien aus topics// (txt/md/pdf) → Snapshots - Soll-Extraktion je Quelle → Konsens (Punkt braucht ≥2 unabhängige Quellen) + Soll-Extraktion je Quelle → Konsens (Themen: Punkt braucht ≥2 unabhängige + Quellen; uni: 1 Beleg genügt — Korpus ist vertrauenswürdig, Zitat-Gate + fängt Halluzinationen) Themen: Runden bis Sättigung (Runde ohne neuen Soll-Punkt) → Auto-Freeze E1 Inventar Abschnitte (~12k Zeichen) → 2 Reader je Abschnitt → Atome mit Verbatim-Anker Dedup: Anker-Overlap (auto) → Embedding-Kandidaten → 2er-Panel (einstimmig) diff --git a/backend/db.py b/backend/db.py index 920d94a..1542c26 100644 --- a/backend/db.py +++ b/backend/db.py @@ -141,6 +141,9 @@ def _init_schema(con: sqlite3.Connection) -> None: # kennt _ORDNUNG den Status nicht und der Resume fiele fälschlich auf korpus zurück. con.execute("UPDATE topics SET status='struktur_fertig'" " WHERE status IN ('diagramme_fertig', 'fehlersuche_fertig')") + # Befunde entfernter Ebenen schließen — sie würden sonst ewig als „offen" im Board stehen + con.execute("UPDATE befunde SET status='veraltet'" + " WHERE status='offen' AND ebene IN ('diagramme', 'fehlersuche')") con.commit() diff --git a/backend/main.py b/backend/main.py index 76215f0..04767a5 100644 --- a/backend/main.py +++ b/backend/main.py @@ -153,10 +153,16 @@ def state(topic: str): "bausteine": db.query( "SELECT b.*, s.stage FROM bausteine b LEFT JOIN sections s ON s.baustein_id=b.id" " WHERE b.topic=? ORDER BY b.ord", (topic,)), - # topic-scoped: offene Befunde früherer Läufe bleiben nach Resume sichtbar + # Je Ebene nur der JÜNGSTE Messstand: offene Befunde älterer Läufe sind + # veraltete Momentaufnahmen (aak: 1244 Anker-Leichen bei 0 echten) — der + # letzte Lauf, der die Ebene gemessen hat, ist die Wahrheit. "befunde": db.query( "SELECT b.* FROM befunde b JOIN runs r ON r.id=b.run_id" - " WHERE r.topic=? AND b.status='offen' ORDER BY b.id", (topic,)), + " WHERE r.topic=? AND b.status='offen'" + " AND b.run_id = (SELECT MAX(b2.run_id) FROM befunde b2" + " JOIN runs r2 ON r2.id=b2.run_id" + " WHERE r2.topic=? AND b2.ebene=b.ebene)" + " ORDER BY b.id", (topic, topic)), "agenten": agents.aktive_agenten(), }