Lenny — Tageslog 2026-08-07¶
Branch m0-perception, flag-gesichert + test-gated. Anlass: Chris' 2. QA-Runde
(lenny_wissenstracking_2.md). Fortschritt sichtbar — viele Fragen aus Runde 1
sind von „dünn" nach „teilweise/geprüft" gewandert (die Runde-1-Fixes wirken).
Kernbefund Runde 2 (Chris' Befund 1)¶
Der deterministische „geprüft"-Pfad lieferte teils kaputte Ausgaben MIT dem STÄRKSTEN Vertrauens-Siegel — genau die gefährlichste Kombination: - #433 Lichtjahr: „ein LUZIFERjahr ist eine längenangabe" (Alias Licht→Luzifer mitten im Wort + unaufgelöste HTML-Entity). - #427 Mond: „einmondigphasenreiches satellit" (Wort-Salat als geprüft). - #423 Planet→Planet (Selbstreferenz, 2. Fall nach „Masse"). - Gegenbeispiel #461 Skulptur: geprüft UND sauber → der Pfad KANN gutes Output.
Umgesetzte Fixes (Commit 31f9b04, lokal — Push zurückgestellt)¶
| Befund | Fix | Wo |
|---|---|---|
| #423 Planet→Planet (Selbstreferenz im Bestand) | _weighted_fragment_answerbasis blockt fragment == suggestedmeaning. Der bisherige Filter griff nur bei NEUEN Kandidaten (normalize_learning_candidate), nicht bei Bestands-Kanten. |
ask_lenny.py |
#433 ä HTML-Entity |
html.unescape() am Antwort-Chokepunkt (eine Entity im Text ist immer ein Bug). |
api_server.py |
| #427/#433 kaputtes Output mit geprüft-Siegel | Output-Qualitäts-Gate (Chris' Vorschlag): wirkt die Ausgabe mechanisch kaputt (Rest-Entity oder Wort-Salat ≥20 Klein-Zeichen) UND trägt hohes Siegel → Downgrade auf Kandidat + Warnhinweis. „Im Zweifel Kandidat statt geprüft." | api_server.py |
Flags (Default an): LENNY_ENABLE_OUTPUT_QUALITY_GATE.
Tests: tests/test_output_quality_gate.py (8), core/test_self_reference_answerbasis.py (3).
Voller Lauf: 527 passed (1 unrelated Fail = fehlendes backups/…/ENDPOINTS_BEFORE.txt-
Fixture, im git archive-Worktree nicht vorhanden — keine Code-Regression).
Nachtrag: Luzifer DOCH gefangen — die Invariante (Commit 330ab85)¶
Erste Einschätzung war falsch (Chris zu Recht korrigiert): ich hatte seinen
VERWORFENEN Vorschlag (Wörterbuch-Abgleich) mit dem KORRIGIERTEN verwechselt.
„Luziferjahr" ist morphologisch so sauber wie „Lichtjahr" — kein Lexikon/Wort-Salat-
Detektor fängt das. Der korrigierte Vorschlag ist eine Invariante, die nur einen
zur Abfragezeit ohnehin vorliegenden Wert braucht: den erfragten Begriff selbst.
Frage „Was ist ein Lichtjahr?" → Antwort enthält „luziferjahr", aber nicht „Lichtjahr"
→ Ersetzung SICHER erkannt, unabhängig von sonstigem Unsinn im Satz. Umgesetzt als
_queried_subject_term + Überlebens-Check im siegel-gesicherten Gate; konservativ auf
eindeutige Einwort-Begriffe ab 6 Zeichen (Kompositum-Klasse), damit Umlaut-Flexion
kurzer Wörter (Maus→Mäuse) keinen Fehlalarm auslöst. +6 Tests. Bleibt Symptom-Netz —
die Wurzel ist Alias-Ersetzung auf Wortbestandteilen statt ganzen Begriffen.
KPI-Ereignis-Log (Chris-KI-Einwand, Commit 86d6aa0)¶
Eine nackte Zahlenreihe erlaubt keine Ursachenzuordnung. relation_diversity_report.py
führt jetzt neben Messpunkten ein Ereignis-Log (--note "…"), mit dem KPI-Wert im
Moment der Maßnahme gestempelt, chronologisch verschränkt. Live-Nulllinie gesetzt
(2,58 %). +4 Tests.
Bewusst NICHT (noch) gefixt — ehrlich dokumentiert¶
- Durchgehende Kleinschreibung (#440/#441/#467): kosmetisch; als Downgrade-Signal zu häufig (viele legitime Antworten starten klein) → bewusst KEIN Auto-Downgrade, sonst wird das Siegel inflationär entwertet. Besser im Renderer bei der Quelle lösen.
- #451 Breitengrad→„Ekliptik": echter Sachfehler in den Daten, kein Rendering-Bug → gehört in die Evidenz-Pipeline, nicht in ein Output-Gate.
Deploy / Push¶
- Lokal committet
31f9b04, live deployt viadeploy.sh(git archive HEAD, Rebuild → ~1–2 h Embedding-Rebuild danach). - Push zurückgestellt (Marco: „der Push wird nach Fehlerverbesserung gemacht",
„creds mach ich später sobald alles deployed ist"). Offen zum Pushen:
a5cea0a(KPI Runde 1) +31f9b04(Runde 2).