Lenny — Tageslog 2026-08-06¶
Alles auf Branch m0-perception, jede Änderung flag-gesichert + test-gated, live
deployt. ~37 neue Tests. Geteilte Brains (truth/creative/language) blieben
durchgehend doktrin-streng.
A. Roadmap-Umsetzung (aus der Nacht-Eval 05.→06.08.)¶
Priorisierte 9-Punkte-Roadmap; Marco: „mach das alles", Entscheidung „#4 voll, Rest als Plan", danach „genau nach Reihenfolge umsetzen".
| # | Thema | Ergebnis | Commit |
|---|---|---|---|
| 1/2 | Renderer-Guard | kaputte Einzelverben („Ethik voraussetzen X") + Meta-Relationen (review_supports) nicht mehr als Fakt |
54813d9 |
| 3 | Densifier-Cron | thinking_pass alle 3h (deterministisch, kein LLM) |
7ed8814 |
| 4 | Procedural Memory | „Wie mache ich X?" → bestätigte Schritt-Prozedur, human-confirmed-Gate | e5e1c40 |
| 5 | Golden-Set-Gate | Regressions-Tor gegen Doktrin-Brüche, live 6/6 = 100 % | ccdb126 |
| 6 | Temporal Edge-Log | Kanten mit Gültigkeitsintervallen (revidierbar ohne Löschen) | 6be6c52 |
| 7 | Signal-Mixer Stufe 1 | L/C/T read-only ins route_trace (Zielbild messbar) | 8ef9ef7 |
| 8/9 | Cache / Creative-Rekombination | bewusst zurückgestellt (niedrig-Wert / bräuchte Raten) | — |
Baupläne für #5/#6/#7 lagen zwischenzeitlich in docs/ROADMAP_PLANS_5_6_7.md
(dann als echter Code umgesetzt).
B. Chris' Extremtest — Analyse + Fixes¶
Chris fütterte Lenny mit 400+ Wissensfragen + 60 Unsinns-Fragen und dokumentierte
alles (lenny_wissenstracking.md, inkl. Null-Baseline als Regressionstest).
Analyse-Befunde: 1602 Chat-Kandidaten, 0 promoted („Lenny merkt sich nichts"); 25 % Halluzinationen bei Unsinns-Fragen (alle aus dem Modell-Fallback); 4 konkrete Bug-Klassen.
Fixes (alle live):
| Befund | Fix | Commit |
|---|---|---|
| Konflikt-Blockade (mehrwertiges is_a fälschlich Widerspruch) | Whitelist mehrwertiger Relationen | d20b143 |
| 25 % Halluzinationen | Verweigerungspfad: vorsichtige/unsichere Formulierung + Unsinns-Erkennung | 9a86dd2 |
| „Masse"→„Masse" | Selbstreferenz-Filter | 9a86dd2 |
| „Git"→„代码仓库" | CJK/Non-Latin-Filter | 9a86dd2 |
| „Software-Treiber"→„Verbindung", „Router"→„Verbund" | Leer-Begriff-Filter (Answerbasis) | aa95bdd |
| kein-Footer („…ist ein Begriff.") | Status-Footer-Garantie am Chokepunkt | 2d254e8 |
| „Cloud-Speicher"→„Himmel" | Homonym-Guard (Tech-Lehnwort ≠ Natur-Homophon) | 8fa0eaf |
C. Tenant-Modell + der große Promotion-Hebel¶
Marcos Klärung: jeder API-Key (→ user_id) bekommt sein eigenes Tenant; alles
Besprochene landet dort. Die geteilten Brains bleiben doktrin-streng und lernen
NUR über die Evidenz-Pipeline, nie direkt aus Chat. Optionaler req.tent-Param =
Zusatz-Tent (Firmenwissen).
- Tenant-Gesprächslogger (
core/tenant_log.py,e20cacf): jeder Chat-Turn timestamped nachuser_brains/<user_id>.jsonl(+ optionaltent_<name>.jsonl). - Tenant-Learning (
core/tenant_facts.py+ Redirect + Antwortpfad,f305d83): aus dem Chat gelernte Fakten → Tenant des Users (statt Shared-Promotion-Stau), für IHN beantwortbar, gelabelt „aus unseren Gesprächen, nicht geteilt-verifiziert". Löst den 0-promoted-Stau strukturell + Chris' Kernfrust. Per-User isoliert.
D. Ops / Datenintegrität¶
- Clobber gelöst (
59b9788): Root Cause gepinnt —store.addON-CONFLICT überschriebbrainmit Defaulttruth; Re-Adds (Stabilitäts-Pass) stuften creative/language nach truth herab (Diode-Verstoß, 236+40 Fragmente). Fix: Upsert stuft creative/language nie nach truth herab. Cleanup: 276 Fragmente wiederhergestellt, Backup angelegt. Brains danach sauber (creative 770 / language 55 / truth 10383). - Bekannt: jeder Rebuild-Deploy löst ~1–2 h Embedding-Rebuild aus (Cache nicht inkrementell) + verliert live angelegte User (users.json ins Image gebacken).
Offen / nächste Kandidaten¶
- Chris eigener User/Key (Tenant-Isolation) — Eintrag vorbereitet, Key legt Marco.
- users.json ins Repo committen (User überleben Rebuilds).
- Inkrementeller Embedding-Cache (Ops, niedrig-Prio).
- Dichte bleibt ~3 (Soll ~10) — thinking_pass hebt sie langsam.
- Signal-Mixer Stufe 2/3 (echter Realizer) — großer Zielbild-Schritt.