# Novaberg — Fundliste **Projekt:** Novaberg — The Nova Anima Resonance System **Dokument:** Rohe, noch unklassifizierte Funde aus laufender Arbeit **Stand:** 8. November 2026, 14:58 UTC (`date -u`; der Fund vom 04.10.2026 zum blockierenden Erwerb von `graph_run_lock` ist als `EVENT-LOCK-HAELT-SCHLEIFE` klassifiziert und mit seinem Bau geschlossen, umgezogen; acht Funde neu zum Riegel — der Spalt zwischen Erwerb und `try`, ein Abbruch im Lauf gibt den Riegel frei, das Ereignis ist vor dem Riegel entnommen, die Wartezeit ohne Zeile, keine Reihenfolge am Riegel, kein Zeuge für den Abstand der Versuche, ein Zeuge ohne echte Nutzlast, die Eingriffe der zweiten Fassung nur vorhergesagt; zwei Nachträge am Fund vom 12.09.2026, Punkte (3) und (4)). Davor 8. November 2026, 14:54 UTC (`date -u`; der Fund vom 07.11.2026 zu `broadcast_threadsafe` ist als `BROADCAST-WARTET-AUF-EIGENER-SCHLEIFE` klassifiziert und mit seinem Bau geschlossen, umgezogen; neun Funde neu zur Zustellung der Äußerung — `loop=None` mit falschem Grund, ein Abbruch kostet das Ereignis, `to_thread` braucht einen Platz im Pool, zwei Zeugen an der Uhr, zwei blinde Eingriffe, die Äußerung erst nach Pfad 1, eine leere `client_id`, zwei synchrone Aufrufe auf der Schleife, ein toter Verweis). Davor 8. November 2026, 14:45 UTC (`date -u`; dreizehn Funde neu zu GV4 — die Eingriffe der letzten Zeugen nur vorhergesagt, der Docstring einer Umkehr ohne Historie, `CancelledError` ohne Zeugen, eine Kennung mit Bindestrich oder `@` bricht die Tag-Abfrage des KZG, nach einem Neustart der Datenbank verliert der nächste Turn Lücken und Protokoll, `fehler_typ` trägt die Unterklasse, der Fehlertext ungekürzt im Protokoll, vier Fangstellen ohne `log_fehler`, ein toter Import, `ValueError` des Aufrufers als Ausfall, eine unerreichbare Ausgabe-Verifikation, zwei Zeugenlücken am Eintrag und an der Fehlerzeile). Davor 8. November 2026, 14:34 UTC (`date -u`; sieben Funde neu zum Nein am Tor — die Klärung der Timeline endet auf ein Nein weiter als Erfolg, die Absicht ist offen; `_build_return` der Charakter-Identität ohne `dismissed`, ihr veralteter Docstring, ein richtiger Satz nach dem Nein wird korrigiert, das englische Statuswort in der Stufenanzeige, kein Zeuge des Datenteils im Selbstbild, ein bloßes Nein auf Auswahl und Duplikat der Notizen; der Fund vom 05.10.2026 zum Wort *Agent* trägt, dass eine der drei Stellen behoben ist). Davor 8. November 2026, 14:17 UTC (`date -u`; zwei Funde neu zu `ENTITAETIDS-MIT-DUBLETTEN` — der ungeprüfte Durchreichweg der Notizen, die unerreichbare Ausgabe-Verifikation in `_entitaeten_aufloesen`). Davor 8. November 2026, 14:15 UTC (`date -u`; sieben Funde neu zu `submit_sync` — `broadcast_threadsafe` wartet auf seiner eigenen Schleife, drei blinde Eingriffe, ein Warten der Schleife auf einen Thread, die Abweisung als Modellausfall in Fakten und Timeline, `timeout=None` an der Basis, ein veralteter Kommentar im Router, die Anfrage nach abgelaufener Frist). Davor 8. November 2026, 14:10 UTC (`date -u`; ein Fund neu aus dem Nachzug zum Connector `qwen38` — die READMEs und die Compose-Vorlage kennen `gemma4a4b` und `qwen38` nicht). Davor 6. November 2026, 20:43 UTC (`date -u`; die 43 Funde vom 25. und 26.10.2026 klassifiziert und umgezogen — 14 neue Kennungen, 4 Nachträge, 6 Handgriffe, 5 entfallen mit Grund). Davor 6. November 2026, 20:12 UTC (`date -u`; die Commit-Kennungen nachgetragen — Code-Tree `3806695` ist `a6e46c2`, die Doku dazu `b87cc49`; Code-Tree `6feb70a` ist `e71df6b`, die Doku dazu `7b35557`). Davor 26. Oktober 2026, 19:50 UTC (`date -u`; acht Funde neu aus dem Bau zum Kanon an den Verwendungsstellen — eine andere Schreibweise eines Kanon-Werts im KZG, die Grenzen der Suchzeugen, die Säulen der Neugier je nur in einer Richtung bezeugt, mehrere Fehlerzeilen je Turn für einen Fremdwert, der Zwilling der Faszination ohne Prüfung der Fehlerzeile, zwei Lücken am Zeugen der Kopien, die Ampel der *Faszination*, eine geschlossene Kennung als offen in der Zeile *KZG-Agent*). Davor 26. Oktober 2026, 19:03 UTC (`date -u`; neun Funde neu aus dem Bau des Kopfblock-Lesers am Verfasser — die Unterstrich-Auszeichnung des zweiten Werts, ein Feld über zwei Zeilen, ein doppeltes Feld, ein zweiter Wert als gewöhnliches Wort der Erläuterung, ein zweiter Wert in anderer Schreibweise, Zeugenlücken am Kriterium `mehrdeutig`, der Docstring von `urteil_lesen`, die unerreichbare Verifikation in `_aufzaehlung_lesen`, ein leeres `GEPRUEFT`). Davor 26. Oktober 2026, 18:33 UTC (`date -u`; acht Funde neu — `_verifizieren_termin` liest den Termin ohne `user_id`, `suchtext` einer Notiz läuft eine Schreibung hinterher, das Umbenennen setzt `suchtext` nicht neu, das Muster `.get(…, "")` steht außerhalb der vier Klassifikationen weiter, `dateien` macht ein Feld falschen Typs still leer, die Ziel- und Deltatabellen von Raum und Gesprächsvektor ohne Riegel, die Delegationsakte schreibt Intentionen und Modus ungeprüft, `tone` in rund jedem zehnten Turn außerhalb seines Kanons). Davor 26. Oktober 2026, 08:25 UTC (`date -u`; drei Funde neu aus dem Bau zum geprüften Lesen der Klassifikationsantwort — die Suche des Vollständigkeitszeugen beginnt am Zeichen `.parsed`, die Chat-Nummern im Kopf-Docstring der Notizen-Klassifikation, die Suche kennt keine Gültigkeitsbereiche; ein Fund klassifiziert und mit seinem Bau geschlossen (`KLASSIFIKATION-NULL-FELD-WIRFT`)). Davor 26. Oktober 2026, 08:17 UTC (`date -u`; drei Funde neu aus dem Bau der Bindung der Kennung in `notizen` und `dateien_wurzeln` — die Formen, die das Kriterium der Vollständigkeit nicht liest, die Vorgabe `""` für `user_id` in fünf Schreibwegen der Notizen, die vertippte Nummer als ERROR in `dateien_wurzeln`; der Verweis am Fund zu `NotizenRepository` auf das Archiv nachgezogen). Davor 26. Oktober 2026, 07:51 UTC (`date -u`; neun Funde neu — aus der Messung im Betrieb zu den Ja/Nein-Toren der Abbruch an der Rekursionsgrenze, aus den Zeugen der Bauten vom 25.10.2026 zwei Lücken, der stille Rückfall einer unbekannten `action`, aus der Prüfung der Kennungen des Faktengedächtnisses drei (`ICH heisst` neben einem Possessiv, `fakten.wiedervorlage_am` ohne Erzeuger, `NotizenRepository` ohne Bindung an den Menschen), aus dem Nachzug zwei (die Moduldokumente ohne die Prüfung der Kennung, die Zählzeile im Wegweiser der Bugs); einer erledigt — der offene Bug am gelöschten Plugin). Davor 25. Oktober 2026, 22:05 UTC (`date -u`; ein Fund neu aus der Messung des Subjekttyps am Modell: ein Personenname, der zugleich ein Ortsname ist, verliert seinen Titel). Davor 25. Oktober 2026, 21:59 UTC (`date -u`; ein Fund klassifiziert (`SCHREIBWEG-KENNUNG-OHNE-MENSCH`), drei Funde neu aus der Messung am Modell zu `DIREKTIVEN-KENNUNG-UNGEPRUEFT`: `"anweisung": null` wirft `TypeError`, Löschen ohne Ziel in `charakter_identitaet` fragt nach *alle*, Wiederherstellen ohne Ziel nennt die einzige inaktive Zeile). Davor 25. Oktober 2026, 08:55 UTC (`date -u`; ein Fund klassifiziert (`DIREKTIVEN-KENNUNG-UNGEPRUEFT`), ein Fund neu: die Schreibwege von `dateien_wurzeln` und `notizen` ohne `user_id`). Davor 24. Oktober 2026, 22:59 UTC (`date -u`; ein Fund neu: das Löschen einer Direktive per Chat bricht an der Kennung `"[13]"` ab). Davor 24. Oktober 2026, 22:21 UTC (`date -u`; die Commit-Kennung nachgetragen — Code-Tree `f901e08` ist `e1e0724`, die Doku dazu `d2d6ec8`). Davor 24. Oktober 2026, 21:35 UTC (`date -u`; fünf Funde neu zur geschlossenen Zustimmung an den Ja/Nein-Toren — der Preis der geschlossenen Zeichen, *passt* nur in zwei Diensten Zustimmungswort, die Pronomen als Selbstaussage, *passt* und *danke* am Angebot gegenüber der Rückfrage, *„mach ich das“*; die Zeilen zu `WAIT_STEMS` als überholt markiert). Davor 24. Oktober 2026, 16:50 UTC (`date -u`; die Funde vom 24.10.2026 klassifiziert und nach *Umgezogen — 24.10.2026, aus der Klassifizierung der Funde vom 24.10.2026* — achtzehn von neunzehn, dazu der Fund vom 22.10.2026 zur Sachlage an kaputtem JSON: acht Bugs mit Kennung, zwei Backlog-Einträge, vier Nachträge an zwei Kennungen, drei Funde in neuen Bugs ohne eigene Kennung, eine Berichtigung in `novaberg-memory-synapsen_b.md`; der Kommentar *„bis 2044 Kanten je Knoten“* bleibt unter *Offen*, mit Vermerk; zwei Funde neu — die Auswahlfrage der Charakter-Identität führt auf ein Zustimmungswort aus, *„auf 12 Uhr nachts“* schreibt beim Verschieben vor den alten Termin). Davor 24. Oktober 2026, 14:20 UTC (`date -u`; acht Funde neu beim Nachzug zur Deutung am Tor der Direktiven — Formen der Zurückhaltung ohne Stamm, zwei Zwillinge, die Stämme im Umfeld, die Kopie der Wortlisten in drei Diensten, die unlösbare Auswahlfrage, die Ablehnung nur am Text im `pipeline_log`, *„(ID None)“* in der Pflicht-Rückfrage, die Art der Frage am Wortlaut). Davor 24. Oktober 2026, 13:58 UTC (`date -u`; sechs Funde neu beim Nachzug zur Rückfrage nach der Tageshälfte beim Verschieben — unstimmige Paare an 1–11, der Satz von `keine_eindeutige_zeit`, die Antwort *„4 Uhr morgens“*, kein Zeuge für ein Tageswort im Titel, der genannte Tag gegen den gelesenen, *„Wie bitte?“* im Notizen-Dienst). Davor 24. Oktober 2026, 13:43 UTC (`date -u`; ein Fund neu bei der Messung von Trigger 2 im Betrieb — die Sachlage fiel einmal an kaputtem JSON aus). Davor 24. Oktober 2026, 11:07 UTC (`date -u`; drei Funde neu beim Nachzug zu Trigger 2 an der Verwendung — der Messwert ohne Datum im Kommentar des Dispatchers, Kantenzahl und Dauer als Summen je Lauf, zwei Aufrufer von `knoten_verstaerken` in `novaberg-memory-synapsen_b.md`). Davor 24. Oktober 2026, 10:50 UTC (`date -u`; die acht Funde vom 23.10.2026 klassifiziert und nach *Umgezogen — 24.10.2026* — sieben Bugs mit Kennung, einer als Nachtrag an `TIMELINE-LESEPFAD-INSTABIL`; ein Fund neu: ein Viertel der Kanten des Langzeitgedächtnisses steht nicht auf der Stärke, die Trigger 2 heute rechnet). Davor 23. Oktober 2026, 22:31 UTC (`date -u`; acht Funde neu — sechs aus der Messung im Betrieb und den Messturns: das Log von `match_pruefen`, das Zeitfenster des Routers nicht in ISO, die wiederholte Websuche, der Anker eines berichteten Monats im kommenden Jahr, ein Tripel mit einem Ort als Subjekt, die `timeline_id` am Beziehungsfakt; zwei aus dem Bau der Prüfung auf Platzhalter: die Warnung *nach offen* bei einem latenten Objekt, ein Symbol als ganzer Wert; am Fund zum Zeitparser die Grenze von fünf Jahren vermerkt). Davor 23. Oktober 2026, 21:18 UTC (`date -u`; sieben Funde neu, beim Bau und bei der Prüfung des Löschens nach einer Neuanlage und der Dublette — der Rückweg einer Dublette, ein nach einem Treffer stehengebliebener Hash geht erneut in die Promotion, der Kommentar über der Brücke spricht von einem Umzug, eine gescheiterte Halbreaktivierung meldet nur eine Warnung, ein nachschlagender Leser des Hashes im Kalibrier-Korpus, der ungenaue Grund beim Löschen, das Fenster zur thematischen Verstärkung). Davor 23. Oktober 2026, 20:29 UTC (Zeitstempel der Datei; zwei Funde neu — der Zeitparser löst ganze Sätze nicht auf, der Kommentar über dem Katalog der Zusagen nennt für `timeline_id` auch den gefundenen Eintrag). Davor 23. Oktober 2026, 20:11 UTC (`date -u`; zwei Funde neu — der Kopf des Wegweisers der Bugs nennt 159 statt 177 offene Kennungen, die Tabelle der Gegenstände im Kopf jedes Teils des Backlogs trägt die Zahlen der Teilung). Davor 22. Oktober 2026, 22:44 UTC (`date -u`; acht Funde neu beim Abgleich der Doku des Gedächtnisses mit dem Code — Docstrings und Kommentare, die anderes sagen als der Code (`KzgManager`, `LZG_KNOTEN_DECAY_RATE`, `kanten_alle_neu_aufbauen`, `_run_fact_orders`, `_enrich_human`), vier Ziele des Pixie-Routers ohne Agenten, ein unbenutzter Import im Tageslauf, ein Zeuge auf der alten Schwelle 0.85). Davor 22. Oktober 2026, 20:29 UTC (`date -u`; zwei Funde neu beim Nachzug der Fakten im Angebot und des Erinnerungsankers — ein abgebrochener Graph-Lauf lässt einen Ereignis-Auftrag ohne Protokoll, das Bild des CharacterGraph kennt Sachlage und Anker nicht; einer nachgezogen, der volle Monat im Angebot ist im Tree gekappt). Davor 22. Oktober 2026, 06:12 UTC (`date -u`; drei Funde neu beim Jahr des Ereignisses — nicht jeder Ausdruck ohne Jahr bekommt es aus der Zeitlage, der Tagespfad liest die Uhr des Systems, ein Ausfall der Sachlage an kaputtem JSON). Davor 22. Oktober 2026, 06:06 UTC (`date -u`; fünf Funde neu beim Lesen, Kennzeichnen und Klären des Ereignisses — das Konfliktwerkzeug des Thinkers listet ein Ereignis als Termin, die Grenze *vergangen* der Titelsuche mischt zwei Zonen, die Mappe erschließt den abgelösten Wert aus der Reihenfolge, weitere Kopien von `"month"` und der Monatsnamen, eine Bindung ohne Zeugen). Davor 22. Oktober 2026, 05:27 UTC (`date -u`; sechs Funde neu beim Ereignis-Weg der Timeline — ein Ausfall der Namenssuche sieht aus wie *mehrdeutig*, eine Zeile ohne ihren Fakt, zwei Ereignisse auf einem Kandidaten, eine fehlende Salienz als Fehlerzeile je Turn, eine Nachbedingung ohne Zeugen, der Typ von `precision` im Moduldokument; einer vom 21.10.2026 umgezogen — der vergangene Monatsname im laufenden Jahr ist jetzt der Bug `EREIGNIS-KOMMENDES-WIRD-VERGANGEN`). Davor 21. Oktober 2026, 20:11 UTC (`date -u`; fünf Funde neu bei Typquelle und Nachfolger der Timeline — das Verschieben meldet jeden `ValueError` als *nicht mehr aktiv*, die Wiedervorlage beim Verschieben aus dem Typ des Auftrags, die übrigen Fremdschlüssel-Guards ihrer Schemadatei nur nach dem Namen, vierfache Klammern im Prompt der Klassifikation, ein vergangener Monatsname im laufenden Jahr; einer vom 10.09.2026 zu den Werten von `timeline.event_type` nachgezogen). Davor 21. Oktober 2026, 19:47 UTC (`date -u`; fünf Funde neu bei der Timeline je Paar — ein verlorenes Leerzeichen in ihrer Schemadatei, ein Vorgabewert der Figur im KZG-Dispatch, die Wiedervorlage eines Termins ohne Titel, Vorgabewerte der Figur im Wortlaut dreier Dateien, ein Zeuge, der die Figur nicht festhält; ein sechster, das SQL der Verifikation in `agents/timeline/crud.py`, steht schon als Nachtrag an `IMPORTE-UEBERSPRINGEN-SCHICHT`). Davor 21. Oktober 2026, 18:51 UTC (`date -u`; sechs Funde neu — die Tippfehlerkorrektur des Zeitparsers macht *was* zu *Mai*, das Qualitätsprofil zählt nur Lesungen des Enrichers, die Zusage zu `lzg_resonanz` nennt zu wenige Leser, zwei offene Bugs zum gelöschten Fakten-Plugin, ein stiller Ausfall beim Lesen der Erinnerungsknoten, ein überholter Backlog-Posten zum Magnet-Knoten —; drei nachgezogen nach dem Zeitbezug am Objekt der Sachlage). Davor 21. Oktober 2026, 10:38 UTC (`date -u`; ein Fund vom 21.10. als Nachtrag an einen Bug klassifiziert). Davor 21. Oktober 2026, 05:02 UTC (`date -u`; der offen gebliebene Fund vom 20.10. nach der Entscheidung als Bug klassifiziert). Davor 20. Oktober 2026, 22:04 UTC (`date -u`; fünfzehn Funde vom 18. bis 20.10.2026 klassifiziert, einer bleibt offen; drei neu aus der Prüfung der Architektur zum Zeitbezug des Kalender-Angebots). Davor 18. Oktober 2026, 14:47 UTC (`date -u`; zwei Funde neu beim Bau des Fakten-Verfalls — ein Zeuge des Tageslaufs fährt zwei Schritte echt, der Docstring des Tageslaufs zählt sechs Aufgaben). Davor 18. Oktober 2026, 13:05 UTC (`date -u`; ein Fund neu beim Nachzug der Server-Suite in Wegwerf-Behältern — die Bereinigung des lauten Einstiegs zerschneidet ein kurzes Kennwort). Davor 18. Oktober 2026, 01:01 UTC (`date -u`; vier Funde neu beim Nachzug der Ja/Nein-Deutung — Ablehnungswörter ohne Stamm bestätigen neben einem Zustimmungswort, die Verneinung bei *neu*, *aktualisieren* und bei der Wahl einer Notiz wird nicht gelesen, das Vorbild mit Wortgrenzen liest *nichts* nicht als Ablehnung, `novaberg-graph.md` §6.4 nennt `__init_subclass__`). Davor 17. Oktober 2026, 23:45 UTC (`date -u`; ein Fund neu beim Bau zum Aufbau von null — der Import von `tools.db_manager` öffnet zwei Verbindungen). Davor 17. Oktober 2026, 21:50 UTC (`date -u`; ein Fund neu beim Nachziehen der Bauart des Faktengedächtnisses — §9 der Timeline zeigt ein älteres Schema). Davor 17. Oktober 2026, 21:19 UTC (`date -u`; zwei Funde neu aus der Messung des gemeinsamen Lesewegs — der Router liest auf eine Frage nach Kommendem rückwärts, Nova bietet an, schon eingetragene Termine einzutragen). Davor 17. Oktober 2026, 20:29 UTC (`date -u`; zwei Funde neu — ein Zeitraum kann das Angebot der Sachlage ganz mit Terminen füllen, Zustandszeilen sagen *noch nicht committet* über Committetes —, einer nachgezogen: die Kalenderzeilen des Auflösers kommen aus dem gemeinsamen Leseweg). Davor 17. Oktober 2026, 14:36 UTC (`date -u`; ein Fund neu — der Vorzug des einzigen kommenden Termins rechnet mit der Uhr des Systems —, ein Fund nachgezogen: das Verschieben mit Titel und mehreren Treffern ist gebaut). Davor 17. Oktober 2026, 13:13 UTC (`date -u`; zwei Funde aus dem Umbau der Timeline — das Verschieben mit Titel wählt still den ersten Treffer, der Docstring des Korrekturauftrags sagt weniger als der Code —, zwei Funde nachgezogen: die Lese-Antwort mit Schreibbehauptung ist im Code behoben, die Anker beim Thinker ebenso). Davor 16. Oktober 2026, 20:12 UTC (`date -u`; ein Fund aus der zweiten Simulation: der Router setzte als Ziel den Inhalt der Bitte). Davor 16. Oktober 2026, 16:02 UTC (`date -u`; drei Funde aus der Simulation an einem Prüf-Nutzer: die gemeinsame Wurzel der beiden Notiz-Defekte, eine Lese-Antwort mit unbeanstandeter Schreibbehauptung, eine vermutlich nicht erkannte Zustandsform). Davor 15. Oktober 2026, 21:37 UTC (`date -u`; die drei Funde aus den Terminfragen gegen den Bau des Abends gehalten — einer im Code behoben, einer im Prompt abgefangen, einer geklärt —, zwei Funde neu: die Antwort überging einen gescheiterten Auftrag, und zwei Dokumente beschreiben den TimelineManager noch als Schreibweg). Davor 15. Oktober 2026, 18:13 UTC (`date -u`; drei Funde aus den Terminfragen des Eigentümers). Davor 15. Oktober 2026, 16:52 UTC (`date -u`; ein Fund aus den Messturns: vier gleiche kurzfristige Ziele). Davor 14. Oktober 2026, 23:11 UTC (`date -u`; die vier Funde vom 13.10. als Bugs klassifiziert und nach oben umgezogen). Davor 13. Oktober 2026, 22:35 UTC (`date -u`; vier Funde: Pixie steht seit dem 03.10. pausiert, und nur eine `debug`-Zeile sagt es; der Neugier-Boost aus den Zielen ist strukturell 0; die Faszination im Turn mit sieben von neun Faktoren; die Intentionstabelle in zwei Schreibweisen). Davor 6. Oktober 2026, 18:23 UTC (ein Fund: `[REGELN]` steht im Moduldokument des Responders als aktiv). Davor 5. Oktober 2026, 22:29 UTC (zwei Funde aus der Durchsicht der offenen Bugs; zwei Einträge vom 05.10.2026 als umgezogen markiert). Davor 5. Oktober 2026, 00:28 UTC (zehn Funde aus dem Nachziehen des Leerlaufs im Client, L1′–L2′c). Davor 4. Oktober 2026, 21:49 UTC (L-6 hält ohne Abstand, aus den Gegenproben zu L0′c). Davor 4. Oktober 2026, 21:05 UTC (vier Funde aus den Messungen des Avatar-Leerlaufs — Blickrichtung, Nachdenken als Warten, Einatmen und Sprechbeginn, Lidschläge — mit dem Nachtrag *in der Referenz behoben, der Client folgt*). Davor 4. Oktober 2026, 13:37 UTC (drei Funde aus der Messung von L6 — Emotion des vorigen Turns, Umbruch der Anzeige, Blickrichtung — und zwei Nachträge). Davor 4. Oktober 2026, 12:17 UTC (fünf Funde aus der Messung des Avatar-Leerlaufs im Betrieb und dem Bau seiner Phasenanzeige — Blick im Nachdenken, Einatmen und Sprechbeginn, Lidschläge, LaTeX und Wiederholung im Chat). Davor 4. Oktober 2026, 10:30 UTC (drei Funde aus dem Architekturentwurf für den Weg der Arbeitszyklen im Client — Auffangzweig des Stream-Handlers, Wahrheitswert für offene Nachrichten, `event_type` doppelt belegt; der Zähler unten ist nicht nachgezählt). Davor 2. Oktober 2026 (**neun Funde aus den Lese-Audits für den Avatar** — Antwortpfad, Nutzlast der Antwort, Client). Davor 29. September 2026, 05:46 UTC (`date -u`; **Durchsicht der ganzen Liste** — 434 Einträge unter *Offen* klassifiziert, 181 umgezogen: 92 erledigt, 42 schon mit Kennung, 9 widerlegt, 1 ohne Gegenstand, 37 über die Entwicklungsumgebung aus dem Repo genommen). Davor 21. September 2026, 20:20 UTC (`date -u`; fünf Funde aus der Verbrauchsanalyse und dem Ausfall des Nachrichtendienstes — Notausgang, irreführende Abweisung, zwei Tage stumme Ablehnung, unversioniertes Wochenarchiv, Leerlauf des Beobachters). Davor 20. September 2026, 00:14 UTC (`date -u`; zwei Funde — ein Knotengewicht unter der Einreihungsschwelle, und die Veröffentlichungsprüfung erkennt zwei von vier Formen eines Harness-Verweises). Davor 20. September 2026, 00:12 UTC (`date -u`; ein Fund — die Veröffentlichungsprüfung erkennt zwei von vier Formen eines Harness-Verweises). Davor 19. September 2026, 23:56 UTC (`date -u`; ein Fund erledigt — die Featureliste gegen ihre Quellen gemessen; zwei Funde neu — ein widerlegter Vorbehalt im Code, eine Zahl ohne Quelle). Davor 19. September 2026, 21:31 UTC (`date -u`; zwei Funde aus dem Umstellen der Bug-Verweise — Kennungen, die nie im Bugregister standen, Zeiger ohne Kennung). Davor 19. September 2026, 21:05 UTC (`date -u`; ein Fund umgezogen — der Zähler der Synapsen-Promotion ist jetzt `PROMO-LAUF-ZAEHLT-VERWORFENE`). Davor 19. September 2026, 20:53 UTC (`date -u`; ein Fund — ein verworfener Promotionseintrag zählt als promotet). Davor 19. September 2026, 20:47 UTC (`date -u`; ein Fund eingeordnet — die Timeline-Kante ist konzeptgemäß, kein Defekt). Davor 19. September 2026, 20:41 UTC (`date -u`; ein Fund — eine Timeline-Kante überlebt ihre Timeline). Davor 19. September 2026, 19:07 UTC (`date -u`; fünf Funde — P4 nicht abgeschlossen, Skala der Salienz gegen das Knotengewicht, Register über P4 uneins, Featureliste gegen vier Konzepte, Kennungen mit Kleinbuchstaben). Davor 19. September 2026, 15:17 UTC (`date -u`; ein Fund — die Chronik nennt interne Arbeitsdokumente). Davor 19. September 2026, 12:54 UTC (`date -u`; ein Fund — das Aufräumen nach Läufen mit Prüf-Nutzern erfasst das Gedächtnis nicht). Davor 19. September 2026, 12:14 UTC (`date -u`; zwei Funde aus dem Lauf zur Bedarfsaussage — Anker in der Vergangenheit, Angebot nach einer Einzelheit). Davor 19. September 2026, 11:36 UTC (`date -u`; ein Fund im Code behoben — kein Angebot nach einer Ablehnung als Nicht-Auftrag). Davor 19. September 2026, 11:18 UTC (`date -u`; ein Fund beim Festhalten des NMCP-Standes — die Zähler des Quotenabgleichs überleben keinen Neustart). Davor 19. September 2026, 00:49 UTC (`date -u`; zwei Funde aus den Reihen zur Notizen-Vorprüfung — Telefonnummer, kein Angebot nach Ablehnung). Davor 19. September 2026 (ein Fund: der Charakterkern wird beim Einbetten gekürzt). Davor 18. September 2026, 23:37 UTC (`date -u`; zwei Funde aus der Quellenprüfung der Paper). Davor 18. September 2026, 23:29 UTC (`date -u`; der NMCP-Befund zum Audit entschieden). Davor 18. September 2026, 23:24 UTC (`date -u`; **drei neue Funde** aus dem Messlauf zum Angebot — Erinnerungs-Anker, DelegationsAgent, Router wählt Notizen). Davor 18. September 2026, 22:24 UTC (`date -u`; ein Konventionsbefund zum Audit ergänzt; davor: ein Fund teilweise behoben — das Angebot gilt der angebotenen Sache). Davor 18. September 2026, 21:47 UTC (`date -u`; **ein neuer Fund** — ein offenes Angebot sperrt keinen neuen Wurf). Davor 18. September 2026, 19:46 UTC (`date -u`; **ein neuer Fund** — `with psycopg2.connect` schließt die Verbindung nicht) **Offen:** **391 Funde — gezaehlt am 06.11.2026** nach derselben Regel: 393 Zeilen der Form `- **JJJJ-MM-TT**` im Abschnitt *Offen*, 2 davon mit durchgestrichenem Titel. Vor dem Umzug von heute 434 von 436, 43 sind umgezogen. **Die Differenz zu den 261 vom 02.10.2026 ist gezählt, nicht hergeleitet:** Die Funde seither zogen den Kopf nicht mit. Davor **261 Funde — gezaehlt am 02.10.2026** nach derselben Regel — die 251 vom 29.09.2026, 9 neue aus den Lese-Audits für den Avatar und 1 aus dem Entwurf seiner Ablage im Client. Davor **251 Funde — gezaehlt am 29.09.2026** nach derselben Regel — 245 aus der Durchsicht und 6 neue, die sie gefunden hat (dazu 7 durchgestrichene und 1 durchgestrichener Anfang, deren Eintrag einen zweiten, offenen Fund trägt); sie ziehen mit Kennung nach Bugs und Backlog oder in ihr Dokument. Davor **345 Funde — gezaehlt am 16.09.2026** (Fundzeilen der Form `- **JJJJ-MM-TT**` im Abschnitt *Offen* ohne `~~`; 15 tragen dort inzwischen wieder ein `~~`, sind also erledigt und nicht umgezogen). **Die Differenz zu den 231 vom 07.09.2026 ist nicht aufgeschlüsselt** — sie ist gezählt, nicht hergeleitet, und wer sie braucht, zählt je Stichtag. ~~231 Funde — gezaehlt am 07.09.2026~~. ~~132, gezaehlt am 30.08.2026~~ — die Zahl war sieben Tage alt und zaehlte 19 bereits erledigte mit. **Am 07.09.2026 sind 22 als erledigt markierte Eintraege nach *Erledigt* verschoben**; der Offen-Block traegt seither nur noch Offenes. **Verlauf:** [Verlauf des Standes](#verlauf-des-standes) — 86 Eintraege, juengster zuerst **Pfad:** novaberg/docs/novaberg-fundliste.md Was beim Bauen an anderer Stelle auffällt, landet hier — **eine Zeile mit Datum**. Kein Bug-Name, keine Priorität, keine Klassifizierung, keine Diskussion. Der Zweck ist, einen Fund festzuhalten, ohne die laufende Arbeit dafür zu unterbrechen. Diese Liste ist bewusst roh. Von hier wandern Einträge nach `novaberg-bugs.md` oder `novaberg-backlog.md` und bekommen dort eine stabile ID; die Zeile hier wird beim Umzug entfernt. --- ## Umgezogen — 08.11.2026, später, ein Fund vom 04.10.2026 mit seinem Bau **Ein Eintrag ist klassifiziert** und als Bug mit Kennung, Kategorie und Rang angelegt; gebaut und gemessen ist er im selben Zug, deshalb steht er gleich im Archiv. Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. - ~~**2026-10-04** — **`_event_verarbeiten` erwirbt `graph_run_lock` blockierend in einer Koroutine:**~~ `server/services/event_consumer.py`, `graph_run_lock.acquire(blocking=True, timeout=60)` im Event-Loop. Bis zu 60 s steht damit der ganze Loop — auch das Senden der Ereignisse aus L4. Ob der Fall im Betrieb eintritt, ist nicht gemessen. `[gelesen 04.10.2026, Bau L4]` → **Bug `EVENT-LOCK-HAELT-SCHLEIFE`** in [`novaberg-bugs-archiv-bauart.md`](novaberg-bugs-archiv-bauart.md), Rang hoch, Kategorie Bauart; klassifiziert am 07.11.2026, behoben, vor dem Commit gemessen und geschlossen am 08.11.2026. --- ## Umgezogen — 08.11.2026, ein Fund vom 07.11.2026 mit seinem Bau **Ein Eintrag ist klassifiziert** und als Bug mit Kennung, Kategorie und Rang angelegt; gebaut und gemessen ist er im selben Zug, deshalb steht er gleich im Archiv. Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. - ~~**2026-11-07** — **`broadcast_threadsafe` wartet auf der Schleife, auf der es steht — dieselbe Defektklasse wie `SUBMIT-SYNC-BEHAUPTET-WORKER-THREAD`.**~~ `server/services/prompt_consumer.py:245` ruft auf der Schleife `_nutzer_nachricht_verteilen` und damit `broadcast_threadsafe`, das mit `future.result(timeout=5.0)` (`server/api/websocket.py:207`) auf eben diese Schleife wartet. Gemessen an der echten Funktion mit einem zweiten verbundenen Client: Die Schleife steht 5,00 s, die Zustellung kommt erst danach, dazu die Warnung *„Zustellung laeuft im Event-Loop weiter“*; solange stehen alle Worker und Consumer, je Äußerung und Client. Der Docstring nennt einen Aufruf *„aus einem Worker-Thread“*. Am Code von `b32a37a`; `[gemessen 07.11.2026, labor/2026-11-07_submitsync_gegenprobe.txt]`, gefunden bei der Gegenprobe zu `submit_sync`. → **Bug `BROADCAST-WARTET-AUF-EIGENER-SCHLEIFE`** in [`novaberg-bugs-archiv-bauart.md`](novaberg-bugs-archiv-bauart.md), Rang hoch, Kategorie Bauart; klassifiziert am 07.11.2026, behoben, vor dem Commit gemessen und geschlossen am 08.11.2026. --- ## Umgezogen — 06.11.2026, aus der Klassifizierung der Funde vom 25. und 26.10.2026 **Dreiundvierzig Einträge sind klassifiziert**, 40 vom 26.10.2026 und 3 vom 25.10.2026, am Code gelesen gegen HEAD `7b35557`. Daraus werden **14 neue Kennungen** — 11 Bugs aus 20 Funden, 3 Backlog-Einträge aus 8 Funden —, **4 Nachträge** an drei bestehenden Kennungen und **6 Handgriffe** ohne Eintrag; **5 Funde entfallen** mit Grund. Kein Wortlaut ist geändert; wo der Fund steht, sagt der Pfeil. Die Sätze *„nicht committet“* in drei Zeilen sind überholt: Der Bau dort ist der Code-Tree `6feb70a`, committet als `e71df6b`, ihre Zeilennummern stimmen an `7b35557`. - ~~**2026-10-26** — **Eine andere Schreibweise eines Kanon-Werts geht im KZG leer hinein, während die Perzeption sie auf den Kanon zieht.**~~ `_kanon_felder_pruefen` (`server/memory/kzg.py`, `server/agents/kzg/speicher.py`, `server/agents/kzg/queues.py`) prüft `modus` und `intentionen` roh gegen den Kanon, und die Salienz normalisiert den Modus nicht, wie es die Perzeption tut: Ein `modus` *„Alltag“* wird leer gespeichert, eine Intention *„Smalltalk“* verworfen, je mit Fehlerzeile, in allen drei Kopien gleich. In der Faszination zieht `_aus_tabelle` dieselbe Schreibweise still auf den Kanon (`f_modus("Alltag")` ergibt 0,95), im EI-Gate und in der Neugier gilt sie als fremd — dort kommt sie im Betrieb nicht an, weil die Perzeption vorher normalisiert. Ob im KZG *„Alltag“* leer oder als `alltag` gespeichert werden soll, ist offen; kein Zeuge hält das Verhalten in einer Richtung fest. Nachgestellt an einem Stand mit denselben Produktivdateien wie der Code-Tree `6feb70a` (committet als `e71df6b`); wie oft die Salienz so schreibt, ist nicht gezählt. → **Bug `KZG-KANON-SCHREIBWEISE-GEHT-LEER`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Grenzen der Suchzeugen in `server/tests/test_kanon_usage.py`.**~~ Die Lesesuche (`EveryReaderUsesTheCheckTest`) sieht keinen Leser über einen Alias oder einen Import unter anderem Namen und keinen zusätzlichen Aufruf einer Prüfung mit Schlüsselwortargumenten und einem falschen Paar aus Tabelle und neutralem Faktor; die Schreibsuche (`EveryWriterUsesTheCheckTest`) sieht keinen Schreiber über die Feld/Wert-Form von `hset`, über eine Zuweisung ins Mapping (`mapping["modus"] = …`), mit der Salienz unter anderem Namen als `salienz_obj`, über eine Hilfsfunktion, die das Mapping ohne `hset` baut, oder mit einem positionalen Wert in `shadow_queue_push`. In einer Gegenprobe blieb je ein solcher Eingriff grün, still; heute steht keine dieser Formen im Baum (gesucht nach den Tabellennamen, nach `hset` und nach `shadow_queue_push` unter `server/`). Alle bis auf den Aufruf mit Schlüsselwortargumenten nennt der Docstring des Zeugen als Grenze. → **Backlog `SUCHZEUGE-SIEHT-NUR-BEKANNTE-FORMEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Die Säulen der Neugier sind am Ergebnis je nur in einer Richtung bezeugt.**~~ `server/tests/test_kanon_usage.py` (`CuriosityPillarsTakeTheNeutralFactorTest`) fährt `aufnahmebereitschaft_berechnen` mit E, A und M über 1,0 und mit V, D und S darunter oder auf 1,0; eine Begrenzung einer Säule auf 1,0 in der Gegenrichtung bliebe grün — in einer Gegenprobe gemessen für M und D, gerechnet für alle sechs —, ebenso ein Deckel auf das Produkt ab 1,475. Still: Bei einer Begrenzung nennt die INFO-Zeile der Neugier weiter den Faktor der Tabelle, bei einem Deckel sagt keine Zeile, dass gekappt wurde. Die Krise (`spirale` oder `absturz` bei Arousal ≥ 0,7, Wert 0,00) prüft am Ergebnis kein Zeuge — die Zeugen, die eine Krise fahren, prüfen Länge und Vorausdenken des Gesprächsvektors —, und der Eingang der Säule E ist nur an einem Wert bezeugt (`freude`, Distanz 1). → **Backlog `GEGENPROBE-BLINDE-ZEUGEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Ein Wert außerhalb des Kanons erzeugt je Turn mehr als eine ERROR-Zeile.**~~ Das EI-Gate rechnet in `ei_calc` für den Nutzer und in `ei_calc_persist` für Nova, je Feld eine Zeile; die Neugier meldet einen fremden `modus` zweimal, über `modus_pruefen` und über ihren Leser; dazu die Faszination; und auf dem Agentenweg des KZG schreiben `speichern` und `queues_befuellen` nacheinander mit derselben Salienz je eine Zeile für denselben fremden `modus`, ab `KZG_SALIENZ_HIGH`. Bei `tone` außerhalb des Kanons in rund jedem zehnten Turn (seit dem 10.09.2026 50 von 491, an den gespeicherten Eingaben des EI-Gates) steht eine solche Zeile im Regelfall — und eine Fehlerzeile, die im Regelfall steht, wird überlesen. Die Messung im Betrieb muss nach Ort und Turn zählen, nicht nach Zeilen. Am Code gelesen. → **Nachtrag an `PERZEPTION-WERTE-VERRUTSCHEN-DIE-SPALTE`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang bleibt mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Der Zwilling *„ein Kanon-Modus wirkt wie vorher“* der Faszination prüft nicht, dass keine Fehlerzeile entsteht.**~~ `server/tests/test_kanon_usage.py::FascinationTakesTheNeutralFactorTest.test_a_canon_mode_acts_as_before` prüft nur den Faktor 1,15 für `lernmodus`; eine Fehlerzeile auch für einen Wert aus dem Kanon bliebe grün. Die Zwillinge im EI-Gate und in der Neugier prüfen beides. Am Code gelesen. → **Backlog `GEGENPROBE-BLINDE-ZEUGEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Der Zeuge der drei Kopien von `_kanon_felder_pruefen` bindet den Ort der Fehlerzeile nicht und gibt kein Element ein, das kein Text ist.**~~ `server/tests/test_kanon_usage.py::TheThreeCopiesAgreeTest` verlangt Rückgabe, Stufe und Feld und Wert der Zeile. Fehlt in einer Kopie der Ort (`KZG-Speicher: …`), bleibt er grün — laut, aber einer Zählung nach Ort nicht mehr zuzuordnen —, und ebenso, wenn eine Kopie ein Element wie `5` ohne Zeile verwirft — still, ohne falschen Wert. In einer Gegenprobe je gemessen. → **Backlog `GEGENPROBE-BLINDE-ZEUGEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Die Zeile *Faszination* der Featureliste steht auf 🟠, obwohl `FASZINATION-TURN-SIEBEN-VON-NEUN` offen darauf zeigt.**~~ Die Zeile nennt die Kennung selbst, *„offen zur Hälfte“* (`f_anlage` bleibt im Turn neutral); nach der Tabelle der Ampeln am Kopf der Liste wäre sie 🔴. Gefunden beim Nachzug zum Kanon an den Verwendungsstellen, die Zeile ist nicht geändert. → **Handgriff, kein Eintrag:** Die Zeile trägt seit dem 06.11.2026 die offene Frage. Ihre Ampel bleibt 🟠, bis entschieden ist, ob sie auf 🔴 geht: Die Tabelle sagt ja, die Zeile trägt ⏫. - ~~**2026-10-26** — **Die Zeile *KZG-Agent* der Featureliste führt `QUEUE-PUSH-OHNE-PRIORITAET` als offen; die Kennung ist geschlossen**~~ (`novaberg-bugs-archiv-hintergrund.md`). Gefunden beim Nachzug zum Kanon an den Verwendungsstellen, die Zeile ist nicht geändert. → **Handgriff, kein Eintrag:** Die Spalte ist am 06.11.2026 berichtigt. Die Ampel geht trotzdem auf 🔴, wegen `KZG-KANON-SCHREIBWEISE-GEHT-LEER`. - ~~**2026-10-26** — **Ein zweiter Wert mit Unterstrich-Auszeichnung wird im Kopfblock des Verfassers als erster Wert gelesen.**~~ `server/graph/einwand.py::_aufzaehlung_lesen` zählt die Werte der Menge als ganzes Wort mit `(?`. Nachgestellt am Code-Tree `3806695` (committet als `a6e46c2`); in den 22 protokollierten Ausfällen seit dem 21.10.2026 bei `EINWAND` und `BEWERTUNG` 0-mal. → **Bug `EINWAND-KOPFBLOCK-LIEST-KEINE-WAHL`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), Rang niedrig, dort als benannter Preis; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Ein zweiter Wert in anderer Schreibweise wird im Kopfblock nicht gezählt, gelesen wird der erste.**~~ In `BEWERTUNG: trifft_zu / trifft nicht zu` zählt nur `trifft_zu` als Wert der Menge — `trifft nicht zu` ist nicht `trifft_nicht_zu` —, das Feld gilt als `trifft_zu` statt als `mehrdeutig`; ebenso liest `STAERKE: 0.0 bis 1.0` die Zahl 0.0 (`_staerke_lesen` liest die führende Zahl). Still. Nachgestellt am Code-Tree `3806695` (committet als `a6e46c2`). → **Bug `EINWAND-KOPFBLOCK-LIEST-KEINE-WAHL`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Zeugenlücken am Kriterium `mehrdeutig` in `server/tests/test_einwandsurteil.py`.**~~ Kein Zeuge setzt ein anderes Zeichen als Leerzeichen, `/`, `|`, `„`, `*` oder den Backtick direkt vor den zweiten Wert (etwa `ja,nein`, `ja-nein`, `ja (nein)`), keiner setzt den zweiten Wert hinter `;`, `:`, `!` oder `?`, hinter das fünfte Wort oder in Titelschreibung (`Ja / Nein`); dass der Unterstrich in der Zählung als Wortzeichen gilt, ist unbezeugt. Eine Gegenprobe am Code-Tree `3806695` (committet als `a6e46c2`) ließ je einen Eingriff, der das Kriterium so verengt, grün — fünf Eingriffe, vier davon still, der am Unterstrich nur mit lauten Folgen. → **Bug `EINWAND-KOPFBLOCK-LIEST-KEINE-WAHL`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), Rang niedrig, dort in der Schließbedingung; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Der Docstring von `urteil_lesen` nennt als Fehlerfall noch *„eine wiederholte Wertliste“*.**~~ `server/graph/einwand.py`, Z. 166; das Kriterium ist seit dem Bau des Kopfblock-Lesers ein anderes — mehr als ein verschiedener Wert der Menge im Feld, gleich wo (`_aufzaehlung_lesen`). Am Code gelesen. → **Handgriff, kein Eintrag:** ein Satz im Docstring, mitzunehmen mit `EINWAND-KOPFBLOCK-LIEST-KEINE-WAHL` oder beim nächsten Anfassen der Datei; die Schließbedingung des Eintrags nennt ihn. - ~~**2026-10-26** — **Die Ausgabe-Verifikation `wort not in genannt` in `_aufzaehlung_lesen` wirft `RuntimeError`, und kein Aufrufer fängt sie.**~~ `server/graph/einwand.py`, Z. 342; `urteil_lesen` und `server/graph/nodes/verfasser.py::verfassen` rufen ohne `try`, ein Wurf bräche den Turn ab, statt nur das Urteil zu kosten. Heute unerreichbar: Erstes Wort und Zählung lesen denselben Wortbegriff (`\w`); in einer Gegenprobe am Code-Tree `3806695` (committet als `a6e46c2`) in 0 von 165 Unicode-Proben ausgelöst. → **Entfällt, kein Eintrag:** unerreichbar. Erstes Wort und Zählung lesen denselben Wortbegriff; nachgerechnet über jeden Codepunkt, dessen Kleinform ein Buchstabe eines Werts ist (nur `K` U+212A), 220 Proben, 0 Würfe. Die Verifikation tut, was sie soll. - ~~**2026-10-26** — **Ein leeres `GEPRUEFT:` im Kopfblock gilt als gefälltes Urteil.**~~ `server/graph/einwand.py::_kopf_deuten` verlangt nur, dass die Zeile da ist, und übernimmt ihren Wert (Z. 423); mit leerem Feld ist das Urteil `geliefert=True` mit `geprueft=""`, obwohl der Kommentar am Feld sagt *„Leer = nicht geliefert“* (Z. 96). Ob ein leeres `GEPRUEFT` ein Ausfall sein soll, ist offen. Nachgestellt am Code-Tree `3806695` (committet als `a6e46c2`). → **Bug `EINWAND-KOPFBLOCK-LIEST-KEINE-WAHL`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), Rang niedrig, ob ein leeres `GEPRUEFT` ein Ausfall ist, steht dort als offene Absicht; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **`server/agents/timeline/crud.py::_verifizieren_termin` liest den Termin allein über die Kennung.**~~ Die Abfrage (Z. 41) lautet `SELECT id, aktiv FROM timeline WHERE id = %s`, ohne `user_id`; gerufen nach dem Anlegen (Z. 206), dem Verschieben (Z. 425–426) und dem Löschen (Z. 867), jeweils mit der Kennung, die der Dienst eben geschrieben oder getroffen hat. Die Lese- und Schreibwege über eine Kennung in `notizen` und `dateien_wurzeln` binden sie seit `89bcba8` an den Menschen, dieser Leser nicht. Am Code gelesen, nicht gelaufen. → **Bug `REPOSITORY-KENNUNG-OHNE-MENSCH`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang niedrig, der Kern liegt in den Schreibwegen daneben; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **`suchtext` einer Notiz läuft eine Schreibung hinterher.**~~ `server/agents/notizen/crud.py`, `_SCHREIBUNGEN["inhalt"]` (Z. 90–95), und `server/memory/repositories/notizen_repository.py::NotizenRepository.update` (Z. 185, der Ausdruck Z. 228–229) setzen im selben `UPDATE` die Zusammenfassung — bei `update` auch den Namen — und `suchtext = to_tsvector('german', COALESCE(name, '') || ' ' || COALESCE(zusammenfassung, ''))`. In PostgreSQL lesen die Ausdrücke einer `SET`-Liste die Zeile vor der Änderung; `suchtext` trägt danach die Zusammenfassung der vorigen Schreibung. Betroffen sind `_update`, `_append` und `_clear_content` (Z. 609, 680, 717) und die beiden Aufrufe von `NotizenRepository.update` in `server/plugins/notizen_manager/manager.py` (Z. 759, 802); gelesen wird die Spalte von `NotizenRepository.find_by_volltext` (Z. 111), dem Rückfall der Notizensuche (`server/agents/notizen/suche.py`, Z. 128). Beim Anlegen stimmt sie: `insert` bildet den Text vorher (Z. 37). Am Code gelesen, nicht gelaufen. → **Bug `NOTIZ-SUCHTEXT-HINKT-NACH`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Das Umbenennen einer Notiz setzt `suchtext` nicht neu.**~~ `server/agents/notizen/crud.py`, `_SCHREIBUNGEN["name"]` (Z. 100, gerufen aus `_rename`, Z. 757), schreibt nur `name` und `updated_at`; die Volltextsuche (`NotizenRepository.find_by_volltext`) findet die Notiz unter dem neuen Namen erst nach der nächsten Schreibung des Inhalts. Vor der Bindung an den Menschen ebenso — `_rename` schrieb über `db_manager` nur den Namen. Am Code gelesen, nicht gelaufen; gefunden beim Prüfen des Fundes darüber. → **Bug `NOTIZ-SUCHTEXT-HINKT-NACH`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Das Muster `.get(, "")` für Felder einer Modellantwort, das die vier Klassifikationen bis zum geprüften Lesen trugen, steht weiter an anderen Stellen.**~~ Die Vorgabe greift nur bei einem fehlenden Schlüssel: Ein gesetztes `null` kommt als `None` an, eine Antwort, die kein Objekt ist, wirft an `.get`. Gefunden in `server/agents/notizen/crud.py::_create` (`notiz_daten = response.parsed`, Z. 464; `text`, `name`, `typ`, `themen`, Z. 474–483), `server/graph/nodes/tribunal.py::_agent_vote` (`reasoning`, Z. 200; `vote`, Z. 206), `server/agents/recherche/agent.py::RechercheAgent._run_once` (`plan.get("ziel", "")`, Z. 586) und `server/agents/recherche/planung.py::recherche_planen` (`lage.get("user_mehrwert", "")`, Z. 95). Mit `str(…)` darum wird aus `null` der Text `"None"`: `server/agents/recherche/gate.py::ergebnis_einordnen` (`status`, Z. 113, dort als unbekannter Status laut abgewiesen; `begruendung`, Z. 124, still) und `server/agents/wissen_rueckweg/einarbeitung.py::_ist_dasselbe_gesagt` (`begruendung`, Z. 305, nur im Log). Gesucht beim Bau des geprüften Lesens, nicht am Laufweg geprüft. → **Bug `MODELLFELD-UNGEPRUEFT-GELESEN`** in [`novaberg-bugs-bauart.md`](novaberg-bugs-bauart.md), Rang mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **`server/agents/dateien/klassifikation.py::klassifizieren` macht aus einem Textfeld falschen Typs still ein leeres Feld.**~~ `(ergebnis.get(, "") or "").strip()` für `name`, `abschnitt`, `nadel` und `normalisiert` (Z. 263–265, 267) liest `null` richtig wie einen fehlenden Schlüssel, macht aber aus `0`, `False`, `[]` und `{}` ohne Meldung `""`; bei `7` oder `["x"]` wirft `.strip()` `AttributeError`. Dieselbe Form steht in `server/agents/wissen_rueckweg/zuordnung.py::ziel_bestimmen` (Z. 218–219) und `server/agents/wissen_rueckweg/einarbeitung.py::absatz_bestimmen` (Z. 446, 448). Erwähnt im *Zusammenhang* von `KLASSIFIKATION-NULL-FELD-WIRFT` (`novaberg-bugs-archiv-bauart.md`), dort ohne eigenen Eintrag. Am Code gelesen, nicht gelaufen. → **Bug `MODELLFELD-UNGEPRUEFT-GELESEN`** in [`novaberg-bugs-bauart.md`](novaberg-bugs-bauart.md), Rang mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Die Ziel- und Deltatabellen von Raum und Gesprächsvektor lesen Perzeptionsfelder ohne Riegel.**~~ `server/ei/raum.py::raum_ziel_bestimmen` liest `GV_TIEFE_MODUS.get(modus, 0.3)` (Z. 173), `GV_NAEHE_DYNAMIK.get(dynamik, 0.5)` und `GV_NAEHE_STIL.get(stil, 0.5)` (Z. 175), `server/graph/nodes/gespraechsvektor.py::_vektor_laenge_berechnen` `GV_LAENGE_MODUS_DELTA.get(modus, 0.0)` (Z. 187). Einen fremden `modus` meldet davor `modus_pruefen` (Z. 171 bzw. 186), eine fremde `dynamik` oder einen fremden `stil` nichts. Die Vorgabe 0,3 ist das Minimum von `GV_TIEFE_MODUS` (0,3–0,9), die drei übrigen liegen innerhalb ihrer Tabellen. Gefunden beim Bau zu `PERZEPTIONSFELDER-OHNE-KANON` und `KANON-FELDER-NEHMEN-FREMDWERTE` (nicht committet), der den acht Faktortabellen einen benannten neutralen Wert unter dem Maximum und eine Fehlerzeile gibt, diesen vier Tabellen nicht; die Stellen stehen so am committeten Stand. Am Code gelesen. → **Backlog `RAUM-TABELLEN-OHNE-RIEGEL`** in [`novaberg-backlog-charakter.md`](novaberg-backlog-charakter.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Die Delegationsakte schreibt `user_intentionen` und `gespraechs_modus` ungeprüft.**~~ `server/agents/delegation/akte.py::_seiten_dict` liest beide aus den Parametern (Z. 81–82), `akte_erstellen` (Z. 159–160) und `akte_anreichern` (Z. 304–305) schreiben sie so in `delegations_seiten`, ohne Abgleich mit `INTENT_KANON` und `MODUS_KANON`. Ein anderer Bestand als der KZG, den `KANON-FELDER-NEHMEN-FREMDWERTE` meint. Gefunden beim Bau zu `PERZEPTIONSFELDER-OHNE-KANON` und `KANON-FELDER-NEHMEN-FREMDWERTE` (nicht committet); die Stellen stehen so am committeten Stand. Am Code gelesen. → **Bug `DELEGATION-AKTE-OHNE-KANON`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang niedrig, dort fünf Felder und kein Leser; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Die Perzeption liefert `tone` in rund jedem zehnten Turn außerhalb seines Kanons, und der Anteil sinkt nicht.**~~ An den gespeicherten Eingaben des EI-Gates gezählt (`pipeline_log`, Schritt `ei_arousal`, 1817 Turns vom 27.07. bis 26.10.2026): seit dem 10.09.2026 **50 von 491** Turns (10,2 %), davor 126 von 1326 (9,5 %); 122 der 176 fremden Werte stammen aus einem anderen Kanon. Die Wurzel liegt im Prompt der Perzeption: In `server/prompts/default/perzeption.assistant_task.txt` (Z. 30) und `perzeption.task.txt` (Z. 29) steht `tone` als letzter Punkt unter *Rationale Ebene — intent*, und seine vier Werte (`PERZEPTION_TONE_KANON`) stehen nur in der Vorlage des Antwortformats (Z. 8), erklärt sind sie nirgends — am Prompt gelesen, nicht am Modell geprüft. Der Befund bis zum 10.09.2026 steht in `PERZEPTION-WERTE-VERRUTSCHEN-DIE-SPALTE` (`novaberg-bugs-charakter.md`, `tone` 5,7 % über beide Seiten); neu sind die Rate seither und die Stelle im Prompt. Gemessen vor dem Commit des Baus zu `PERZEPTIONSFELDER-OHNE-KANON` (nicht committet), nur gezählt. → **Nachtrag an `PERZEPTION-WERTE-VERRUTSCHEN-DIE-SPALTE`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang bleibt mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Zeugenlücke am geprüften Lesen der Klassifikationsantwort: Die Suche des Vollständigkeitszeugen beginnt am Zeichen `.parsed`, nicht an der Antwort.**~~ `server/tests/test_classification_null_field.py` (`_is_answer`, `_answer_loads`) findet einen Zugriff nur über ein Attribut `parsed` oder einen daran gebundenen Namen, gesucht in `klassifizieren` und `_read_answer`. Unsichtbar bleiben ein Helfer, der die Antwort zurückgibt (`x = _hole(response)`), und `getattr(response, "parsed")`; ein neues Feld, so gelesen, trüge `null` still als `None` und eine Zahl still als Zahl in die Parameter, ohne WARNING oder ERROR (an einer Probe beobachtet). `json.loads(response.text)` macht nur der Doppelgänger des Modells rot, nicht der Zeuge. Keine dieser Formen steht heute im Code. Gemessen an der Gegenprobe des Baus (2 von 17 Eingriffen blind, beide so vorhergesagt). → **Backlog `SUCHZEUGE-SIEHT-NUR-BEKANNTE-FORMEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Der Kopf-Docstring von `server/agents/notizen/klassifikation.py` nennt Chat-Nummern.**~~ Zwei Verweise dieser Form stehen im Modul-Docstring, im Bestand vor dem Bau zum geprüften Lesen und von ihm nicht berührt; sie zeigen für jeden Leser ins Leere. Am Code gelesen. → **Handgriff, kein Eintrag:** beim nächsten Anfassen der Datei mitzunehmen. Dieselbe Form steht in 194 Zeilen in 70 Dateien unter `server/` ohne Tests; die eine Datei allein zu berichtigen ändert nichts, und eine Kennung für die Klasse ist nicht vergeben. - ~~**2026-10-26** — **Die Suche des Vollständigkeitszeugen am geprüften Lesen unterscheidet keine Gültigkeitsbereiche.**~~ Ein Name, der in `klassifizieren` einmal an die Antwort gebunden wird, gilt in der ganzen Funktion als die Antwort — auch als Laufvariable einer Comprehension mit demselben Namen. In der Gegenprobe meldete der Zeuge in `charakter_identitaet` deshalb fünf Verstöße statt einem (vier davon die Zugriffe einer Comprehension). Streng, also laut, im Betrieb ohne Folge; ob es so gewollt ist, ist offen. Gemessen an der Gegenprobe des Baus. → **Entfällt, kein Eintrag, ein Satz in `SUCHZEUGE-SIEHT-NUR-BEKANNTE-FORMEN`** ([`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md)): Es ist Absicht, der Docstring von `_answer_loads` sagt es (*„gilt in der ganzen Funktion als die Antwort“*); streng und laut, im Betrieb ohne Folge. - ~~**2026-10-26** — **Zeugenlücke an der Bindung der Kennung in `notizen` und `dateien_wurzeln`: Das Kriterium der Vollständigkeit findet einen neuen, nicht gerufenen Weg in bestimmten Formen nicht.**~~ `server/tests/test_write_path_binding.py` (`_ID_COMPARISON`, `_id_conditions`, `_sql_texts`) findet die Kennung nur als `[tabelle.]id = ` hinter `WHERE` und liest nur Zeichenketten aus Literalen, `+` innerhalb eines Ausdrucks und f-Strings. Ein neuer Weg ohne `user_id` bleibt grün, wenn er die Kennung mit `IN (%s)`, `= ANY(%s)`, umgekehrt (`%s = id`), in Anführungszeichen (`"id" = %s`) oder in `JOIN … ON` vergleicht oder die Zeichenkette über eine Variable (`basis + "id = %s"`), `+=` mit dem Schnitt vor der Kennung, `" ".join(...)`, `.format` mit Spaltennamen oder benanntem Feld oder `%`-Formatierung baut — 11 von 36 Eingriffen der Gegenprobe, alle so vorhergesagt. Keine dieser Formen steht heute in den zwei `crud.py`; ein bestehender Weg, der so umgebaut würde, unterschreitet die Untergrenze der gefundenen Bedingungen (gemessen an `IN` beim Lesen der Notizen). Gemessen an der Gegenprobe des Baus. → **Backlog `SUCHZEUGE-SIEHT-NUR-BEKANNTE-FORMEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Fünf Schreibwege der Notizen lesen `user_id` mit der Vorgabe `""`.**~~ `server/agents/notizen/crud.py` `_update`, `_delete`, `_append`, `_clear_content` und `_rename` lesen `state["kontext"].get("user_id", "")` — eine Vorgabe für ein Pflichtfeld. Sie verdeckt nichts: `_notiz_schreiben` wirft bei leerer `user_id` `ValueError`, bevor geschrieben wird; in `_update` fällt ein leerer Mensch aber erst nach dem Modellaufruf auf. Dieselbe Form stand schon vorher im Modul (`_create`). Am Code gelesen. → **Entfällt, kein Eintrag:** Bestand, kein Einzelfund, 54 Stellen unter `server/`. `_notiz_schreiben` wirft, bevor geschrieben wird; ein leerer Mensch findet schon in `suchen` nichts, das Stück bis zum Modellaufruf ist praktisch nicht erreichbar. - ~~**2026-10-26** — **`dateien_wurzeln` meldet eine vertippte Nummer jetzt als ERROR.**~~ Seit der Bindung der Lesung an das Paar liefert `_read_by_id` für eine fremde und für eine fehlende Kennung dasselbe, `None`, und `server/agents/dateien_wurzeln/crud.py::_ziel_aufloesen` schreibt dann `logger.error` (*„fremd oder fehlend, abgewiesen“*), damit eine fremde Kennung im Log sichtbar bleibt. Eine Nummer, die der Mensch nur vertippt hat, erscheint damit ebenso als ERROR — ein möglicher Regelfall im Log. Wie oft der Dienst über eine Nummer angesprochen wird, ist nicht gezählt. Am Code gelesen. → **Entfällt, kein Eintrag:** gewollt. Eine fremde und eine fehlende Kennung sollen gleich aussehen (`_read_by_id`, Docstring), die anderen beiden Dienste schreiben ebenso ERROR (`charakter_identitaet/crud.py`, Z. 125). Neu zu öffnen, wenn eine Zählung einen Regelfall zeigt. Der Zweig Z. 388–399 ist seit der Bindung unerreichbar, das Archiv führt ihn als zweite Schranke. - ~~**2026-10-26** — **`GraphRecursionError` (Grenze 25) im Turn *„Wie bitte?“* bei wartender Rückfrage der Notizen.**~~ In der Messung im Betrieb zu den Ja/Nein-Toren meldete `event_consumer` den Abbruch an der Rekursionsgrenze, in 1 von 9 Turns; der Stand bis dahin wurde ausgeliefert, und der Zustand stimmte (dieselbe Frage erneuert, keine Notiz). Derselbe Abbruchweg ist in `TURN-ROH-FEHLT-BEI-ERZEUGTER-ANTWORT` beschrieben (Nachtrag 17.10.2026, `novaberg-bugs-charakter.md`); ob dem Turn dabei Spuren hinter dem Responder fehlen, ist nicht geprüft. Nur nach Logger gezählt. → **Nachtrag an `TURN-ROH-FEHLT-BEI-ERZEUGTER-ANTWORT`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang bleibt mittel; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Zeugenlücke an `_read_target_id`: Werte außerhalb des Alphabets des Zeugen nach Kriterium sind unbezeugt.**~~ `server/tests/test_target_id_ownership.py::FormTest.test_every_short_string_is_read_exactly_by_the_criterion` prüft alle kurzen Zeichenfolgen eines Alphabets; eine Mischung wie `"13a"` und eine Ziffernfolge aus nicht-lateinischen Ziffern liegen außerhalb davon. Der Code weist beide heute ab (`_LIST_FORM` nimmt nur die Ziffern 0–9) — in `direktiven` und `charakter_identitaet`; kein Zeuge würde rot, wenn sich das änderte. Am Code gelesen. → **Backlog `GEGENPROBE-BLINDE-ZEUGEN`** in [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Zeugenlücke am Subjekttyp des Fakten-Agenten: Die Reihenfolge der Prüfstufen vor der Typprüfung ist untereinander unbezeugt, und `REJECT_REASONS` hat keinen Leser.**~~ `server/tests/test_fakten_subject_type.py` sichert die Lage der Typprüfung, nicht, welche der Stufen davor zuerst greift. `REJECT_REASONS` (`server/agents/fakten/klassifikation.py`) nennen außerhalb der Tests nur Kommentare und Docstrings; kein Code liest die Menge. Am Code gelesen. → **Entfällt, kein Eintrag:** ohne Verhalten. Jede Stufe davor endet ohne Tripel (`vet_triple`), die Reihenfolge ändert nur den genannten Grund, und die Zeugen binden Menge und Stufen als Literal. - ~~**2026-10-26** — **Eine unbekannte `action` der Modellantwort fällt in vier Agenten still auf `read` zurück, und eine Liste oder ein Objekt wirft.**~~ `klassifikation.py` in `direktiven`, `charakter_identitaet`, `notizen` und `timeline` setzt bei einem Wert außerhalb von `GUELTIGE_AKTIONEN` (`null`, eine Zahl, `""`) mit nur einer WARNING `read`; `[]` und `{}` werfen beim Vergleich mit der Menge `TypeError` (unhashable). Am Code gelesen. → **Bug `KLASSIFIKATION-UNBEKANNTE-AKTION-WIRD-READ`** in [`novaberg-bugs-bauart.md`](novaberg-bugs-bauart.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **`check_answer` verwirft `ICH heisst `, sobald irgendwo in der Äußerung ein Possessiv der ersten Person steht.**~~ `server/agents/fakten/klassifikation.py::check_answer` prüft bei `heisst` mit `ICH` als Subjekt, ob die Äußerung einen Possessiv der ersten Person trägt, nicht, ob er zum Namen gehört; der eigene Name geht dann verloren, falsch geschrieben wird nichts. Nur am Code gelesen. → **Bug `FAKTEN-NAME-AM-POSSESSIV-VERWORFEN`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **`fakten.wiedervorlage_am` hat keinen Erzeuger außer dem Zurückstellen — kein Fakt wird je fällig.**~~ `FaktenRepository.insert` setzt die Spalte nicht (`server/memory/repositories/fakten_repository.py`); gesetzt wird sie nur über `set_wiedervorlage` beim Zurückstellen durch die Wiedervorlage (`server/agents/wiedervorlage/agent.py`), und `find_wiedervorlage_faellig` liest nur Zeilen, in denen sie gesetzt ist. Am Code gelesen. → **Bug `FAKTEN-WIEDERVORLAGE-OHNE-ERZEUGER`** in [`novaberg-bugs-hintergrund.md`](novaberg-bugs-hintergrund.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **`NotizenRepository.find_by_id`, `update`, `invalidate` und `set_wiedervorlage` treffen eine Notiz allein über die Kennung.**~~ `server/memory/repositories/notizen_repository.py`, Z. 76, 238, 257, 276 (`WHERE id = %s` ohne `user_id`), gerufen aus `server/plugins/notizen_manager/manager.py` (Z. 485, 759, 802) und `server/agents/wiedervorlage/agent.py` (Z. 311). Ob die Aufrufer die Kennung vorher an den Menschen binden, ist ungeprüft; die Schreibwege von `server/agents/notizen/crud.py` nennt `SCHREIBWEG-KENNUNG-OHNE-MENSCH` (~~`novaberg-bugs-wissen.md`~~ → geschlossen am 26.10.2026, `novaberg-bugs-archiv-wissen.md`; sie rufen seither keine dieser Methoden). Am Code gelesen. → **Bug `REPOSITORY-KENNUNG-OHNE-MENSCH`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang niedrig, die lebenden Wege sind gebunden, zwei sind tot; klassifiziert am 06.11.2026. - ~~**2026-10-26** — **Die Moduldokumente der Direktiven und der Charakter-Identität beschreiben die Prüfung der Kennung nicht.**~~ `novaberg-agent-directives.md` und `novaberg-agent-character.md` führen `target_id` nur als Feld der Klassifikation; `_read_target_id`, der Ausgang `kennung_unlesbar`, die Bindung von Lesen und Schreiben an `user_id` und der Ausgang `keine_zeile` (seit `236edec`) stehen nur in Chronik, Featureliste und Bug-Archiv. Gefunden beim Nachzug zu `DIREKTIVEN-KENNUNG-UNGEPRUEFT`. → **Handgriff, kein Eintrag:** Je ein Abschnitt steht seit dem 06.11.2026 in [`novaberg-agent-directives.md`](novaberg-agent-directives.md) §4.4 und [`novaberg-agent-character.md`](novaberg-agent-character.md) §4.5. - ~~**2026-10-26** — **Die Zählzeile im Wegweiser `novaberg-bugs.md` steht auf dem 18.10.2026.**~~ Sie nennt *159 Kennungen* (159 offen, 183 im Archiv); `bugregister_bilanz.py` zählt am 26.10.2026 176 offen und 206 im Archiv. Die Doku-Züge seit dem 18.10.2026 ziehen Teile und Findemittel nach, diese Zeile nicht. Gefunden beim Nachzug. → **Handgriff, kein Eintrag:** Die Zeile verweist seit dem 06.11.2026 auf das Findemittel, das gerechnet wird; eine Handzahl an dieser Stelle driftet wieder. - ~~**2026-10-25** — **Ein Personenname, der zugleich ein Ortsname ist, verliert seinen Titel.**~~ Aus *„Frau Jena aus dem Institut arbeitet als Astrophysikerin“* klassifiziert das Modell das Subjekt als `Jena` statt `Frau Jena`, 2 von 2 Läufen am Modell; in der Messung zum Subjekttyp im Stand davor und im Stand danach gleich, also nicht aus diesem Bau. Gelesen am Ergebnis, die Stelle im Code ist nicht gesucht. → **Bug `FAKTEN-SUBJEKT-VERLIERT-TITEL`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang niedrig; klassifiziert am 06.11.2026. - ~~**2026-10-25** — **`charakter_identitaet`: Löschen ohne gefundenes Ziel fragt *„Charakter-Anweisung loeschen (alle)“*.**~~ Eine Bitte über eine nicht vorhandene Anweisung ergab die Pflicht-Rückfrage nach dem Löschen aller, 2 von 2 am Modell; ein *„ja“* deaktivierte alle aktiven Anweisungen (`server/agents/charakter_identitaet/crud.py::_delete` → `_delete_alle`). Bestand, nicht aus dem Bau dazu. → **Bug `CHARAKTER-LOESCHEN-OHNE-ZIEL-TRIFFT-ALLE`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang hoch; klassifiziert am 06.11.2026. - ~~**2026-10-25** — **Wiederherstellen ohne Ziel: das Modell nennt die einzige inaktive Zeile.**~~ Eine Bitte über eine nicht vorhandene Regel ergab die Kennung der einzigen inaktiven Direktive, 2 von 2 am Modell; die Pflicht-Rückfrage nennt nur die Kennung, nicht den Wortlaut. Bestand, nicht aus dem Bau dazu; verwandt mit `DIREKTIVEN-RUECKFRAGE-OHNE-ZIEL`. → **Nachtrag an `DIREKTIVEN-RUECKFRAGE-OHNE-ZIEL`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), Rang bleibt niedrig; klassifiziert am 06.11.2026. --- ## Umgezogen — 26.10.2026, ein Fund vom 25.10.2026 mit seinem Bau **Ein Eintrag ist klassifiziert** und als Bug mit Kennung, Kategorie und Rang angelegt; gebaut und gemessen ist er im selben Zug, deshalb steht er gleich im Archiv. Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. - ~~**2026-10-25** — **`"anweisung": null` der Modellantwort wirft `TypeError` in `direktiven` und `charakter_identitaet`.**~~ `klassifikation.py` schreibt eine Logzeile mit `anweisung[:60]`; `ergebnis.get("anweisung", "")` greift bei einem gesetzten `null` nicht, der Vorgabewert gilt nur für einen fehlenden Schlüssel. Am Modell gemessen: 4 von 54 Bitten, darunter eine Lesebitte (Reihe zu `DIREKTIVEN-KENNUNG-UNGEPRUEFT`, Bestand, nicht aus dem Bau dazu). → **Bug `KLASSIFIKATION-NULL-FELD-WIRFT`** in [`novaberg-bugs-archiv-bauart.md`](novaberg-bugs-archiv-bauart.md), Rang mittel, Kategorie Bauart — dasselbe Muster in vier Agenten; klassifiziert am 25.10.2026, behoben, am Modell gemessen und geschlossen am 26.10.2026. --- ## Umgezogen — 25.10.2026, aus der Klassifizierung der Funde vom 24.10.2026 und 25.10.2026 **Zwei Einträge sind klassifiziert:** je ein neuer Bug mit Kennung, Kategorie und Rang (der zweite am 25.10.2026, später). Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. - ~~**2026-10-24** — **Das Löschen einer Direktive per Chat bricht ab, bevor das Tor fragt: die Kennung kommt als Text mit Klammern.**~~ Im Betrieb an einem Prüf-Nutzer (eine Direktive, *„Lösche bitte die Direktive über die Hubble-Konstante.“*, zweimal): `ki_server.agent_dispatch: InvalidTextRepresentation: Agent-Dispatch Fehler für 'direktiven'`, `invalid input syntax for type integer: "[13]"` aus `server/agents/direktiven/crud.py::validieren_gegen_db` → `_read_by_id` (Z. 134). Die Klassifizierung zeigt dem Modell die Direktiven als `[{id}] {anweisung}` (`klassifikation.py` Z. 92, 98), und es übernimmt `[13]` als `target_id`; der Wert geht ungeprüft an SQL. Folge: kein Wartezustand, keine Frage, nichts gelöscht — der Mensch bekommt keine Rückfrage, und die MESSUNG des Tors über den echten Weg ist nicht möglich. Gemessen am 24.10.2026, 22:37 UTC. → **Bug `DIREKTIVEN-KENNUNG-UNGEPRUEFT`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), klassifiziert am 25.10.2026. - ~~**2026-10-25** — **Die Schreibwege von `dateien_wurzeln` und `notizen` lesen und schreiben ebenfalls per `WHERE id = %s` ohne `user_id`.**~~ `server/agents/dateien_wurzeln/crud.py` (Z. 102, 664, 745) und `server/agents/notizen/crud.py` (Z. 49, 531, 655, 661) binden die Zeile nicht an den Menschen. Am Code gelesen, nicht gelaufen; ob eine Kennung dort aus einer Modellausgabe kommt, ist nicht geprüft (die Kennung der Wurzeln liest `_ziffer_oder_nichts` schon geprüft). Gefunden bei der Klassifizierung zu `DIREKTIVEN-KENNUNG-UNGEPRUEFT`. → **Bug `SCHREIBWEG-KENNUNG-OHNE-MENSCH`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), Rang niedrig; klassifiziert am 25.10.2026. --- ## Umgezogen — 24.10.2026, aus der Klassifizierung der Funde vom 24.10.2026 **Neunzehn Einträge ziehen um:** achtzehn der neunzehn Funde vom 24.10.2026 und einer vom 22.10.2026. Daraus werden acht neue Bugs, je mit Kennung, Kategorie und Rang (zwei Funde in einem zusammengelegt), zwei neue Backlog-Einträge und vier Nachträge an zwei bestehende Kennungen; drei Funde stehen ohne eigene Kennung in einem der neuen Bugs, einer ist in seinem Dokument berichtigt. Der neunzehnte Fund vom 24.10.2026, der Kommentar *„bis 2044 Kanten je Knoten“*, bleibt unter *Offen*. Kein Wortlaut ist geändert; wo der Fund steht, sagt der Pfeil. - ~~**2026-10-24** — **Am Tor der Direktiven führen Formen der Zurückhaltung aus, die die Stämme nicht kennen.**~~ `server/agents/direktiven/resume.py::_holds_back` (Z. 161) hält eine Antwort nur bei einem `?` oder einem Stamm aus `WAIT_STEMS` (Z. 57: `wart`, `moment`, `augenblick`, `sekunde`, `halt`) zurück; auf *„Soll ich das ausfuehren? Direktive loeschen (ID …)“* löschen deshalb *„Sekündchen, bitte“* und *„Sek, bitte“* (*sekunde* steckt nicht in *sekünd-* oder *sek*), *„wait, ok“* und *„hold on, ok“* (englisches Warten fehlt, *ok* zählt), *„Ja, später“* und *„ok, ich überleg noch“* (Aufschub ohne Stamm) und *„Wie bitte!“* ohne `?`. Die Klasse der Zurückhaltung ist offen, die der Zustimmung geschlossen: Ausführen nur, wenn nach Abzug der Zustimmungswörter, der Satzzeichen und einer kleinen festen Liste nichts bleibt, schlösse sie — zu weit in der sicheren Richtung (*„Ja, lösch sie“* fragte ein zweites Mal). Am Code nachgerechnet, nicht gelaufen; gefunden bei der Prüfung der Deutung. → **Bug `ZURUECKHALTUNG-GILT-ALS-ZUSTIMMUNG`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), zusammengelegt mit dem Fund zu *„Wie bitte?“* im Notizen-Dienst (unten), Rang hoch; *„Ja, lösch sie“* erreicht das Tor am Code nicht, der Router routet den Turn neu; klassifiziert am 24.10.2026. **Überholt seit dem 24.10.2026** (Code-Tree `f901e08`, Kennung wird nachgetragen → committet als `e1e0724`, die Doku dazu als `d2d6ec8`): `WAIT_STEMS` und `_holds_back` entfallen, die Zustimmung ist geschlossen — jedes Wort ein Zustimmungs- oder Füllwort, kein Zeichen außerhalb von `DROPPED_SIGNS`, keine Frage nach der Wortstellung; *„Sekündchen, bitte“*, *„wait, ok“*, *„Ja, später“* und *„Wie bitte!“* löschen nicht mehr. Im Betrieb nicht gemessen. - ~~**2026-10-24** — **Zwei Zwillinge der Zeugen sichern eine Rückfrage als Zustimmung zu.**~~ `server/tests/agents/direktiven/test_resume.py`, `_CONSENT_TWINS` (Z. 58–60): *„Wie bitte!“* und *„Kurz, bitte“* stehen als Zwillinge von *„Wie bitte?!“* und *„Kurz warten, bitte“*, die sich nur im zurückhaltenden Teil unterscheiden, und `test_plain_consent_executes` hält über den Graphen fest, dass beide löschen. Eine Regel, die die Klasse der Zurückhaltung schließt, macht beide rot; ein Zwilling mit echter Zustimmung (*„Ja, bitte!“*) hielte die Zusicherung *unklar* ebenso fest. Am Code gelesen. → **im Bug `ZURUECKHALTUNG-GILT-ALS-ZUSTIMMUNG`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), ohne eigene Kennung — die Zeugen sichern sechs Fälle in zwei Testmethoden zu, nicht zwei, und werden mit der Behebung umgedreht; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Die Stämme des Wartens treffen Wörter aus dem Umfeld der Direktiven.**~~ `server/agents/direktiven/resume.py`, `WAIT_STEMS` (Z. 57) sucht als Teilzeichenkette: `halt` steckt in *verhalten*, *einhalten*, *behalten*, *Inhalt*, `wart` in *erwarte*, *gewartet*, `augenblick` in *augenblicklich*, `moment` in *momentan*. *„Ja, so sollst du dich verhalten“*, *„ja, bitte einhalten“*, *„ja, das erwarte ich“* und *„ja, augenblicklich“* kosten deshalb eine zweite Frage — die gewollte Richtung (zu weit statt zu eng), bezeugt ist nur *momentan*. Für die Messung im Betrieb: Zweite Fragen werden häufiger sein als bei *halt* als Partikel. Am Code gelesen, nicht gelaufen. → **kein Eintrag** — die gewollte Richtung, zu weit statt zu eng; vermerkt als Hinweis für die Messung im Bug `ZURUECKHALTUNG-GILT-ALS-ZUSTIMMUNG` in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md); klassifiziert am 24.10.2026. **Gegenstandslos seit dem 24.10.2026** (Code-Tree `f901e08`): `WAIT_STEMS` entfällt, *verhalten*, *einhalten*, *erwarte* und *augenblicklich* neben *ja* sind unklar, weil *ja* mit einem Wort außerhalb der Mengen nicht zustimmt. - ~~**2026-10-24** — **Die Ja/Nein-Deutung steht als Kopie in drei Diensten.**~~ `REFUSAL_STEMS` und `CONSENT_WORDS` stehen in `server/agents/notizen/resume.py`, `server/agents/charakter_identitaet/resume.py` und seit dem Code-Tree `2457549` in `server/agents/direktiven/resume.py`, die Helfer `_has_word`, `_has_stem` und `_without_words` in `notizen` und `direktiven`; `server/agents/dateien_wurzeln/resume.py::_antwort_deuten` führt eigene Listen (`ABLEHNUNGS_WOERTER`). Eine Änderung an einer Stelle zieht die anderen nicht nach — die Zurückhaltung gibt es schon nur bei den Direktiven. Ob die Listen in `charakter_identitaet` wortgleich sind, ist nicht nachgesehen. Am Code gelesen. → **Nachtrag an den Backlog-Eintrag `KLA-KLAERFALL-AM-OBJEKT`** in [`novaberg-backlog-wissen.md`](novaberg-backlog-wissen.md) — die Schritte 5 und 6 lösen die Kopien ab; nachgesehen: Die Liste in `charakter_identitaet` ist nicht wortgleich, die Helfer stehen in drei Diensten, nicht in zwei, und eine fünfte Liste steht in `utils/offers.py`; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Eine Auswahlfrage der Direktiven ist nicht lösbar.**~~ Auf *„Mehrere geloeschte Direktiven passen: … Welche soll ich wiederherstellen?“* (`server/agents/direktiven/crud.py`, Z. 164, ebenso *„Welche soll ich entfernen?“* Z. 388 und Z. 447) wird keine Wahl aus der Antwort gelesen, weder vor noch nach dem Code-Tree `2457549`: Seither beendet eine Ablehnung die Frage, jede andere Antwort stellt sie erneut — bis zur Ablehnung oder bis der Pending-Zustand abläuft (300 s, `server/agents/direktiven/dispatch.py`, Z. 18). Vorher ging jede Antwort nach `ausfuehren`, und blieb inzwischen genau ein Treffer, wurde er ohne Wahl wiederhergestellt oder gelöscht. Am Code gelesen. → **Bug `DIREKTIVEN-AUSWAHLFRAGE-OHNE-LESER`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), die Absicht zum Zwischenstand offen; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Eine Ablehnung am Tor der Direktiven ist im `pipeline_log` nur am Text zu erkennen.**~~ Die Zeile mit `node = 'agent_dispatch'` und `quelle = 'direktiven'` (`server/graph/nodes/agent_dispatch.py`, Z. 74 und 83) trägt nach einer Ablehnung `status` `abgeschlossen` wie nach einem Löschen; unterscheiden lässt sie nur `ergebnis`, der Satz *„Gut, dann lasse ich es. An deinen Direktiven ist nichts geaendert.“* Der Schritt `abgelehnt` steht nur in den Schritten des Agenten und erreicht das Log nicht; ins `hintergrund_log` schreibt der Pfad nichts. Wer den Ausgang zählt, zählt einen Text. Am Code gelesen. → **Bug `TOR-ABLEHNUNG-MELDET-ABGESCHLOSSEN`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md) — die Ursache ist der Status, `abgeschlossen` statt `dismissed`, ebenso in den Notizen; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Die Pflicht-Rückfrage der Direktiven nennt *„(ID None)“*, wenn nur ein Stichwort vorliegt.**~~ `server/agents/direktiven/crud.py::validieren_gegen_db` (Z. 171 und 173) schreibt *„Direktive loeschen (ID {target_id})“* und *„Direktive aendern (ID {target_id}): …“* auch ohne Kennung; für `delete` prüft der Weg davor nur mit Kennung (Z. 133). Der Mensch liest dann *„Soll ich das ausfuehren? Direktive loeschen (ID None)“*. Am Code gelesen, nicht gelaufen. → **Bug `DIREKTIVEN-RUECKFRAGE-OHNE-ZIEL`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md) — berichtigt: `update` steht in Z. 172, Z. 173 ist `reactivate` und ebenso betroffen; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Die Art einer Rückfrage der Direktiven hängt an ihrem Wortlaut.**~~ `server/agents/direktiven/resume.py::_question_kind` (Z. 227) erkennt Ja/Nein- und Auswahlfrage an Anfang und Ende des Fragetexts aus `crud.py`, weil der Pending-Zustand bei einer erneuten Rückfrage die Parameter des Eingangs speichert, nicht die des Graphen (`server/agents/direktiven/dispatch.py`, Z. 192–198). Ändert sich ein Fragetext, wird der Zeuge `QuestionKindTest` rot; im Betrieb ergäbe eine unbekannte Frage `fehler` und führte nichts aus — die sichere Richtung. Die Art im Pending mitzuführen hinge nicht am Text. Am Code gelesen. → **kein Eintrag, ein Satz im Bug `DIREKTIVEN-AUSWAHLFRAGE-OHNE-LESER`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md) — laut und sicher; die Begründung trifft nur die Auswahlfrage aus `_delete` und `_reactivate`; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Ein Paar aus Stunde und Tageszeit, das nicht zusammenpasst, wird beim Verschieben geschrieben.**~~ `server/agents/timeline/positive_form.py::_raw_hour_in_daypart` (Z. 520) rechnet an 1 bis 11 den Versatz der Tageszeit ungeprüft auf die Stunde: *„auf 1 Uhr abends“* wird 13:00, *„auf 11 Uhr nachmittags“* 23:00, *„auf 4 Uhr vormittags“* 04:00. Geprüft wird ein Widerspruch nur an 0, 12 und 13 bis 23 (*„16 Uhr morgens“* fragt), und *mittags*/*nachts* fragen an 1 bis 11 (`_RAW_DAYPARTS_BOTH_HALVES`). Ob ein solches Paar fragen soll, sagt die Entscheidung vom 17.10.2026 nicht — sie nimmt jeden Satz aus, der die Tageszeit selbst nennt. Am Code gelesen, nicht gelaufen; gefunden bei der Prüfung der Rückfrage nach der Tageshälfte. → **Bug `VERSCHIEBEN-TAGESZEIT-WIDERSPRICHT-STUNDE`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), die Absicht offen (welche Stunden zu welcher Tageszeit passen, ob ein unstimmiges Paar fragt); klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Die Rückfrage `keine_eindeutige_zeit` sagt *Uhrzeit*, auch wenn der Tag strittig ist, und nennt keine Lesarten.**~~ `server/agents/timeline/crud.py::_update` (Z. 380–386) schreibt bei jeder Ablehnung durch `_raw_form_agrees` *„Konnte die neue Uhrzeit nicht eindeutig erkennen. Wann soll '…' stattfinden?“* — seit dem Code-Tree `3e1bb3f` auch dann, wenn nur ein Tag abweicht, den der Satz nicht nennt (*„4 Uhr morgens“*: die Uhrzeit ist eindeutig, den Tag liest der Parser aus *morgens*). Lässt der Zeitausdruck des Modells die Tageszeit des Satzes weg, endet der Weg je nach Versatz hier statt in `tageshaelfte_offen` und nennt die beiden Lesarten nicht. Ebenso passt der Satz von `kein_datum` (*„Konnte das neue Datum nicht erkennen“*, Z. 303–307) nicht zu *„auf 4 Uhr morgens“*. Am Code gelesen. → **Bug `VERSCHIEBEN-RUECKFRAGE-NENNT-FALSCHEN-GRUND`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md) — berichtigt: Bei einer Tageszeit mit Versatz 12 endet der Weg schon in `kein_datum`; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Ob die Antwort *„4 Uhr morgens“* auf die Rückfrage nach der Tageshälfte richtig gelesen wird, ist nicht bezeugt.**~~ Die Rückfrage bietet für 1 bis 10 Uhr die Lesart *morgens* an (`server/agents/timeline/crud.py::_half_of_day_question`, `_HALF_OF_DAY_WORDS`; synthetisch *„… um 4 Uhr morgens (04:00) oder um 4 Uhr nachmittags (16:00) …?“*). Einen Wartezustand gibt es nicht, die Antwort kommt als neuer Auftrag; als solcher endet *„… 6 Uhr morgens“* in `keine_eindeutige_zeit`, weil der Zeitparser in *morgens* den Tag *morgen* liest — am Modell gemessen am 24.10.2026, 4 von 4 (`labor/2026-10-24_stunde_messung_ergebnis.md`). Die Lesart, die die Frage anbietet, schreibt damit nicht. Den Leser einer Antwort trägt `KLA-KLAERFALL-AM-OBJEKT` (Backlog Wissen), nicht gebaut. Für die Antwort selbst nicht gelaufen. → **Nachtrag an den Backlog-Eintrag `KLA-KLAERFALL-AM-OBJEKT`**, Schritt 3, in [`novaberg-backlog-wissen.md`](novaberg-backlog-wissen.md); die Ursache des Abbruchs ist `ZEIT-TAG-AN-TEILWORT-ERKANNT`; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Kein Zeuge hält über `_update` ein Tageswort im Titel.**~~ Der Zeitparser setzt `tag_erkannt` über eine Teilzeichenfolge (`server/utils/zeitparser.py`, Z. 2550–2557): Ein Titel wie *„Morgenrunde“* oder *„Montagsmeeting“* trägt einen Tag, den der Satz nicht nennt. Beim Verschieben fängt das seit dem Code-Tree `3e1bb3f` der Tagesvergleich in `_raw_form_agrees` ab — am Code, ohne Zeugen über `_update` (`server/tests/test_timeline_reschedule.py`). Am Modell gemessen am 24.10.2026 schrieb *„… Morgenbeobachtung auf 19 Uhr“* am Tag des Termins, 2 von 2 (`labor/2026-10-24_stunde_messung_ergebnis.md`). Beim Anlegen eines Termins ist die Teilzeichenfolge nicht geprüft. Am Code gelesen. → **Bug `ZEIT-TAG-AN-TEILWORT-ERKANNT`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md) — die Kennung gilt der Teilzeichenfolge im Zeitparser, der fehlende Zeuge steht in der Schließbedingung; berichtigt: abgefangen hat `_no_new_time`, nicht der Tagesvergleich; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Bei *„auf Freitag um 4 Uhr morgens“* wird der genannte Tag nicht gegen den gelesenen verglichen.**~~ Nennt eine Positivform einen Tag (`RawTimeForm.day_named`), lässt `server/agents/timeline/crud.py::_raw_form_agrees` jeden Tag zu (`day_allowed`, Z. 660–662); ob der geschriebene der genannte ist, prüft niemand, und der Docstring sagt diese Grenze. Ob der Zeitparser hier den Freitag nimmt oder *morgen* aus *morgens*, ist am Code abgeleitet (der Freitag: *„Uhr morgens“* verbraucht die Normalisierung, `\bmorgen\b` trifft *morgens* nicht), nicht gelaufen; ein Zeuge fehlt. → **Backlog `VERSCHIEBEN-GENANNTER-TAG-UNVERGLICHEN`** in [`novaberg-backlog-wissen.md`](novaberg-backlog-wissen.md) — eine Lücke ohne gefundenen Schaden, nachgestellt schreibt der Satz den Freitag; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Im Notizen-Dienst gilt *„Wie bitte?“* als Zustimmung und legt an.**~~ `server/agents/notizen/resume.py::_resume_nicht_gefunden` liest auf *„… existiert nicht, soll ich anlegen?“* die Zustimmung als ganzes Wort aus `CONSENT_WORDS` (Z. 29–33, darin *bitte*); *„Wie bitte?“* trägt *bitte* und keine Ablehnung, also legt der Dienst die Notiz an (Z. 304). Dieselbe Wortliste nimmt die Deutung der Pflicht-Rückfrage der Direktiven, die zu `DIREKTIVEN-FUEHRT-JEDE-ANTWORT-AUS` gebaut wird (nicht committet); dort ist eine Antwort, die als Frage endet, unklar. Ob `charakter_identitaet` und `dateien_wurzeln`, die *bitte* ebenfalls als Zustimmung führen, dasselbe tun, ist nicht nachgesehen. Am Code abgeleitet, nicht gelaufen. → **im Bug `ZURUECKHALTUNG-GILT-ALS-ZUSTIMMUNG`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), zusammengelegt mit dem ersten Fund vom 24.10.2026 (oben); nachgesehen: `charakter_identitaet` und `dateien_wurzeln` tun dasselbe, mit größerer Wirkung, und die Deutung der Direktiven ist seit `6846120` committet; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Die Sachlage fiel in der Messung von Trigger 2 im Betrieb einmal an kaputtem JSON des Modells aus.**~~ Im Messturn vom 24.10.2026 (13:23–13:26 UTC, am Code von `570cdda`) endete ein Aufruf mit Aufrufer `sachlage` im Chat-Worker (`services/model_services/chat_worker.py` über `worker_base.py`) in einem `JSONDecodeError`; im Serverlog, nur gezählt, 3 Fehlerzeilen und 2 Tracebacks, alle aus diesem einen Ausfall. Ohne Bezug zur Messung der Kanten, die bestand. Dieselbe Klasse wie der Fund vom 22.10.2026 weiter unten; `SACHLAGE-OBJEKT-OHNE-NAMEN` (`novaberg-bugs-antwortpfad.md`) zählt `JSONDecodeError` unter *Menge* einmal, über den 15. bis 17.10.2026, und führt keine laufende Zählung. Ein Fall, keine Rate. Gemessen; gefunden bei der Messung im Betrieb. → **Nachtrag an den Bug `SACHLAGE-OBJEKT-OHNE-NAMEN`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), zusammen mit dem Fund vom 22.10.2026 (unten) und mit der Wirkung, dass bei einem Ausfall auch der Fakten- und der Ereignis-Auftrag des Turns entfallen; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **`kanten_neu` und `kanten_dauer_ms` sind Summen je Lauf.**~~ `server/memory/usage_reinforcement.py::reinforce_used` (Code-Tree `3a5ccab`) summiert Kantenzahl und Dauer über alle verstärkten Knoten eines Turns (bis zu drei); bei mehreren Treffern lässt sich die Dauer im `pipeline_log` keinem Knoten und seiner Kantenzahl zuordnen. Wer die Kosten der Neuberechnung bei vielen Kanten aus dem Betrieb ablesen will, braucht Turns mit genau einem Treffer oder eine Aufschlüsselung je Knoten. Am Code gelesen; gefunden bei der Prüfung des Baus. → **Backlog `VERSTAERKUNG-KANTEN-NUR-ALS-SUMME`** in [`novaberg-backlog-gedaechtnis.md`](novaberg-backlog-gedaechtnis.md); klassifiziert am 24.10.2026. - ~~**2026-10-24** — **`novaberg-memory-synapsen_b.md` §12.3 (TE) zählt für `knoten_verstaerken` zwei Aufrufer, die Promotion und `reinforce_used`.**~~ Seit dem Code-Tree `5342a6a` (`782274c`, 23.10.2026) ruft die Promotion `knoten_verstaerken` nicht mehr; der einzige Aufrufer außerhalb der Tests ist `reinforce_used` (`server/memory/usage_reinforcement.py`). Gelesen beim Nachzug zu Trigger 2 an der Verwendung, nicht berichtigt. → **berichtigt in `novaberg-memory-synapsen_b.md` §12.3**, ohne Eintrag; klassifiziert am 24.10.2026. - ~~**2026-10-24** — **Ein Viertel der Kanten des Langzeitgedächtnisses steht nicht auf der Stärke, die Trigger 2 heute rechnet.**~~ Am Bestand gemessen, nur lesend — je Kante dieselbe Rechnung wie `server/memory/lzg_kanten.py::kanten_neuberechnen_fuer_knoten`, ohne Schreiben (`labor/2026-10-24_kanten_nulllinie.{py,out}`): **155.998 von 639.734** Kanten weichen ab, die größte um 1,35. Davon hängen 16.266 an einem Knoten, der seit dem 04.09.2026 verstärkt wurde (`verstaerkt_am`), **139.732** an den übrigen — 70 % von deren 198.316 Kanten. Die Ursache ist nicht nachgesehen; naheliegend ist eine geänderte Rechnung, ohne dass der Bestand nachgerechnet wurde. Die erste Neuberechnung nach einer Verstärkung zieht solche Kanten auf die heutige Rechnung. Gemessen am 24.10.2026. → **Bug `LZG-KANTEN-BESTAND-AUF-ALTEM-KNOTENGEWICHT`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md) — berichtigt: Die Rechnung ist seit Mai beziehungsweise Juli 2026 unverändert, verschoben haben sich die Eingänge; eine Spur zum Wartungslauf der Salienz vom 24.08.2026 ist lesend eingegrenzt, am Bestand nicht geprüft; klassifiziert am 24.10.2026. - ~~**2026-10-22** — **Die Sachlage fiel in der Messung einmal an kaputtem JSON aus.**~~ Beim Aufruf der Sachlage für einen der 36 Sätze der Messung des Ereignis-Jahres am Modell (22.10.2026) endete die Antwort in einem `JSONDecodeError`; der Satz bekam keine Kandidaten, das Ereignis erreichte den Ereignis-Aufruf nicht. Derselbe Satz gelang im zweiten Lauf. Ein Fall, keine Rate. Gemessen; gefunden ebenda. → **Nachtrag an den Bug `SACHLAGE-OBJEKT-OHNE-NAMEN`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), zusammen mit dem Fund vom 24.10.2026 (oben); klassifiziert am 24.10.2026. --- ## Umgezogen — 24.10.2026, aus der Klassifizierung der Funde vom 23.10.2026 **Acht Einträge sind klassifiziert:** sieben neue Bugs, je mit Kennung, Kategorie und Rang, und ein Nachtrag an eine bestehende Kennung. Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. - ~~**2026-10-23** — **`match_pruefen` meldet beim Treffer weiter *„-> Reinforcement“*.**~~ `server/memory/lzg_knoten.py::match_pruefen` (Z. 540) schreibt `Match erkannt: … -> Reinforcement` ins Log; die Promotion führt einen Treffer auf einen aktiven Knoten seit `782274c` als `dublette` und verstärkt nicht. Am Code gelesen; gefunden bei der Messung der Promotion im Betrieb. → **Bug `LZG-TREFFER-MELDET-REINFORCEMENT`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md), klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Der Router gab das Zeitfenster einer Terminfrage nicht in ISO, und der Block `[TERMINE]` fehlte im Turn.**~~ In Messturns im Betrieb stand der Zeitraum in der Form `TT.MM hh:mm`; `graph/appointments.py` meldete *„Termine: Anfrage des Routers nicht lesbar (Invalid isoformat string …)“*. Nach dem Docstring dort gilt dann das proaktive Fenster, und der Block sagt das; in diesem Turn entfiel er. Ein Turn. → **Nachtrag an den Bug `TIMELINE-LESEPFAD-INSTABIL`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md) — Beleg für das Zeitfenster nicht in ISO; die Zuschreibung des fehlenden Blocks an die unlesbare Anfrage hält am Code nicht (das proaktive Fenster greift), offen bleibt, warum der Block im Turn fehlte; klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Ein Termin-Thema aus einem früheren Turn wurde in drei späteren Turns erneut im Web gesucht.**~~ In Messturns im Betrieb; der Anbieter antwortete mit einem HTTP-Fehler, 0 Treffer. Wer die Suche auslöst und warum sie wiederkehrt, ist nicht nachgesehen. → **Bug `SACHLAGE-RECHERCHE-WIEDERHOLT-IM-FOLGETURN`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Der Erinnerungs-Anker eines berichteten vergangenen Monats liegt im kommenden Jahr.**~~ Für einen berichteten Satz *im September* lag der Anker des Magnet-Pfads (`server/agents/kzg/magnete.py::_timeline_aufloesen`, über `zeit_parsen_vektor`, ohne Zeitlage) auf dem 01.09.2027, während das Ereignis desselben Turns richtig im September 2026 liegt. In Messturns im Betrieb. → **Bug `MAGNET-ANKER-VERGANGENES-WIRD-KOMMEND`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md), klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Der Fakten-Agent schrieb aus einem Satz über eine Tagung ein Tripel mit einem Ort als Subjekt.**~~ Form *Ort `hat_hobby` Thema* statt der Person; die Prüfung vor dem Schreiben ließ es durch. In Messturns im Betrieb, einer von 3 geschriebenen Fakten. → **Bug `FAKTEN-ORT-ALS-SUBJEKT-DURCHGELASSEN`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), die Absicht offen (welche Beziehungen eine Person oder ICH als Subjekt verlangen), klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Die `timeline_id` eines Ereignisses stand am Beziehungsfakt der Person, nicht am Fakt des Ereignisses.**~~ Ein Fakt *hat_schwester* trug den Verweis auf die Ereignis-Zeile. Dass er nach dem Verschieben weiter auf die alte, inaktive Zeile zeigte, ist für diesen Verweis gewollt — die Mappe folgt ihm über `aktive_zeile` (`TIMELINE-VERWEIS-VERALTET-BEIM-VERSCHIEBEN`). In Messturns im Betrieb. → **Bug `FAKTEN-EREIGNISVERWEIS-AM-BEZIEHUNGSFAKT`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Die Warnung *„… in 'gedeckt' ohne Wert — nach offen: …“* sagt *nach offen* auch bei einem latenten Objekt.**~~ `server/graph/nodes/sachlage_form.py::_split_covered` meldet sie, bevor feststeht, ob das Objekt akut ist; bei einem latenten wird `offen` danach geleert, und die Eigenschaft fällt weg. Bestand; seit der Prüfung auf Platzhalter (`_is_placeholder`) schlägt die Warnung häufiger an. Am Code gelesen; gefunden beim Bau. → **Bug `SACHLAGE-WARNUNG-NACH-OFFEN-AM-LATENTEN-OBJEKT`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), mit dem stillen Leeren in `merge_same_name_objects`, klassifiziert am 24.10.2026. - ~~**2026-10-23** — **Fall (a) von `_is_placeholder` nimmt jeden Text ohne Buchstaben und Ziffern als Platzhalter.**~~ Auch ein Symbol als ganzer Wert — `∞`, `€`, `%` — gilt damit nicht als Wert. Ungemessen, kein Zeuge dafür; gefunden beim Bau. → **Bug `SACHLAGE-SYMBOL-GILT-ALS-PLATZHALTER`** in [`novaberg-bugs-antwortpfad.md`](novaberg-bugs-antwortpfad.md), klassifiziert am 24.10.2026. --- ## Umgezogen — 22.10.2026, beim Nachzug des Ereignis-Wegs - ~~**2026-10-21** — **Ein Monatsname ohne Präfix gilt im laufenden Jahr, auch wenn der Monat vorbei ist.**~~ `server/utils/zeitparser.py::named_period` (um Z. 1609–1625): *„im Januar“*, gesagt im Oktober, ist der Januar des laufenden Jahres — so als Richtung beschrieben in `novaberg-tool-timeparser.md` §10.7; ein angekündigtes Ereignis in einem solchen Monat läge damit in der Vergangenheit. Am Code beobachtet, nicht gemessen; gefunden ebenda. → **Bug `EREIGNIS-KOMMENDES-WIRD-VERGANGEN`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), am Modell gemessen am 21.10.2026 (5 von 8 angekündigten Ereignissen in der Vergangenheit), klassifiziert am 22.10.2026. ## Umgezogen — 21.10.2026, beim Bau des Magnet-Pfads ohne Rückfall - ~~**2026-10-21** — **ICH ohne Entität des Menschen wird in `resolve_batch` eine Entität namens ICH.**~~ `server/memory/services/entity_resolution.py` warnt *„'ICH' → keine User-Entität gefunden“* und fällt in die gewöhnliche Suche durch; findet sie nichts, legt der Magnet-Pfad *ICH* an. `resolve_by_name` wirft an derselben Stelle `LookupError`. Gefunden beim Bau der lauten Auflösung. → **Nachtrag an den Bug `MAGNET-RUECKFALL-BINDET-AEHNLICHEN-NAMEN`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md), behoben im Tree mit demselben Bau, klassifiziert am 21.10.2026. ## Umgezogen — 20.10.2026, aus der Klassifizierung der Funde vom 18. bis 20.10.2026 **Fünfzehn Einträge sind klassifiziert:** zehn neue Bugs und ein Backlog-Eintrag, je mit Kennung, Kategorie und Rang; zwei Nachträge an bestehende Kennungen; einer fällt mit dem Bauteil F1; eine Doku-Berichtigung. Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. ~~**Offen bleibt** *„Der Rückfall auf Embeddings bindet einen ähnlichen Namen still“*: Ob der Magnet-Pfad des Kurzzeitgedächtnisses den Rückfall behält, ist eine Absicht, die noch niemand entschieden hat (Sachlage und Fakten lösen seit dem 17. bzw. 20.10.2026 ohne ihn auf).~~ → Am 21.10.2026 entschieden (`novaberg-memory-fakten_e.md` A Nr. 35) und als Bug klassifiziert (unten). - ~~**2026-10-20** — **Ein Ausfall der Namenssuche legt still eine neue Entität an.**~~ `server/memory/services/entity_resolution.py::_search_by_name` fängt einen Fehler der Datenbank und gibt `[]` zurück (Z. 274–278); danach greift der Rückfall auf Embeddings und am Ende *neue Entität* (Z. 161–187) — ein Ausfall sieht aus wie *kein Treffer* und erzeugt ein Duplikat. Der Schreibweg der Fakten benutzt seit dem 20.10.2026 `resolve_by_name` ohne diesen Pfad; die übrigen Aufrufer nicht. → **Bug `AUFLOESUNG-AUSFALL-WIRD-NEUE-ENTITAET`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **`create_new_entity` duldet einen Fehler des Embeddings mit einer Warnung**~~ (`entity_resolution.py`, um Z. 485): eine neu angelegte Entität kann ohne Vektor bleiben, ohne dass ein Leser es erfährt. → **Nachtrag an den Bug `ENTITAETEN-OHNE-EMBEDDING`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md) — dieselbe Schließbedingung (*„oder ihr Fehlen ist gemeldet“*), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **Der Kanon des Fakten-Agenten kennt keine Beziehung zwischen Orten.**~~ `server/agents/fakten/beziehungen.py::KANON` übernimmt die 23 Beziehungen des alten Plugins; *liegt in* fehlt. *„Kassel liegt in Deutschland“* (das Beispiel aus `novaberg-memory-fakten_k.md` §1) wird abgelehnt — gemessen am 20.10.2026 an *„Ostheim liegt an der Werra“*; die Mappe des zweiten Grades über Orte hat damit keinen Bestand. Ebenso fehlt eine Beziehung für Unverträglichkeiten (*„Lena verträgt keine Nüsse“*). → **Backlog `FAKTEN-KANON-LUECKEN`** in [`novaberg-backlog-wissen.md`](novaberg-backlog-wissen.md), beide Lücken als Kriterium (*jedes Beispiel des Konzepts*), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **Fakten des Agenten tragen kein Embedding.**~~ `agents/fakten/crud.py` baut `NewFact` ohne `embedding`; ein Leser über `FaktenRepository.find_similar` fände die Zeilen nicht. → **Bug `FAKTEN-OHNE-EMBEDDING`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **Bei `heisst` nimmt die Prüfung der Antwort *ICH* aus.**~~ `agents/fakten/klassifikation.py::check_answer` prüft bei `heisst`, dass ein benanntes Subjekt nicht Besitzer ist, nimmt *ICH* aber aus: eine Antwort `ICH heisst Rufus` auf *„Mein Hund heißt Rufus“* ginge durch und löste als einwertige Beziehung den Namen des Menschen ab. Am Modell gemessen am 20.10.2026: 9 von 9 Sätzen dieser Form richtig klassifiziert — die Lücke ist offen, aber nicht beobachtet. → **Bug `FAKTEN-HEISST-ICH-AUSGENOMMEN`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **`agents/fakten/suche.py` ruft die private `EntityResolutionService._build_klärungsfrage`**~~, und deren Text sagt bei zwei Treffern immer *„zwei Personen namens …“*, auch bei Orten und Tieren (Z. 376). → **Bug `FAKTEN-SUCHE-PRIVATE-KLAERUNGSFRAGE`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **Ein Kommentar nennt noch `FaktenAgent`:**~~ `server/graph/nodes/gespraechsvektor.py:366`; die Klasse heißt seit dem 20.10.2026 `FactsAgent`. → **fällt mit dem Bauteil F1**: Der Kommentarblock steht über `_entity_kontext_laden`, und das entfällt mit F1 ([`novaberg-memory-fakten_b.md`](novaberg-memory-fakten_b.md) §6, *Ihre Leser*, dort jetzt genannt), klassifiziert am 20.10.2026. - ~~**2026-10-19** — **Fünf Agenten halten ihren Wartezustand über die Infrastruktur.**~~ `server/agents/{timeline,notizen,dateien_wurzeln,direktiven,charakter_identitaet}/dispatch.py` importieren `tools.redis_manager` für `pending_agent:{user_id}`, und `server/agents/timeline/crud.py` liest zur Verifikation über `tools.db_manager` (Z. 38) — der Geschäftsablauf greift an Repository und Service vorbei auf die Infrastruktur zu. Einen Zugang zum Wartezustand außerhalb von `tools/` gibt es nicht; ein neuer Agent nach diesem Muster erbt die Schichtverletzung. → **Nachtrag an den Bug `IMPORTE-UEBERSPRINGEN-SCHICHT`** in [`novaberg-bugs-bauart.md`](novaberg-bugs-bauart.md) (beide Fälle); der Wartezustand entfällt mit `KLA-KLAERFALL-AM-OBJEKT` Schritt 6 ([`novaberg-backlog-wissen.md`](novaberg-backlog-wissen.md), dort jetzt genannt), klassifiziert am 20.10.2026. - ~~**2026-10-18** — **Ein Zeuge des Tageslaufs fährt Bestandslauf und Preiswächter echt.**~~ `server/tests/test_praegung_einfaerbung.py::test_der_siebte_schritt_laeuft` ersetzt in `SynapsenDecayAgent.invoke` jeden Schritt außer `fascination_store.bestandslauf` (liest die Datenbank des Laufs) und `price_watch.pruefen` (geht ins Netz; sein Fehler wird gefangen und als Audit `fehler` geschrieben). Gefunden beim Bau des Fakten-Verfalls (Schritt 11), dort nur um dessen Ersatzzeile ergänzt. → **Bug `ZEUGE-TAGESLAUF-FAEHRT-ECHT`** in [`novaberg-bugs-bauart.md`](novaberg-bugs-bauart.md), klassifiziert am 20.10.2026. - ~~**2026-10-18** — **Der Docstring des Tageslaufs zählt sechs Wartungsaufgaben.**~~ `server/agents/synapsen_decay/agent.py` beginnt mit *„Orchestriert einmal täglich sechs entkoppelte Wartungsaufgaben“*; `invoke` nummeriert seine Schritte 1 bis 11, die 8 als Lücke; die Liste darunter führt seit dem Fakten-Verfall auch Schritt 11. → **Bug `TAGESLAUF-DOCSTRING-SECHS-AUFGABEN`** in [`novaberg-bugs-hintergrund.md`](novaberg-bugs-hintergrund.md), klassifiziert am 20.10.2026. - ~~**2026-10-18** — **Die Bereinigung des lauten Einstiegs zerschneidet jedes Vorkommen eines kurzen Kennworts in einer Fehlerzeile.**~~ `server/tools/core_schema.py::redact_connection` ersetzt das Kennwort *„auch inmitten anderer Woerter“* (Docstring); mit dem Entwicklungs-Kennwort, zwei Zeichen, wird jedes Vorkommen in Pfad, Tabellen- oder Modulnamen einer Zeile `schema_bootstrap: …` ersetzt. Die Bereinigung der Ausgabe der Server-Suite ersetzt seit dem 18.10.2026 einen Wert nur dort, wo er als Wert steht, frei erst ab 12 Zeichen aus zwei Zeichenklassen (`labor/2026-10-18_suite_testdatenbank_ergebnis.md`: in einem Lauf 18.516 Ersetzungen, auch in der Bilanzzeile, bevor das so gebaut war) — zwei Bereinigungen, zwei Regeln. `[Code]` → **Bug `BEREINIGUNG-ZERSCHNEIDET-KURZES-KENNWORT`** in [`novaberg-bugs-bauart.md`](novaberg-bugs-bauart.md), klassifiziert am 20.10.2026. - ~~**2026-10-18** — **Ablehnungswörter ohne Stamm in der Liste bestätigen neben einem Zustimmungswort.**~~ In `charakter_identitaet` (`_standard_interpretieren`) und `notizen` (`_resume_nicht_gefunden`) kennt die Ablehnung nur die Stämme aus `REFUSAL_STEMS` (`nein`, `ne`, `nee`, `nicht`, `kein`, `lass`, `abbruch`, `abbrech`, `stopp`, `stop`); *„vergiss es“*, *nö* und *niemals* trägt keiner davon. Allein bleiben sie unklar, und es wird erneut gefragt; neben einem Zustimmungswort bestätigen sie: *„ja, vergiss es“*, *„ok nö“* und *„bitte niemals“* ergeben Zustimmung bzw. Anlegen, in beiden Diensten, am `HEAD` `ae05667` wie im Tree `9153022`. `[gemessen 18.10.2026]` an den Deutungsfunktionen beider Stände, aufgerufen ohne Datenbank; gefunden beim Nachzug zu `ZUSTIMMUNG-GILT-ALS-ABLEHNUNG`. → **Bug `ABLEHNUNG-OHNE-STAMM-BESTAETIGT`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), klassifiziert am 20.10.2026. - ~~**2026-10-18** — **Die Verneinung wird bei *neu*, *aktualisieren* und bei der Wahl einer Notiz nicht gelesen.**~~ `server/agents/notizen/resume.py::_resume_duplikat` sucht die Wörter für *aktualisieren* und *neu* ohne Blick auf ein *nicht* oder *kein*: *„nein, keine neue“* auf *„Aktualisieren oder neu anlegen?“* legt eine neue Notiz an, *„nicht aktualisieren“* aktualisiert. `_resume_disambiguierung` wählt bei zwei Kandidaten über *erste* und *zweite*: *„nicht die erste, die zweite“* wählt die erste. Am `HEAD` `ae05667` genauso wie im Tree `9153022`; der Bau hat dort nur auf ganze Wörter umgestellt. `[gemessen 18.10.2026]` an den Funktionen beider Stände, aufgerufen ohne Datenbank. → **Bug `NOTIZ-VERNEINUNG-UEBERLESEN`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), klassifiziert am 20.10.2026. - ~~**2026-10-18** — **Das Vorbild mit Wortgrenzen liest *nichts*, *keinesfalls* und *ablehnen* nicht als Ablehnung.**~~ `server/agents/dateien_wurzeln/resume.py::_antwort_deuten` sucht `ABLEHNUNGS_WOERTER` als ganze Wörter (`_traegt`, `\b…\b`): *nichts* ist nicht *nicht*, *keinesfalls* nicht *kein* oder *keine*, und *ablehnen* steht nicht in der Liste. Allein bleibt die Antwort unklar; neben einem Zustimmungswort wird sie Zustimmung — *„ja, bitte nichts“*, *„ok, keinesfalls“*, *„ja, ablehnen“* —, an einem Tor, das Lesezugriff auf ein Verzeichnis des Menschen freigibt. Dazu ist der Docstring von `_traegt` veraltet: Er nennt die Teilzeichenketten-Deutung in `charakter_identitaet/resume.py` als Fund der Fundliste; sie ist seit dem 18.10.2026 behoben (`novaberg-bugs-archiv-charakter.md`). `[gemessen 18.10.2026]` an `_antwort_deuten` am `HEAD` `ae05667`; der Bau hat die Datei nicht berührt. → **Bug `WURZELN-ABLEHNUNG-UNGELESEN`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md) — beide Teile: die Deutung und der veraltete Docstring von `_traegt`, klassifiziert am 20.10.2026. - ~~**2026-10-18** — **`novaberg-graph.md` §6.4 nennt eine Auto-Discovery über `__init_subclass__`, die es nicht gibt.**~~ Die Überschrift lautet `### 6.4 AgentRegistry (Auto-Discovery via __init_subclass__)`; `__init_subclass__` kommt im Serverbaum nicht vor (`git grep` am `HEAD` `ae05667`: 0 Treffer). `server/agents/__init__.py::discover_agents` importiert je Ordner dessen `agent.py` und durchsucht `dir()` des Moduls nach `BaseAgent`-Unterklassen (Z. 66–79). Der Satz unter dem Codeblock beschreibt das richtig, die Überschrift nicht. Am Code gelesen, nicht gemessen. → **Doku:** die Überschrift von `novaberg-graph.md` §6.4 berichtigt am 20.10.2026 (*Auto-Discovery über `discover_agents`*), klassifiziert am 20.10.2026. - ~~**2026-10-20** — **Der Rückfall auf Embeddings bindet einen ähnlichen Namen still.**~~ `entity_resolution.py` nimmt einen Namen mit gleichem Anfangsbuchstaben und ±3 Zeichen Länge als plausibel (Z. 300–301) und bindet einen einzelnen Treffer (Z. 173–178): *Lena* wird *Lea*. → **Bug `MAGNET-RUECKFALL-BINDET-AEHNLICHEN-NAMEN`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md), klassifiziert am 21.10.2026 nach der Entscheidung (`novaberg-memory-fakten_e.md` A Nr. 35). --- ## Umgezogen — 14.10.2026, aus der Klassifizierung der Funde vom 13.10.2026 **Vier Einträge sind Bugs geworden**, je mit Kennung, Kategorie und Rang. Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. - ~~**2026-10-13** — **Der Neugier-Boost aus den Zielen ist strukturell 0, und still:**~~ `ei/wissensluecken.py` (Schritt *Drive*, um Z. 621–634) liest `ziel.get("embedding")` aus `state["aktivierte_ziele"]`; `graph/nodes/enricher.py::_ziele_als_dicts` lässt das Embedding absichtlich weg (Docstring: *„hat im State keinen Leser“*). Das `continue` bei fehlendem Embedding überspringt jedes Ziel ohne Zählung, `neugier_boost` bleibt 0,0 — für jeden Kandidaten und jeden Turn. Gelesen am Code, im Betrieb nicht gezählt. → **Bug `NEUGIER-BOOST-AUS-ZIELEN-IMMER-NULL`** in [`novaberg-bugs-wissen.md`](novaberg-bugs-wissen.md), klassifiziert am 14.10.2026. - ~~**2026-10-13** — **Im Turn rechnet die Faszination mit sieben von neun Faktoren:**~~ `graph/nodes/praegung.py` ruft `modulatoren_aus_turn(…, wissbegier=None)` fest auf; `ei/fascination.py::f_anlage(None)` liefert den neutralen Faktor 1,0, gedacht für ein Paar *ohne* Radmessung — der Turn nimmt ihn auch für Paare mit Messung. `strangzug` rechnet nur der Bestandslauf (`memory/fascination_store.py`), nicht der Turn. Die Featureliste sagt *„alle neun Faktoren“*. → **Bug `FASZINATION-TURN-SIEBEN-VON-NEUN`** in [`novaberg-bugs-charakter.md`](novaberg-bugs-charakter.md), klassifiziert am 14.10.2026. - ~~**2026-10-13** — **Die doppelte Intentionstabelle trägt zwei Schreibweisen:**~~ `memory/kzg.py::_INTENTION_AUFGABE_MAP` führt `"bestätigung"`, `agents/kzg/queues.py` und der Kanon (`config.py:1638`) `"bestaetigung"`. In `kzg_store` fiele eine Bestätigung über einer hohen Salienz damit auf den Vorgabewert `recherche` statt auf *kein Auftrag*. `[gemessen 13.10.2026]` 0 von 2.733 Zeilen in `shadow_auftrag` tragen `bestaetigung` als erste Intention — der Fehler steht im Code und hat bisher nicht gewirkt. → **Bug `INTENTION-BESTAETIGUNG-ZWEI-SCHREIBWEISEN`** in [`novaberg-bugs-gedaechtnis.md`](novaberg-bugs-gedaechtnis.md), klassifiziert am 14.10.2026. - ~~**2026-10-13** — **Pixie steht seit dem 03.10.2026, 12:26 UTC, pausiert, und der Betrieb sagt es nirgends laut:**~~ `pixie:paused` ist gesetzt, ohne Ablaufzeit (Pause des Eigentümers wegen der Wärme, `POST /admin/pixie/pause`, eine `INFO`-Zeile im Log). Der Heartbeat verwirft danach jeden Zyklus mit einer `debug`-Zeile (`services/pixie/scheduler.py`, Guard *Pause*); `mess:regie_aus` dagegen warnt bei jedem Turn, *„ein vergessener Schalter soll im Log schreien“* (`api/admin.py`). `[gemessen 13.10.2026]` In `hintergrund_log` stehen ab dem 04.10. nur noch `prompt_block` und `recherche_bibliothek` (zusammen 60 Zeilen), seit dem 08.10. keine Zeile mehr; kein Tageslauf seit dem 03.10. (`ziel_decay`, `synapsen_decay`, `synapsen_promotion`, `qualitaet_profil`, `praegung_faltung`, `praegung_straenge`, `charakter_hash`, `wiedervorlage`, `queue_verfall`). Jüngste Zeilen: `traeger_qualitaet` 02.10., `wissensluecken` 03.10., `praegung_faden` 05.10. Jede Messung an Profilen, Prägung, Lücken, Zielen und Synapsen sieht seither einen stehenden Bestand. → **Bug `PIXIE-PAUSE-STILL`** in [`novaberg-bugs-hintergrund.md`](novaberg-bugs-hintergrund.md), klassifiziert am 14.10.2026. --- ## Umgezogen — 29.09.2026, aus der Durchsicht der Fundliste **42 Einträge standen schon mit Kennung in Bugs oder Backlog.** Kein Wortlaut ist geändert; wo die Kennung steht, sagt der Pfeil. Was ein Eintrag über den Registereintrag hinaus trägt, bleibt hier lesbar. - ~~**2026-09-19** — **Der Lauf der Synapsen-Promotion zählt einen verworfenen Eintrag als promotet.**~~ `[gelesen 19.09.2026, am Code]` `_eintrag_verarbeiten` verwirft über `_fehler` und kehrt normal zurück; `_paar_abarbeiten` zählt darauf `promotet += 1` und nimmt den Eintrag aus der Arbeitsliste. Das Verwerfen selbst ist gewollt (der Eintrag wird nie grün), der Zähler im Audit des Laufs (`promotet=…, fehler=…`) sagt aber nicht, wie viele davon verworfen wurden. Betrifft alle vier Vorbedingungen, die vierte (unlesbarer Anlagezeitpunkt) seit heute. Gefunden beim Bau von `KZG-ERSTELLT-AM-PARSE-HÄRTE`. → **Umgezogen am 19.09.2026** nach `novaberg-bugs-gedaechtnis.md` als `PROMO-LAUF-ZAEHLT-VERWORFENE`. → **Steht als `PROMO-LAUF-ZAEHLT-VERWORFENE` in `novaberg-bugs-gedaechtnis.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:269 — PROMO-LAUF-ZAEHLT-VERWORFENE offen, novaberg-bugs-gedaechtnis.md:410 - ~~**2026-09-19** — **Die Salienz geht als Gewicht in einen neuen Knoten, und ihre Skala ist nicht mehr die des Gewichts.**~~ `[gelesen 19.09.2026, am Code]` K8 der P4-Notiz begründet die direkte Übernahme mit *„dieselbe Skala 0–10“*; `KZG_SALIENZ_CAP` steht seit dem Skalenumbau auf 1.0, `LZG_KNOTEN_GEWICHT_CAP` weiter auf 10, und die Logzeile im Agenten schreibt *„(0-10)“*. Ob neue Knoten damit dauerhaft im untersten Zehntel beginnen, ist nicht gemessen. → **Umgezogen am 19.09.2026** nach `novaberg-backlog-gedaechtnis.md` als `SYNAPSEN-K8-SKALA` (erst messen, dann entscheiden). → **Steht als `SYNAPSEN-K8-SKALA` in `novaberg-backlog-gedaechtnis.md`, geprüft am 29.09.2026:** novaberg-backlog-index.md:374 — SYNAPSEN-K8-SKALA abgeschlossen (entschieden 20.09.2026: keine Umrechnung); Logzeile berichtigt in 00473d7 - **2026-09-18** — **Eine Testsuite blockierte die Datenbank des Betriebs.** `[gemessen 18.09.2026]` Ein Suitenlauf hinterließ eine Verbindung *idle in transaction* auf `ziele` (Kontext `test_ziel_decay`); der Schematest, der `db/init.sql` fährt, wartete darauf — und hinter seiner Schema-Sperre stauten sich **alle** Zugriffe auf die berührten Tabellen, auch Pixies Schreiben in `autonomous_wissen` (06:04 bis 07:33 UTC, 31 wartende Anweisungen). Gelöst durch Beenden der verwaisten Verbindung. Alle drei beteiligten Verbindungen begannen in derselben Sekunde — **die Suite hat sich vermutlich selbst blockiert**, ein Test lässt eine Transaktion offen. Nicht geprüft; gehört zu `ZEUGE-FLACKERT-OHNE-REPRODUKTION`. Nebenbefund: Die Tests laufen gegen die Produktivdatenbank — eine Sperre dort ist eine Sperre des Betriebs. → **Geprüft am selben Tag, nach `novaberg-bugs.md` in den Eintrag `ZEUGE-FLACKERT-OHNE-REPRODUKTION` (Befund 18.09.2026), behoben in `8175849`.** Die Berichtigung: Es war **kein Schematest**, sondern der **Serverstart** nach einem Reload — er führt `db/init.sql` aus. Die Suite blockierte sich nicht selbst; Suite und Serverstart hielten einander fest, und der Serverstart hing 89 Minuten. → **Steht als `ZEUGE-FLACKERT-OHNE-REPRODUKTION` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** steht als `ZEUGE-FLACKERT-OHNE-REPRODUKTION` in `novaberg-bugs-bauart.md` (Befund 18.09.2026, berichtigt: der Serverstart, nicht der Schematest). - **2026-09-18** — **`BaseAgent.setup()` führt die `init.sql` der Agenten ohne Sperrfrist aus** — dieselbe Klasse wie die Startmigration, die 89 Minuten hing. Sie läuft beim Start nach der Migration, ohne `try`; eine Frist dort bräche den Start ab statt ihn hängen zu lassen. Hängend nicht beobachtet. → **Steht als `ZEUGE-FLACKERT-OHNE-REPRODUKTION` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-bugs-bauart.md:146 'Die Agenten-Schemas (BaseAgent.setup) laufen weiter ohne Sperrfrist'; Code: server/agents/base.py:488-495 ohne lock_timeout - **2026-09-18** — **Jede gespeicherte Datei unter `server/` startet uvicorn neu, auch eine Testdatei oder eine Probedatei eines Prüfwerkzeugs** — und der Neustart bricht einen laufenden Turn ab. `[gemessen]` An einem Vormittag: ein abgebrochener Messturn (07:45:28) und zwei Reloads durch die Gegenprobe eines Prüfwerkzeugs während einer laufenden Messreihe. Die Gegenprobe schreibt seither in ein Wegwerfverzeichnis; für Tests und Code gilt es weiter. Betrifft die Beschreibung von `RELOAD-GREIFT-NICHT-AM-EINGEHAENGTEN-CODE`. → **Steht als `RELOAD-GREIFT-NICHT-AM-EINGEHAENGTEN-CODE` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-bugs-bauart.md:15, Nachtrag 18.09.2026: 'Jede gespeicherte Datei unter server/ startet den Dienst neu und bricht einen laufenden Turn ab' - **2026-09-17** — **`DIENST-MELDET-ABGESCHLOSSEN-OHNE-VERIFIKATION` erstmals im Betrieb gesehen.** `[gemessen 17.09.2026, Betrieb]` Die Timeline klassifizierte mit leerem Ziel und leerer Zeit, meldete `abgeschlossen` — und in `timeline` steht keine Zeile. Der Bug war am 16.09.2026 am Code gefunden worden; dies ist der erste beobachtete Fall. Beleg: `labor/2026-09-17_angebot_bezug/ergebnis.md` Teil 3, Lauf z1. → **Steht als `DIENST-MELDET-ABGESCHLOSSEN-OHNE-VERIFIKATION` in `novaberg-bugs-hintergrund.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md: offen, novaberg-bugs-hintergrund.md:14; im Code behoben 18.09.2026 (verified_outcome, :17) - **2026-09-15** — **Ein Dienst meldet `abgeschlossen`, auch wenn seine eigene Verifikation der Schreibung fehlschlug.** `[Code]` `agents/timeline/crud.py`: `_verifizieren_termin` liefert `verifiziert`, der Wert steht im Log als INFO und in `schritte`, der Status ist trotzdem `"abgeschlossen"`. Nach der zweiten Kontrolle vom 15.09.2026 gilt das für **20 von 22** schreibenden Stellen der Empfangsdienste (nachgesehen an der Timeline-Anlage). Der Riegel aus Scheibe 12 A liest genau diesen Status als Deckung — eine gescheiterte Schreibung deckt dann die Behauptung, sie sei erfolgt. → **Steht als `DIENST-MELDET-ABGESCHLOSSEN-OHNE-VERIFIKATION` in `novaberg-bugs-hintergrund.md`, geprüft am 29.09.2026:** novaberg-bugs-hintergrund.md:14; im Code behoben 18.09. (150597e, agents/write_outcome.py::verified_outcome), offen bis zum Betriebslauf - **2026-09-12** — **Der Charakter-Resonanz-Vergleich steht gegen die Embedding-Konvention, und zwar gegen beide einschlaegigen Saetze.** `ei/wissensluecken.py` bildet `cosine(turn_embedding, kern_embedding)`: links rund hundert Zeichen Turn, rechts ein Charakterkern von 635 bis 4802 Zeichen. `novaberg-convention-embedding.md` Konvention 4 verlangt **einen** Gegenstand je Vektor — ein Kern ist vielgestaltig; §5 sagt *„wer mit einem langen Text sucht, braucht ein Ziel in seiner Groessenordnung"* — hier ist es umgekehrt. Das ist der bessere Kandidat fuer die niedrigen Werte (Median 0,214 ueber sieben Paare, Maximum 0,491) als die Kernlaenge, die die Mediane nicht ordnet. ~~**Ungemessen** — zu pruefen gegen einen in Facetten zerlegten Kern.~~ → **Am selben Tag gemessen, und das Ergebnis halbiert den Fund.** Kern je Paar in Saetze zerlegt (3 bis 37 Facetten), `max(cosine(turn, facette))` gegen `cosine(turn, kern)` auf denselben Turns: **Das Niveau bestaetigt die Konvention** — jeder Median steigt um +0,031 bis +0,097, die Maxima von 0,428 auf 0,555, und die Schwelle 0,30 liegt mitten in diesem Abstand. **Die Spreizung zwischen den Paaren bestaetigt sie nicht** — sie bleibt bei 0,186 gegen 0,195, wird also nicht kleiner. Die Vielgestaltigkeit erklaert das **Mass**, nicht den Unterschied zwischen den Paaren; Spearman 0,68 bis 0,91 zeigt dabei, dass die Zerlegung keine reine Verschiebung ist. Ein Paar passiert auch auf dem Facetten-Maximum nichts (max 0,294). **Der Fund bleibt offen als Befund ueber das Mass** — gegen `novaberg-convention-embedding.md` Konvention 4 und §5 — und ist als Erklaerung der Spreizung erledigt. Gefunden von der Konventionspruefung, geprueft von der Messung, die sie ausgeloest hat. → **Steht als `KERN-EINBETTUNG-NACH-DEM-DECKEL` in `novaberg-backlog-rangordnung.md`, geprüft am 29.09.2026:** backlog-rangordnung.md:199 (Kern-Einbettung, Spreizung, Facetten); roadmap.md:1371 Facetten-Tabelle - **2026-09-12** — Die Formpruefung der Lage deckt die drei juengeren Felder und nicht `gedeckt` und `offen`, die aeltesten; ein Betriebsturn brach daran ab → **nach `novaberg-bugs.md` als `LAGE-FORMPRUEFUNG-UNVOLLSTAENDIG`**, Blocker. → **Steht als `LAGE-FORMPRUEFUNG-UNVOLLSTAENDIG` in `novaberg-bugs-archiv-antwortpfad.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:198 - abgeschlossen, archiv-antwortpfad.md:100; Rangordnung-Stand 13.09.2026 - **2026-09-12** — **`berichtend` saugt zwei andere Modi auf, und das ist der Rest des Spektrums.** `[gemessen]` Von sieben Fehlgriffen ueber 30 Reize (drei je Modus) fallen sechs auf **einen** Wert: `alltag → berichtend` dreimal, `emotional → berichtend` dreimal; dazu `fachgespraech → lernmodus` einmal. Die Quote ist mit **23 von 30** unveraendert gegenueber der Nulllinie des 10.09.2026 — die Wertelegende fuer `modus` hat diese Verwechslung also **weder verursacht noch behoben**. Ein Modus, der zwei andere aufsaugt, verschiebt die Tiefe (`GV_TIEFE_MODUS`: berichtend 0,4 gegen emotional 0,7) und den Laengen-Zuschlag (0,0 gegen −0,2). → **Steht als `MODUS-KALIBRIERUNG` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:655 MODUS-KALIBRIERUNG (Perzeption trennt die Modi nicht trennscharf), offen - **2026-09-12** — **Eine globale Schwelle auf einer paarabhaengigen Groesse.** `GV_CHARAKTER_RESONANZ_SCHWELLE` vergleicht `cosine(turn, kern)`, und der Kern gehoert dem Paar: 5198 Zeichen beim produktiven, 3218 bei `mehmet`, 684 bei `hartmut`. Die Verteilung haengt damit am Paar, die Schwelle gilt fuer alle. Kalibriert wurde sie an **150 Turns gegen einen** Kern; die Reihe, die sie belegt, lief gegen einen anderen. **Dass sie dort traegt, ist kein Beleg, dass sie ueberall traegt** — und ein duenner Kern verschiebt die Verteilung vermutlich staerker als jede Themenwahl. → **Am 12.09.2026 gemessen, Befund bestaetigt und die Vermutung nicht.** Sieben Paare, 378 Turns: Mediane von **0,097 bis 0,282** (Spannweite 0,186 bei Schwelle 0,30), bei **zwei** Paaren passiert kein einziger Turn, bei einem dritten 2 %, bei den beiden oberen 23 und 27 %. **Die Kernlaenge ordnet die Mediane nicht** — der hoechste steht beim 2658-Zeichen-Kern, der niedrigste beim 807er, und die p10–p90-Spanne ist bei den langen Kernen weiter statt enger. Die Ursache bleibt offen, weil die Turn-Korpora mit unterscheiden (oben gewachsen ueber Wochen, unten je eine Tagesreihe). **Dazu ein Nebenbefund, der schwerer wiegt als die Spreizung:** dasselbe Paar ergab 17,3 % und einen Tag spaeter **23 %** — dazwischen kein geaenderter Turn, sondern eine neue Kern-Destillation (5198 → 4720 Zeichen). Verteilung in `novaberg-kalibrierung_k.md` §3.3a; offen ist nur noch die Absichtsfrage absolut gegen Perzentil je Paar. → **Steht als `KERN-EINBETTUNG-NACH-DEM-DECKEL` in `novaberg-backlog-rangordnung.md`, geprüft am 29.09.2026:** backlog-rangordnung.md:199 - sieben Paare, Spreizung 0,186, 17,3 % -> 23 %, offen: absolut gegen Perzentil - **2026-09-11** — **Die Rueckkopplung des Profils waechst hier, anders als am 06.09. berichtigt.** Der Eintrag `PROFIL-VERSTAERKT-WAS-ES-BESCHREIBT` wurde am 06.09.2026 von *hoch* auf *mittel* gesetzt, weil der Mechanik-Anteil ueber elf Tage **nicht** stieg. An der **Anrede** gemessen steigt er: 0 von 24 Antworten am 04.09., dann 9/27, 7/10, 27/33, 7/7, **183/189**. Die Berichtigung galt fuer den gemessenen Gegenstand, nicht fuer die Klasse — **ein Profilmerkmal, das die Form der Anrede betrifft, verstaerkt sich, eines ueber den Wortschatz nicht.** → **Steht als `PROFIL-VERSTAERKT-WAS-ES-BESCHREIBT` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:167 'Datenpunkt 11.09.2026' mit 0/24 ... 183/189 - **2026-09-10** — ~~**Die Pixie-Pause haelt den Scheduler an, nicht die Zustellung.**~~ → **nach `novaberg-bugs-archiv.md` als `PIXIE-PAUSE-OHNE-ZUSTELLRIEGEL`, am Tag des Befundes behoben.** Kurz: Der Riegel steht vor der Nutzerschleife, mit demselben Schluessel und derselben Bauart wie im Scheduler; `PIXIE_PAUSE_SCHLUESSEL` ist einmal benannt statt viermal hingeschrieben. 3 Zeugen (`tests/test_shadow_delivery_pause.py`), Gegenprobe 2 vorhergesagt / 2 gezaehlt. Der urspruengliche Befund: `[gemessen im Betrieb]` `pixie:paused` wird an genau **einer** Stelle gelesen: `services/pixie/scheduler.py:82`. `services/shadow_delivery.py` liest ihn nicht. Waehrend einer Messreihe mit bestaetigtem Status `{"paused": true}` liefen **fuenf Zustellungen mit `durchgelassen: true`** und **ein vollstaendiger Fremdturn** mitten in der Reihe (22:39:59 UTC, Reiz: *WAS GEFUNDEN WURDE. Der Fund besteht aus einer klaren Di…* — ein Rechercheergebnis). **Zwei Folgen, und beide wiegen:** Eine Messreihe mit pausiertem Pixie ist **nicht** frei von Hintergrundturns — die Regel, dass Pixie waehrend einer Reihe pausiert, ist damit nur zur Haelfte durchsetzbar. Und im Betrieb schiebt sich ein Recherchetext als Gespraechsturn zwischen zwei Nutzeraeusserungen; der Mensch sieht eine Antwort, die seine Frage uebergeht. **Der Auslser ist `trigger: timeout`**, die Schleife feuert alle 30 Sekunden. → **Steht als `PIXIE-PAUSE-OHNE-ZUSTELLRIEGEL` in `novaberg-bugs-archiv-hintergrund.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:255 - abgeschlossen, archiv-hintergrund.md:12; tests/test_shadow_delivery_pause.py - **2026-09-10** — **`valenz_quelle` traegt dieselbe Emotion in zwei Schreibweisen:** `mitgefühl` 5-mal, `mitgefuehl` 2-mal, dazu `amüsiert` 1-mal. Dieselbe Klasse wie `PERZEPTION-WERTE-VERRUTSCHEN-DIE-SPALTE` und die drei Wortformen von `begeistern` bei `tone` — hier aber in einem Feld, das **eine Achse der Landschaft speist**, nicht nur beschreibt. → **Steht als `PERZEPTION-EMOTION-AUSSER-KANON` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:571 (mitgefuehl/mitgefuehl als zwei Schreibweisen); Code: server/ei/dreischicht.py:686 (valenz_quelle=emotion), server/graph/nodes/perzeption.py:182 (emotion durch Kanon-Zug), config.py:1835 - **2026-09-10** — **Vier klassifizierte Groessen werden nirgends persistiert und sind damit im Nachhinein unpruefbar.** Die Prompts fuehren **vierzehn** Enum-Felder; zehn landen in einer Tabelle, **`type`, `momentum`, `direction`** (alle drei aus `router.task.txt`) und **`valenz`** (aus `salienz.dimensionen.txt`) nicht. Sie steuern eine Entscheidung und hinterlassen keine Spur — **es gibt keinen Bestand, gegen den man sie messen koennte**, und aus dem `pipeline_log` ist die Entscheidung des Routers nicht nachvollziehbar (0 Zeilen mit `momentum` oder `direction`). **Setzung des Eigentuemers am 10.09.2026:** *„Wir sollten diese vielleicht persistieren, weil wir sonst auch nicht die Entscheidung im pipeline_log nachvollziehen koennen."* Dieselbe Klasse wie beim Dispatcher (09.09.) und beim Strategie-Tor (10.09.) — eine Groesse, die eine Entscheidung traegt und keine dauerhafte Spur hinterlaesst, ist nur zu schaetzen. → **Steht als `None` in `novaberg-backlog-bauart.md`, geprüft am 29.09.2026:** novaberg-backlog-bauart.md:158 '#### Vier klassifizierte Groessen persistieren' (ohne Kennung); teilweise erledigt: Commit da2dc9d, server/graph/nodes/router.py:407-414 (momentum in router.zustellung) - **2026-09-10** — **`kreativ` fehlt auch im Langzeitgedaechtnis vollstaendig — dritter unabhaengiger Beleg.** Ueber **3153 Knoten mit Modus** kommt der Wert **kein einziges Mal** vor, waehrend alle neun anderen vertreten sind; dieselben Knoten tragen bei `tone` **583-mal** `kreativ`. Damit steht der Befund auf drei getrennten Mengen: 1293 Bestandsturns, 54 Turns einer entworfenen Reihe und 3153 LZG-Knoten. Bestaetigt sind dort auch die Ausreisser der beiden Dimensionen ohne Zug: `tone` **139** ausserhalb (`begeisterung` 58, `begeistert` 49, `begeisternd` 13 — **dieselbe Emotion in drei Wortformen**), `sprach_stil` **33** (`gehoben` 16, `sachlich` 13). → **Steht als `MODUS-KREATIV-WIRD-NIE-VERGEBEN` in `novaberg-bugs-archiv-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-archiv-charakter.md:491 (behoben 12.09.2026, Wertelegende + MODUS_SYNONYM_MAP) · novaberg-bugs-charakter.md:17 (offen; Synonymkarte je Dimension als offener Weg, begeisterung 59-mal in tone) - **2026-09-10** — **Der erste Ausreisser im Betrieb war eine Wortform, kein Fremdfeld.** `[gemessen 20:23:49 UTC]` Die frisch gebaute Protokollzeile meldete `tone` mit dem Wert **`begeisternd`** — weder Umlaut noch Grossschreibung, also vom Kanon-Zug nicht zu retten, und in keinem anderen Kanon, also keine verrutschte Spalte. Es ist die **Wortform** von `begeisterung`, das im Bestand 59-mal in derselben Spalte steht. **Damit liegt der erste Eintrag einer Synonymkarte fuer `tone` als Betriebsbeleg vor** statt als Vermutung — und die Entscheidung, ob eine solche Karte gebaut wird, hat jetzt eine Zahl unter sich. → **Steht als `PERZEPTION-WERTE-VERRUTSCHEN-DIE-SPALTE` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:17 — nennt begeisternd fuer begeisterung als ersten Eintrag einer Synonymkarte - **2026-09-10** — **Die Salienz erkennt Zeitausdruecke, wo keine stehen, und der KZG-Pfad legt daraufhin einen Anker an.** In einer 51-Turn-Reihe entstanden **zwei** `erinnerungs_anker` in `timeline`. Der erste aus *„Es nervt mich, dass ich diesen Zusammenhang seit Stunden nicht zu fassen kriege"* — eine Zeitangabe steht darin, aber der Anker landete auf dem **01.09.2026**, also **neun Tage in der Vergangenheit**. Der zweite aus *„Draussen ist es still, nur ein leises Brummen"* — **dort steht kein Zeitausdruck**, und der Anker traegt `2026-09-10 14:44:12`. **Ein Anker ist ausdruecklich kein bindender Termin** (Klasse *Bezug*, Flags False/False/False, `novaberg-convention-magneten.md` §5), der Fund ist deshalb kein Datenschaden — aber der Weg dorthin fuehrt ueber `zeit_parsen_vektor`, und der bekommt hier etwas zu parsen, was niemand gesagt hat. Verwandt: `TIMELINE-NENNT-ABGELAUFENEN-TERMIN-ALS-KOMMENDEN`. → **Steht als `ZEIT-EXTRAKTION-UNSCHARF` in `novaberg-bugs-wissen.md`, geprüft am 29.09.2026:** novaberg-bugs-wissen.md:207 (offen; zeitausdruck_roh traegt Nicht-Zeitangaben, 'Was fertig waere' deckt den Fall) - **2026-09-09** — **Eine Naht, die im Bestand ruhig aussieht, kann unter Last brechen.** `eigen_pfad` stand vor der Reihe bei **77,7 %** Ausschoepfung und galt als unauffaellig; nach 196 Turns sind es **393,4 %**, und **156 von 160** Werten liegen ueber der Zielspanne. Der Bestand enthielt zu wenige Turns mit hoher Eigen-Salienz. **Fuer die Nahtspannen-Tafel heisst das: Ein niedriger Wert dort ist keine Entwarnung, sondern eine Aussage ueber das Material, das bisher durchgelaufen ist.** Als `GRAVITATIONSTERM-OHNE-OBERGRENZE` klassifiziert. → **Steht als `GRAVITATIONSTERM-OHNE-OBERGRENZE` in `novaberg-bugs-archiv-gedaechtnis.md`, geprüft am 29.09.2026:** novaberg-bugs-archiv-gedaechtnis.md:17 (behoben 09.09.2026); Roadmap '09.09.2026 — eine Naht, die im Bestand ruhig aussah' - **2026-09-07** — **`kosten_usd` im `pipeline_log` ist seit dem Rabattwegfall um Faktor 2,80 zu niedrig.** Der Preiswaechter meldete am 07.09.2026: *konfiguriert $0.04998/M ein und $0.09996/M aus, lebend $0.14000 und $0.28000 — der Rabatt ist fort, der Endpunkt weist keinen mehr aus.* Die Spalte rechnet weiter mit dem **konfigurierten** Preis; jede daraus abgeleitete Kostenaussage ist entsprechend falsch. `[gemessen]` ueber 33 Stunden seit dem Modellwechsel: protokolliert **0,154 USD**, real rund **0,43 USD** — hochgerechnet **9,40 USD im Monat** statt 3,40. **Ein Wert, der aus einer Konfiguration statt aus der Antwort stammt, altert lautlos** — dieselbe Klasse wie *nach dem konfigurierten statt dem antwortenden Modell geschluesselt*, hier an der Kostenspalte. → **Am 08.09.2026 berichtigt, und der Fund ist dabei groesser geworden.** Der Waechter meldete erneut: lebend **$0.06496 ein / $0.12992 aus**, Rabatt **53,6 %**, Faktor **1,30** gegen die Konfiguration. ~~Der Rabatt ist fort, der Endpunkt weist keinen mehr aus~~ — er weist wieder einen aus, und der Preis ist binnen eines Tages um **Faktor 2,15** gefallen ($0.14000 → $0.06496). ~~hochgerechnet 9,40 USD im Monat statt 3,40~~ → bei Faktor 1,30 sind es rund **4,42 USD**. **Damit steht nicht mehr eine falsche Konstante im Raum, sondern eine, die grundsaetzlich nicht folgen kann:** Der Preis bewegt sich schneller, als jemand die Konfiguration nachzieht, und jede nachgezogene Zahl ist am naechsten Tag wieder falsch. Die Abhilfe ist deshalb keine neue Konstante, sondern der Preis **aus der Antwort** — ob der Endpunkt ihn mitliefert, ist ungeprueft und die erste Frage vor jedem Bau. **Der Waechter selbst hat zweimal richtig angeschlagen** und ist damit das eine Stueck dieser Kette, das arbeitet. → **Steht als `KOSTENSPALTE-MISCHT-PREISGENERATIONEN` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-bugs-bauart.md:155 (offen; laufender Teil 09.09. behoben, Bestand bleibt falsch) - **2026-09-06** — **Die liegengebliebenen `hash_dirty`-Schluessel sind von 13 auf 16 gewachsen.** Beim Suchen nach einem Destillationszyklus fuer den Betriebsbeleg der Entwertung gezaehlt: 16 Schluessel in Redis, **keiner davon fuer das produktive Paar**. Der Eintrag `HASH-DIRTY-ALTLASTEN` (Band B) nannte am 11.08.2026 fuenf und am 25.08.2026 dreizehn. **Die Kurve ist damit dreimal gemessen und steigt monoton** — rund ein Schluessel je zweieinhalb Tage. → **Steht als `HASH-DIRTY-ALTLASTEN` in `novaberg-backlog-rangordnung.md`, geprüft am 29.09.2026:** novaberg-backlog-rangordnung.md:191 (offen, verschaerft; 13 am 25.08.2026) - **2026-09-05** — **Ein Bind-Mount macht neuen Code sichtbar und nicht wirksam.** `/app` zeigt auf `server/`; der Python-Prozess traegt den Stand seines Starts. Am 05.09. war der Server 00:59 UTC gestartet, der letzte Bauteil 09:25 UTC committet — beide Betriebsbelege des Handzettels waren damit **unmoeglich, nicht ausstehend**, und die ausbleibende Protokollzeile haette wie ein Verdrahtungsfehler ausgesehen. Verwandt mit der DDL-Reload-Falle, aber nicht dieselbe: Dort fehlt das Schema, hier der Code. → **Steht als `RELOAD-GREIFT-NICHT-AM-EINGEHAENGTEN-CODE` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-bugs-bauart.md:12 (offen; Prozess lud trotz --reload einen Tag nicht neu) - **2026-09-03** — **Weder `novaberg-node-praegung.md` noch `novaberg-thinking-faszination_k.md` stehen im Dokumentenverzeichnis** (`novaberg-architecture.md` §7). Beide gibt es seit dem 31.08. bzw. 30.08.2026, beide sind seither an fast jedem Tag gewachsen, und beide sind ueber das Verzeichnis nicht auffindbar. Gefunden beim Eintragen eines dritten Dokuments derselben Schicht. **Die Zaehlung des Verzeichnisses stammt vom 28.07.2026** (*„131 Dateien"*) und ist damit aelter als alle drei. → **Steht als `PIXIE-NACHFRAGEN-FEHLT-IM-INDEX` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-architecture.md:887 führt faszination_k inzwischen; node-praegung.md fehlt in §7 weiter (nur im Baum :383); Zählung '131 Dateien (28.07.2026)' :784 unverändert - **2026-09-03** — → **umgezogen nach `novaberg-bugs.md` als Messwerte zu `PERZEPTION-EMOTION-AUSSER-KANON`** (03.09.2026, 20:45 UTC). Der Defekt war seit dem 18.08.2026 bekannt; neu sind die **Bestandszahlen** und zwei Werte, die der Eintrag nicht nannte — `ueberrascht` in Umlautform als **zweite** Emotion derselben Klasse und `zuversicht`, ein **Sektorname** als Emotionswert. **Der Fund stand einen Nachmittag lang nur hier, weil niemand geprueft hat, ob es dafuer schon eine Kennung gibt.** Der Befund im Wortlaut: **47,9 % des Korpus tragen keinen Sektor** — 1590 von 3317 LZG-Knoten. Davon 1572 `neutral` (kanonisch und gueltig sektorlos), aber **drei Werte sind Ausreisser**: `ueberrascht` in **Umlautschreibung** (12 Knoten; abgebildet ist nur die ASCII-Form), `mitgefuehl` (4) und `zuversicht` (2) — letzteres ist ein **Sektorname**, kein Emotionswert der 16er-Tabelle. Alle drei stehen ausserhalb von `EMOTION_KANON`, den die Perzeption einhalten soll. Dieselben vier Werte fehlen auch in `EMOTION_VALENZ` und tragen dort damit keine Ladung. → **Steht als `PERZEPTION-EMOTION-AUSSER-KANON` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:244 → novaberg-bugs-charakter.md:571, offen - **2026-09-01** — **Geschrieben ohne Auftrag, nicht geschrieben mit Auftrag.** Eine **beilaeufige Erwaehnung** eines Vorhabens mit dem Wort *morgen* (18:41) erzeugte einen Timeline-Eintrag (`abgeschlossen`); der **ausdrueckliche Eintragungsauftrag** sieben Minuten spaeter, mit zwei Wochentagsnamen statt eines relativen Tages, scheiterte (18:50). Dazwischen sagte die Antwort, es sei nichts eingetragen worden — waehrend der Eintrag seit sieben Minuten stand. **Die Datumserkennung nimmt relative Tage und keine Wochentagsnamen.** Der angelegte Eintrag trug weder den Ort aus der Aeusserung noch ein `event_ende`; der zweite Tag fehlte, und der Titel bestand aus dem Vorgangswort allein. → **Steht als `TIMELINE-SCHREIBT-OHNE-AUFTRAG` in `novaberg-bugs-wissen.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:366 → novaberg-bugs-wissen.md:142, offen (erste Hälfte seit 14.09.2026 erfüllt) - **2026-09-01** — **Ein Termin von vor dreizehn Tagen wurde als morgiger ausgegeben.** Die Antwort nannte in drei Turns einen bestehenden Termin fuer den Folgetag, zweimal mit einer Uhrzeit und einmal als *fixiert*. In `timeline` gibt es genau einen Eintrag dieses Titels: **436**, dreizehn Tage alt und abgelaufen. Fuer den genannten Tag standen zwei andere Zeilen. Derselbe Lauf gab fuer einen zweiten Vorgang ein Datum an, das **sechzehn Tage** neben dem Eintrag lag, der tatsaechlich in der Tabelle steht (**485**). → **Steht als `TIMELINE-NENNT-ABGELAUFENEN-TERMIN-ALS-KOMMENDEN` in `novaberg-bugs-wissen.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:364 → novaberg-bugs-wissen.md:159, offen - **2026-09-01** — **19 von 33 Lesson-Dateien stehen nicht im Architektur-Index.** Die Tabelle dort fuehrt 14; der Rest ist ueber Monate entstanden, ohne dass jemand das Register nachzog — darunter beide Lessons vom 31.08.2026. **Ein Register, das aufzaehlt, ist die eine Sorte, die der Doku-Nachzug nicht finden kann**: Es nennt keine geaenderte Datei, also fuehrt kein `grep` dorthin. Gefunden beim Nachtragen der eigenen zwei, ueber `for f in docs/novaberg-lesson_l_*.md; do grep -q ...` — ein Kriterium statt einer Aufzaehlung. Dieselbe Klasse wie die Deckungspruefung `C18`, nur fuer eine Sorte, die sie nicht prueft. → **Steht als `LESSON-INDEX-LUECKE` in `novaberg-backlog-bauart.md`, geprüft am 29.09.2026:** novaberg-backlog-bauart.md:1451 (offen); nachgezaehlt 29.09.2026: 19 von 36 novaberg-lesson_l_*.md fehlen in novaberg-architecture.md - **2026-08-31** — **63,1 % der Arousal-Werte im Langzeitgedaechtnis sind exakt `0.5` — der Vorgabewert.** 2070 von 3278 Knoten. Derselbe Wert ist der Default der `Wahrnehmung`-Dataclass, der Rueckfall von `_arousal_lesen` bei unlesbarem JSON und der von `_arousal_to_float`; die Spalte traegt **kein Herkunftsfeld**. Ob diese Knoten gemessen wurden oder gefallen sind, ist im Bestand nicht entscheidbar — und jede Verteilungsaussage ueber die Erregung steht damit auf einem Drittel belastbarer Daten. Genau der Fall aus der Codenorm: *ein Default in der Spanne echter Messwerte braucht ein Herkunftsfeld*. → **Steht als `DEFAULTS-WIE-MESSWERTE` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-bugs-bauart.md:190 (offen; nennt lzg_knoten.arousal DEFAULT 0.5 ohne _quelle-Feld); Code unveraendert: server/memory/lzg_knoten.py:87, graph/nodes/perzeption.py:80-92 - **2026-08-31** — **Der Chronik-Eintrag vom 31.08.2026 traegt „20:30 UTC" und meint 20:30 Lokalzeit.** Der zugehoerige Commit lief `2026-08-31T21:01:33+02:00`, also **19:01 UTC**; der Eintrag ist um zwei Stunden zu spaet beschriftet. Aufgefallen, weil ein korrekt per `date -u` datierter Folgeeintrag (20:24 UTC) aelter aussah als sein Vorgaenger. Die Kopfzeile der Chronik verlangt `date -u` ausdruecklich — die Angabe stammt aus einer anderen Quelle. → **Steht als `KOPFZEILENZEIT-ALS-UTC-BESCHRIFTET` in `novaberg-bugs-bauart.md`, geprüft am 29.09.2026:** novaberg-bugs-bauart.md:90 (offen, CEST als UTC beschriftet); novaberg-roadmap-2026-08.md:149 traegt weiterhin '31.08.2026, 20:30 UTC' (Commit 19:01 UTC) - **2026-08-27** — **Der Kern-Hash beschreibt das Gespraech, und niemand hat entschieden, ob er das soll.** Die Rechnung hinter `KERNHASH-TRAEGT-KEINE-PERSON` ist am 27.08.2026 unter deterministischer Ableitung wiederholt und faellt weiter negativ aus (15 von 21 Paaren, p = 0,078). **Die Messung nennt dabei die Ursache mit:** Die hoechsten Aehnlichkeiten betreffen auf **beiden** Seiten dieselben Korpuspaare — `hartmut ↔ konrad` steht in Novas Gruppe mit 24,3 % oben und in der Kontrolle mit 24,6 %. Die Aehnlichkeit folgt dem **Gegenstand des Gespraechs**. **Damit steht eine Konzeptfrage offen, die keine Messung beantwortet:** Ist der Prompt der falsche — er verlangt das WIE und bekommt das WORUEBER, obwohl er ausdruecklich davor warnt —, oder ist der **Gegenstand falsch geschnitten**: Ein Profil, das aus Gespraechen ueber Kochen und Spiele entsteht, beschreibt vielleicht zu Recht Kochen und Spiele, und die Erwartung *„dauerhaftes Wesen"* liegt daneben. **Drei Hebel sind inzwischen gemessen und ausgeschieden** — der Prompt (dreimal), die Mehrfacherhebung (0,2908 → 0,2615 bei dreifachen Kosten) und die Materialauswahl (Bindung ans juengste Themenband halbiert, Befund unveraendert). Wer als naechstes ansetzt, sollte die Absicht pruefen, bevor er den vierten Hebel sucht. → **Die Absicht ist seit dem 27.08.2026 entschieden** (der Kern ist die Rollenanweisung der Person; Haltungsgroessen sind nicht seine Sache), **und die Kennzahl ist als unzustaendig erkannt** — sie zaehlt zur Haelfte paarspezifischen Gespraechsstoff (`novaberg-pixie-character-hash.md` §3.1h). Offen bleibt der Umbau selbst: zurueckgestellt, bis der Pruefstand der Schauspielerprobe den `[MASS]`-Block traegt. → **Steht als `KERNHASH-TRAEGT-KEINE-PERSON` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:220 (offen); Absicht entschieden 27.08., Kennzahl als unzustaendig erkannt (novaberg-pixie-character-hash.md §3.1h) - **2026-08-25** — **Die Konvention, dass jeder Knoten Ein- und Ausgang protokolliert, stand nirgends geschrieben.** Sie wurde als bestehende Praxis benannt; weder Harness noch Repo-Doku fuehrten sie. Seit heute `F-LOG-3`. **Der Fund ist nicht die fehlende Datei, sondern was daran haengt:** Eine Konvention, die nur gelebt wird, hat keinen Stand, gegen den man messen kann — und genau das fiel auf, als jemand fragte, warum die Werte nicht im Log stehen. Eine Handmessung ueber die Einstiegsfunktionen ergab **2 von 19** Knoten ohne Ein- und Ausgang (`enricher`, `tribunal`), **mit bekannter Unschaerfe**: Beide protokollieren in Unterfunktionen, drei weitere Knoten waren so nicht messbar. Die Zahl ist eine Untergrenze; das Gate, das sie belastbar machen wuerde, steht als `PROTOKOLLPFLICHT-OHNE-GATE` im Backlog. → **Steht als `PROTOKOLLPFLICHT-OHNE-GATE` in `novaberg-backlog-bauart.md`, geprüft am 29.09.2026:** steht als `PROTOKOLLPFLICHT-OHNE-GATE` in `novaberg-backlog-bauart.md` (das Gate fehlt; die Konvention ist als `F-LOG-3` festgelegt). - **2026-08-25** — **`GV4-QUELLEN-SILENT-SKIP` nennt zwei Stellen, es sind drei.** Der Eintrag belegt den stillen Ausfall an `lzg_kandidaten_suchen` und `kzg_kandidaten_suchen`; dieselbe Bauart — `except Exception`, `logger.warning`, leere Rueckgabe — steht ein drittes Mal in `ei/wissensluecken.py:229` beim Embedding. **Wer den Eintrag woertlich abarbeitet, laesst ein Drittel stehen** und schliesst ihn mit echtem Beleg. Dieselbe Klasse wie die halbe Schliessung in `41_DOKU_ARTEFAKTE/register-mit-id.md`. → **Steht als `GV4-QUELLEN-SILENT-SKIP` in `novaberg-bugs-antwortpfad.md`, geprüft am 29.09.2026:** novaberg-bugs-antwortpfad.md:972 - Zustand nennt die dritte Stelle (:229 Embedding) ausdruecklich - **2026-08-25** — **`IDX-TIMELINE-TYPE-NICHT-IN-INIT` und `REFAC-DB-INDEX-DUPLIKAT` beschreiben denselben Index und verlangen Entgegengesetztes** — der eine, ihn in die Schemadatei nachzutragen, der andere, ihn als Dublette zu pruefen und zu entfernen. Wer den einen umsetzt, macht den anderen unmoeglich. **Zwei Eintraege, ein Gegenstand, kein gemeinsamer Ort, an dem der Widerspruch auffaellt.** → **Steht als `IDX-TIMELINE-TYPE-NICHT-IN-INIT` in `novaberg-backlog-bauart.md`, geprüft am 29.09.2026:** novaberg-backlog-bauart.md:1508 - Zustand nennt den Widerspruch zu REFAC-DB-INDEX-DUPLIKAT (:770) ausdruecklich - **2026-08-25** — **Zwei Befunde stehen im Backlog unter je zwei Kennungen.** `RECHERCHE-LIEST-EIGENE-BIBLIOTHEK-NICHT` und `RECHERCHE-LIEST-IHRE-BIBLIOTHEK-NICHT` beschreiben dieselbe Stelle; ebenso `CLUSTER-BESCHREIBUNG-MISCHT-BEFEHL` und `SZENE-STATT-REGIE-IN-DEN-CLUSTERN`. Beide Paare entstanden beim Umzug aus der Fundliste an verschiedenen Tagen. **Eine Kennung ist ein Schluessel; zwei Schluessel auf einen Gegenstand heisst, dass eine Erledigung nur die Haelfte schliesst.** → **Steht als `RECHERCHE-LIEST-EIGENE-BIBLIOTHEK-NICHT` in `novaberg-backlog-hintergrund.md`, geprüft am 29.09.2026:** novaberg-backlog-hintergrund.md:124 Zustand: 'Deckungsgleich mit RECHERCHE-LIEST-IHRE-BIBLIOTHEK-NICHT' (:28) · novaberg-backlog-antwortpfad.md:97 Zustand: 'Deckungsgleich mit SZENE-STATT-REGIE-IN-DEN-CLUSTERN' (backlog-rangordnung.md:202) - **2026-08-25** — **Der `repeat_penalty` von 1.3 ist nicht mehr auffindbar, und die Frage danach damit nicht beantwortet, sondern verschoben.** `REPEAT-PENALTY-OHNE-HERKUNFT` nannte 1.3 fuer den GPU-Anbieter; im Bestand steht der Wert nur noch einmal, mit **1.1** im Responder-Knoten. Auch die 1.1 traegt keine Begruendung. **Ein Wert, der sich aendert, ohne dass die Frage nach seiner Herkunft mitwandert, sieht beim naechsten Lesen wie eine Setzung aus.** → **Steht als `REPEAT-PENALTY-OHNE-HERKUNFT` in `novaberg-backlog-bauart.md`, geprüft am 29.09.2026:** novaberg-backlog-bauart.md:266 Zustand sagt dasselbe; server/config.py:3016 repeat_penalty 1.1 ohne Begruendung - **2026-08-25** — **Die liegengebliebenen `hash_dirty`-Schluessel sind von fuenf auf 13 gewachsen.** Der CharakterAgent raeumt nur das aktive Paar; jede Person, die je einen Bogen hatte, laesst einen Schluessel stehen. `HASH-DIRTY-ALTLASTEN` nannte am 11.08.2026 fuenf. **Ein geduldeter Rest ist keine Konstante** — dieselbe Klasse wie die von 25 auf 36 gewachsenen leeren EVA-Sektionen. → **Steht als `HASH-DIRTY-ALTLASTEN` in `novaberg-backlog-rangordnung.md`, geprüft am 29.09.2026:** novaberg-backlog-rangordnung.md:191 ('offen, verschaerft - 13', 25.08.2026); dazu Bug HASH-DIRTY-WAISENKEYS (novaberg-bugs-charakter.md:922, 12 Keys) - **2026-08-25** — **`autonomous_wissen.thema` traegt heute ⌀ 4,69 Themen je Feld statt 4,37**, und 886 von 890 Feldern tragen mehr als eins statt 558 von 559. Der Verstoss gegen *ein Vektor je Gegenstand* ist derselbe; die Menge, die davon betroffen ist, hat sich in sechs Tagen um zwei Drittel vergroessert. → **Steht als `EMBED-LISTE-AUTONOMES-WISSEN` in `novaberg-backlog-wissen.md`, geprüft am 29.09.2026:** novaberg-backlog-wissen.md:80 Zustand: '4,69 Themen je Feld statt 4,37, 886 von 890' am 25.08.2026 - **2026-08-24** — **Von den Riegeln 4 bis 7 gibt es keine Aufzeichnung — der Bestand kann nicht sagen, ob der Themen-Riegel je gerechnet wurde.** Die einzige Zeilensorte unter `node='zustellung'` ist `schritt='riegelkette'` mit `umfang='ab_trigger'`, und die deckt **nur die Riegel 1 bis 3**. Dort stehen `bezug`, `thema`, `modus`, `emotion` 9865 Mal als *nicht erreicht* — das ist eine Eigenschaft **dieser Aufzeichnung**, nicht eine Aussage ueber den Lauf. Dass sie laufen, ist mittelbar belegt (100 Impuls-Turns im Bestand, 15 davon in zwei Tagen); **womit sie blocken, ist unbekannt und damit nicht kalibrierbar** — genau der Zustand, den der Modulkopf von `riegel.py` fuer die Riegel 1 bis 3 ausdruecklich verhindern will (*„Riegel 1 verdeckt Riegel 2, und ihre Schwellen sind nicht mehr kalibrierbar"*). Fuer 4 bis 7 gilt die Regel nicht. → **Steht als `RIEGEL-5-7-OHNE-EINTRAG` in `novaberg-backlog-hintergrund.md`, geprüft am 29.09.2026:** novaberg-backlog-hintergrund.md:45; Code unveraendert: shadow_delivery.py:869-886 zeichnet nur Riegel 1-3 auf (umfang ab_trigger) - **2026-08-24** — **28 von 209 AgentGraph-Turns haben nie eine `turn_roh`-Zeile bekommen — ihre Herkunft ist dauerhaft nicht bestimmbar.** Der AgentGraph schreibt seine 120 Zeilen je Impuls-Turn **ohne** Herkunftsmarke; sie steht allein in der `turn_roh`-Zeile, die der CharacterGraph rund siebzig Sekunden spaeter setzt. Solange diese Zeile kommt, ist die Marke ueber `turn_id` rekonstruierbar — kommt sie nicht, sind die Zeilen verwaist. **261 Zeilen** sind es im Bestand. **Der juengste Fall stammt vom 15.08.2026, seither neun Tage sauber** — der Befund ist damit ein Bestandsbefund und kein laufender, aber die Bauart, die ihn erlaubt, ist unveraendert: Die Haelfte, die zuerst schreibt, traegt die Angabe nicht, von der ihre Deutung abhaengt. Verwandt: `TURNROH-ZEILE-FEHLT`. → **Steht als `TURNROH-ZEILE-FEHLT` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:367 (offen); Zahl steht bereits in novaberg-roadmap-2026-08.md:2139; Bauart-Hinweis in bugs-archiv-hintergrund.md:72 - **2026-08-24** — **Das Zugbudget des Zuwendungsrads liegt auf den Speichen, die sich nicht bewegen.** Ueber **148 Erhebungen** gerechnet: Der Faktor erreicht **0,8638 bis 1,4456** von deklarierten 0,5–1,5 — nach oben 95 % des Budgets ausgeschoepft, nach unten nur **56 %**, Median **1,3144**. Drei Speichen tragen zusammen **0,23** Zugbudget und bewegen sich fast nicht: `hoch.aufmerksamkeit` steht im Mittel bei 0,92 (24 % Spanne genutzt), `runter.gleichgueltig` bei 0,04 (15 %), `runter.langeweile` bei 0,08 (30 %). Umgekehrt bewegen sich `runter.distanz` (90 %) und `runter.misstrauen` (78 %) stark und tragen zusammen **0,05**. **Die Groessen, die trennen, sind die leichtesten am Rad.** Die gemessene Fassung von `RADSPEICHEN-MESSEN-PROFILTEXT`. Werkzeug: die Rechnung in `labor/2026-08-24_salienz_spektrum.sql` daneben. → **Steht als `RADSPEICHEN-MESSEN-PROFILTEXT` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:209 (offen); der Eintrag nennt sich selbst 'die gemessene Fassung' davon; Zahlen auch in roadmap-2026-08.md:2329 - **2026-08-23** — Eine Neuanlage unter altem Pfad erbt `entitaet_ids`, `timeline_id` und `zuletzt_gelernt_hash` ihres Vorgaengers → **am selben Tag nach `novaberg-bugs.md` als `DATEIINDEX-NEUANLAGE-ERBT-VORGAENGER`, dort behoben.** → **Steht als `DATEIINDEX-NEUANLAGE-ERBT-VORGAENGER` in `novaberg-bugs-archiv-wissen.md`, geprüft am 29.09.2026:** novaberg-bugs-index.md:85 — abgeschlossen, novaberg-bugs-archiv-wissen.md:104 - **2026-08-20** — Der Kern-Hash liest 40 von 444 `turn_roh`-Zeilen des produktiven Paares und deckt damit 2 von 20 Bestandstagen ab — fuer ein Profil, dessen erklaerter Gegenstand der dauerhafte Wesenskern ist. Rest aus `KERNHASH-LIEST-TURNWORTLAUT`, dessen tragende Aussage (die Doku nennt die falsche Quelle) am 16.08.2026 erledigt wurde. → **Steht als `KERNHASH-TRAEGT-KEINE-PERSON` in `novaberg-bugs-charakter.md`, geprüft am 29.09.2026:** novaberg-bugs-charakter.md:220 (offen) benennt '_turns_laden, grenze=40' als Ursache; Code inzwischen auf Zeichenbudget umgestellt: server/agents/charakter/agent.py:635, config.py:785 (80000) ## Umgezogen — 06.09.2026, aus der Durchsicht der Charakter-Profile Der volle Wortlaut steht im Defektregister unter der genannten Kennung; hier bleibt die Spur. - **2026-09-06** — Das Beziehungsprofil nennt eine Anrede *durchgehend*, die in 4 von 1662 Quellen steht → **nach `novaberg-bugs.md` als `PROFIL-VERALLGEMEINERT-EINZELBELEG`.** - **2026-09-06** — Das Profil beschreibt nicht nur, es verstaerkt: Der destillierte Zug geht in jeden Turn und erzeugt das Material der naechsten Destillation → **nach `novaberg-bugs.md` als `PROFIL-VERSTAERKT-WAS-ES-BESCHREIBT`.** Der Eigentuemer hat die Absichtsfrage entschieden — die Verallgemeinerung ist nicht gewuenscht. ## Umgezogen — 25.08.2026, aus der Vermessung des Kern-Hash - **2026-08-25** — Novas sieben Kern-Profile aehneln einander nicht staerker als die Profile sieben verschiedener Menschen; der Kern wird zudem bei jedem Lauf neu erfunden statt fortgeschrieben → **nach `novaberg-bugs.md` als `KERNHASH-TRAEGT-KEINE-PERSON`.** - **2026-08-25** — Die naheliegende Materialfilterung gegen `KERNHASH-OHNE-PERSPEKTIVTRENNUNG` faengt Fragen und Possessive statt Wesenszuschreibungen → **in die Zustandszeile von `KERNHASH-OHNE-PERSPEKTIVTRENNUNG` uebernommen**, wo sie den offenen Hebel benennt. ## Umgezogen — 23.08.2026, die Naht des Fuehrungsmasses - **2026-08-23** — Der Haltungsstand traegt kein Fuehrungsmass, obwohl der GV-Knoten lief → **nach `novaberg-bugs.md` als `FUEHRUNGSMASS-AUF-FALSCHER-EBENE`** (Leser und Schreiber auf zwei Ebenen) **und `GRUND-NENNT-FALSCHE-URSACHE`** (der Grundtext schickte die Untersuchung an den falschen Ort). Beide am selben Tag behoben. ## Umgezogen — 20.08.2026, aus der Klassifikation der Fundliste Der volle Wortlaut steht im Defektregister unter der genannten Kennung; hier bleibt die Spur, damit ein alter Verweis auf die Fundliste nicht ins Leere zeigt. - **2026-08-20** — Bei einer Setext-Überschrift steht ihre Unterstreichung in der ersten Zeile des Blockinhalts → **nach `novaberg-bugs.md` als `SETEXT-UNTERSCHRIFT-IM-BLOCK`.** - **2026-08-20** — 44 von 46 Bibliotheks-Trefferzeilen melden Kosinus exakt 1,000: Der Eintrag findet sich selbst → **nach `novaberg-bugs.md` als `BIBLIOTHEK-FINDET-SICH-SELBST`.** - **2026-08-20** — Eine Filteränderung erzeugt Zeilen, die als „verschwunden" markiert sind, obwohl die Datei dort liegt, wo sie lag → **nach `novaberg-bugs.md` als `VERSCHWUNDEN-DURCH-FILTERWECHSEL`.** - **2026-08-20** — Ein archiviertes Konzept sieht im Dateienindex aus wie ein geltendes → **nach `novaberg-bugs.md` als `ARCHIVDATEI-OHNE-ETIKETT`.** - **2026-08-19** — `dateien_index.entitaet_ids` und `.timeline_id` sind in 0 von 14 Zeilen belegt und haben keinen Schreiber → **nach `novaberg-bugs.md` als `DATEIINDEX-SPALTEN-OHNE-SCHREIBER`.** - **2026-08-19** — `themen_embedding` enthält nicht das Thema, sondern das Destillat — und drei Stellen nennen es drei verschiedene Dinge → **nach `novaberg-bugs.md` als `THEMENEMBEDDING-TRAEGT-DESTILLAT`.** - **2026-08-19** — Die Zeitangaben der Featureliste-Kopfzeile sind teils CEST und als UTC beschriftet → **nach `novaberg-bugs.md` als `KOPFZEILENZEIT-ALS-UTC-BESCHRIFTET`.** - **2026-08-19** — Der Lesepfad der Bibliothek filtert das Paar zweispaltig, das Schema ist dreispaltig → **nach `novaberg-bugs.md` als `BIBLIOTHEK-FILTERT-ZWEISPALTIG`.** - **2026-08-19** — Die Bibliotheksschwelle 0,40 sortiert gegen echte Fragen genau falsch herum → **nach `novaberg-bugs.md` als `BIBLIOTHEKSSCHWELLE-SORTIERT-FALSCH`.** - **2026-08-19** — Kein Profil-Prompt kennt das Geschlecht seines Traegers, und das Modell raet es — im selben Lauf verschieden → **nach `novaberg-bugs.md` als `PROFILPROMPT-OHNE-GESCHLECHT`.** - **2026-08-19** — Der Verweis-Weg stellt die Frage des Einarbeitungs-Wegs und lehnt damit genau seinen besten Fall ab → **nach `novaberg-bugs.md` als `VERWEISWEG-LEHNT-BESTEN-FALL-AB`.** - **2026-08-19** — Das Zuordnungsmodell nennt eine Listenposition statt der Datenbank-Nummer, und der Riegel verwirft zu Recht — aber der Auftrag ist danach weg → **nach `novaberg-bugs.md` als `ZUORDNUNG-NENNT-LISTENPOSITION`.** - **2026-08-19** — Der gespeicherte Speichenwert ist nicht der Median seiner Erhebungen — bei der Initiative gilt das für die Hälfte der Speichen → **nach `novaberg-bugs.md` als `SPEICHENWERT-NICHT-MEDIAN`.** - **2026-08-18** — Eine beantwortete Absicht steht an der Stelle, an der gebaut wird, weiter als offen → **nach `novaberg-bugs.md` als `BEANTWORTETE-ABSICHT-STEHT-OFFEN`.** - **2026-08-18** — Zwei Sätze im selben Absatz sagen Gegenteiliges über dieselbe Frist → **nach `novaberg-bugs.md` als `FRISTANGABE-WIDERSPRICHT-SICH`.** - **2026-08-18** — Die Rad-Speichen messen den Profiltext, nicht das Verhalten — und zwei von ihnen zählen dieselbe Eigenschaft doppelt → **nach `novaberg-bugs.md` als `RADSPEICHEN-MESSEN-PROFILTEXT`.** - **2026-08-18** — Der Kern-Hash trennt nicht zwischen „die Figur spricht über sich" und „die Figur spricht über den Nutzer" — beides wird ihr Wesen → **nach `novaberg-bugs.md` als `KERNHASH-OHNE-PERSPEKTIVTRENNUNG`.** - **2026-08-18** — Die beiden Verfahren, die den Sprachstil bestimmen, sind sich in 71 % der Turns uneinig — und welches gewinnt, hängt allein daran, ob die Perzeption `neutral` sagt → **nach `novaberg-bugs.md` als `SPRACHSTIL-ZWEI-VERFAHREN-UNEINIG`.** - **2026-08-18** — Drei Felder der Perzeption haben keinen Kanon-Riegel, und der Vorgabewert des Intent ist der höchste Wert seiner Tabelle → **nach `novaberg-bugs.md` als `PERZEPTIONSFELDER-OHNE-KANON`.** - **2026-08-18** — Der Rückweg hat keine Idempotenz — derselbe Fund zweimal eingereiht läuft zweimal → **nach `novaberg-bugs.md` als `RUECKWEG-OHNE-IDEMPOTENZ`.** - **2026-08-18** — Das Erschließungsmodell verstümmelt Stichwörter, und der scharfe Kanal hängt daran → **nach `novaberg-bugs.md` als `ERSCHLIESSUNG-VERSTUEMMELT-STICHWORT`.** - **2026-08-18** — Die Fundstelle im Prompt trägt den absoluten Behälterpfad, weil die einzige Freigabe keine Bezeichnung hat → **nach `novaberg-bugs.md` als `FUNDSTELLE-MIT-BEHAELTERPFAD`.** - **2026-08-18** — Der Fakten-Plugin hat weder Kappung noch Schwelle — das ist der Grund für seine 130+ Einträge, nicht die Datenqualität → **nach `novaberg-bugs.md` als `FAKTENPLUGIN-OHNE-KAPPUNG`.** - **2026-08-17** — Drei Repo-Dokumente verweisen auf interne Regeldokumente, die es öffentlich nicht gibt → **nach `novaberg-bugs.md` als `REPODOKU-VERWEIST-NACH-INNEN`.** - **2026-08-17** — Ein Zeuge der Suite wird gelegentlich rot und reproduziert nicht → **nach `novaberg-bugs.md` als `ZEUGE-FLACKERT-OHNE-REPRODUKTION`.** - **2026-08-17** — Der Umfangsregler wirkt in der Richtung und bindet nicht → **nach `novaberg-bugs.md` als `UMFANGSREGLER-BINDET-NICHT`.** - **2026-08-17** — Ein neuer Nutzer bekommt gar keine Umfangsvorgabe → **nach `novaberg-bugs.md` als `NEUER-NUTZER-OHNE-UMFANGSVORGABE`.** - **2026-08-17** — Der Responder erfindet das Datum in einer Termin-Bestaetigung → **nach `novaberg-bugs.md` als `RESPONDER-ERFINDET-DATUM`.** - **2026-08-17** — Der Lesepfad zur Timeline ist instabil, nicht geschlossen → **nach `novaberg-bugs.md` als `TIMELINE-LESEPFAD-INSTABIL`.** - **2026-08-17** — Zwei Regeln im Router-Prompt sprechen entgegengesetzt ueber den Zweifel → **nach `novaberg-bugs.md` als `ROUTERPROMPT-ZWEIFEL-WIDERSPRUCH`.** - **2026-08-16** — Der Kern-Hash liest den Turn-Wortlaut, nicht das Langzeitgedächtnis → **nach `novaberg-bugs.md` als `KERNHASH-LIEST-TURNWORTLAUT`.** - **2026-08-16** — Die KZG-Salienz ist gesättigt und rangiert deshalb nichts → **nach `novaberg-bugs.md` als `KZG-SALIENZ-GESAETTIGT`.** - **2026-08-16** — 39 Importe überspringen eine Schichtgrenze → **nach `novaberg-bugs.md` als `IMPORTE-UEBERSPRINGEN-SCHICHT`.** - **2026-08-16** — 11 numerische Defaults sehen aus wie Messwerte → **nach `novaberg-bugs.md` als `DEFAULTS-WIE-MESSWERTE`.** - **2026-08-16** — 20 Sektionsmarken `Ausgabe-Verifikation` haben keine Prüfung unter sich → **nach `novaberg-bugs.md` als `EVA-SEKTION-OHNE-PRUEFUNG`.** - **2026-08-16** — Die Löschregeln der Fremdschlüssel sind dreigeteilt → **nach `novaberg-bugs.md` als `LOESCHREGELN-DREIGETEILT`.** - **2026-08-16** — Der Fehlversuchspfad löscht hart, und er wählt nach hoher Salienz aus → **nach `novaberg-bugs.md` als `FEHLVERSUCHSPFAD-LOESCHT-HART`.** - **2026-08-16** — „Clipboard-Prinzip" bezeichnet zwei verschiedene Sachen → **nach `novaberg-bugs.md` als `CLIPBOARD-BEGRIFF-DOPPELT`.** - **2026-08-16** — `enricher_prompt` ist eine leere Hülle mit beiden Enden offen → **nach `novaberg-bugs.md` als `ENRICHERPROMPT-LEERE-HUELLE`.** - **2026-08-16** — `AgentInput` steht seit dem 06.05.2026 in einer Konvention und hat nie existiert → **nach `novaberg-bugs.md` als `AGENTINPUT-NIE-EXISTIERT`.** - **2026-08-16** — `entitaet_ids` trägt Dubletten → **nach `novaberg-bugs.md` als `ENTITAETIDS-MIT-DUBLETTEN`.** - **2026-08-16** — `NEGATIVE_EMOTIONEN` ist zweimal definiert, und Riegel 7 benutzt die kleinere Fassung → **nach `novaberg-bugs.md` als `NEGATIVE-EMOTIONEN-DOPPELT`.** - **2026-08-15** — `initiative` heißt eine Ebene tiefer etwas anderes → **nach `novaberg-bugs.md` als `INITIATIVE-DOPPELT-BELEGT`.** - **2026-08-15** — Der Nachzug von Riegel 1 hat eine Zeile im Haltungsraum-Konzept nicht erwischt → **nach `novaberg-bugs.md` als `RIEGEL1-NACHZUG-UNVOLLSTAENDIG`.** - **2026-08-15** — Der AgentGraph bekommt den eigenen Gedanken weiter auf dem Reiz-Platz → **nach `novaberg-bugs.md` als `AGENTGRAPH-REIZPLATZ-FALSCH`.** - **2026-08-15** — Der Haltungsstand hat keine Zeile im `pipeline_log` → **nach `novaberg-bugs.md` als `HALTUNGSSTAND-OHNE-LOGZEILE`.** - **2026-08-15** — `novaberg-pixie-nachfragen_k.md` fehlt im Dokumenten-Index → **nach `novaberg-bugs.md` als `PIXIE-NACHFRAGEN-FEHLT-IM-INDEX`.** - **2026-08-15** — `EMOTIONS_VEKTOREN` ist in `config.py` zweimal definiert; die zweite Definition gewinnt → **nach `novaberg-bugs.md` als `EMOTIONS-VEKTOREN-DOPPELT`.** - **2026-08-15** — Zwei Fristen von 7200 s bedeuten Verschiedenes und sind jetzt auseinandergelaufen → **nach `novaberg-bugs.md` als `ZWEI-FRISTEN-7200-VERSCHIEDEN`.** - **2026-08-15** — Die Namensauflösung im Telegram-Behälter fällt zeitweise aus → **nach `novaberg-bugs.md` als `TELEGRAM-NAMENSAUFLOESUNG-FAELLT-AUS`.** - **2026-08-15** — Eine Prompt-Aenderung wirkt nicht auf den Stapel → **nach `novaberg-bugs.md` als `PROMPTAENDERUNG-OHNE-STAPELWIRKUNG`.** - **2026-08-14** — Das Lagebild eines Impuls-Turns traegt Novas eigenen Gedanken unter der Beschriftung „Dies ist die Eingabe des Nutzers" → **nach `novaberg-bugs.md` als `LAGEBILD-IMPULS-ALS-NUTZEREINGABE`.** - **2026-08-14** — Der Resume-Pfad eines wartenden Agenten konnte einen eigenen Impuls als Nutzer-Antwort verbrauchen → **nach `novaberg-bugs.md` als `RESUME-VERBRAUCHT-IMPULS`.** - **2026-08-14** — Der Kopfblock des Verfasser-Urteils faellt weiter aus → **nach `novaberg-bugs.md` als `VERFASSER-KOPFBLOCK-FAELLT-AUS`.** - **2026-08-14** — Der Verfasser schreibt Novas eigenen Gedanken der Person B zu, solange er ihn in der Rolle des Gegenuebers bekommt → **nach `novaberg-bugs.md` als `VERFASSER-ORDNET-IMPULS-PERSON-B-ZU`.** - **2026-08-14** — Die emotionale Gravitation färbt auch Novas eigene Gedanken → **nach `novaberg-bugs.md` als `GRAVITATION-FAERBT-EIGENE-GEDANKEN`.** - **2026-08-14** — Die Zeile `Fragen:` im Verfasser-Block hat keine Bedingung, die auf sie zeigt → **nach `novaberg-bugs.md` als `FRAGEN-ZEILE-OHNE-BEDINGUNG`.** - **2026-08-14** — Der `[GESPRAECHSVEKTOR]`-Block trägt die Hypothese dreifach → **nach `novaberg-bugs.md` als `GESPRAECHSVEKTOR-HYPOTHESE-DREIFACH`.** - **2026-08-14** — Zwei verschiedene Größen heißen „Versatz" → **nach `novaberg-bugs.md` als `VERSATZ-ZWEI-GROESSEN`.** - **2026-08-13** — Der Zug ist zwischen 0,90 und 0,97 praktisch abgeschaltet → **nach `novaberg-bugs.md` als `ZUG-ZWISCHEN-090-097-ABGESCHALTET`.** - **2026-08-13** — Eine Mengenangabe bindet nach unten und trägt nach oben nicht → **nach `novaberg-bugs.md` als `MENGENANGABE-BINDET-NUR-UNTEN`.** - **2026-08-11** — 0 von 14** Landschaften, auch bei voller Ausprägung 1.0 und unabhängig von der Schwelle. Eine Übersteuerung wirkt nur, wo die Größe eine → **nach `novaberg-bugs.md` als `UEBERSTEUERUNG-GREIFT-NICHT`.** - **2026-08-12** — Der Kern des Nutzers erreicht den Responder nicht → **nach `novaberg-bugs.md` als `NUTZERKERN-ERREICHT-RESPONDER-NICHT`.** - **2026-08-12** — unbeschriftet → **nach `novaberg-bugs.md` als `BEZIEHUNGSPROFILE-UNBESCHRIFTET`.** - **2026-08-12** — dieselbe Anweisung aus zwei Quellen → **nach `novaberg-bugs.md` als `RESPONDER-ANWEISUNG-DOPPELT`.** - **2026-08-12** — Der Farbton wird in jedem Turn gerechnet und erreicht den Responder nicht → **nach `novaberg-bugs.md` als `FARBTON-ERREICHT-RESPONDER-NICHT`.** - **2026-08-12** — Connector**, der Gesprächspfad hängt aber am → **nach `novaberg-bugs.md` als `OVERRIDE-NACH-CONNECTOR-STATT-MODELL`.** - **2026-08-12** — keine `turn_roh`-Zeile im `pipeline_log` → **nach `novaberg-bugs.md` als `TURNROH-ZEILE-FEHLT`.** - **2026-08-11** — Auf Novas Verhalten wirkt es heute nicht → **nach `novaberg-bugs.md` als `UEBERSTEUERUNG-AB-FUER-DREIERSKALA`.** - **2026-08-11** — der Nutzer → **nach `novaberg-bugs.md` als `PERSPEKTIVE-OHNE-DATIV`.** - **2026-08-20** — Der Gesprächsverlauf liegt im Enricher vollständig vor, bevor eingebettet wird — Query Rewriting braucht deshalb keine neue Datenquelle → **nach `novaberg-backlog.md` als `QUERY-REWRITING-QUELLE-STEHT`.** - **2026-08-20** — Der Router-Prompt nennt weiter „die Fachabteilung", und das ist bewusst stehen geblieben → **nach `novaberg-backlog.md` als `INTERNE-PROMPTS-SPRACHGEBRAUCH`.** - **2026-08-20** — `fragen` und `draengen` stehen jetzt in beiden Prompts — inhaltlich beim Verfasser, als Tonwort beim Responder → **nach `novaberg-backlog.md` als `RESPONDER-BRAUCHT-FRAGEN-DRAENGEN`.** - **2026-08-20** — Der Suchschlüssel des Gedächtnisses trägt ausschließlich den aktuellen Turn → **nach `novaberg-backlog.md` als `SUCHSCHLUESSEL-OHNE-VERLAUF`.** - **2026-08-20** — Die eingebettete Zusammenfassung liegt gefüllt im Bestand und wird vom Suchweg der Bibliothek nicht benutzt → **nach `novaberg-backlog.md` als `ZUSAMMENFASSUNG-ALS-ZWEITER-ARM`.** - **2026-08-20** — Die Freigabe von `docs/` überlebt keinen Aufbau von null → **nach `novaberg-backlog.md` als `AUFSTELLUNG-NICHT-VERSIONIERT`.** - **2026-08-19** — Der Schreibpfad der Bibliothek ist seit dem Umbau teurer, und um wie viel ist nicht gemessen → **nach `novaberg-backlog.md` als `SCHREIBPFAD-BIBLIOTHEK-UNGEMESSEN`.** - **2026-08-19** — Die Vorauswahl des Rückwegs wählt kaum vor: acht Kandidaten liegen im Median 0,066 Kosinus auseinander → **nach `novaberg-backlog.md` als `RUECKWEG-VORAUSWAHL-OHNE-TRENNSCHAERFE`.** - **2026-08-19** — Die Ausschluss-Absicherung des Verweiswegs ist gebaut und im Betrieb nie ausgelöst worden → **nach `novaberg-backlog.md` als `BEZUG-ID-NIE-AUSGELOEST`.** - **2026-08-19** — Seit elf Stunden wird kein Recherche-Auftrag mehr eingereiht, während weiter Wissenszeilen entstehen → **nach `novaberg-backlog.md` als `RECHERCHE-REIHT-NICHT-MEHR-EIN`.** - **2026-08-19** — Die Antwort wird erst nach dem vollständigen Durchlauf zugestellt, und der Nachlauf kostet gemessen 8 Sekunden → **nach `novaberg-backlog.md` als `NACHLAUF-VOR-DER-ZUSTELLUNG`.** - **2026-08-19** — `gemma4-gpu` fährt `repeat_penalty 1.3`, und niemand kann sagen, woher die Zahl kommt → **nach `novaberg-backlog.md` als `REPEAT-PENALTY-OHNE-HERKUNFT`.** - **2026-08-19** — Die Dauern des Anbieters liegen seit jeher vor und werden nirgends gelesen → **nach `novaberg-backlog.md` als `ANBIETERDAUERN-UNGELESEN`.** - **2026-08-19** — Der Dienst nennt seine Fundstelle, und die Antwort an den Menschen nennt sie nicht → **nach `novaberg-backlog.md` als `FUNDSTELLE-ERREICHT-DEN-MENSCHEN-NICHT`.** - **2026-08-19** — Ein Silo, dessen Lesefunktion gebaut und abgeschaltet ist, hat in der Rollenmatrix keinen Zustand → **nach `novaberg-backlog.md` als `SILO-OHNE-ZUSTAND-IN-DER-MATRIX`.** - **2026-08-19** — Dasselbe Material fand denselben Bestand neunzig Minuten spaeter voellig anders — bester Kosinus 0,9226 gegen 0,4163 → **nach `novaberg-backlog.md` als `BESTAND-ANTWORTET-ANDERS-NACH-90-MIN`.** - **2026-08-19** — Kein Zeuge faehrt die Kandidatenabfrage des Rueckwegs gegen eine Datenbank — eine Verschiebung zwischen Platzhaltern und Parametern bliebe gruen → **nach `novaberg-backlog.md` als `KANDIDATENABFRAGE-OHNE-DB-ZEUGEN`.** - **2026-08-19** — Der Verstaerkungspfad von Weg 3 ist bezeugt und gegengeprobt, aber im Betrieb noch nicht getroffen worden → **nach `novaberg-backlog.md` als `VERSTAERKUNGSPFAD-IM-BETRIEB-UNGETROFFEN`.** - **2026-08-18** — Die Schwelle des *Einpraegsamen* ist zeichengleich die Schwelle, die schon die Promotions-Queue oeffnet — die drei Wege aus §4b.1a sind nicht drei Kriterien, sondern zwei → **nach `novaberg-backlog.md` als `DREI-WEGE-EINE-SCHWELLE`.** - **2026-08-18** — Der dritte Weg verlangt *als Ergaenzung, nicht als neue Datei* — und sein Einreihpunkt liegt hinter dem Schreiben der Datei → **nach `novaberg-backlog.md` als `EINREIHPUNKT-HINTER-DEM-SCHREIBEN`.** - **2026-08-18** — `shadow_auftrag` hat keine Spalte für den Turnbezug, und der Rückweg umgeht das über `modus` → **nach `novaberg-backlog.md` als `SHADOW-AUFTRAG-OHNE-TURNBEZUG`.** - **2026-08-18** — Der Rückweg ist über den Pixie-Zeitplan nicht messbar, solange die Queue 714 Aufträge höherer Salienz trägt → **nach `novaberg-backlog.md` als `RUECKWEG-HINTER-DEM-RUECKSTAND`.** - **2026-08-18** — Der ganze Dateien-Verbund hat kein Moduldokument unter `docs/` → **nach `novaberg-backlog.md` als `DATEIEN-VERBUND-OHNE-MODULDOKUMENT`.** - **2026-08-18** — Der lesende Dienst deklariert die Rückfrage und benutzt sie nie → **nach `novaberg-backlog.md` als `RUECKFRAGE-DEKLARIERT-UND-UNGENUTZT`.** - **2026-08-18** — `zeilen_lesen` hat weiterhin keinen Aufrufer → **nach `novaberg-backlog.md` als `ZEILEN-LESEN-OHNE-AUFRUFER`.** - **2026-08-18** — Der AgentGraph fährt den vollen Enricher des Charakter-Pfads, obwohl er nur drei Knoten hat → **nach `novaberg-backlog.md` als `AGENTGRAPH-FAEHRT-VOLLEN-ENRICHER`.** - **2026-08-18** — Die Werkzeugschicht für Dateien ist gebaut und wird von niemandem gerufen → **nach `novaberg-backlog.md` als `WERKZEUGSCHICHT-DATEIEN-OHNE-RUFER`.** - **2026-08-17** — Der Recherche-Pfad liest die Bibliothek nicht, die er selbst füllt — sein „Vorwissen" kommt aus den Assoziationen → **nach `novaberg-backlog.md` als `RECHERCHE-LIEST-EIGENE-BIBLIOTHEK-NICHT`.** - **2026-08-17** — `WISSEN_RETRIEVAL_SCHWELLE = 0.40` hat noch nie den Ausschlag gegeben; die Kappung gibt ihn — und der Vorbehalt dazu ist auf dem Weg ins Konzept verdunstet → **nach `novaberg-backlog.md` als `RETRIEVAL-SCHWELLE-OHNE-WIRKUNG`.** - **2026-08-17** — `grenze` ist auf fünf Diensten deklariert und hat null Leser → **nach `novaberg-backlog.md` als `GRENZE-OHNE-LESER`.** - **2026-08-17** — Novas eigenes Wissen und die Websuche sind über den Empfang nicht als Dienste ansprechbar → **nach `novaberg-backlog.md` als `WISSEN-UND-WEBSUCHE-NICHT-ANSPRECHBAR`.** - **2026-08-17** — Die Selbstauslösung ist als Reparatur gebaut und hat ein Budget, das kein zweiter Grund mitbenutzen kann, ohne der Reparatur Luft zu nehmen → **nach `novaberg-backlog.md` als `SELBSTAUSLOESUNG-BUDGET-EINZWECKIG`.** - **2026-08-17** — Die Zustellart eines Dienstes ist einwertig und kann einen Dienst nicht beschreiben, der auf Anfrage UND periodisch arbeitet → **nach `novaberg-backlog.md` als `ZUSTELLART-EINWERTIG`.** - **2026-08-16** — Ein `AGENT.md` mit Stellwerten ist ein Einzelfall, und niemand hat entschieden, ob er einer bleiben soll → **nach `novaberg-backlog.md` als `AGENT-MD-MIT-STELLWERTEN`.** - **2026-08-16** — 19 von 19 HTTP-Endpunkten sagen weder Vor- noch Nachbedingung → **nach `novaberg-backlog.md` als `ENDPUNKTE-OHNE-BEDINGUNGEN`.** - **2026-08-16** — 276 von 461 privaten Membern haben weder Zusicherung noch Zeugen → **nach `novaberg-backlog.md` als `PRIVATE-MEMBER-OHNE-ZUSICHERUNG`.** - **2026-08-16** — 19 Funktionen verschachteln tiefer als vier Ebenen → **nach `novaberg-backlog.md` als `FUNKTIONEN-ZU-TIEF-VERSCHACHTELT`.** - **2026-08-16** — 10 Klassen zerfallen in Methodengruppen ohne gemeinsames Feld → **nach `novaberg-backlog.md` als `KLASSEN-OHNE-GEMEINSAMES-FELD`.** - **2026-08-16** — Der Kanalzwang ist statisch nur zu 22 % prüfbar → **nach `novaberg-backlog.md` als `KANALZWANG-NUR-22-PROZENT-PRUEFBAR`.** - **2026-08-16** — `NODE_LLM_CONFIG["recherche"]` ist vollständig gefüllt und hat null Aufrufer → **nach `novaberg-backlog.md` als `NODE-LLM-CONFIG-RECHERCHE-OHNE-RUFER`.** - **2026-08-16** — Eine Stichwortliste für „als erledigt geführt" wird nie fertig — und die Marke, die trüge, gibt es längst → **nach `novaberg-backlog.md` als `ERLEDIGT-MARKE-STATT-STICHWORTLISTE`.** - **2026-08-15** — Der Rueckweg ueber den Menschen ist in keinem Riegel abgebildet → **nach `novaberg-backlog.md` als `RUECKWEG-UEBER-DEN-MENSCHEN-OHNE-RIEGEL`.** - **2026-08-14** — Der Verlauf reproduziert seine eigenen Wendungen, und niemand bremst das → **nach `novaberg-backlog.md` als `VERLAUF-REPRODUZIERT-EIGENE-WENDUNGEN`.** - **2026-08-14** — Zehn Ähnlichkeits-Schwellen, und keine nennt, was sie vergleicht → **nach `novaberg-backlog.md` als `SCHWELLEN-OHNE-VERGLEICHSGEGENSTAND`.** - **2026-08-13** — Der Charakter kann den Inhalt beschädigen, und niemand prüft es → **nach `novaberg-backlog.md` als `CHARAKTER-BESCHAEDIGT-INHALT`.** - **2026-08-13** — Ein treuer, aufmerksamer Diener kann nicht distanziert sein — die Beitragstabelle lässt es nicht zu → **nach `novaberg-backlog.md` als `BEITRAGSTABELLE-SCHLIESST-KOMBINATION-AUS`.** - **2026-08-12** — Szene und Regieanweisung → **nach `novaberg-backlog.md` als `CLUSTER-BESCHREIBUNG-MISCHT-BEFEHL`.** - **2026-08-16** — Ein `vertiefen`-Auftrag verbrennt seine drei Versuche in 90 Sekunden → **als Nachtrag an `AUFTRAGSARTEN-OHNE-AGENTEN` in `novaberg-backlog.md`.** - **2026-08-15** — 141 `vertiefen`-Aufträge tragen ein leeres `thema`, der Gegenstand steht als Fließtext in `kontext` → **als Nachtrag an `VERTIEFEN-AUFTRAEGE-OHNE-THEMA` in `novaberg-bugs.md`.** - **2026-08-14** — Der Kopfblock des Verfasser-Urteils fällt in mehr als der Hälfte der Turns aus → **als Nachtrag an `VERFASSER-KOPFBLOCK-FAELLT-AUS` in `novaberg-bugs.md`.** - **2026-08-12** — Leere Antwort trotz `done_reason=stop`, → **als Nachtrag an `RESPONDER-LEERE-ANTWORT-STILL` in `novaberg-bugs.md`.** - **2026-08-11** — Nachtrag 2026-08-15: → **als Nachtrag an `RECHERCHE-ZWISCHENDESTILLATION-OHNE-GRUND` in `novaberg-backlog.md`.** - **2026-08-19** — `ollama --version` meldet die Version des laufenden Servers, nicht die der aufgerufenen Binärdatei → **als Regel des Vorgehens uebernommen — ein Werkzeug, das eine Version ueber ihre eigene Abfrage bestimmt, meldet den laufenden Dienst.** - **2026-08-19** — Die Kanalzeile der Nulllinie 0.20.7 steht auf n=2 und wird seither als Eigenschaft des Betriebs zitiert → **als Regel des Vorgehens uebernommen — die Stichprobengroesse gehoert in die Nulllinie geschrieben, neben den Wert.** - **2026-08-19** — Eine Momentaufnahme des Betriebszustands nannte die eigenen Eingriffe des Messenden nicht → **als Regel des Vorgehens uebernommen (19.08.2026) — der eigene Eingriff gehoert ins Messfenster.** - **2026-08-19** — Eine Warteschleife auf `docker compose logs` schlug am Namen eines *Nachbar*-Loggers an → **als Regel des Vorgehens uebernommen — ein Suchmuster auf einen Loggernamen wird mit seinem Trenner geschrieben.** - **2026-08-19** — Ein Zeuge prueft die Platzhalterkette eines INSERT als Zeichenfolge und schlaegt damit beim Zeilenumbruch an, nicht bei der fehlenden Spalte → **als Regel des Vorgehens uebernommen — ein Zeuge prueft, was seine Zusicherung technisch trifft, nicht was sein Name verspricht.** - **2026-08-18** — Die Konvention *reine Funktion statt Akkumulator* beschreibt genau den heutigen Defekt und erklaert sich fuer ihn nicht zustaendig → **als Regel des Vorgehens uebernommen — der Geltungsbereich einer Konvention gehoert in die Regel, nicht in ihr Beispiel.** - **2026-08-18** — Ein Zeuge, der ein Argument aus `call_args.kwargs` liest, prüft die Aufrufform mit — ohne es zu sagen → **als Regel des Vorgehens uebernommen — dieselbe Klasse wie der Zeuge, der die Platzhalterkette als Zeichenfolge prueft.** - **2026-08-18** — Ein Zeuge, der prüft, DASS ein Text im Prompt steht, sagt nichts darüber, in welchem Block er steht — und sieht wie ein Zeuge für die Trennung aus → **als Regel des Vorgehens bereits uebernommen (18.08.2026) — Anwesenheit sagt nichts ueber den Ort.** - **2026-08-18** — Kein Zeuge der Suite importiert die Anwendung — ein Importfehler in einem Router ist für 1782 grüne Tests unsichtbar → **im Backlog als `RAUCHTEST-ANWENDUNG-IMPORT` gefuehrt.** - **2026-08-18** — Ein Zeuge der Wurzelprüfung belegt etwas anderes, als sein Name sagt → **als Regel des Vorgehens uebernommen — dieselbe Klasse, Richtung *zu blind*.** - **2026-08-20** — Die Bibliothek trägt in Nutzerturns fast nie bei: 2 echte Treffer auf 142 beantwortete Turns → **nach `novaberg-autonomous-wissen_k.md`.** - **2026-08-19** — Der schreibende Speicher ist der leere, der volle ist der lesende → **nach `novaberg-agent-dateien_k.md`.** - **2026-08-19** — Der Vorcheck `has_wissen` des Enrichers ist gröber als der Lesepfad, den er ankündigt — und die Lücke ist mit Konvention 4 gewachsen → **nach `novaberg-node-enricher.md`.** - **2026-08-19** — Ollama 0.32.14 schaltet Thinking per Default ein; ein Aufrufer, der `think` wegläßt, verliert den Großteil seiner Ausgabe in einen ungelesenen Kanal → **nach `novaberg-architecture.md`.** - **2026-08-19** — Mehrfachvorhersage (MTP) ist in diesem System weder eingeschaltet noch einschaltbar noch in den Gewichten vorhanden — und ein Update änderte daran nichts → **nach `novaberg-architecture.md`.** - **2026-08-19** — `immer_aktiv` heißt nicht „ist eine Quelle", und ein Dokument sagt trotzdem, dass es das heißt → **nach `novaberg-convention-nmcp.md`.** - **2026-08-18** — Der Befund *Zeitplan mit 714 Auftraegen hoeherer Salienz davor* ist heute 25 → **nach `novaberg-pixie.md`.** - **2026-08-18** — Der Verzeichnisbaum der Architektur kennt zwei Manager nicht, die seit Tagen laufen → **nach `novaberg-architecture.md`.** - **2026-08-18** — Zwei Register beschreiben die Lesequellen des Enrichers und kennen die Bibliothek nicht → **nach `novaberg-node-enricher.md`.** - **2026-08-18** — Der Architektur-Bauplan kennt einen Manager nicht und der veröffentlichte Compose-Bauplan vier Mounts nicht → **nach `novaberg-architecture.md`.** - **2026-08-17** — Die Bestandszahl der Bibliothek in `novaberg-gedankenkette_k.md` §10 reproduziert sich nicht → **nach `novaberg-gedankenkette_k.md`.** - **2026-08-16** — 9 von 150 Dokumenten unter `docs/` tragen eine Herkunftsmarke an ihren Beispielen → **nach `novaberg-backlog.md` als `BEISPIELE-OHNE-HERKUNFTSMARKE`.** - **2026-08-16** — Das Profil über den Menschen ruht auf einem Siebzehntel des Materials, das das Selbstbild der Figur trägt → **nach `novaberg-agent-character.md`.** - **2026-08-16** — `server/agents/recherche/AGENT.md` ist seit dem 18.04.2026 unverändert und widerspricht dem Code an zwei Stellen → **nach `novaberg-pixie-research.md`.** - **2026-08-15** — Zwei Konzepte lesen dasselbe Rad zur selben Zeit und meinen Verschiedenes → **nach `novaberg-eigenzeit_k.md`.** --- ## Erledigt — der Befund war richtig und ist abgearbeitet **Nachgezogen am 07.09.2026 — 22 Eintraege standen als erledigt markiert im Abschnitt *Offen*.** Sie sind hierher verschoben, damit die Zahl der offenen Funde wieder stimmt; kein Wortlaut ist geaendert. Der Befund darueber steht im Verlauf des Standes. **Durchsicht am 29.09.2026 — 92 Einträge aus *Offen* waren abgearbeitet.** Kein Wortlaut ist geändert — bis auf einen Verweis nach außerhalb des Repos im Eintrag vom 24.08.2026, den die Veröffentlichungsprüfung abweist; der Beleg der Prüfung steht hinter dem Pfeil. Die Roadmap führt sie im Kapitel vom 29.09.2026, 05:46 UTC. - **2026-09-19** — **Eine Zahl der Featureliste ist in keiner Quelle mehr auffindbar.** `[gelesen 19.09.2026]` Der Beleg *48,7 h Pause → Faktor 0,0000* (`[Doku, 17.08.]`, Zeile zu Eigenzeit C) steht in keiner anderen Datei unter `novaberg/docs/`. Nicht gelöscht, sondern durchgestrichen und dem Bauteil A zugeordnet; die Herkunft bleibt unbelegt. → **Erledigt, geprüft am 29.09.2026:** `55f4860` streicht die Zahl in der Featureliste als überholt; sie kam in `80dcff5` ohne Quelle — die Herkunft ist nicht mehr zu klären, zu tun bleibt nichts. - **2026-09-19** — ✅ **im Code behoben am 19.09.2026, 11:36 UTC** (`Korrektur.kein_auftrag`, `utils/offers.py::_service_acted`, Planner ohne Block; im Betrieb nicht gemessen) — **Nach einer abgelehnten Klassifikation bietet Nova nicht an.** `[gelesen 19.09.2026]` Lehnt die Notizen-Klassifikation eine Aussage ab, wird sie ein Dienst-Ergebnis mit Status `abgelehnt` (`agents/notizen/dispatch.py`), und `utils/offers.py::offer_candidate` wertet jeden Status als `dienst_lief`. Seit die Vorprüfung Bedarfsaussagen öfter ablehnt (19.09.2026: 21 von 27 statt 12 von 27), trifft das jede abgelehnte Bedarfsaussage, die der Empfang an Notizen zustellt: kein Eintrag, und auch kein Angebot, wie hoch das Pflichtbewusstsein auch ist. Absicht von Teil E ist *„Anbieten ist für das, worum niemand gebeten hat"* — eine Ablehnung als Nicht-Auftrag ist genau das. → **Erledigt, geprüft am 29.09.2026:** 968c56b; server/utils/offers.py:448-470 (_service_acted, Korrektur.kein_auftrag); Roadmap '19.09.2026, 11:36 UTC — eine Ablehnung als Nicht-Auftrag sperrt weder Gespräch noch Angebot' - ~~**2026-09-19** — **P4 des Synapsen-Umbaus ist nicht abgeschlossen, obwohl der Code seine Festlegungen trägt.**~~ `[gelesen 19.09.2026, am Code]` Von 16 geprüften Punkten der Notiz `novaberg-memory-synapsen-p4-entscheidungen_k.md` tragen 11, 4 weichen ab (K5 Fehler als `art='fehler'` statt `bemerkung`; K8; K10 ohne Magnet-Vorfilter, Schwelle 0.82 statt 0.85, Halbreaktivierung als dritter Pfad; `LMOVE` statt `lpop`), 1 fehlt (`SYNAPSEN_PROMOTION_AKTIV`, mit P9 entfernt). Offen sind die Folgeeinträge `SYNAPSEN-LIVE-VERIFY` (Entitäts- und Timeline-Kantenschicht nie unter Live-Last abgenommen), `KZG-ERSTELLT-AM-PARSE-HÄRTE` (sollte in P4 mitgebaut werden; im Code nur ein Rückfall auf die aktuelle Zeit), `TRIGGER-2-RECACHE-KONZEPT-LÜCKE`, `REFAC-MAGNETE-AUDIT`, `EMOTIONS-VEKTOR-LEER`, `DOKU-DRIFT-WELLE-PROMOTION`, M2.5b. Die Notiz bleibt deshalb als eigene Datei stehen. → **Eingeordnet am 19.09.2026:** Die Abweichungen gelten, die Festlegungen sind überholt; P4 schließt nach `SYNAPSEN-LIVE-VERIFY` und `KZG-ERSTELLT-AM-PARSE-HÄRTE`, die übrigen Folgeeinträge sind von P4 gelöst (`novaberg-memory-synapsen_e.md`, Abschnitt G). → **Erledigt, geprüft am 29.09.2026:** 4bb8dcf 'P4 is complete'; SYNAPSEN-LIVE-VERIFY und KZG-ERSTELLT-AM-PARSE-HÄRTE im Backlog-Index abgeschlossen (3edc2ce, 404a19a) - ~~**2026-09-19** — **Vier Register widersprechen einander über Einträge aus P4.**~~ `[gelesen 19.09.2026]` `AUDIT-DOKU-DRIFT-MS` steht im Backlog-Index als offen, im Eintrag als erledigt. `PROMO-VERSTAERKT-BLIND`, `PROMO-DEADBRANCH` und `PROMO-USER-MISMATCH` stehen in der Chronik (Mai) auf ✅ und in keinem Index und nicht im Archiv. `PROMO-QUEUE-SCHWELLE-ASYMMETRIE` ist im Epic erledigt und hat keinen eigenen Eintrag. Die FK-Drift an `timeline_id` aus §7 der Notiz hat keine Kennung. → **Eingeordnet am 19.09.2026:** `AUDIT-DOKU-DRIFT-MS` trägt jetzt den gemessenen Zustand (offen, fünf von sechs Befunden entfallen). Die drei `PROMO-*` stehen im Archiv (`novaberg-bugs-archiv-gedaechtnis.md`). `PROMO-QUEUE-SCHWELLE-ASYMMETRIE` war nie ein Eintrag, der Satz im Epic genügt. Die FK-Drift an `timeline_id` ist gewollte Bauart (nackte Spalte, FK im Agenten-Schema, `db/init.sql`) und bekommt keine Kennung. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs-index.md:270,272 PROMO-QUEUE-DEADBRANCH/-USER-MISMATCH im Archiv; roadmap.md:75 'Register: Die drei Bugs ... ins Archiv nachgetragen' - ~~**2026-09-19** — **Die Featureliste widerspricht an vier Stellen den Konzepten, auf die sie zeigt.**~~ `[gelesen 19.09.2026, beim Teilen der Konzepte]` *Zwei-Call-Promotion* nennt den `SynapsenPromotionAgent`, der nach K3 keinen Aufruf eines Sprachmodells macht; der Agent selbst steht auf 🟢 ohne Datum und Commit. *Initiative-Achse* sagt „Schwelle gegen Zeugen kalibriert“, nach `novaberg-gv-initiative_m.md` §12.7 hält das Tor nicht. *Erreichbarkeit* sagt „Ablesung fällt in 14 % aus — kein Code“; B1 ist gebaut, der Ausfall lag bei 28,1 %. Die Eigenzeit-Bauteile beschreibt sie anders als `novaberg-eigenzeit_b.md` §5 und führt bei D noch „Riegel 2 nicht gerechnet“. → **Erledigt am 19.09.2026, 23:49 UTC:** Alle vier Stellen sind gegen ihre Quellen gemessen und berichtigt (`55f4860`; die Promotion-Zeile schon früher am selben Tag). Zwei Ampeln wechselten: Eigenzeit E 🟢 → 🟠, Eigenzeit F 🟢 → 🔴. → **Erledigt, geprüft am 29.09.2026:** 55f4860 'measure three feature-list rows against their sources'; Featureliste Stand 19.09.2026 23:49 UTC - **2026-09-19** — **Zwei Kennungen im Bugregister beginnen oder enden mit Kleinbuchstaben** (`HALL2-Update`, `urllib3-RETRY`). `[gelesen 19.09.2026]` Die Zählvorschrift des offenen Registers erfasst sie nicht; im Archiv ergab sie deshalb 146 statt 148. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs-archiv.md:4: Zählvorschrift erfasst 'zwei Kennungen mit Kleinbuchstaben' (148); bugs-index.md:160 und :379 führen beide - **2026-09-19** — **Die Chronik nennt an acht Stellen interne Arbeitsdokumente, die in veröffentlichten Dateien nicht stehen sollen.** `[gelesen 19.09.2026]` Die Veröffentlichungsprüfung vor dem Commit meldete beim Auslagern des August fünf Verweise auf Regeldokumente außerhalb des Repositoriums in `novaberg-roadmap-2026-08.md` (Zeilen 534, 560, 1001, 1274, 1890); dazu nennt `novaberg-roadmap.md` an drei Stellen im September ein internes Übergabedokument. Alle acht standen schon vorher so da und sind beim Auslagern wortgleich mitgewandert. Nicht repariert, weil die Chronik nicht umgeschrieben wird; ob und wie, ist zu entscheiden. → **Erledigt, geprüft am 29.09.2026:** d935625 'the chronicle no longer names internal documents' (20.09.2026): 30 Verweise ersetzt, 24 in roadmap.md, 6 in roadmap-2026-08.md - **2026-09-18** — **Solange ein Angebot offen ist, würfelt Nova für dieselbe Sache in jedem Turn neu.** `[gelesen 18.09.2026, zweite Kontrolle]` `offer_candidate` (`utils/offers.py`) sperrt keinen neuen Wurf, solange ein Angebot zur selben Sache offen ist (15 Minuten). Bei p ≈ 0,5 steht nach drei Turns mit 87 % mindestens ein Angebot, auch ein zweites zur selben Sache ist möglich. Mit der Schwelle 0,9 bot sie oberhalb in *jedem* Turn an — der Zustand ist älter als die Wahrscheinlichkeit, sie macht ihn nur seltener. Absichtsfrage: je Turn oder je Sache? → **Erledigt, geprüft am 29.09.2026:** 903c34c 'Nova draws once per thing'; server/utils/offers.py:186 draw_recorded; Roadmap '19.09.2026, 12:14 UTC — das Angebot gilt pro Sache'; Entscheidung novaberg-thinking-lage_e.md Nr. 22 - **2026-09-18** — **42 Audit-Zeilen eines Suite-Laufs stehen in der Produktivtabelle** (`hintergrund_log`, ids 67501–67542, 07:39:49–07:40:10 UTC, Nutzer `meister`): `synapsen_decay`, `praegung_*`, `preis_waechter`, `queue_verfall`, `charakter_hash` — sie sehen aus wie echte Läufe. Entstanden beim Umbau des Audits (`ac86792`), bevor die Zeugen nachgezogen waren. → **Am selben Abend gelöscht** (`DELETE 42` in einer Transaktion mit Zählprüfung, danach 0 Zeilen im Bereich). → **Erledigt, geprüft am 29.09.2026:** 57b36b4 'docs: the 42 leaked audit rows are deleted' (DELETE 42 mit Zählprüfung) - **2026-09-18** — **`dateien_index` kann ein `gestartet` ohne Abschluss hinterlassen** — eine Ausnahme zwischen `gestartet` und dem Ende ausserhalb des `try` je Wurzel wird nicht gefangen, und eine Ausnahme aus `wurzeln_aktiv()` vor `gestartet` hinterlaesst gar keine Zeile. `charakter` hat dafuer einen Wrapper um `invoke`, dieser Agent nicht. → **Erledigt, geprüft am 29.09.2026:** 80d4b37: der Pixie-Dispatch schreibt fehler für jede Ausnahme, die einen Dienst verlässt (server/services/pixie/dispatch.py:109-116); das deckt wurzeln_aktiv() und den Teil außerhalb des try - **2026-09-18** — **Die NMCP-Konvention (§7) sagt: Ein eigener Dienst schreibt sein Audit selbst, nur für fremde schreibt der Aufrufer mit.** Seit `ac86792` schreibt der Pixie-Dispatch auch für eigene Dienste, die `writes_own_audit` nicht melden. §8.4 (*jeder Lauf ist auditiert*) hält; die Zuständigkeit weicht ab. Welche Seite nachgezogen wird, ist offen — die Konvention oder die Dienste. → **Am selben Abend entschieden vom Eigentümer: die Dienste** — der eigene Dienst schreibt sein Audit selbst. Umgebaut in `80d4b37`, festgehalten in `novaberg-convention-nmcp.md` §8.4. → **Erledigt, geprüft am 29.09.2026:** 80d4b37 'every service writes its own audit'; novaberg-convention-nmcp.md §8.4; Entscheidung des Eigentümers 18.09.2026 - **2026-09-17** — ✅ **behoben am selben Abend** — **Der Objektbezug erreicht den Dienst, die Klassifikation folgt ihm nicht.** `[gemessen 17.09.2026, Betrieb]` Nach einer Zustimmung bekam die Timeline genau die angebotene Sache (*»Abholung der Schwester am Bahnhof«*, Samstag 10 Uhr) als `objekt_bezug`; die Klassifikation nahm trotzdem `target='Zahnarzt'` aus dem Verlauf und `zeit=''` — Ausgang `fehler`, kein Termin. Der `[OBJEKT]`-Block greift nur, wenn die Äußerung **selbst** nichts nennt; steht im Verlauf eine andere Sache, gewinnt der Verlauf. **Zwei Schritte, beide gemessen:** Ein `[ZUSTIMMUNG]`-Block sagt jetzt, worauf die Zustimmung sich bezieht — er beseitigte den falschen Gegenstand, ließ Ziel und Zeit aber **leer**. Deshalb steht die Bindung im Code (`consent_fields`): Ziel und Zeitangabe kommen aus der zugestimmten Sache, gefüllt wird nur, was leer ist. Danach entstand der Termin *»Abholung der Schwester am Bahnhof«* mit Samstag 10:00 — in 1 von 2 Läufen; der zweite kam nicht durch den Empfang (`ROUTE-MISS1`). Beleg: `labor/2026-09-17_angebot_bezug/ergebnis.md`. → **Erledigt, geprüft am 29.09.2026:** 46e7328 'a consent binds to the thing that was offered'; server/agents/object_nearness.py:382 consent_fields; 103e8d9 - **2026-09-17** — ✅ **behoben am selben Abend (E1)** — **Eine Zustimmung schreibt auch ohne Angebot.** `[gemessen 17.09.2026, Betrieb]` In zwei getrennten Dialogen antwortete Nova auf eine Aussage mit Zeitpunkt **nicht mit einem Angebot**, sondern mit einer Rückfrage nach einer Nebensache (Gleis, Dauer). Das folgende *»Gerne«* bzw. *»Ja, bitte«* galt trotzdem als Auftrag: **2 von 2 Terminen wurden angelegt.** Der `[LAGE]`-Satz macht jede Zustimmung nach einem Objekt mit Zeitpunkt zum Auftrag, gleich worauf sie sich bezieht. Im Labor blieb die Gruppe *anderes* bei 0 Fehlalarmen — dort bot der erfundene Verlauf immer wirklich an. Beleg: `labor/2026-09-17_d_betrieb/ergebnis.md` Teil 4. **Behoben mit Scheibe 12 E1** (`utils/offers.py`): Der Zustimmungssatz steht nur bei offenem Angebot. Nachgemessen im Betrieb — ohne Angebot kein Termin, mit Angebot der Termin (`labor/2026-09-17_angebot_bezug/`). → **Erledigt, geprüft am 29.09.2026:** 207f14d 'a consent only counts as an order when an offer is open'; server/graph/nodes/router.py:372-380 (Riegel) - **2026-09-17** — ✅ **behoben am selben Abend (E1d)** — **Eine offene Rückfrage verschluckt den nächsten Turn.** `[gemessen 17.09.2026, Betrieb]` Nach der Rückfrage der Notizen (*»Liste anlegen?«*) wurde der unabhängige Auftrag *»Trag mir den Zahnarzt am Donnerstag um 15 Uhr ein«* als Antwort darauf gelesen; der Dienst meldete `abgeschlossen` mit *»Einkaufsliste wird angelegt«* — **in `notizen` steht danach keine Zeile**, der Termin wurde nie angelegt. Beleg: `labor/2026-09-17_d_betrieb/ergebnis.md`, Turns P1 und P2. **Behoben:** Trägt der neue Turn eine bekannte Auftragsform, gilt er nicht als Antwort — der Wartezustand fällt, der Turn wird normal geroutet (`utils/offers.py::carries_own_request`). Nachgemessen im Betrieb: Der Zahnarzt-Auftrag legte den Termin an, zweimal (`labor/2026-09-17_angebot_bezug/`). → **Erledigt, geprüft am 29.09.2026:** 207f14d; server/utils/offers.py:353 carries_own_request; im Betrieb nachgemessen (labor/2026-09-17_angebot_bezug/) - **2026-09-17** — ✅ **behoben am 18.09.2026** — **Relative Zeitangaben der Lage überleben den Tag, an dem sie galten.** `[gelesen und gezählt 17.09.2026, zweite Kontrolle]` 17 von 29 Zeitwerten akuter Objekte der letzten 7 Tage sind relativ (*»morgen um 10«*); die Fortschreibung behält sie wörtlich, die Lage verfällt erst nach 4 Stunden. Seit D2b nimmt die Klassifikation der Timeline den Zeitausdruck aus dem Objekt — eine Lage von vor Mitternacht würde danach auf den falschen Tag aufgelöst. Im Bestand lagen alle drei relativen Werte innerhalb eines Kalendertags; nicht aufgetreten. **Behoben:** Eine relative Angabe bekommt in dem Turn, in dem sie zuerst gedeckt ist, eine Schwester ` (aufgeloest)` mit dem Datum; die Fortschreibung übernimmt sie, solange der Wert gleich bleibt, und die Zustimmung nimmt das Datum statt des Worts (`sachlage.py::carry_resolved_dates`, `object_nearness.py::consent_fields`). Der Wortlaut in `gedeckt` bleibt, wie entschieden. → **Erledigt, geprüft am 29.09.2026:** 490713d 'a relative date keeps the day on which it was said'; server/graph/nodes/sachlage.py:627 carry_resolved_dates - **2026-09-16** — **Die JSON-Reparatur des Workers schnitt gültige Antworten ab.** `[gemessen 16.09.2026, 22:15 UTC]` `services/postprocess.py::deduplicate_repetition` hält jedes Muster von 8 bis 50 Zeichen, das dreimal folgt, für eine Endlosschleife — auch eine ausgerichtete Einrückung von 25 Leerzeichen — und kappt dort. Eine vollständige Sachlage (`json.loads` fehlerfrei) wurde zu ungültigem JSON und verworfen, 2 von 5 Läufen desselben Falls. Getroffen hat es jeden Aufruf mit erzwungenem JSON. ~~offen~~ → **behoben am selben Abend:** gültiges JSON wird nicht mehr repariert (`parse_json_strict`), eine Reparatur steht im Log; Sonde danach 10 von 10. **Nicht gemessen:** wie oft es im Betrieb vorher zuschlug — das Server-Log reichte nur bis 21:31 UTC zurück. Und die Kappung selbst bleibt für ungültigen Text so grob wie vorher. **Die zweite Kontrolle** hielt 1607 echte Modellantworten aus dem Log durch alte und neue Kette: 0 Abweichungen, 0 Kappungstreffer im sichtbaren Präfix (die Rohtexte sind im Log bei 500 Zeichen gekappt). Zwei weitere Klassen, in denen die alte Kette falsch lag, sind nachgerechnet: gültiges JSON mit Wiederholung **innerhalb** eines Strings verlor still alle folgenden Schlüssel; gültiges JSON mit einem escapten Anführungszeichen scheiterte an der angehängten Reparatur. → **Erledigt, geprüft am 29.09.2026:** 3b00199 'valid JSON is not repaired'; server/services/postprocess.py:138 parse_json_strict; zweite Kontrolle 1607 Antworten ohne Abweichung - ~~**2026-09-16** — **11 von 79 Objekten im Eigenschaftsgedächtnis tragen Sternchen im gespeicherten Namensschlüssel.**~~ → **Bereinigt am 17.09.2026, 06:00 UTC, nach Freigabe des Eigentümers:** 10 Objekte umbenannt, `**Termin**` in `Termin` zusammengeführt (dieselben Werte; die zwei späteren Zeilen als inaktive Historie mit Verweis auf die aktive, die Turn-Zuordnungen mitgewandert). Eine Transaktion mit Vor- und Nachbedingungen, Trockenlauf vorher, Sicherung aller Zeilen. **Nachgemessen:** unter den schlichten Namen findet der Abruf **14 von 14** aktiven Eigenschaften, 0 Namen mit Auszeichnung. Nicht angefasst: der Verlauf der Sachlage und inaktive Kurzziele — protokollierte Fakten. `[gemessen 16.09.2026, 21:25 UTC]` `sachlage_objekt.name_schluessel` ist beim Schreiben aus dem Namen gebildet; seit der Bereinigung kommt derselbe Name schlicht an und legt ein zweites Objekt an, dessen Eigenschaftshistorie getrennt beginnt. **Nachgezählt von der zweiten Kontrolle, 22:40 UTC:** alle 11 beim Paar `meister` (11 von 17 Objekten dieses Paares); **7 davon tragen 14 aktive Eigenschaften**, die `active_properties` mit dem schlichten Schlüssel nicht mehr findet — darunter *Meeting* (5), *Termin* (Zeitpunkt, Art), *Projekt*; `**Termin**` und `Termin` stehen schon als zwei Zeilen nebeneinander. Die Suche der Rückfrage bleibt unberührt (73 von 207 Kurzzielen mit Sternen, keines davon aktiv). Nicht migriert — eine Änderung an Bestandsdaten. → **Erledigt, geprüft am 29.09.2026:** 03cce6a 'the stored object names lose their asterisks, 14 of 14 properties found again'; Bereinigung 17.09.2026 06:00 UTC - ~~**2026-09-16** — **Lage-Objektnamen tragen Markdown-Auszeichnung.**~~ → **Behoben am 16.09.2026:** Die Formprüfung schreibt jeden Objektnamen ohne Auszeichnung, beim Parse und beim Laden (`sachlage_form.py::plain_object_name`); im Betrieb um 22:28 UTC an einer geladenen Blase belegt. **Rest:** 11 von 79 gespeicherten Objekten des Eigenschaftsgedächtnisses tragen die Sternchen im Schlüssel — eigener Eintrag unten. `[gemessen 16.09.2026, 20:16 UTC]` Ein Betriebsturn lieferte das akute Objekt `**Gravitationslinseneffekt**` mit Sternchen; der Name geht so in den Objekttext der Objekt-Nähe (`agents/object_nearness.py::build_object_text`) und damit in den Vektor. ~~Wie häufig das im Bestand ist, ist nicht gezählt.~~ → **gezählt am selben Abend:** Über die letzten 200 Zeilen von `sachlage_verlauf` tragen **112 von 144 akuten Objekten des Paares `meister`** Sternchen am Namen, die Probe- und Fremdpaare keine, und **vor dem 09.09.2026 kommt es nicht vor**. Die Eichreihe hatte 0 von 66. **Auf das Urteil wirkt es nicht:** dieselben 112 Objekte mit und ohne Sternchen gegen dieselben Merkmale — 112 von 112 gleiches Urteil, größte Nähe verschoben um −0,0366 bis +0,0226 (Median −0,0001); in 7 stillen Fällen wechselt der nächste Dienst. Skripte: `labor/2026-09-16_objektnaehe_schatten/stern.py`, `q*.sql`. → **Erledigt, geprüft am 29.09.2026:** 32fb504 'the situation names the matter ... in plain text'; server/graph/nodes/sachlage_form.py:356 plain_object_name - **2026-09-16** — **Die Kapitelzahl des laufenden Monats im Kopf der Chronik ist nicht nachrechenbar.** `[gezaehlt 16.09.2026, 19:43 UTC]` Die Tabelle nennt fuer 2026-09 **94** Kapitel (vorher 93, beim Eintrag um eins fortgeschrieben); Ueberschriften der Form `## TT.09.2026` stehen **101** in der Datei. Welche Zaehlregel die 93 hatte, ist nicht festgehalten — dieselbe Klasse wie die Bilanzzahl des Defektregisters. Nicht ueberschrieben. → **Erledigt, geprüft am 29.09.2026:** 4a54cee; Roadmap '19.09.2026, 15:14 UTC — der August ist aus der laufenden Chronik ausgelagert'; Kopftabelle novaberg-roadmap.md:9 nennt jetzt ihr Zaehlkommando, grep -cE heute 137 = Kopf 137 - ~~**2026-09-16** — **Die Lage benennt als Objekt den Anlass statt des Gegenstands, um den es geht.**~~ → **Gebaut am 16.09.2026:** eine Regel im Sachlage-Prompt, gemessen als A/B und A/C über je 60 Äußerungen; Rahmen statt Sache 4 → 2, Handlung zum Ding bleibt 0, Notizen am Notizen-Zettel 11 → 13 bei einer Laufstreuung von ein bis zwei Fällen (`novaberg-thinking-lage_k.md` §4, *Die Objektwahl der Lage*). *Kuchen* und *Einkaufsliste* bleiben Rahmen. `[gemessen 16.09.2026, Reihe über 60 Äußerungen]` Aus *„Ich brauche für den Ausflug noch eine Regenjacke"* wird das Objekt **Ausflug**, nicht *Regenjacke*; aus *„Merk dir, dass Lena keine Nüsse verträgt"* wird **Lena**, nicht die Unverträglichkeit. In beiden Fällen ist der Gegenstand die Sache, die festgehalten werden soll, und der Anlass nur ihr Rahmen. **Die Wirkung reicht über die Zuordnung hinaus:** Jede Rechnung, die am Objekt hängt — Nähe zu einem Dienst, Eigenschaftsgedächtnis, Rückfrage-Gegenstand —, rechnet dann über das falsche Ding. Zwei der drei Fehler mit deutlichem Abstand in der Reihe kommen daher, nicht aus dem Maß. Beleg: `labor/2026-09-16_objektkriterium/ergebnis_reihe.md`. → **Erledigt, geprüft am 29.09.2026:** 32fb504 feat(sachlage): the situation names the matter, not its frame; Roadmap '16.09.2026, 22:31 UTC — die Lage waehlt die Sache, nicht ihren Rahmen' - **2026-09-16** — **Die Bilanzzahl im Kopf des Defektregisters und eine mechanische Zählung gehen um zehn auseinander.** `[gemessen 16.09.2026]` Der Kopf nennt **161 offene Kennungen**, *„gezählt über beide Überschriftformen"*. Eine Zählung über Abschnittsüberschriften mit Kennung — mit und ohne Rücklaufzeichen, Kennung mit mindestens einem Bindestrich — ergibt über dieselbe Datei **151** (150 vor der heutigen Kennung). Welche Zählweise die des Kopfes ist, steht nicht dabei; damit ist die Zahl, die jede Sitzung fortschreibt, nicht nachrechenbar. Nicht überschrieben, weil die Prüfregel selbst fehlt. → **Erledigt, geprüft am 29.09.2026:** 337e966/a7a3a3d (19.09.): Register geteilt, novaberg-bugs-index.md gerechnet (bugs_index.py); Kopf novaberg-bugs.md:6 nennt sein grep-Kommando - **2026-09-16** — **Ein achter Verlaufs-Renderer kürzt jeden Beitrag auf 1600 Zeichen, und sein Docstring sagt das Gegenteil.** `[gemessen 16.09.2026, zweite Kontrolle, Bestand]` `graph/nodes/sachlage.py::_render_history` schneidet bei `_BEITRAG_MAX_ZEICHEN = 1600`; der Docstring behauptet *„Novas Antworten kommen damit ganz an"*, der Konstantenkommentar *„Die Grenze liegt jetzt über der längsten gemessenen Antwort"*. Mit demselben Code nachgerechnet (Regieanweisung entfernt, Weißraum gefaltet): **155 von 1494** Antworten liegen darüber (10,4 %, Max 3970); für die Zeit seit dem 28.08.2026, an dem der Wert von 400 auf 1600 gesetzt wurde, noch **33 von 651** (5,1 %, Max 2040). Verlust je Treffer im Mittel 691 Zeichen, Max 2370. **Er stand in keiner Renderer-Liste** — gefunden von einem Lauf über den Syntaxbaum aller Produktivdateien (351 Kappstellen in 292 Dateien, davon 3 auf einem Beitragstext), nicht von der Tabelle in `novaberg-mem-session.md`. Dieselbe Klasse wie die 100-Zeichen-Kappung, die am selben Tag behoben wurde; die Sachlage wiegt schwer, weil ihre Fortschreibung den Verlauf überdauert. → **Erledigt, geprüft am 29.09.2026:** eaca128 fix(sachlage): no contribution is cut any more; graph/nodes/sachlage.py:765-795 ungekuerzt mit Budget; Roadmap '18.09.2026, 07:43 UTC — das Nein am Objekt …' (Scheibe 12 B nachgezogen) - **2026-09-16** — ✅ **behoben am 18.09.2026** (`dispatcher.py::_ausgang_vermerken`, beide Pfade des Dispatchers; abgeschlossen → ERLEDIGT, Fehler → FEHLGESCHLAGEN, Rückfrage und Ablehnung ohne Vermerk) — **Der Marker für eine erledigte Agent-Aktion wird nie gesetzt — das Moduldokument sagt, er werde es.** `[Code, zweite Kontrolle 16.09.2026]` `memory/session.py::session_turn_mark_action` ist definiert und in `memory/__init__.py:46` re-exportiert; im ganzen `server/` gibt es **keinen Aufrufer**. `novaberg-mem-session.md:174` sagt *„Wird nach dem Agent-Dispatch aufgerufen"*, `:186` beschreibt den Marker im Header für Turns mit `aktion_erledigt=true`. Steht neben dem Befund vom 15.09.2026, dass der Verlauf die Marke `[ERLEDIGT]` seit dem 23.04.2026 nicht mehr trägt — **die Entscheidung von Scheibe 12 stützt sich darauf**, dass eine frühere echte Schreibung im Turn nicht als solche erkennbar ist. Zwei Wege, dieselbe Lücke. → **Erledigt, geprüft am 29.09.2026:** f0e3d53 feat(dispatcher): the outcome of a service is marked on the person's turn; graph/nodes/dispatcher.py:273/771/882 ruft session_turn_mark_action; Roadmap '18.09.2026, 08:21 UTC — Nova bietet an, und aus »Gerne« wird der Termin' (Scheibe 12 A, Punkt 2) - **2026-09-15** — **Die Marken `[ERLEDIGT]`/`[FEHLGESCHLAGEN]` im Gesprächsverlauf haben seit dem 23.04.2026 keinen Schreiber — der Leser steht, der Aufruf nicht.** `[Code]` `memory/session.py::session_turn_mark_action` setzt `aktion_erledigt`/`aktion_erfolgreich` am letzten Nutzer-Turn, `format_session_turns_numbered` liest beide und schreibt die Marke (`session.py:522`). **Kein Aufrufer im ganzen `server/`** — die beiden Aufrufe in `api/chat.py` entfielen mit dem Graph-Split (`f9b321e`, 23.04.2026), der Export in `memory/__init__.py` blieb. `novaberg-mem-session.md` §3.6 beschreibt den Mechanismus als laufend, `KONTEXT1` steht im Archiv als erledigt. Folge für den Riegel aus Scheibe 12 A: Ob eine Behauptung eine **frühere, echte** Schreibung wiederholt, ist im Turn nicht erkennbar — 3 der 27 Anschläge im Bestand ab 14.08.2026 sind solche Wiederholungen. → **Erledigt, geprüft am 29.09.2026:** f0e3d53; graph/nodes/dispatcher.py:273 _ausgang_vermerken, Aufruf :771/:882; Roadmap '18.09.2026, 08:21 UTC — Nova bietet an, und aus »Gerne« wird der Termin' - **2026-09-14** — **„Merk dir" mit Zeitpunkt steht auf zwei Zetteln, und der Planner waehlt bei Zeitbezug immer die Timeline.** Seit dem 14.09.2026 nennt der Timeline-Aushang *„Merk dir Annas Geburtstag am 15. Mai"* als Auftrag (`plugins/timeline_manager/manager.py`), der Notizen-Aushang *„Merk dir, dass ich morgen Mehl brauche"* (`plugins/notizen_manager/manager.py`). `graph/nodes/planner.py` waehlt in Prioritaet 1 bei `needs_timeline and management_action` die Timeline, gleich welches `management_target` gesetzt ist, und `needs_timeline` steht bei jeder Zeitangabe. Eine Notiz mit Zeitbezug laeuft damit zum TimelineAgent, dort ist *merk dir* ein `create`-Signal. `[gemessen 14.09.2026]` im Log 0 Faelle (4 Zustellungen bei `timeline=True`, alle `agent/timeline`). ~~Welcher Dienst eine Merk-Bitte mit Datum bekommt, ist eine offene Absicht.~~ Gefunden von der zweiten Kontrolle. → **Am 16.09.2026 entschieden und damit klassifiziert:** Der Gegenstand entscheidet, nicht das Zeitwort — eine Handlung oder ein Ereignis mit Zeitpunkt gehört in die Timeline, eine Sache oder ein Zustand mit Zeitbezug in die Notizen (`novaberg-thinking-lage_k.md`, Scheibe 12). Der Fund ist damit ein Defekt: `PLANNER-ZEITWORT-UEBERSTIMMT-DIENSTWAHL` in `novaberg-bugs.md`. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs-archiv-antwortpfad.md:73, behoben 17.09. (a56a911); Roadmap '17.09.2026, 10:58 UTC — der Planner fragt nach dem Objekt, nicht nach der Zeitangabe' - **2026-09-14** — **Neun Leser sehen den Gespraechsverlauf nur in den ersten 100 Zeichen je Beitrag.** `memory/session.py::format_session_turns_numbered` kappt mit `max_chars = 100` (Vorgabe seit dem ersten Server-Stand, 18.04.2026), und **kein Aufrufer uebergibt einen anderen Wert**: Router (`graph/nodes/router.py:158`), Perzeption (`perzeption.py:251`), Gespraechsvektor (`gespraechsvektor.py:537`) und die Klassifikation von sechs Agenten (Timeline, Notizen, Charakter-Identitaet, Direktiven, Dateien-Wurzeln, Dateien). Novas Antworten beginnen haeufig mit einer Regieanweisung — `[gemessen 14.09.2026]` in 4 von 4 Antworten des produktiven Paares zwischen 18:37 und 18:57 UTC, **157 bis 208 Zeichen lang**, bei Antworten von 330 bis 644 Zeichen: Die Leser sehen von diesen Antworten nur den Anfang der Regieanweisung; ein Angebot oder eine Frage am Ende der Antwort erreicht diese Leser damit nicht. Ein Zustimmungs-Turn (*„Gerne"*) ist ohne das Angebot, dem er zustimmt, nicht zuordenbar — die Ursache hinter `ROUTE-MISS1` war nie untersucht. Wirkung je Leser nicht gemessen. → **Erledigt, geprüft am 29.09.2026:** b5804ee session: the numbered history keeps every contribution; memory/session.py:570 max_chars ohne Vorgabe; Roadmap '16.09.2026, 15:10 UTC — kein Arzt schaut sich nur die Haende an' - **2026-09-14** — **Die Antwort sagt „notiert", wenn kein Dienst geschrieben hat — in 4 von 4 Turns.** `[gemessen 18:37–18:57 UTC]` *„ist notiert"*, *„direkt als Ankerpunkt einzeichnen"*, *„ist bei mir fest kalibriert"*, *„Notiert"* — der Router stellte in keinem der Turns zu, `timeline` bekam nur zwei Erinnerungs-Anker (509, 510), `notizen` nichts. Seit Timeline-Eintraege nur noch auf Auftrag entstehen, ist das der Normalfall jeder Terminerwaehnung. Dieselbe Klasse wie der Eintrag vom 13.09.2026 zur Zusage ohne Schreibung. → **Seit dem 15.09.2026 gerechnet** (Scheibe 12 A, `novaberg-node-tribunal.md`, *Die Speicherbehauptung*): alle vier Antworten dieses Abends schlagen am Riegel an; in der echten Korrekturrunde kamen sie ohne Behauptung zurück `[gemessen, Labor, Lauf 3]`. **Offen bleibt die Zeile, bis der Betrieb es zeigt.** → **Erledigt, geprüft am 29.09.2026:** 090d41c und 2eb77ed; Roadmap '15.09.2026, 11:43 UTC — gesagt ist nicht gespeichert …' und '18.09.2026, 08:27 UTC — »bereits eingetragen« war ein Anker …' - **2026-09-13** — **Die Sachlage legt Objektnamen mit Markdown-Sternchen an, und der Aufloeser trifft sie danach nicht mehr.** `[gemessen]` `sachlage_objekt` 816/817 heissen `**Kalender**`/`**Meeting**`, Schluessel `**kalender**`/`**meeting**` — **2 der 5** Objekte im Bestand. Der Aufloeser nannte die Objekte ohne Sternchen; beide Ansprueche wurden als *„unbekanntes oder latentes Objekt"* verworfen. Die Formpruefung (`sachlage_form`) laesst die Zeichen durch, der Namensschluessel ebenso — dieselbe Klasse wie `lower` gegen `casefold`: zwei Schreiber, zwei Formen, ein Vergleich. → **Erledigt, geprüft am 29.09.2026:** 32fb504; graph/nodes/sachlage_form.py:349-372 plain_object_name; Roadmap '17.09.2026, 06:01 UTC — die Sternchen aus dem Gedaechtnis' (03cce6a) - **2026-09-12** — ~~**Die Kennung einer gescheiterten Nachricht bleibt im Desktop-Client bis zum Neustart offen.**~~ → **am selben Abend behoben, fuer den gemeldeten Ausfall:** `turn_gescheitert` traegt `nachrichten_ids`, der Client nimmt sie aus der offenen Menge (`StreamHandler._release_failed`). Server-Zeuge vorher rot, Client-Gegenprobe 1/1. Die Wege ohne jede Meldung stehen im Eintrag darueber. ~~Der Stand vom fruehen Abend: `turn_gescheitert` traegt keine `nachrichten_ids`, und der Zweig im Client raeumt `_offene_nachrichten` nicht ab. Seit dem Abend kostet das keine falsche Warnung mehr (Luecke 2 unten ist als `ZUORDNUNG-ANDERER-ABSENDER-FREMD` behoben und im Archiv); offen bleibt, dass eine spaetere Antwort ohne Kennung den Vermerk *„Sie blieb unbeantwortet"* an die gescheiterte Frage haengt.~~ Der urspruengliche Befund: **Eine einzige gescheiterte Nachricht laesst den Desktop-Client jede spaetere Antwort als fremd markieren.** `[gemessen am Server-Log]` Um 18:55:04 UTC nahm der Server eine Desktop-Nachricht an (`/chat/stream`); der Turn brach um 18:55:29 mit `AttributeError` ab (`NICHTS ZUGESTELLT`). Zwischen 20:58 und 21:44 liefen **16 Turns ueber `POST /chat`** von einem anderen Absender, jede Antwort an 2 Clients, mit den Kennungen ihres Absenders — dazu 2 Impulse, die der Client ohne Pruefung zeigt. Der Client zeigte **16-mal** *„Diese Antwort gehoert nicht zu deiner letzten Nachricht"*, obwohl jede Antwort zu ihrem Reiz passte. **Zwei Luecken in `client/ui/stream_handler.py`:** (1) `turn_gescheitert` traegt keine `nachrichten_ids`, und der Zweig raeumt `_offene_nachrichten` nicht ab — die Kennung bleibt bis zum Neustart des Clients offen; (2) `_zuordnung_pruefen` kann *Antwort auf die Nachricht eines anderen Absenders* nicht von *falsche Antwort* unterscheiden, weil die Antwort den Absender nicht nennt. **Unbelegt:** der Inhalt der offenen Menge im Client — sein Log geht nur nach stderr; erschlossen daraus, dass ohne offene Kennung `unbeobachtet` herauskommt und keine Warnung. → **Erledigt, geprüft am 29.09.2026:** 1617458 server, client: a reported failure releases its question in the client; Roadmap '12.09.2026, 23:22 UTC — ein gemeldeter Ausfall gibt seine Frage frei'; Archiv ZUORDNUNG-ANDERER-ABSENDER-FREMD (archiv-antwortpfad.md:177) - **2026-09-12** — ~~**Der Kurzzeitspeicher erreicht den Luecken-Prompt fast nie, weil beide Quellen mit verschiedenen Skalen in dasselbe Produkt gehen.**~~ → **Am selben Abend behoben** — das Gewicht geht als Rang in der eigenen Quelle ein (`ei/source_weights.py`), durch den gebauten Pfad nachgemessen **16 LZG / 19 KZG** ueber dieselben elf Reize. Der urspruengliche Befund: `[gemessen, 11 Turns mit Lueckensuche]` Die KZG-Suche liefert in jedem Turn 8–10 Kandidaten; in den Prompt kommen **6 von 83** Luecken aus dem KZG, 77 aus dem LZG. `relevanz = similarity × gewicht × GV_QUELLEN_FAKTOR × …` — `gewicht` ist beim LZG `gewicht_decay` (gedeckelt bei `LZG_KNOTEN_GEWICHT_CAP = 10.0`), beim KZG die `salienz` in [0, 1] (`ei/wissensluecken.py`, beide `*_kandidaten_suchen`). Gemessen: KZG-Relevanz **0,18–0,35**, LZG **0,36–2,33**. Der Einheitsfaktor 0,6 gleicht nichts aus. **Die Handzettel-Zeile *„beide Quellen in jedem Turn"* gilt damit fuer die Kandidaten, nicht fuer das, was Nova sieht.** Verwandt, nicht dasselbe: der Eintrag vom 08.09.2026 zu Cosine-Groessen roh im Produkt. → **Erledigt, geprüft am 29.09.2026:** Commit 9820295 (gv4: gap candidates are weighted by rank within their own store); server/ei/source_weights.py - **2026-09-12** — **Nova erfuellt eine ausdrueckliche Bitte erst beim fuenften Mal und fragt viermal zurueck.** → **Bauteil 4 von `F-GV-2` ist gebaut** (Bitte zuerst bei `intent = task`), **und der Befund liess sich nicht nachstellen:** In zwei Nulllinien mit acht sachlichen Bitten, klaren und vagen, lieferte Nova jedes Mal zuerst. Die Ursache des Abends bleibt ungeklaert; ob der Bauteil wirkt, war damit nicht messbar. Der urspruengliche Befund: `[Betriebsbeleg 18:42–18:52 UTC]` Der Mensch bittet um einen Vorschlag (18:42), grenzt ihn ein (18:44), fordert ihn (18:47) und noch einmal (18:50) — viermal endet die Antwort mit einer Gegenfrage statt des Vorschlags, erst um 18:52 kommt er. **Der Gespraechsvektor hatte die Bitte um 18:49 als Auftrag erkannt** — sein erster Sprung lautet sinngemaess, sie anzunehmen —, die Antwort tat es nicht. **Die Neugier als Ursache ist nicht belegt**; die Stelle zwischen Strategie und Antwort ist ungeprueft. Ueber alle 15 Turns: **15 von 15** Antworten enden mit einer Gegenfrage, 14 mit `:-P` (siehe `ABER-SAG-MAL`). → **Erledigt, geprüft am 29.09.2026:** Commit 7e409e4 (gv: a request is served before curiosity) - F-GV-2 Bauteil 4 - **2026-09-12** — **Ein Docstring nannte die Bedingung, die mein Eingriff brach — und der Bruch sah aus wie ein leerer Speicher.** Die KZG-Suche sollte den gespeicherten Vektor mitholen; ihr eigener Docstring sagte, `decode_responses=True` spiele nur deshalb keine Rolle, weil **kein** Blob zurueckkommt. Mit dem Blob liest der Client alles als UTF-8, bricht ab, die Ausnahme wird gefangen — **null Kandidaten bei 3544 Schluesseln im Speicher**. `[gemessen]` 10 Kandidaten ohne den Eingriff, 0 mit ihm. Suite 3491 gruen, alle Zeugen gruen; gefunden hat es ein Lauf gegen den Bestand. **Dazu eine wertlose eigene Kontrolle:** Der Vergleich *mit Kern gegen ohne Kern* lief zweimal durch den gebrochenen Code und meldete *gleiche Zahl*. Abhilfe gebaut (zweiter Redis-Client ohne Dekodierung, zwei Zeugen gegen den Rueckbau); als Lesson uebernommen. → **Erledigt, geprüft am 29.09.2026:** roadmap.md:1131 'Der Eingriff hat eine Haelfte des Pfades getoetet, und die Suite sah es nicht'; config.py:224 redis_client_bytes - **2026-09-12** — **Die Kapitelzahl im Kopf der Chronik war 25 Kapitel alt.** Die Tabelle nannte fuer den laufenden Monat **52**, gezaehlt sind **76** (vor dem heutigen Eintrag); fuer den Vormonat stimmte sie exakt (155). Die Zahl steht direkt ueber dem Hinweis *„Wer hier etwas ergaenzt, zieht die Kopfzeile mit — sie driftet zuverlaessig"*, und genau die Haelfte, die driftet, ist die des laufenden Zeitraums. **Das gerechnete Findemittel der Chronik wich zugleich ab** und ist neu gerechnet; es zaehlt Abschnitte, nicht Kapitel, und konnte die Differenz deshalb nicht melden. → **Erledigt, geprüft am 29.09.2026:** novaberg-roadmap.md:9 traegt 137 Kapitel samt Zaehlvorschrift `grep -cE '^## [0-9]{2}\.09\.2026'`; nachgezaehlt 29.09.2026: 137 - **2026-09-12** — **Eine thematische Drift hebt die Vektorlaenge auf 2, nicht auf 3.** `[gemessen ueber 20 Turns]` Die Folge lautet `[2,2,1,2,1,1,1,2,1,2,2,1,2,2,2,2,1,2,2,2]` — **13-mal 2, 7-mal 1, nie 3**. Die Reihe war eigens als sanfter Gang durch die Raeume gebaut (Sterne → Elemente → Leben → Nerven → Wahrnehmung → Zeit → Information, Ton wechselnd). Woran der dritte Sprung haengt, ist damit offen; die Vektorlaenge steuert Tor 1 des Luecken-Pfades. → **Am 12.09.2026 beantwortet, und die Antwort ist kein Grad, sondern eine Wand.** In `lernmodus`, `fachgespraech` und `philosophischer_austausch` ist Laenge 3 bei **jeder** Faktorstellung ausgeschlossen: Die beste erreichbare Summe ist exakt `1.0 + 1.0 + 0.5 + 0.3 − 0.3 = 2.5`, und `round(2.5)` ist 2. Die Reihe bestand vollstaendig aus diesen beiden Modi — in **8 ihrer 20 Turns** haette allein `modus = kreativ` die 3 erzeugt, arousal, Dynamik und Stil in **keinem**. Ueber 1434 Rohturns gibt es 116 Dreien, **alle** mit `vertrauen` **und** `locker` und **keine** in einem der drei fachlichen Modi, in denen 794 der Turns liegen. Einzelheiten in `novaberg-node-gv_k.md`, Abschnitt *Laengenberechnung*; offen ist nur noch die Absichtsfrage, ob die Decke 2 dort gewollt ist. → **Erledigt, geprüft am 29.09.2026:** Commit c061b12 (fix(gv): a sum on the half step takes the higher one) und 1172490; GV-LAENGE-RUNDUNG-ZUR-GERADEN im Archiv - **2026-09-12** — **`GV_CHARAKTER_RESONANZ_SCHWELLE` filtert nicht, was ihr Name sagt.** `ei/wissensluecken.py` setzt fuer **jeden** Kandidaten denselben Wert: `cosine(turn_embedding, kern_embedding)` — die Naehe des **Turns** zum Charakterkern; der Kandidat geht nicht ein. Der Kommentar daneben nennt es *„Turn-Embedding als Proxy fuer Luecken-Embedding"*. Die Schwelle ist damit ein **globaler Schalter** (alle zwanzig Kandidaten passieren oder keiner) und heisst wie ein Kandidatenfilter. Die Kandidaten tragen ein eigenes Embedding aus der LZG/KZG-Suche; warum der Proxy noetig war, steht nirgends. → **Erledigt, geprüft am 29.09.2026:** Commit bb82ad2 (fix(gv4): the character filter measures the candidate, not the turn); ei/wissensluecken.py:652-665 - **2026-09-12** — **Der Luecken-Pfad hat drei Tore hintereinander, und keines meldete etwas.** `[gemessen]` **Tor 1** (Strategie, Vektorlaenge ≥ 2): 40 von 106 Turns offen — Laenge 1 in 66. **Tor 2** (Kandidatensuche): findet zuverlaessig 10 + 10. **Tor 3** (Qualifikation): **0 von 40**. Von den dreien schrieb nur Tor 2 eine Zeile; Tor 3 war eine Listen-Komprehension ohne Ausgabe, und der fruehe Rueckkehrpfad bei leerem `user_prompt`/`user_id` war ganz stumm. **Der Ausfall war deshalb nicht als Ausfall zu sehen, sondern nur als eine Null in der Tor-Zeile.** Beide sprechen seit dem 12.09.2026. → **Erledigt, geprüft am 29.09.2026:** Commit b63c601 (three gates that now say where the path stops); ei/wissensluecken.py:295 und :513 - **2026-09-11** — **Die Eroeffnungsformel hat eine Quelle, und es ist das Beziehungsprofil.** `[gemessen]` **35 von 38** Antworten des heutigen Tages (92 %) beginnen mit der Anrede des Menschen, am 09.09. **183 von 189** (97 %); die 14 haeufigsten Eroeffnungen der letzten drei Tage beginnen **alle** damit. Die Anrede steht im `beziehungsprofil` **dieses einen Paares** — bei 16 anderen Paaren nicht, im Kern nicht, in den Emotions- und Intentions-Profilen nicht, in den Direktiven nicht (0 Treffer). Von dort geht sie ueber `internal.character.relationship` in den Responder-Prompt. **Ein einziges Vorkommen in 854 Zeichen Profil erzeugt eine Formel in neun von zehn Antworten.** → **Erledigt, geprüft am 29.09.2026:** Commit f42a8e3 (a profile describes the manner of dealing, not the form of address); Roadmap '11.09.2026, 17:30 UTC - ein Wort im Profil, das jede Antwort eroeffnete' - **2026-09-11** — **Die Sie-Form kam mit der Anrede, nicht mit dem Modell.** `[gemessen, nur das produktive Paar]` Solange die Anrede bei 0 stand (25.08.–31.08., **150 Turns**), gab es **kein** Siezen. Sie beginnt am 01.09., erreicht am 08.09. **7 von 7** und am 09.09. **189 von 189** — und **erst dann** setzt die Sie-Form ein: 3/189 (09.09.), 3/26 (10.09.), **12/39** (11.09.). Beide stehen im selben Satz: *„[Anrede], Sie haben den Kern getroffen"*. Vor dem 01.09. steht im ganzen Bestand **ein** einziger Siez-Turn (31.07.2026). → **Erledigt, geprüft am 29.09.2026:** roadmap.md:1637-1653 (Kapitel 11.09.2026, 17:30 UTC); Abhilfe Commit f42a8e3 - **2026-09-11** — **Die Kapitelzahl im Kopf der Chronik reproduziert sich nicht.** Die Tabelle fuehrt fuer 2026-09 **48** Kapitel; `grep -c '^## [0-9][0-9]\.09\.2026'` ergibt **73**. Welche Zaehlvorschrift die 48 meint, ist nicht angegeben. Die Zahl wurde beim heutigen Nachzug fortgeschrieben (auf 49), nicht nachgezaehlt — die Fortschreibung ist der Weg, auf dem solche Zahlen driften. → **Erledigt, geprüft am 29.09.2026:** novaberg-roadmap.md:9 nennt Zahl samt Zaehlvorschrift; nachgezaehlt 29.09.2026: 137 = Kopf - **2026-09-11** — **Die Verlaufszahl der Featureliste stand auf 92, gezaehlt sind 108.** Gezaehlt als Aufzaehlungspunkte der Form `- **` im Abschnitt *Verlauf des Standes*; heute auf die gemessene Zahl gesetzt. **Dazu fehlte der Verlaufseintrag der Vorsitzung ganz** (11.09.2026, 16:00 UTC): Der Kopf traegt ihn, der Verlauf nicht. → **Erledigt, geprüft am 29.09.2026:** novaberg-featureliste.md:6 - 157 Eintraege mit Zaehlregel, nachgezaehlt 29.09.2026: 157 - **2026-09-11** — **Die Pause haelt einen laufenden Agenten nicht an, und der Status sagt es nicht.** `[gemessen]` Die Agenten-Pause stand um 09:53:40; ein Recherche-Agent lief bis **10:03:41** weiter — zehn Minuten volle Modellast, waehrend `agenten_pausiert: true` gemeldet wurde. Eine Messreihe, die auf diese Auskunft hin beginnt, misst den Hintergrund mit. **Am selben Tag behoben** (`agenten_laufend` und `bereit_fuer_messung` im Status), aber der Befund bleibt als Klasse stehen: Ein Zustandsfeld, das eine **Absicht** meldet (*pausiert*), sagt nichts ueber den **Zustand** (*still*). → **Erledigt, geprüft am 29.09.2026:** Commit 9c14a4c; server/api/admin.py:195-230 (`agenten_laufend`, `bereit_fuer_messung`) - **2026-09-10** — ~~**Die Faszination faellt aus, weil ihre Traeger kein Profil haben.**~~ → **Am 11.09.2026 an der Wurzel bearbeitet.** Die Ursache ist dreigeteilt: von 42 gelesenen Traegern ohne Profil standen **22 als offene Kandidaten in der Warteschlange** (richtig eingereiht, nicht an der Reihe), 11 unter der Laengenschwelle, 9 unter der Wiederkehr. **Der Tageslauf faellt zuverlaessig** (20 je Tag, lueckenlos) — er reicht nur nicht: 1497 offene Kandidaten sind 75 Tage. Und die Sortierung nach Gesamtlesezahl waehlt die historisch haeufigen, waehrend ein heute erstmals gelesener Knoten mit Lesezahl 1 hinten steht. Seither entscheidet die **Frische** (Lesevorgaenge der letzten 7 Tage) als erster Schluessel. **Die Wirkung ist noch nicht im Betrieb belegt** — die Profile entstehen erst mit dem naechsten Tageslauf. Der urspruengliche Befund: `[gemessen ueber 19 Turns]` Der Knoten prueft je Turn **drei** Traeger (`traeger_geprueft: 3`, konstant). In **8 von 19** Turns bleibt `werte: {}` und die Faszination ohne Zahl — und in genau diesen Faellen steht `ohne_profil` auf **3**, also **alle drei geprueften Traeger ohne Profil**. Wo einer eines hat, faellt ein Wert (0,35 bis 0,73). **Der Mechanismus ist gebaut und rechnet; ihm fehlt die Eingabe** — dieselbe Klasse wie beim Bauteil, das gebaut, bezeugt und ohne Eingabe war. → **Erledigt, geprüft am 29.09.2026:** Commit 28579b1 (Frische als erster Schluessel, config.py:2415 QUALITAET_FRISCHE_TAGE = 7); FASZINATION-PRAEGUNG Stand 11.09. - **2026-09-10** — **Nova siezt, und zwar seit dem 09.09.2026.** `[gemessen ueber die Tagesbestaende]` Siez-Antworten je Tag: 02.–07.09. **0 bis 1** von 6 bis 33 Turns; **09.09. 34 von 189 (18,0 %)**; 10.09. 5 von 59. **Der Sprung liegt am 09.09.**, nicht spaeter. `Chef` ist dagegen Vorbestand — am 09.09. in 189 von 189 Antworten. Am Abend des 10.09. faellt zusaetzlich auf, dass ab 21:50 **kein einziges `du`** mehr vorkommt, waehrend die Nachmittagsturns durchgehend duzten — vier Turns, zu wenig fuer eine Ursache. → **Erledigt, geprüft am 29.09.2026:** Commit f42a8e3 (profile describes manner, not form of address); Roadmap '11.09.2026, 17:30 UTC — ein Wort im Profil, das jede Antwort eroeffnete' - **2026-09-10** — ~~**Der Ausloeser ist nicht immer der Nutzer, die `[AUFGABE]` fragt aber immer nach ihm.**~~ → **Am 10.09.2026 gebaut.** Die Aufgabe ist auf die Sicht des Ausloesers ausgerichtet, und bei einem **eigenen Impuls** ist das Nova — `[gemessen ueber 1350 Turns]` **154 (11,4 %)**. Der Knoten waehlt seither zwischen zwei Aufgaben-Fassungen: `gv.task` fragt *Was beschaeftigt den Nutzer?*, `gv.task.impuls` fragt *Was beschaeftigt Nova?* und nennt den Anstoss ausdruecklich. Setzung des Eigentuemers: *„Dann ist nicht der Nutzer Partner im Raum, sondern Nova selbst ist Partner, wenn sie der Ausloeser ist."* Vier Zeugen in `tests/test_gv_impuls_tor.py`, Gegenprobe 2 vorhergesagt / 2 gezaehlt. → **Erledigt, geprüft am 29.09.2026:** Commit 677178b; server/graph/nodes/gespraechsvektor.py:611 (gv.task.impuls); server/tests/test_gv_impuls_tor.py; Roadmap '10.09.2026, 22:25 UTC — der Raum entsteht aus beiden, und der Farbton sagte nur einen' - **2026-09-10** — **Zwei Wertemengen heissen `intent`, und nur eine hatte eine Konstante.** `INTENT_KANON` traegt die **sechzehn** Intentionen der Salienz; die Perzeption liefert eine **andere** Menge von **sechs** (`smalltalk`, `knowledge`, `personal`, `task`, `creative`, `meta`), und die stand bis heute nur als Aufzaehlung im Prompt. Ueberschneidung der beiden: **genau ein Wert** (`smalltalk`). Aufgefallen beim Deklarieren der fehlenden Kanons — der naheliegende Name war vergeben. **Das ist dieselbe Verwechslung, die das Modell in seinen Ausgaben macht**, eine Ebene hoeher: Ein Begriff, zwei Bedeutungen, und wer die falsche greift, prueft gegen die falsche Menge. Die neue Konstante heisst deshalb `PERZEPTION_INTENT_KANON`, und ein Zeuge haelt beide auseinander. → **Erledigt, geprüft am 29.09.2026:** Commit fb616e4; server/config.py PERZEPTION_INTENT_KANON (Kommentar 'PERZEPTION_INTENT_KANON und nicht INTENT_KANON'); Roadmap '10.09.2026, 20:26 UTC — sechs Wertefelder, zwei mit Zug' - **2026-09-09** — **Der Fernanbieter hob den Preis in vier Tagen um Faktor 8,8, und der Rabatt verschwand ohne Ankuendigung.** $0,04998 → $0,14000 → $0,06496 → **$0,44000** je Million Eingabe-Token; beim Ausgang $0,09996 → **$1,32000**. Der letzte Wert ist der **Listenpreis**, den `config.py` als oberes Ende der Anbieterspanne fuehrt. **Der Waechter hat dreimal gemeldet, jedes Mal von selbst** — er ist das eine Stueck dieser Kette, das zuverlaessig arbeitet, und sein Docstring sagt seit dem 06.09.: *„Die Schnittstelle nennt die Hoehe des Rabatts, nie sein Ende."* **Entscheidung des Eigentuemers am 09.09.2026: Der Anbieter wird nicht mehr verwendet.** Der Betrieb laeuft seither vollstaendig lokal. → **Erledigt, geprüft am 29.09.2026:** Commit 9b963a6 (the provider is done); Roadmap '09.09.2026, 17:55 UTC — der Betrieb laeuft vollstaendig lokal' - **2026-09-07** — **Zwei Drittel der Modellkosten entstehen im Hintergrund, nicht im Gespraech.** `[gemessen]` ueber 33 Stunden: `pixie/hash` 0,0397 USD (127 Aufrufe), `wissen_rueckweg/zuordnung` 0,0267 (204), `wissen_rueckweg/einarbeitung` 0,0195 (147), `salienz` 0,0152 (102) — zusammen **0,101 von 0,154 USD**. Der ganze Gespraechspfad (Verfasser, Responder, Thinker, Router, Gespraechsvektor, 163 Aufrufe) traegt **0,053**. **Entscheidung des Eigentuemers am 07.09.2026:** *„Lassen wir das ferne noch laufen."* — Der Hintergrund bleibt vorerst auf dem Fernmodell, damit der Feldtest des neuen Gespraechsmodells **eine** Groesse bewegt und nicht zwei. Der Kostenhebel bleibt damit benannt und ungenutzt; er ist zwei Zeilen in der Umgebung gross. → **Erledigt, geprüft am 29.09.2026:** Commit 9b963a6; Roadmap '09.09.2026, 17:55 UTC — der Betrieb laeuft vollstaendig lokal' (Hintergrund seit 17:55 UTC auf qwen36-cpu) - **2026-09-07** — **Ein Zeuge, der eine Konstante symbolisch fuehrt, kann ihre Eichung nicht halten — und beim Faszinations-Leser hat das gegriffen.** Alle Zeugen der Abbildung `faszinations_faktor` lesen `HALTUNG_FASZINATION_NEUTRAL` aus der Konfiguration und wandern mit jeder Aenderung mit; sie pruefen, dass die Abbildung *stimmt*, nie, dass der Punkt *richtig liegt*. Der Punkt stand auf 0,50, geeicht am Median der **Turn**-Faszination statt der Traegerseite, und haette in 12 von 15 echten Turns gedaempft — 25 gruene Zeugen sahen nichts. Gefunden hat es der Zugriff *der Bestand statt der Zeugen*. Abhilfe ist ein Zeuge mit **Mess-Literalen** statt Konfigurationswerten. Die Klasse ist bekannt — *ein Zeuge, der eine Schwelle symbolisch fuehrt, prueft die Schwelle nicht* —, hier an einer Konstante statt an einer Schwelle. → **Erledigt, geprüft am 29.09.2026:** server/tests/test_haltung_faszination.py::test_der_neutrale_punkt_liegt_in_der_gemessenen_spanne (Mess-Literale 0.2704..0.5177), Commit 3ae278f; config.py:2590 HALTUNG_FASZINATION_NEUTRAL=0.36 - **2026-09-07** — **`novaberg-thinking-curiosity_k.md` fuehrt `neugier_vektor` als *nicht gebaut*, und er steht im Code.** `server/agents/wissensluecken/berechnung.py:59` rechnet `NOVA_NEUGIER x resonanz x neuheit` mit Berlynes umgekehrter U-Kurve in der Begruendung, gerufen aus `agents/wissensluecken/agent.py:157` und in `wissensluecken.neugier_vektor` geschrieben. Ob das derselbe Vektor ist, den das Konzept meint (dort *„Aktiv, treibt Pixie und Agenten"*), ist **ungeprueft** — das Konzept kuendigt zudem eine Umbenennung von `effektive_neugier` an, die den Vergleich erschwert. Aufgefallen bei der Frage, wo der Faszination-Strang weitergeht. → **Erledigt, geprüft am 29.09.2026:** novaberg-thinking-curiosity_m.md:19 ('~~nicht gebaut~~ gebaut') und :35 (Berichtigung vom 08.09.2026, f62302a) - **2026-09-06** — **Ein Zeuge hinter einem fruehen Rueckkehrpfad prueft nicht, was er zu pruefen scheint.** Bei der Gegenprobe zu `zitate_entwerten` gefunden: Vier Zeugen halten die Grenze des Eingriffs (*was gedeckt ist, bleibt unberuehrt*), aber **drei von ihnen erreichen den Eingriff nie** — ihre Profile tragen nur gedeckte Belege, und die Funktion kehrt vorher zurueck. Eine Fassung, die jedes Zitat abraeumt, waere in dreien von ihnen gruen geblieben. **Gefunden hat es die Vorhersage, nicht der Lauf:** erwartet waren vier rote Tests, rot wurde einer. Zwei Zeugen sind ergaenzt, die die Grenze **neben** einem echten Eingriff halten. → **Erledigt, geprüft am 29.09.2026:** `851e10a` (`zitate_entwerten`, zwei Zeugen neben dem echten Eingriff); die Lesson gilt allgemein und ist außerhalb des Repos festgehalten. - **2026-09-06** — **Der Kern-Hash setzt eigene Wendungen in Anfuehrungszeichen, und die Deckungspruefung meldet sie als unbelegt.** Im ersten Betriebslauf nach dem Bau: **3 und 6 Meldungen** der Klasse *Beleg ohne Fundstelle* in den beiden Kernen — die Stellen lesen sich wie Formulierungen des Modells (*„liebevoll uebers Haar streicht“*, *„umgebrochenen Boden“*), nicht wie Zitate aus dem Material. Im Beziehungsprofil sprang dieselbe Klasse ueber **20 Laeufe null**mal an. **Die Pruefung kann erfundenes Zitat und Stilmittel nicht unterscheiden** — beides steht in denselben Zeichen. Offen ist die Absicht: enger fassen (nur klar zitatfoermige Belege), nach Profil unterscheiden, oder die Meldung so lassen und als Hinweis lesen. **Eine Teilfrage ist am selben Tag beantwortet: es ist nicht modellspezifisch.** Derselbe Kern-Prompt, dasselbe Material, je fuenf Laeufe in zwei Runden: `deepseek-v4-flash` **21 %** und **17 %** der Zitate ohne Fundstelle, `qwen3.7-flash` **16 %** und **24 %** — der Unterschied zwischen den Modellen ist kleiner als die Streuung eines Modells zwischen zwei Runden. `mistral-nemo` zitiert **gar nicht** (Profile 766–1073 Zeichen, also unter einem Drittel des Richtwerts), `gpt-oss-120b` faellt aus (HTTP 400, Reasoning zwingend). **Wer zitiert, erfindet rund ein Fuenftel der Belege** — die Ursache liegt im Auftrag *ein Beispiel im Wortlaut*, nicht in der Marke (`labor/2026-09-06_zitattreue_ergebnis.md`). → **Am selben Tag entschieden und gebaut:** Der Eigentuemer hat gesetzt, dass nichts zitiert werden darf, was nicht gesagt wurde (`F-ZITAT-1`); die `ZITATREGEL` steht seither in allen fuenf Prompts und senkt die Quote auf **10 %** bzw. **9 %** (n = 20 je Fassung, zwei Runden). Die Pruefung normalisiert vor dem Vergleich, damit Formatierung nicht als Erfindung zaehlt. **Offen bleibt der Rest** — rund ein Zehntel — und damit die Frage, ob ein unbelegtes Zitat im gespeicherten Profil entwertet wird. → **Erledigt, geprüft am 29.09.2026:** F-ZITAT-1; novaberg-backlog-charakter.md:27 (ZITAT-ENTWERTEN abgeschlossen 06.09.2026, Betriebsbeleg 19:42 UTC); Commit 851e10a - **2026-09-06** — **Das Beziehungsprofil zitiert Wendungen, die im Material nicht stehen.** Zwei von zwanzig Laeufen fuehrten `»Hihi«` und `»Haha«` als Beleg fuer den Ton an; beide kommen in den 20 Begegnungen, die der Prompt bekommt, **null**mal vor (`labor/2026-09-06_deckung_material.py`). Ein erfundener Beleg ist von einem echten im Profiltext nicht zu unterscheiden — und der Profiltext geht ungefiltert in jeden Turn. → **Erledigt, geprüft am 29.09.2026:** F-ZITAT-1; ZITATREGEL in allen fuenf Profil-Prompts; zitate_entwerten (Commit 851e10a), novaberg-backlog-charakter.md:27 - **2026-09-05** — **Der August liegt weiter in der laufenden Chronik, obwohl der Monat abgeschlossen ist.** `novaberg-roadmap.md` traegt **155 Kapitel aus 08/2026** neben **33 aus 09/2026**; die Konvention sieht abgeschlossene Monate in `novaberg-roadmap-{jjjj-mm}.md` vor. Die Zeitraumtabelle im Kopf fuehrte bis heute **nur** die 155 und nannte den laufenden Monat gar nicht — die Zeile fehlte, nicht die Zahl. Ergaenzt; der **Umzug** steht aus und ist eine Entscheidung, keine Nebenarbeit. → **Erledigt, geprüft am 29.09.2026:** Commit 4a54cee (move August out of the running chronicle, 19.09.2026); novaberg-roadmap-2026-08.md existiert, 0 August-Kapitel in novaberg-roadmap.md - **2026-09-05** — **Der Lesepfad und der Profil-Erzeuger greifen auf verschiedene Knoten zu, und die Faszination sitzt dazwischen.** Ueber drei Betriebsturns fand die Faszination auf **jedem** gelesenen Traeger `ohne_profil` — 28 von 3.363 aktiven Knoten waren profiliert, **2 von 36** gelesenen. Zwei Ursachen, beide gemessen: Die Auswahl sortierte nach `haeufigkeit` (Wiederholung statt Wiederkehr; die profilierten trugen **56,1 gegen 5,5**) — **behoben, sie folgt seit dem 05.09. der Lesespur**. Und der Laengenfilter laesst nur **7 von 36** gelesenen Knoten durch, weil der Rest Sprechakt-Vermerke sind — **nicht behoben**, dieselbe Familie wie `DESTILLAT-SUBJEKT-SCHABLONE`. → **Erledigt, geprüft am 29.09.2026:** 65190d2 fix(quality): profile selection follows what is read (05.09.) + 954dd41 fix: the length filter cut off the fascination's own input; config.py:2382 QUALITAET_LAENGE_MIN=100; faszination_m.md:399 - ~~**2026-09-05** — **Der erste im Betrieb gerechnete Faszinationswert war 0,0, und dahinter steht eine unentschiedene Absichtsfrage.**~~ → **Entschieden am 05.09.2026 vom Eigentuemer: Lesen ist keine Beruehrung.** Die Begruendung ist grundsaetzlicher als die Frage — Faszination entsteht aus **Faeden** (hohe Salienz und Valenz), die sich ueber Themenaehnlichkeit zu **Straengen** binden; diese Straenge *sind* die vorhandenen Eindruecke, und Faszination ist ihre **Buendelung**. Wer liest, fuegt dem Eindruck nichts hinzu. Der urspruengliche Befund bleibt als Zahl gueltig: Knoten 8685 trug **6 Qualitaeten und 0 Bruecken**: dreimal gelesen, nie ueber `verbindung` entstanden. `bindung_roh(0, 0, None)` ist 0, und ein Faktor 0 loescht das Produkt. **Die Bruecke zaehlt Schreibvorgaenge, keine Lesevorgaenge** — ein Knoten, der in zwanzig Turns gelesen wurde und in keinem entstand, hat nach der heutigen Rechnung keine Bindung. `novaberg-thinking-faszination_k.md` §10.2 sagt *„Zahl verschiedener Tage, an denen der Traeger einen Turn beruehrt hat"* und laesst offen, ob Lesen beruehrt. **Gegen ja spricht §7.1** (*Lesen verstaerkt nicht*), **fuer ja**, dass Faszination keine Verstaerkung ist, sondern eine Beobachtung ueber den Traeger. Bis zur Entscheidung gilt die enge Lesart. → **Erledigt, geprüft am 29.09.2026:** novaberg-thinking-faszination_e.md:89 '§10.4 — Entschieden am 05.09.2026: Lesen ist keine Berührung' - ~~**2026-09-04** — **Der Doku-Nachzug zur Metakognitions-Ueberarbeitung (v0.2) steht aus.**~~ → **Erledigt am 04.09.2026, 17:10 UTC.** Chronik und Featureliste nachgezogen; dabei **faellt die Ampel der Phase 1 von 🟢 auf 🟠** — das ZIEL *„jeder Node schreibt seine Entscheidung"* ist an 4 von 11 Knoten belegt. Der Nachzug hat damit mehr getan als abgehakt: Er hat die Statusaenderung erst sichtbar gemacht, die im Konzept schon stand. → **Erledigt, geprüft am 29.09.2026:** 902f16f docs: the follow-up drops a traffic light instead of ticking a box (04.09.2026) - ~~**2026-09-04** — **`novaberg-memory-synapsen_k.md` §10 fuehrt die `pipeline_log`-DDL veraltet.**~~ → **Erledigt am 04.09.2026**, nachdem der Eigentuemer den Scope dafuer geoeffnet hat. Nachgezogen gegen die **laufende Datenbank** (`\d pipeline_log`), nicht nur gegen `init.sql`; beide stimmen ueberein. Der Drift war groesser als der Fund sagte: acht Spalten statt zehn, sieben Indizes statt fuenf, *„11 Werte"* statt dreizehn, `db_zugriff` statt `db_write`, kein `db_read`, kein `turn_roh` — und **die Retention-Ausnahme fuer Rohturns fehlte ganz**. Dazu ein widerlegter Satz: *„Lesen wird nicht geloggt"* (5.315 `db_read`-Zeilen im Bestand). Alles markiert statt geloescht. → **Erledigt, geprüft am 29.09.2026:** 9cefd29 docs(pipeline-log): measure against the live database and pull the DDL up (ändert novaberg-memory-synapsen_k.md) - **2026-09-04** — **`lzg_resonanz` wird nur vom Reducer gelesen.** Der Kanal traegt das gesamte gelesene LZG-Material eines Turns mit Pfad (`{anker_anzahl, sprung_tiefe, cluster, nova_sektor, erinnerungen[]}`) und ist als State-Channel ausdruecklich deklariert. Der **Dispatcher** — der letzte Node vor `END`, der ueber `state["antwort_inhalt"]` als einziger beides zugleich haette — liest ihn nicht. Damit ist die Frage *„hat Nova diese Erinnerung benutzt?"* im heutigen Graphen an keiner Stelle beantwortbar, obwohl beide Haelften vorliegen. → **Erledigt, geprüft am 29.09.2026:** adf8ffc feat(dispatcher): only what the answer took up gets reinforced (04.09.); server/graph/nodes/dispatcher.py:436 liest lzg_resonanz neben antwort_inhalt - **2026-09-01** — **Der Timeline-Agent meldet `fehler`, und die Antwort meldet Erfolg — dreimal in Folge.** `agent_dispatch/ausgabe` am 01.09.: Dreimal in Folge meldete der Agent `status=fehler` mit einem Text, der die fehlende Angabe benennt; dreimal bestaetigte die Antwort einen Eintrag, eine Zeitkorrektur und einen Bezug, die es nicht gab. Beim dritten Mal nannte sie den Fehler, bezog ihn aber auf den falschen Gegenstand. Der Fehlertext ist praezise und brauchbar; er erreicht den Nutzer nicht. **Der Nutzer verlaesst sich auf einen Kalender, in dem nichts steht.** → **Am selben Tag am Prompt-Block behoben** (`responder.aufgabe_fehler`), Zeugen `tests/test_task_block_fehler.py` gruen, Gegenprobe 5/5, **im Betrieb belegt** `[gemessen, 19:26]`: bei `status=fehler` nennt die Antwort den Fehlschlag **und** reicht die Rueckfrage des Agenten weiter (**synthetischer Messturn**, Paar `fehlerprobe`, Reiz ohne Zeitangabe — kein Gespraechsinhalt); `timeline` 83 → 83 Zeilen. Der Block war nie das Problem: Er wurde jedes Mal gebaut (203/164/189 Zeichen, `context_cut=True`) und erreichte den Prompt; sein Wortlaut nannte weder den Schreibvorgang noch seine Folge. → **Erledigt, geprüft am 29.09.2026:** b540858 fix(prompts): a failed agent says nothing was written; server/tests/test_task_block_fehler.py; Betriebsbeleg 01.09.2026 19:26 - **2026-09-01** — **Ein neuer Zeuge machte die Suite zum Schreiber im Produktivbestand.** `alle_faeden_nachfuehren` laeuft ueber **alle** Paare — das ist ihr Zweck und macht sie zum gefaehrlichsten Kandidaten fuer genau diesen Fehler. Die erste Fassung von `test_praegung_bestandslauf.py` rief sie gegen `POSTGRES_URL`, und jeder Suitenlauf faltete die vier Faeden des Messpaars mit (328: 0,853553 → 0,849432, obwohl kein Test ihn anfasst). **Am selben Tag behoben:** Der globale Weg faehrt gegen eine nachgebildete Verbindung, die echte Datenbank sehen nur Zeugen mit ausdruecklicher Faden-Kennung. Gegenprobe: Werte vor und nach einem vollen Suitenlauf zeichengleich. Dieselbe Klasse wie `SUITE-HAENGT-AM-AKTIVEN-PAAR` (20_TESTS v0.11) und die Aufgabe `A15`. → **Erledigt, geprüft am 29.09.2026:** 763f406 feat(praegung): the decay between two touches gets its beat; server/tests/test_praegung_bestandslauf.py:6-11 (nachgebildete Verbindung) - **2026-09-01** — **Ein Zeuge bewachte einen Zwischenwert, den niemand liest.** Die Zusicherung *„ohne Sog kein Zug"* prueft `beta(0) < 0,01` und wurde bei der Neukalibrierung rot, obwohl nichts kaputt war: Der Zuwachs ist `beta(g) x g x (1 - antrieb)` und traegt `g` als Faktor — `beta(0)` kann beliebig sein. Die Zusicherung haengt jetzt am Zuwachs. → **Erledigt, geprüft am 29.09.2026:** 9fa44b8 feat(salienz): the same instruction, laid on the scale that occurs; server/tests/test_salienz_zielsog.py:24-29 - **2026-09-01** — **Ein Zeuge, der nur eine Richtung verbietet, laesst das Nichts durch.** Die Zusicherung *„der Zug hebt und senkt nie"* prueft mit `assertGreaterEqual` und bleibt gruen, wenn der Zug **ganz fehlt**. Die Gegenprobe mit entferntem Zug sagte **6 rote Zeugen** voraus und zaehlte **1**. Ein zweiter Zeuge verlangt jetzt ausdruecklich das Heben. Dieselbe Klasse wie der Verbotszeuge in `20_TESTS/verbotszeuge.md`, nur an einer Ungleichung statt an einem `assertNotIn`. → **Erledigt, geprüft am 29.09.2026:** c828ca2 feat(salienz): her own pull, no longer competing under a max(); server/tests/test_salienz_zielsog.py:30-34 (zweiter Zeuge verlangt das Heben) - **2026-09-01** — **`novaberg-pixie-promotion.md` beschreibt einen Agenten, den es nicht mehr gibt.** `server/agents/promotion/` existiert nicht; der Weg vom Kurzzeit- ins Langzeitgedaechtnis laeuft ueber `SynapsenPromotionAgent`, und **der hatte kein Moduldokument**. Aufgefallen, weil ein Defekteintrag zunaechst im Dokument des abgeloesten Vorgaengers landete — der Name `pixie-promotion` passte, der Gegenstand nicht. Behoben: `novaberg-node-synapsen-promotion.md` angelegt, der Vorgaenger im Kopf als abgeloest gekennzeichnet. **Die Klasse: Ein Dokument, dessen Gegenstand verschwunden ist, bleibt auffindbar und wird beim Nachziehen gewaehlt** — es sieht aus wie das richtige. → **Erledigt, geprüft am 29.09.2026:** 38bce4b docs: a document whose subject no longer exists; novaberg-node-synapsen-promotion.md angelegt, novaberg-architecture.md:957 - **2026-09-01** — **Fuenf Register kannten die Praegungsschicht nicht, obwohl sie seit zwei Tagen gebaut ist.** Auf Nachfrage geprueft: `novaberg-pixie-promotion.md` kannte den behobenen Defekt nicht, `novaberg-node-emotionale-gravitation.md` nicht den KZG-Weg, der Backlog-Eintrag nicht den Betriebsbeleg — und der **Architekturbaum** weder `memory/praegung.py` noch die beiden Tabellen `praegung_faden`/`praegung_beruehrung`. **Alle fuenf sind Register, die aufzaehlen**, und keines nennt eine geaenderte Datei; der Doku-Nachzug entlang `git diff --name-only` fuehrt nie dorthin. Das ist derselbe Befund wie am 31.08.2026 zu den Lesson-Dateien, zwei Tage in Folge und mit derselben Ursache. → **Erledigt, geprüft am 29.09.2026:** Commit 6ed6718 'docs: five registers that did not know the imprinting layer'; novaberg-architecture.md:473 nennt memory/praegung.py - **2026-09-01** — **Der Praegungsfaden trug das Embedding des ganzen Turns, obwohl Salienz und Emotion aus einem Segment kamen.** Die Segmentwahl ist ausdruecklich damit begruendet, dass ein Mittel den einschneidenden Satz verduennt — fuer das Embedding galt derselbe Satz nicht, es kam aus `prompt_embedding`. Behoben am selben Tag. **Die Klasse ist allgemeiner als der Fall:** Wo eine Begruendung fuer eine von mehreren Groessen desselben Objekts formuliert wird, gilt sie meist fuer alle — und die uebrigen werden nicht mitgezogen. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs-archiv-charakter.md:96 (abgeschlossen); server/graph/nodes/praegung.py:68 _faden_embedding - **2026-09-01** — **Eine gerechnete Tabelle ohne die Formel daneben ist ein Pruefstein ohne Bauanleitung.** Die Verfallsfunktion der Praegung stand im Konzept als *hyperbolische Form mit Boden* und als neun Stuetzstellen, aber nie als Gleichung. Beim Bau musste sie zurueckgerechnet werden. Neun Stuetzstellen legen die Form eindeutig fest, drei haetten es nicht getan — **die Rekonstruierbarkeit war Glueck, nicht Absicht.** Formel jetzt im Konzept und im Code. → **Erledigt, geprüft am 29.09.2026:** server/memory/praegung.py:1116 (boden + (1-boden)/(1+t/H)); novaberg-node-praegung.md:118-120; novaberg-thinking-faszination_e.md:133 - **2026-08-31** — **Ein Zeuge fuhr einen Gravitationswert, den die Rechnung nicht mehr hervorbringt.** `test_gv_zeitstand.py` setzte `gravitation: 0.80`; nach der Normierung vom 30.08.2026 liegt der hoechste im Bestand vorkommende Wert bei **0,558**. Der Zeuge blieb gruen, weil sein Szenario ueber jeder Schwelle lag — dieselbe Klasse wie der Grenzwert *ueber dem erreichbaren Maximum* vom Vortag, nur umgekehrt. **Und `config.py` behauptet an der Gravitationsschwelle, der erreichbare Hoechstwert liege bei 0,287** — auch das ist vom Bestand widerlegt. → **Erledigt, geprüft am 29.09.2026:** Commit f73eb3b (test_gv_zeitstand.py auf 0.558); server/tests/test_gv_zeitstand.py:35; server/config.py:2755 (0,287 gestrichen und berichtigt, Commit e1efe7e) - **2026-08-31** — **Drei Schwellen an drei Knoten waren gegen eine Wertelage gesetzt, die sich aendern konnte, und keine hatte einen Zeugen.** Delegations-Tor, Erinnerungs-Injektion und Praegungs-Tor aenderten ihr Verhalten (18→6 von 33, 2→172 von 1178, 31→0 von 31), waehrend 2732 Tests gruen blieben. Gefunden hat es eine zweite Kontrolle mit einem Kriterium (*wer liest eine Groesse, deren Wertebereich sich verschoben hat?*), nicht der Nachzug entlang der geaenderten Dateien. **Eine Schwelle beschreibt eine Lage; ohne Zeugen auf ihre Wirkung ist sie eine Zahl, die niemand bewacht.** → **Erledigt, geprüft am 29.09.2026:** Commit f73eb3b 'feat(ei): three thresholds follow the new value range' mit server/tests/test_schwellen_nach_reizstaerke.py (Zeugen auf die Wirkung) - **2026-08-31** — **Die Kalibrierung des Emotionsverlaufs war nirgends bezeugt.** Cap, Turn-Beitrag und Filterschwelle wurden geaendert — drei Zahlen, die jeden Emotionswert des Systems verschieben —, und von 2732 bestehenden Tests brach **kein einziger**. Die konkreten Werte der Rechnung standen in keinem Zeugen; erst die sieben neuen prueften sie. Ein Charakterisierungs-Netz haette den Umbau als Verhaltensaenderung gemeldet. → **Erledigt, geprüft am 29.09.2026:** Commit cbade90 'feat(ei): the current turn carries its own intensity' mit server/tests/test_emotions_reizstaerke.py (sieben Zeugen) - **2026-08-30** — **Eine Zaehlvorschrift, die in derselben Datei steht, zaehlt ihr eigenes Beispiel mit.** Die Formregel fuer Bug-Eintraege (`novaberg-bugs.md`, 30.08.2026) zeigt das Muster `### \`KENNUNG\`` in einem Codeblock — und `grep -cE '^#{3,4} \`'` fand daraufhin **49 statt 48** Eintraege. Gefunden beim Nachrechnen der eigenen Vorschrift, nicht beim Schreiben. Abhilfe war eine Einrueckung des Beispiels. **Wer eine Zaehlvorschrift neben die gezaehlte Menge schreibt, prueft sie gegen die Menge** — sonst ist die erste Anwendung schon falsch. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs.md:20 — das Beispiel '### `KENNUNG`' ist eingerueckt und zaehlt nicht mehr mit - **2026-08-30** — **Die Bug-Register sind nicht auszaehlbar, weil sie keine einheitliche Eintragsform haben.** Gezaehlt am 30.08.2026: `novaberg-bugs.md` traegt **48** Abschnitte der Form `### \`KENNUNG\``, aber **130** `Zustand:`-Zeilen und **145** Ueberschriften, die irgendeine Kennung nennen; das Archiv **52 / 84 / 135**. Die Kopfzahlen (131 beziehungsweise 123 vor dem 30.08.) folgen keiner dieser Zaehlungen und widersprachen einander bereits. Daneben stehen Eintraege als **Tabellenzeilen ohne eigenen Abschnitt** (`KORR1`, `TEL1`, `E2`), die keine Zaehlung ueber Ueberschriften erfasst. **Die Zahl im Kopf ist fortgeschrieben, nicht gemessen** — dieselbe Klasse wie eine Abdeckung ohne Trennschaerfe. Zu entscheiden ist die Eintragsform, nicht die Zahl. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs-index.md:3 gerechnet: 387 Kennungen, 164 offen, 0 ohne Zustandsangabe, 223 abgeschlossen (72 Kurzeintraege); Formregel novaberg-bugs.md:17-40 - ~~**2026-08-30** — **Der Suchanbieter ist noch nicht gewaehlt; die Bauweise steht.** Brave scheidet aus (kein freier Tarif). Serper (Google-Ergebnisse per HTTP-API) wirbt mit *2.500 free queries, no credit card* — nach Lesart der Startseite ein einmaliges Startguthaben, kein Monatskontingent (Preisseite am 29.08.2026 nicht erreichbar, unbelegt); danach etwa 1 $ je 1.000 Anfragen (unbelegt). Einbau, sobald ein Schluessel da ist: Schluessel ueber Env (`SERPER_API_KEY` o. ae.), erster Anbieter in `tools/web/search.py`, SearXNG/Wikipedia als Rueckfall — ein Umbau deckt Sachlage-Recherche und Thinker, weil beide `web_search_manager.suchen` rufen. Seit der Suchdisziplin (29.08.) zaehlt je Turn hoechstens eine Anfrage des Thinkers.~~ → **erledigt am 30.08.2026:** Serper gewaehlt und eingebaut, `SERPER_API_KEY` ueber die `.env` und die Compose-Datei; `SerperProvider` vor `SearxngProvider` in `tools/web/search.py`, 22 Zeugen, Betrieb 08:55 UTC (1 Suche, 5 Treffer, 0 Rueckfall). → **Erledigt, geprüft am 29.09.2026:** server/tools/web/search.py:26 SerperProvider; novaberg-featureliste.md:311 (Anbieterkette seit 30.08.2026, 22 Zeugen) - **2026-08-28** — **27 weitere Aufzaehlungs-Luecken im Altbestand, freigelegt von den vier neuen C18-Paaren** (Rechenkette, Knotentabelle und State-Kanaele in `novaberg-graph.md`, KZG-Hash-Felder): `novaberg-graph.md` nennt **22 Kanaele des `ConversationState` nicht** (u. a. `gv_detail`, `haltung`, `einwandsurteil`, `tribunal_*`, `such_vektor`); die Rechenkette kennt vier Knoten-Dateien nicht (`agent_dispatch.py`, `ei_calc.py`, `enricher.py`, `thinker_cache.py`); `novaberg-mem-kzg.md` kennt `beziehungs_dynamik` nicht. Kein Aufraeum-Projekt; C18 meldet sie ab jetzt bei jedem Abschluss. Die Bauteile des Tages deckten alle vier Register — nachgezogen, nachdem die Frage nach dem Ganzen sie fand. → **Erledigt, geprüft am 29.09.2026:** Commit 1621a9a (19 State-Kanaele in novaberg-graph.md, 4 Knoten-Dateien in graph-rechenkette.md 11a, beziehungs_dynamik in mem-kzg.md); nachgesehen: gv_detail, einwandsurteil, such_vektor, enricher.py vorhanden - **2026-08-25** — **Der Linter sortierte einen Monat lang jeden Projekt-Import als Fremdimport ein.** `ruff.toml` setzte keine `src`-Zeile; Ruff suchte den Quellbaum unter `novaberg/` und `novaberg/src/`, waehrend er unter `server/` liegt. Die Folge stand in jeder Datei — `from config import ...` zwischen `redis` und `langgraph`. **Sichtbar wurde es erst beim Hartschalten von I001**, denn im geduldeten Bestand von 2600 Treffern ist eine falsche Sortierung von einer richtigen nicht zu unterscheiden. Die Klasse: **Eine Regel im geduldeten Bestand verbirgt nicht nur Verstoesse, sondern auch die Fehlkonfiguration des Werkzeugs selbst.** Am 25.08.2026 mit `src = ["server"]` behoben, 142 Dateien neu sortiert. → **Erledigt, geprüft am 29.09.2026:** Commit 71d03bc (config: the linter had been sorting every project import as third-party); ruff.toml src = ["server"] - **2026-08-25** — **Die ausgerichtete Importformatierung des Bestands ist entfallen.** `from fastapi import APIRouter` und `from graph.nodes.agent_dispatch import agent_dispatch_node` standen in vielen Dateien spaltenbuendig. Der I001-Durchgang hat das ueber 198 Dateien auf einfachen Abstand gebracht. **Es gab keine Regel dafuer und kein `isort: skip`** — gemessen: null Schutzvermerke im Bestand. Der Stil war Uebung, nicht Festlegung, und ist damit ohne Widerspruch gefallen. Die Zeile steht hier, damit der Verlust benannt ist und nicht spaeter als unerklaerte Aenderung auffaellt. → **Erledigt, geprüft am 29.09.2026:** Commit fad4633 (I001 ueber 198 Dateien); Chronik-Kapitel 25.08.2026 17:16 UTC (roadmap-2026-08.md:1220) nennt den Durchgang, nicht den Verlust - **2026-08-25** — **41 Eintraege des Defektregisters sind Verhaltensbefunde ohne Codeort** — Therapeutenton, Emote-Inflation, halluzinierte Bestaetigung, Notizen-Bezuege. Fuer keinen gibt es eine Stelle, an der man nachsaehe; jeder braucht einen Messturn. **Sie als `offen` zu fuehren verwechselt *nicht widerlegt* mit *gemessen*** — dieselbe Verwechslung, die den Bestand heute zweimal Arbeit gekostet hat. Was fehlt, ist ein eigener Zustand `unbelegt — braucht Messturn`, damit die Zahl der offenen Defekte wieder eine Aussage ueber den Code ist. → **Erledigt, geprüft am 29.09.2026:** Commit 7e386d3 (24 als 'unbelegt — braucht Messturn'); Zustandsform in novaberg-bugs.md:22, 20 Eintraege tragen ihn; Chronik 25.08. 14:20 UTC (roadmap-2026-08.md:1376) - **2026-08-25** — **`in einem Monat` loest rueckwaerts auf.** `zeit_parsen("in einem Monat", 30.07.2026)` ergibt den **01.07.2026** — 29 Tage vor der Referenz, obwohl `zukunft_bevorzugt` gesetzt ist. Zweiter Fall derselben Klasse wie `ZEIT-EINZAHL-GREIFT-DANEBEN`, der ihn nicht nennt; `in einem Tag` und `in 1 Tag` ergeben unveraendert den 01.05.2027. Die Mehrzahlformen rechnen richtig. → **Erledigt, geprüft am 29.09.2026:** novaberg-bugs-archiv-wissen.md:35-38 ('in einem Monat' = 30.08.2026 vorwaerts); utils/zeitparser.py:215 _ZEITEINHEITEN geschuetzt; Chronik 25.08. 15:25 UTC (roadmap-2026-08.md:1349) - **2026-08-25** — **Die Abschnitte `## Behobene Bugs` und `## Offene Bugs` des Bugregisters waren falsch beschriftet.** Unter *Offene Bugs* standen **56 abgeschlossene** Eintraege, unter *Behobene Bugs* nur zwei Eintraege und eine Tabelle. Beim Teilen des Registers aufgefallen; die Ueberschriften stehen als Herkunftsmarken weiter, ihre Zustandsaussage traegt jetzt die Datei. → **Erledigt, geprüft am 29.09.2026:** Commit 6c0c718 (split the register); Chronik 25.08. 09:20 UTC, roadmap-2026-08.md:1748 nennt es; Ueberschriften bleiben als Herkunftsmarken - **2026-08-24** — **Die Ausgabe-Verifikation in `verlauf_gruppieren` kann strukturell nicht feuern.** `erwartet` und `gezaehlt` pruefen dasselbe Praedikat ueber dieselbe Schleife; in 40.439 konstruierten Faellen **0** Anschlaege. Als Regressionsriegel gegen ein kuenftiges `continue` traegt sie, als Laufzeitpruefung der Daten prueft sie nichts — ihr Docstring behauptet das Zweite. Gefunden von der zweiten Kontrolle. → **Erledigt, geprüft am 29.09.2026:** server/memory/session.py:397-407: Kommentar nennt sie ausdruecklich 'Regressionsriegel und keine Datenpruefung' (Commit 75785dd) - **2026-08-24** — **Zwei Groessen waren verwechselt: Gefallen ist die stuendliche Decke, nicht der Burst-Cooldown.** `novaberg-gedankenkette_k.md` §2 trug seit dem 15.08.2026 *„Der Cooldown ist gefallen; die Frist von einer Stunde haengt seither am Burst-Zaehler, der sie als **Gedaechtnis** traegt und nicht als Sperre."* **Gemessen am 24.08.2026 ist er sehr wohl eine Sperre:** `_burst_erhoehen` setzt `BURST_TTL` bei jedem Inkrement neu, und `_burst_erlaubt` blockt in **Pruefung 1** — vor der Ausloeservergabe, weshalb die Riegelkette dann nicht einmal eine Zeile schreibt. Belegt durch zwei Zustellpausen von **exakt 1:00:33 und 1:00:17**, beide ohne Zutun des Menschen beendet. **Die Folge ist eine Frage, die als erledigt galt und wieder offen ist:** *„Wie verhaelt sich eine Kette zum Burst-Cooldown? Eine Stunde Sperre nach zwei Zustellungen wuerde jede Kette zerreissen."* Sie war durchgestrichen, **weil der Cooldown gefallen sei**. Beide Stellen sind am 24.08.2026 markiert. **Gefunden hat es die Frage nach der Vollstaendigkeit der Doku, nicht der Bau** — der Nachzug der Wand ging entlang `novaberg-eigenzeit_k.md`, und die widerlegte Aussage stand in einem Nachbardokument. → **Erledigt, geprüft am 29.09.2026:** novaberg-gedankenkette_k.md:43-47 (durchgestrichen, widerlegt 24.08.), _e.md:37 und :51 (Frage wieder geoeffnet) - **2026-08-24** — **Das Moduldokument der Zustellung kannte den dritten Ausloeser nicht und beschrieb den Burst falsch.** `novaberg-pixie.md` nannte als Entscheidungskette *„Momentum low? Session-Turns vorhanden? …"* — der am selben Tag gebaute Ausloeser `stille` fehlte —, und seine Konstantentabelle fuehrte `MAX_BURST = 2` als *„Max. Impulse pro Delivery-Zyklus"*, was ihn als Rate-Limit beschreibt statt als Cooldown. **Beides am 24.08.2026 berichtigt.** Dieselbe Klasse wie am 15.08.2026: Der Nachzug ging entlang des Konzepts, an dem gebaut wurde; das Moduldokument beschreibt denselben Code aus der anderen Richtung und lag quer. → **Erledigt, geprüft am 29.09.2026:** novaberg-pixie.md:218 (Ausloeser 3 'stille'), :315 (MAX_BURST 'Cooldown, kein Rate-Limit') - **2026-08-24** — **Das Defektregister traegt vier Eintragsformate, und jede bisherige Zaehlung kannte nur eines.** Ueber **263** Abschnitte mit Kennung gezaehlt: `**Zustand:**` **86** · `**Status:**` **21** · der Zustand steht **in der Ueberschrift** (⬜ ✅ 🔧) **111** · er steht **gar nicht** **45**. Ein Leser, der nur die erste Form kennt, meldet **57** offene Eintraege; ueber alle vier sind es **115**, dazu 103 nicht offen und **45 ohne jede Zustandsangabe**. **Die falsche Zahl stand in zwei Fassungen im Umlauf:** *86 Abschnitte, 46 offen* und *90 Abschnitte, 45 offen*. Beide waren um mehr als das Doppelte zu niedrig — und keine der beiden sah aus wie ein Fehler, weil sie ein vollständiges Register beschrieben, nur ein kleineres als das vorhandene. **Die 45 ohne Zustandsangabe sind die teuerste Teilmenge.** Sie sind weder offen noch geschlossen, und eine Ampel, die auf sie zeigt, ist weder bestätigt noch widerlegt. Werkzeug: `labor/2026-08-24_defektregister_triage.py`, es meldet sie als eigene Klasse. → **Erledigt, geprüft am 29.09.2026:** Commit 7e386d3 (45 ohne Zustand versorgt); novaberg-bugs-index.md:3 gerechnet: 164 offen, 0 ohne Zustandsangabe - **2026-08-24** — **Die Triage des Defektregisters: 115 offen, 27 Kandidaten, 69 ohne Anker.** Geprueft ueber ein Kriterium statt ueber 115 Lesungen — *hat sich der Code, den der Eintrag nennt, seit seinem Pruefstand bewegt?* **27 Kandidaten** (der Code bewegte sich, der Eintrag koennte erledigt sein) · **2 mit totem Pfad** · **17 unbewegt** (der Befund gilt ohne Lesen weiter) · **69 ohne Anker**, weil sie weder Datei noch Pruefstand nennen. **Die aeltere Generation datiert ueber Chat-Nummern**, und die ist fuer git kein Bezugspunkt; sie laeuft ersatzweise gegen den juengsten Pruefstand des Registers und traegt damit eine schwaechere Aussage. **Drei Kandidaten sind gelesen, alle drei bestaetigt offen:** `INITIATIVE-DOPPELT-BELEGT` (die Datei bewegte sich mit der Fuehrungsmass-Behebung, der Befund nicht — `gespraechsvektor.py:1087` schreibt ein Dict, `dreischicht.py:520` ein Bit, ein Name), `EVA-SEKTION-OHNE-PRUEFUNG` (jetzt mit Zahl: **15** Sektionsmarken mit nur einem `return` darunter), `ZEUGE-FLACKERT-OHNE-REPRODUKTION` (**zehn Laeufe, zehnmal gruen** — das widerlegt ihn nicht, aber es ist die erste Reproduktion und sie fand nichts). **24 Kandidaten sind ungelesen.** → **Erledigt, geprüft am 29.09.2026:** Chronik 25.08. 10:05 UTC (roadmap-2026-08.md:1711): 75 von 116 nachgeprueft, 21 geschlossen; 14:20 UTC (:1376) die 45 Alt-Eintraege - **2026-08-24** — **Die Ampelzaehlung der Featureliste war vier zu hoch, und zwar in jeder Kategorie um eins.** Fortgeschrieben stand **229 Zeilen / 103 🟢 / 36 🟠 / 52 🔴 / 38 ⚫**; gezaehlt ueber die Ampelspalte der Tabellenzeilen sind es **225 / 102 / 35 / 51 / 37**. Der Unterschied sind die **vier Legendenzeilen** in §Ampeln — sie tragen die Symbole in der **ersten** Spalte, nicht in der zweiten, und rutschen in jede Zaehlung, die auf *Zeile enthaelt Ampelsymbol* prueft statt auf *Spalte 2 ist ein Ampelsymbol*. **Der Fehler ist stabil und wandert mit**: Er steht in derselben Form im Verlaufseintrag vom 23.08.2026 und wurde von dort weitergereicht, statt neu gezaehlt zu werden. → **Erledigt, geprüft am 29.09.2026:** novaberg-featureliste.md:729 (Verlauf 24.08.2026 13:35 UTC: neu gezaehlt 225/102/35/51/37, Legendenzeilen als Ursache benannt) - **2026-08-23** — **20 von 24 destillierten Zuwendungs-Raedern in `charakter_hash` tragen nur `hoch` und `runter`.** `laeufe` und `streuung` liefert die Erhebung, aber der Stabilisierungspfad baute das Rad als **aufgezaehltes Literal** neu und liess alles Uebrige fallen; die vier Ausnahmen sind genau die Paare mit einer einzigen Erhebung, die den Pfad nicht durchlaufen. **Am 23.08.2026 an der Bauart behoben** (Fortschreibung statt Aufzaehlung) — **die 20 Bestandszeilen sind unveraendert** und bekommen ihre Metadaten erst bei der naechsten Destillation. → **Erledigt, geprüft am 29.09.2026:** Commit a9c0b2b 'feat(character): each spoke carries the median of its own runs' (Fortschreibung statt Aufzaehlung, 20 von 24 im Body) - **2026-08-23** — **Kein Test konstruierte `Bibliotheksfrage`.** Beim Hinzufuegen eines Pflichtfeldes ohne Default blieb die Suite gruen — 2175 Tests, kein einziger baut den Container, ueber den beide Eingaenge der Bibliothek laufen. Die Luecke fiel nur auf, weil die Aenderung sie haette rot machen **muessen**. → **Erledigt, geprüft am 29.09.2026:** Commit 468da53 'fix(library): every paired read filters on the observer too' legt tests/test_bibliothek_partition.py an; Bibliotheksfrage( dort :146 und :164 - **2026-08-23** — Die sieben Modell-Overrides trugen eine Anweisung, die auf einen abgeschalteten Modus zielte (*internen Ueberlegungen unter 100 Tokens*) → **am selben Tag gemessen und entfernt.** Die Formatzeilen bleiben: ohne `format="json"` liefern sie 36/36 gueltiges JSON gegen 0/36 des Defaults. → **Erledigt, geprüft am 29.09.2026:** Commit 2c80430 'prompts: a line whose subject no longer exists' - ~~**2026-08-23** — **`OLLAMA_MODEL` ist nicht in jedem Fall das Modell, das antwortet.**~~ Die Modellebene des Prompt-Laders wird mit `OLLAMA_MODEL` (= `gpu_model` des Connectors) geschluesselt; welches Modell der Chat-Worker fuehrt, entscheidet aber `MODEL_WORKER_BACKENDS` ueber die Umgebungsvariable `WORKER_BACKEND_CHAT`. Heute deckungsgleich — `ollama_gpu`, im Betriebslog belegt (*ChatWorker konfiguriert: Modell=gemma4-gpu*). **Die Reichweite ist neu:** Vor dem 23.08.2026 lud die Modellebene nie etwas. Ein Umschalten auf einen anderen Rueckhalt schoebe dem fremden Modell die Gemma-Regeln unter — dieselbe Fehlerklasse wie `OVERRIDE-NACH-CONNECTOR-STATT-MODELL`, eine Ebene hoeher. → **Am 05.09.2026 behoben, und zwar in dem Moment, in dem der Fall wirksam wurde.** `config.antwortendes_chat_modell()` loest den Namen ueber `MODELL_NACH_BACKEND` aus `MODEL_WORKER_BACKENDS["chat"]` auf; bei `ollama_gpu` liefert es unveraendert `OLLAMA_MODEL`, ein Zeuge haelt die Verhaltensgleichheit fest. Anlass war der vierte Rueckhalt (`OpenRouterProvider`): Ohne die Aufloesung haetten die **sieben Bloecke unter `prompts/gemma4-gpu/`** — Perzeption, Router, Salienz (zwei), Tribunal (drei) — einem Modell gegolten, das nie Gemma war. 5 Zeugen `tests/test_backend_kanon.py`, Gegenprobe 1/1. → **Erledigt, geprüft am 29.09.2026:** server/config.py:4255 antwortendes_chat_modell() ueber MODELL_NACH_BACKEND; tests/test_backend_kanon.py - ~~**2026-09-05** — **Dieselbe Schluesselung ein zweites Mal: die Wahl des Reasoning-Aufraeumers.**~~ `tools/thinking_normalizer.py::get_thinking_normalizer` verglich `OLLAMA_MODEL` gegen die Liste der Modelle mit content/thinking-Split. Bei einem fremden Rueckhalt haette er weiter gegriffen — ein Aufraeumer fuer einen Split, den das antwortende Modell nicht erzeugt. **Ein zweiter Schalter dafuer existierte** (`LLM_PROFILE`) und waere die Wiederholung des Fehlers gewesen: eine Entscheidung, zwei Schalter, und der zweite wird beim Umstellen vergessen. → **Am selben Tag behoben**, dieselbe Quelle wie der Prompt-Lader; 4 Zeugen `tests/test_thinking_normalizer_modellwahl.py`, Gegenprobe 2 rot bei vorhergesagter 1. **Gefunden von einem Kriterium, nicht von einem zweiten Durchgang** — der Frage, welche Stellen im Baum ein Ollama-Backend voraussetzen. → **Erledigt, geprüft am 29.09.2026:** server/tools/thinking_normalizer.py:174 liest antwortendes_chat_modell; tests/test_thinking_normalizer_modellwahl.py - ~~**2026-09-05** — **Das Beziehungsprofil vertauscht die Sprechrichtung.**~~ Aus der Perspektive des Menschen destilliert, ergab es *„Er adressiert Nova als 'Chef'"* — die Figur nennt den Menschen so, nicht umgekehrt. → **Am selben Tag behoben, und die Ursache lag im Prompt.** Von den vier Deutungsebenen nannten **drei keinen Sprecher** (`NAEHE`, `HIERARCHIE`, `TON`), und `NAEHE` erklaerte ausgerechnet die **Anrede** zum Merkmal; das Material des Beziehungsprofils traegt beide Sprecher, weil der Umgang sonst nicht lesbar waere, und die einzige Anrede darin stammte vom Gegenueber. Ueber den Bestand aller vier Profil-Prompts gezaehlt: **5 von 9 Ebenen ohne Traeger**. Nach der Schaerfung, fuenf Laeufe je Fassung auf demselben Material: **alt 3/5 verdreht, neu 0/5**. Zeuge am **gerenderten** Prompt: `tests/test_destillation_prompt_traeger.py` (6), Gegenprobe 1/1. → **Erledigt, geprüft am 29.09.2026:** server/tests/test_destillation_prompt_traeger.py (6 Zeugen am gerenderten Prompt), Eintrag durchgestrichen - **2026-09-05** — **Das Herkunftsfeld der Rad-Messung nennt das falsche Modell — dritte Fundstelle derselben Klasse.** `agents/charakter/agent.py:379` und `:1064` schreiben `modell = PIXIE_ANALYSE_MODEL` in `charakter_rad_messung`. Das ist das **konfigurierte** Analyse-Modell des Connectors, nicht das antwortende. Gemessen am 05.09.2026: Die Rad-Laeufe um 18:28 UTC — **24 Minuten nach der Umstellung auf das Fernmodell** — tragen alle `qwen36-cpu`. **Bei einem Herkunftsfeld wiegt das schwerer als bei einem Aufraeumer**: Es soll gerade sagen, wer die Messung erzeugt hat, und `F-RAD-2` stuetzt sich darauf. Die Aufloesung gibt es seit heute (`config.antwortendes_chat_modell`), aber nur fuer den Chat-Worker; das Rad laeuft ueber `background_analyse`. Eine Verallgemeinerung `antwortendes_modell(rolle)` waere die Abhilfe. → **Erledigt am 06.09.2026:** `config.antwortendes_modell(rolle)` verallgemeinert die Aufloesung auf alle drei Worker-Rollen; `antwortendes_chat_modell` ruft sie nur noch durch. Die drei Stellen in `agents/charakter/agent.py` nennen seither `antwortendes_modell("background_sprache")`. **Gemessen vor dem Umbau: 24 Erhebungen** seit dem Wechsel trugen `qwen36-cpu`, obwohl DeepSeek gemessen hat. **Ein zweiter Fehler stand daneben und war folgenlos:** Das Feld trug die Konstante des *Analyse*-Modells, waehrend alle Profile und beide Raeder ueber `_llm_call` mit `modus="sprache"` laufen — im aktiven Connector tragen beide denselben Wert, deshalb fiel es nie auf. **Der Bestand ist am selben Tag berichtigt** — 24 Zeilen auf `deepseek/deepseek-v4-flash-0731`, nach Freigabe; die beiden Zeitfenster ueberlappen seither nicht (`qwen36-cpu` bis 05.09. 00:26, `deepseek` ab 18:28). 6 Zeugen `tests/test_antwortendes_modell.py`, Gegenprobe 1 rot, Suite 3178. → **Erledigt, geprüft am 29.09.2026:** server/agents/charakter/agent.py:328, :436, :1131 nennen antwortendes_modell("background_sprache"); config.py:4208; tests/test_antwortendes_modell.py - **2026-09-05** — **Der Preiswaechter des Fernmodells laeuft von Hand.** `tools/openrouter_price_watch.py` haelt Preis, Rabatt, Kontextfenster, Quantisierung und die gefuehrten Parameter gegen den lebenden Endpunkt und liefert Rueckgabewert 1 bei jedem Unterschied — **aber niemand ruft ihn**. Der Rabatt von 64,3 % traegt die Wirtschaftlichkeit des Fernmodells, und die Schnittstelle nennt **keine Frist**; ein Rueckfall auf den Listenpreis verdreifachte den Eingangspreis und faende sich in der Rechnung. Ein Eintrag im Tageslauf oder ein Zeitplan waere die Abhilfe. → **Erledigt am 06.09.2026:** `pruefen()` aus `main()` herausgeloest, das Modul nach `services/price_watch.py` umgezogen (der Tageslauf ist Geschaeftsablauf und darf Infrastruktur nicht importieren — A8b; unter `tools/` haette der Waechter entweder keinen Aufrufer oder einen, der die Schichtgrenze bricht), als **zehnter Schritt** des Tageslaufs gerufen, mit eigenem Audit-Eintrag. Der Befund geht nach Redis (`PREIS_BEFUND_KEY`, TTL 2 Tage) und reist mit der naechsten Antwort in den Client, der daraus ein Fenster macht — der Tageslauf hat keinen Event-Loop und kann die Clients nicht selbst ansprechen. → **Erledigt, geprüft am 29.09.2026:** server/agents/synapsen_decay/agent.py:499 ruft services/price_watch.py als zehnten Schritt des Tageslaufs - **2026-09-19** — **Das Aufräumen nach Läufen mit Prüf-Nutzern erfasst das Gedächtnis nicht.** `[gemessen 19.09.2026]` Die Aufräum-Skripte der Reihen `labor/2026-09-18_angebot_wortlaut/`, `2026-09-19_angebot_bedarf/` (und ihrer Vorlage `2026-09-18_angebot_betrieb/`) löschen Timeline, Notizen, Sachlage-Objekte und Hash-Kopien — nicht die KZG-Einträge in Redis und nicht die Gedächtnisknoten, zu denen sie befördert wurden: `lzg_knoten` trägt Knoten von `wl1`, `wl2`, `wl3` (`kzg_quell_key kzg:wl…`, 18.09.2026, 23:00–23:24 UTC). Die Paare sind getrennt, das Paar des Eigentümers ist nicht berührt; der Bestand der Prüf-Paare wächst mit jedem Lauf. - **2026-09-19** — ~~**Die Commit-Wände lassen einen Commit durch, wenn `git diff --cached` scheitert.**~~ `[gelesen 19.09.2026]` Die beiden Prüfskripte leiten den Fehler nach `/dev/null` und suchen mit `grep` im leeren Ergebnis; ein gescheitertes `git` sieht aus wie ein Index ohne Python-Dateien. Gefunden beim Umbau der Wände in die `pre-commit`-Kette, nicht repariert. **Erledigt am 19.09.2026:** Beide Wände prüfen zuerst den Rückgabewert von git und blockieren mit dessen Meldung; gemessen an einem kaputten Index, der vorher in beiden Wänden durchging. - **2026-09-15** — ~~**Ein ISO-Datum mit Wochentag wird in Pfad 2 als Jahr-Tag-Monat gelesen.** `[gemessen 15.09.2026, Parser direkt]` *„morgen, Montag um 8 Uhr"* am 31.07.2026 ergibt den **08.01.2026 um 08:00**: Block 0b schreibt `morgen` als `2026-08-01`, Pfad 2 gibt den Datumsteil `2026-08-01 Montag` an dateparser, und der liest ihn mit `DATE_ORDER: DMY`. Ein Tag über 12 macht das Datum ungültig und ergibt nichts — deshalb blieb ein solcher Ausdruck im Betrieb am 14.09. (`2026-09-15` mit einem Wochentag) folgenlos. Die Uhrzeit stimmt, also greift auch die Prüfung auf die genannte Uhrzeit nicht; der Plausibilitäts-Check verwirft erst ab zwei Jahren.~~ → **Behoben am 15.09.2026, 19:13 UTC, und größer als notiert.** Nicht nur mit Wochentag: Jedes ISO-Datum, das Pfad 2 oder 3 an dateparser gab, las er als Jahr-Tag-Monat — *„9 Uhr morgen"* am 31.07. ergab den 08.01.2026 (`[gemessen]` von der zweiten Kontrolle, 384 erzeugte Formen mit der Uhrzeit vor dem Tageswort). Das ISO-Datum geht jetzt als Tag.Monat.Jahr an dateparser; danach tragen alle 17 928 Ergebnisse mit richtiger Uhrzeit auch den richtigen Tag. **Richtig gelesen hätte es den Widerspruch aufgedeckt:** ein Tageswort mit einem anderen Wochentag hätte am Montag, dem 14.09., den Dienstag gewählt. Seither ergibt ein Tageswort, dessen Tag nicht der genannte Wochentag ist, kein Datum — 735 von 735 erzeugten Fällen wie erwartet (`novaberg-tool-timeparser.md` §5). - **2026-09-15** — ~~**Eine Uhrzeit mit Punkt als Trenner ergibt den Tag zur Sprechzeit — mit Genauigkeit Minute.** `[gemessen 15.09.2026, Serverlog und Parser direkt]` Am 14.09.2026 kam derselbe Termin binnen einer Minute in drei Formulierungen beim Parser an: mit Punkt als Trenner, als nackte Stunde nach „um", mit „Uhr". Nur die dritte löste richtig auf; seit dem 15.09.2026 auch die zweite. Die erste scheitert weiter: Block 2 liest in *„übermorgen um 9.00 Uhr"* die `00 Uhr` als Stunde, der Text wird `9.0:00`, und Pfad 3 liefert den Tag **zur aktuellen Uhrzeit**. **Schlimmer als der Fall davor:** Weil `0:00` im Text steht, meldet der Vektor `uhrzeit_erkannt = True` — der Termindienst legt die falsche Uhrzeit mit `precision = minute` an. `novaberg-tool-timeparser.md` §8.~~ → **Behoben am 15.09.2026, abends.** Der Punkt als Trenner liest wie der Doppelpunkt (`novaberg-tool-timeparser.md` §4 *Vor Block 0*): `[gemessen]` über 1440 Kombinationen aus Stunde, Minute, Tagesangabe und Form Punkt gleich Doppelpunkt, alle mit der genannten Uhrzeit, 0 Ausnahmen (die Fassung davor: 12 gleich, 184 Ausnahmen). Der wörtliche Ausdruck aus dem Serverlog löst auf die genannte Stunde auf. - **2026-09-15** — ~~**Ein ungültiger Kalendertag mit Uhrzeit bricht den Parser ab — seit dem 15.09.2026 auch ohne „Uhr".** `[gemessen 15.09.2026, zweite Kontrolle und Parser direkt]` Pfad 1b baut `datetime(jahr, monat, tag, …)` ohne Prüfung: *„am 31.09. um 10 Uhr"* und *„31.09. nachmittags"* werfen `ValueError: day is out of range for month` schon in der Fassung davor. **Die Stunde ohne „Uhr" führt jetzt mehr Formen dorthin:** Über sieben ungültige Tage in neun Formen warfen vorher **14**, jetzt **63** — *„am 31.09. um 10"* und *„30.02. um 9"* ergaben vorher `None`. Pfad 2 setzt eine Minute über 59 ebenso ungeprüft ein (`minute must be in 0..59`); das erreichen seit dem 15.09. auch Ausdrücke mit der Einzahl *nachmittag*, die mit *nachmittags* schon warfen. **Wohin es fällt:** `agents/timeline/crud.py` fängt nicht, erst `graph/nodes/agent_dispatch.py` (`logger.exception`, `AgentResult` mit `fehler`) — statt der Rückfrage *„Konnte kein Datum erkennen"*. Pfad 1c prüft Stunde und Minute vor dem Bau und meldet; Pfad 1, 1b und 2 nicht.~~ → **Behoben am 15.09.2026, abends.** Ein unmöglicher Wert ergibt kein Datum und eine Warnzeile, vor den Pfaden (`novaberg-tool-timeparser.md` §5 *Vor den Pfaden*). `[gemessen]` Die 63 Kalendersonden: 0 Ausnahmen; 12 000 erzeugte Eingaben: 0 statt 315 in der Fassung vor dem 15.09.2026. Die erste Fassung der Prüfung las Uhrzeiten mit Grenzen, Pfad 2 ohne — 17 Eingaben warfen weiter, bis die Prüfung mit dem Muster des Pfades las. - **2026-09-13** — ~~**Die Formpruefung der Sachlage laesst mehr aus als `gedeckt` und `offen`.** `_validate_artifact` prueft Kopffelder nur auf Vorhandensein und normalisiert allein `traeger`, `kritikalitaet`, `sprecher`. Ungeprueft bleiben ausserdem `quellen`, `plausibilitaet`, `recherche` (liefert das Modell sie, bleiben sie ueber `setdefault` stehen), der Typ von `akut` (`"false"` gilt als wahr), `name`, `klasse` und die Kopffelder; der Vorgaenger aus Redis (`sachlage_load`) wird nicht erneut geprueft. Die vorige Blase geht bis auf `quellen` in den Prompt, auch mit `recherche`. **Der Blocker-Eintrag unterschaetzt die Lesestellen:** `sachlage_resolver.py:412` (`gedeckt[offene] = …`) und `sachlage.py:1048/1056` (`gedeckt.get`) werfen bei einer nicht leeren Liste, statt weiterzulaufen; ungenannt sind `sachlage_resolver.py:541` (`carry_sources`) und das Panel (`sachlage_panel.py:263`, `.items()`). Die Normalisierer stammen aus den Scheiben 8–10, nicht 7–9.~~ → **erledigt am selben Tag.** `graph/nodes/sachlage_form.py` haelt jedes der genannten Felder, auch die vorige Blase beim Laden und den Lesepfad des Kontext-Tabs; die Lesestellen sind am Fall vom 12.09. bezeugt. Die Berichtigungen dieses Fundes (Scheiben 8–10, die werfenden Lesestellen, `carry_sources` und Panel) stehen als Nachtrag am Eintrag `LAGE-FORMPRUEFUNG-UNVOLLSTAENDIG` in `novaberg-bugs-archiv.md`. - **2026-09-13** — ~~**Konzept und Code verstehen den Wert in `gedeckt` verschieden.** `novaberg-thinking-lage_k.md` §3 zeigt als einzige Formdefinition `{"anlass": "erwähnt im Turn"}` — eine Herkunft. Der Sachlage-Prompt verlangt *„was dazu schon gesagt wurde"*, der Aufloeser schreibt den Inhalt (`gedeckt[offene] = inhalt`), Plausibilitaet und Verfasser-Block lesen ihn als Inhalt; die Herkunft steht seit Scheibe 6 und 9 in `quellen` und `sprecher`. Frames- und Pipeline-Konzept trennen Wert und Quelle ebenso. **Einen Slot „belegt, Inhalt unbekannt" kennt keines der drei Konzepte.** Dazu ist §3 nicht nachgezogen (kein `thema`, keines der Felder der Scheiben 4–10), §5 nennt Scheibe 4 und die Kritikalitaet noch als nicht gebaut, und §4 heisst *„Die drei Scheiben"* bei zehn.~~ → **erledigt am selben Tag.** Der Eigentuemer hat entschieden: Der Wert in `gedeckt` ist die Angabe selbst, **ohne Wert ist eine Eigenschaft offen** — einen Slot *belegt, Inhalt unbekannt* gibt es nicht. `novaberg-thinking-lage_k.md` ist nachgezogen: §3 Nachtrag am Artefakt-Beispiel (Wert und die Felder der Scheiben 4–11), Festlegung 1 eingeloest, §4 mit Nachtrag zur Ueberschrift, §5 markiert. Der Sachlage-Prompt zeigt seither *»die Angabe selbst, etwa 33 Millisekunden«*. - **2026-09-03** — ~~**Nova hat auf negative wissenschaftliche Reize kein negatives Register.**~~ → **Von der zweiten Kontrolle aufgehoben, 20:35 UTC.** Gegen den ganzen Bestand statt gegen vier Turns: **35 negative Knoten von 2825 im echten Paar (1,24 %)**, Trauer und Frustration seit Ende Juli. **Das Register existiert.** Und der Nullbefund war keiner: Das Faden-Tor gibt es erst seit dem 31.08.2026, seither sind im echten Paar **22 Gelegenheiten** aufgelaufen — **Erwartungswert 0,27**. Null ist das wahrscheinlichste Ergebnis. Was bleibt, ist eine Aussage ueber **diese vier Reize** und nicht ueber Novas Repertoire. Die urspruengliche Fassung lautete: Messreihe ueber vier Turns gegen das Produktivsystem (Testpaar, Pixie pausiert, 49,5–63,1 °C): viermal `neutral` oder `neugierig`, **kein einziges Mal Sektor 3, 5, 6 oder 7**. Selbst die Provokation *„das ist gescheiterte Wissenschaft"* wurde `neugierig` — ihre Antwort gibt dem Vorwurf recht und bleibt sachlich; den Verlust der Voyager-Signale machte sie zu *„einem seltsamen Gedanken"*. **Das erklaert den Korpus** (26,2 % Sektor 8, 16,2 % Sektor 1, 47,9 % neutral, 3,0 % negativ) **und verschiebt den offenen Punkt**: Die vier wartenden Bauteile der Praegungsschicht warten nicht auf ein Tor-Problem und nicht auf die richtigen Themen, sondern darauf, dass Nova ueberhaupt ein negatives Gefuehl entwickelt. **Ein Befund ueber Perzeption und EI-Calc, nicht ueber die Praegung.** - **2026-09-01** — ~~**`config.py` behauptet an der Gravitationsschwelle, der erreichbare Hoechstwert liege bei 0,287.**~~ → **widerlegt und am Kommentar berichtigt.** `[gemessen]` ueber **71 aktivierte** Gravitationspunkte im `pipeline_log`: Hoechstwert **0,6640**, Mittel 0,3518, **21 davon ueber 0,40**. Die Zahl war aus 56 Turns vor der Normierung hochgerechnet. Die Begruendung des Bugs `EMGRAV-SCHWELLE-TOT` bleibt richtig, seine Vorhersage ueber die normierte Skala nicht. **Was die Zahlen nicht sagen:** Die 71 sind die *aktivierten* Punkte und per Bauart alle ueber 0,18 — ueber die abgelehnten fuehrt der Log nichts, eine Aussage ueber andere Schwellen ist damit nicht zu haben. - **2026-09-01** — ~~**Die Salienz steht in 5 von 13 Torzeilen auf exakt 0,442**~~ → **aufgeklaert am selben Tag, und es ist kein toter Wert.** Nachgerechnet an den `salienz_formel`-Zeilen des Paars: In allen fuenf traegt `sprachlich` 0,500 und der Erregungszuschlag 0,150 — **beide Eingaenge sind quantisiert**, und die Reize waren einander aehnlich. Die zwei Groessen, die dabei variierten, konnten das Ergebnis gar nicht bewegen: `ziel_gravitation` (0,0885 bis 0,3815) verschwindet unter dem `max()` gegen 0,500, und `salienz_human` (0,300 bis 0,500) fiel aus, weil dem jungen Paar das destillierte Zuwendungsrad fehlt (`gewichtung_quelle: fehlt`, 15 Zeilen) — **ohne `nutzer_gewichtung` entsteht kein Pflicht-Pfad**. Damit bleibt genau ein Eingang uebrig, und der stand fuenfmal gleich. **Die Formel rechnet; die Stichprobe war zu eng.** - **2026-09-01** — ~~**Der zweite Antrieb des Eigen-Pfads entscheidet in 0,14 % der Faelle.**~~ → **am selben Tag umgebaut.** Er konkurriert nicht mehr im `max()`, sondern zieht auf die Luecke nach oben (`novaberg-salienz-berechnung_k.md` §4a). Die Messung bleibt als Nulllinie stehen: Mittel **0,034** gegen **0,692**, entscheidend in **4 von 2786** Zeilen. - **2026-08-29** — ~~**Zwei Nutzer-Nachrichten waehrend eines laufenden Turns werden zu einem Turn zusammengelegt.** Ein Betriebszeuge schickte den zweiten Satz, waehrend der erste Turn noch lief (07:27:56 UTC); in Redis steht danach *ein* Nutzer-Turn mit beiden Saetzen, ohne Antwort.~~ **Nachgelesen am 29.08.2026, 08:32 UTC:** Das Zusammenlegen ist die Bauart des Prompt-Eingangs (*»Block mit 2 Nachricht(en) genommen«* um 07:28:10 — Nachrichten, die waehrend eines Turns ankommen, bilden den naechsten Turn). Der zusammengelegte Turn (`277cfe78`) lief im HumanGraph durch (Salienz, KZG-Key, Session-Turn 12 um 07:28:19) und **ging um 07:28:29 im uvicorn-Reload verloren**, den der Edit an `graph/nodes/sachlage.py` ausloeste — »Event-Consumer beendet« vor dem CharacterGraph, `pipeline_log` endet beim KZG-Schreiben, kein Verfasser, keine Antwort; er lag nicht hinter Pixie. Eigenschaft der Umgebung (`--reload` im Dockerfile) — dieselbe Klasse wie der Abbruch laufender Recherchen durch einen Edit (04.08.); Messregel seither: kein Betriebsturn neben einem Edit. Offen bleibt aus dieser Zeile nur der Nebenbefund am Zeugen: das Fertig-Signal gehoert an die `nachrichten_id` der Quittung, nicht an ein Zeitfenster. - **2026-08-29** — ~~**Drei Bloecke des Verfasser-Prompts sprechen das Modell als den Charakter an.** Der Verfasser bekommt einen Auftrag ueber Person A und Person B — er ist der Schauspieler, der Charakter der Auftrag (§2.2b, 14.08.). Dagegen: `verfasser.aufzeichnungen.txt` (*»Beziehst du dich darauf … Ich habe hier Aufzeichnungen«*, *»woran du dich erinnerst«*), `verfasser.eigene_aufzeichnungen.txt` (*»Das Folgende hast du selbst nachgesehen … es ist deine Arbeit«*, *»das habe ich nachgelesen«*), und der `[GEDAECHTNIS]`-Block (`graph/format/memory_context.py`: *»Du fuehlst dazu: …«*, *»Sie ist dir eingefallen ueber: …«*); der GV-Prompt traegt einmal *»dein«*. Gefunden beim Umstellen des `[SACHLAGE]`-Blocks auf die Namen des Lesers (29.08. spaet) — derselbe Fehler, drei Bloecke frueher.~~ → **Umgesetzt am 30.08.2026, 07:35 UTC:** der Gedaechtnisblock in den Namen seines Lesers (`format_memory_entries(…, leser=…)`, zweiter Kanal `memory_context_verfasser`), die Aufzeichnungs-Bloecke in dritter Person ueber Person A; 13 Zeugen `tests/test_verfasser_reader_names.py`, Betrieb *»Du fuehlst«* 0 ×. Das *»dein«* des GV-Prompts bleibt: der Gespraechsvektor ist ein Analyse-Knoten, sein *»du«* ist der Analysator (`novaberg-node-verfasser_k.md` §2.2ab). - **2026-08-29** — ~~**Die Websuche liefert fuer deutsche Wissenschaftsanfragen Rauschen.** Turn 07:27 UTC: die erste Suche des Auflösers (Scheibe 8) zu *»Neutronenstern-Rotation Rotationsfrequenz des schnellsten bekannten Pulsars«* brachte 3 Treffer — alle drei BeamNG-Mod-Seiten (BMW 318).~~ **Gemessen und behoben am 29.08.2026, 08:32 UTC:** Bing lieferte in vier von vier Proben zehn Treffer ohne Bezug zur Anfrage (LaTeX-Forum, Telekom-Hilfe, drmax.ro — bei `de`, `de-DE`, `en-US`, `all`); alle uebrigen Engines antworteten mit CAPTCHA, 403 oder Rate-Limit, auch Mojeek in der Probe. Seither: Bing abgeschaltet, die Volltextsuche der Wikipedia ueber ihre API eingeschaltet (searxng-Konfiguration `settings.yml`, Sicherung `settings.yml.vor-mojeek-2026-08-29`). Derselbe Code-Pfad aus dem Server-Container (`web_search_manager.suchen` + `relevant_hits`): Pulsar-Anfrage **3 von 3** relevant (`Neutronenstern#Rotationsfrequenz`, `Pulsar`, `Vela-Supernova`), Gammablitz 3 von 3; eine Alltagsanfrage (Bahn-Sparpreis) bleibt leer — leer statt Rauschen. Wikimedia sperrt bei einem Schub von sechs Anfragen in zwei Minuten fuer 180 s (»Too many requests«); eine Suche je Turn liegt darunter. Der Wortlaut-Filter bleibt. - **2026-08-29** — ~~**Der `[GEDAECHTNIS]`-Block des Verfassers kennt den Sprecher seiner Eintraege nicht.** `graph/format/memory_context.py::_format_kzg` rendert `[KZG] {themen} (Salienz): {inhalt}` und laesst `meta['beobachter']` fallen (`_format_lzg` gibt ihn aus); die LZG-Resonanz (`memory/lzg_knoten.py::anker_retrieval`) laedt die Spalte `beobachter` nicht und zitiert den Eintrag woertlich in Anfuehrungszeichen — ein Nutzersatz erscheint als Novas Erinnerung; die Session-Zusammenfassung verlangt die Rollen im Prompt nicht (`memory/session.py`). Der Sprecher steckt nur im Verdichtungs-Few-Shot (*»Der Nutzer …«* / *»{traeger} hat erklaert …«*), also im Modell-Artefakt. Gefunden bei der Erkundung zu Scheibe 9; dort nicht gebaut.~~ → **Umgesetzt am 29.08.2026, spaet:** `speaker_label` (`user` → Nutzer, `assistant` → Nova, sonst *unbekannt* mit Warnung) in der KZG-Zeile und hinter jedem Resonanz-Zitat; `_knoten_details_laden` liest `beobachter`, `spreading_lesen` reicht es durch (`anker_retrieval` las die Spalte schon — der Fund nannte die falsche Funktion, die Resonanz verlor sie im Spreading). Bestand: 3029 `assistant` / 219 `user`. **Berichtigt:** Die Session-Zusammenfassung benennt die Sprecher seit dem 24.08. (`sprecher_bezeichnen`); dieser Teil des Funds war ueberholt. Zeugen `tests/test_memory_context_speaker.py` (8). - **2026-08-29** — ~~**Der Verfasser-Stoff traegt nicht, wer den Satz gesagt hat.** Auf *»Das muss ganz schoen knallen bei einem Kollaps«* eroeffnet Nova mit *»Das muss ja eine gewaltige energetische Entladung sein«* — die Umformulierung des Nutzersatzes als eigener Einstieg statt eines Anschlusses. Zweimal in zwei Turns (07:04, 07:24).~~ **Umgesetzt am 29.08.2026, 08:47 UTC, als Scheibe 9 des Lage-Konzepts:** Der Verfasser kannte den Sprecher (Kopfblock *»PERSON B sagt …«*) und schrieb *»Person A stellt fest …«* — es fehlte die Fuehrung; jetzt fuehrt der Herkunftsblock des Nutzer-Turns (*ES IST SEIN GEDANKE*), und jede gedeckte Eigenschaft traegt ihren Sprecher (`nutzer` / `nova`) mit Zeile im `[SACHLAGE]`-Block. Labor zwei Arme 5 × 2: Zuschreibung an Person B 0/10 → 10/10, Echo 3/10 → 0/10; Fortfuehrungsfall 2/3 mit `nova` am Rekordwert. **Offen aus derselben Erkundung:** `graph/format/memory_context.py::_format_kzg` verwirft `meta['beobachter']` beim Rendern des `[GEDAECHTNIS]`-Blocks, und `memory/lzg_knoten.py::anker_retrieval` laedt `beobachter` gar nicht — Nutzer- und Nova-Destillate stehen dort ununterscheidbar (eigene Zeile unten). - **2026-08-29** — ~~**Der Thinker verbraucht das Suchbudget, und die Sachlage-Recherche geht leer aus.** Betriebsmessung 18:59–19:47 UTC, 20 Turns: der Thinker rief `web_search` **23-mal** (bis zu drei je Turn, deutsch und englisch, einmal *»Verbindung Einsteinkreuz 40-Hz Gamma Oszillationen Gehirn«*) und laedt jeden ersten Treffer nach; die Wikipedia-API — seit dem Vormittag die einzige antwortende Engine — sperrte zweimal fuer 180 s (*»Too many request«*). Die eine Suche je Turn der Sachlage (8 im Lauf) traf **1-mal**; sechs Suchen brachten 0 Treffer. Dazu Pixies Recherche-Agenten im selben Budget. Wer die Suche teilt, teilt die Sperre.~~ → **Umgesetzt am 29.08.2026, 22:44 UTC:** eine Suche je Turn (`THINKER_WEBSUCHE_MAX_JE_TURN`, Budget im `ThinkerToolCache`), und die Sachlage-Treffer bedienen die erste (`thinker.py::prior_research`); 22 Zeugen, Betrieb drei Turns: 1 / 1 / **0** Maschinenaufrufe, der dritte aus der Sachlage bedient (`novaberg-node-thinker.md` §4.4). Pixies Recherche-Agenten stehen weiter im selben Budget der Maschine, aber nicht im Turn. - **2026-08-29** — ~~**Der Thinker sucht englisch gegen eine deutschsprachige Engine.** Betriebsturn 22:39 UTC: auf *»Wie weit ist der naechste bekannte Magnetar … entfernt?«* suchte der Thinker *»nearest known magnetar distance«* (`search.py` sendet `language: de`, die einzige antwortende Engine ist die deutsche Wikipedia-Volltextsuche) und lud als ersten Treffer `Liste_von_Doppel-_und_Mehrfachsternen` nach. Seit der Suchdisziplin ist das die **einzige** Suche des Turns; die Regelzeile verlangt den Suchbegriff »kurz und praezise«, nicht in der Sprache der Engine. In der Kettenmessung waren 7 von 23 Suchbegriffen englisch, ein achter gemischt.~~ → **Behandelt am 29.08.2026, 23:20 UTC, mit Befund:** Regelzeile, `[WEBSUCHE]`-Block und Werkzeugbeschreibung verlangen Deutsch (3 Zeugen). **Das Labor zeigt keinen Unterschied** — Arm A 0 von 8 englisch, Arm B 0 von 7: Von den 7 englischen Begriffen der Kettenmessung waren 5 Zweit- und Drittsuchen nach leeren Treffern, die das Budget ohnehin abschneidet, nur 2 von 17 Erstsuchen. Die Zeilen bleiben als Fuehrung, unbelegt in der Wirkung; der Rest (~10 % englische Erstsuchen) wird im Betrieb beobachtet (`novaberg-node-thinker.md` §4.4). - **2026-08-29** — ~~**Der Rueckfrage-Gegenstand kennt die Rollen nicht.**~~ → **am selben Vormittag umgesetzt als Scheibe 8** (`SACHLAGE-SCHEIBE-8-TRAEGER`); offen bleibt der zweite Teil, der Verfasser-Stoff ohne Sprecher. Der Befund: Turn 07:04 UTC: Der Nutzer wirft ein *„Das muss ganz schoen knallen bei einem Kollaps"*; die Sachlage liest richtig (`nutzerziel`: *er moechte eine Einschaetzung zur Energieentladung erhalten*, akutes Objekt »Kollaps« mit offener Eigenschaft »Energieentladung«), und `question_target` (Scheibe 3) macht genau diese Eigenschaft zum Rueckfrage-Gegenstand — Nova fragt den Nutzer *„wie sieht das Knallen aus?"*, obwohl er sie gerade danach gefragt hat. Scheibe 3 wurde an Alltagsframes entworfen (Geburtstag → wer/wann: nur der Nutzer weiss es); im Wissenschaftsgespraech liegt das Wissen bei Nova, und eine offene Eigenschaft ist dann ein Gegenstand zum **Beantworten**, nicht zum Fragen. Das Signal steht im Artefakt selbst (`nutzerziel` *erhalten/wissen* gegen *mitteilen/planen*; seit Scheibe 6 auch, ob das Gedaechtnis es deckt) — `question_target` liest es nicht. Dazu im selben Turn: Nova eroeffnet mit der Umformulierung des Nutzersatzes (*„Das muss ja eine gewaltige …"*) statt mit einem Anschluss (*„Ja, das muss …"*) — der Verfasser-Stoff traegt nicht, wer den Satz gesagt hat. Nachbar der offenen Entscheidung »die Frage als Deckung« (28.08.). - **2026-08-29** — ~~**Der Rueckfrage-Gegenstand haengt nach dem Themenwechsel am alten Kurzziel.**~~ `question_target` nimmt das **staerkste** aktivierte `kurzfristig`-Ziel (`ei/gravitation.py` sortiert nach Typ und Aktivierungsstaerke) — das ist die Gravitation selbst, und die ist gewollt: Nova hoert, was sie zieht. Der Rest ist Bauart der Scheibe 2: Ein neues Thema hat in seinen ersten zwei Turns noch kein Kurzziel (Strecke 2/2), also zieht das alte. **Der Fund ist die Form, nicht die Gravitation:** Die Rueckfrage-Zeile stellt den Zug als Gegenstand einer Frage an den Nutzer dar (*»wie es mit Magnetar weitergeht«*), als setzte sie seine Sache fort — Novas eigener Zug muesste als ihrer hoerbar sein (*»mich zieht es noch zu den Magnetaren«*), nicht als Rueckfrage zu seiner. Entscheidung offen. Betriebsmessung: *»wie es mit Magnetar weitergeht«* noch bei den Gamma-Oszillationen (Turn 9–10), *»Neutronenstern-Verschmelzung«* bei den Gravitationslinsen (Turn 18), obwohl je Thema ein eigenes Kurzziel entstanden war (sechs im Lauf). 17 von 20 Gegenstaenden kamen aus dem Kurzziel, keiner aus einer `nutzer`-Eigenschaft — im Wissensgespraech traegt die Rueckfrage nur der Ziel-Zweig, und der zeigt falsch. **Umgesetzt 21:40 UTC (Lage-Konzept §4, Scheibe 3 Nachtrag):** `question_target_origin` traegt die Herkunft, die Rueckfrage-Zeile fuehrt bei eigenem Zug; Labor 5/5 statt 0/5 als Novas Schritt mit Wahl, vorher verbog der Stoff das Nutzerthema. Die Gravitation ist unangetastet. - **2026-08-28** — ~~**Die Ziel-Liste des Drive-Tabs liest die Motivation aus dem Tagesfeld, die Gravitation seit dem Abend aus Anker und Alter.**~~ → **erledigt am 29.08.2026** (`_goals_live` in `api/drive.py`, dieselbe Bewertung, beide Werte nebeneinander; Chronik). Der Befund: `api/drive.py::goals_lesen` (Zeile ~142) hat einen eigenen SELECT auf `ziele` (aktiv und inaktiv, fuer die Anzeige) und zeigt `motivation`, wie der Tageslauf sie zuletzt schrieb; `ziele_aktive_laden` rechnet sie seit dem 28.08.2026 beim Lesen (`ziele_live_bewerten`). Fuer ein kurzfristiges Ziel steht im Tab damit bis zu einen Tag lang 0,70, waehrend die Gravitation mit 0,5 → 0,15 rechnet und es irgendwann gar nicht mehr sieht. Gefunden von der zweiten Kontrolle (Kriterium: wer liest `motivation` aus `ziele`); die uebrigen Leser (Dispatcher, Wissensluecken) gehen ueber den Lader. Abhilfe: dieselbe Bewertung auf die Anzeige-Liste, mit beiden Werten nebeneinander. - **2026-08-25** — ~~**Zwei Werte werden für den Responder-Prompt aus `external` geholt und stehen nie darin.**~~ → **am 25.08.2026 aufgelöst und entfernt: beide Werte erreichen den Prompt bereits auf einem anderen Weg** — `external.character.relationship` als `nutzer_beziehung` in `[ZWISCHEN BEIDEN]`, `external.emotion.arousal` in der Regie. Es waren doppelte Extraktionen aus zwei dokumentierten Umbauten, keine Lücke. Ursprünglicher Befund: `beziehungs_kontext` (`external.character.relationship`) und `current_arousal` (`external.emotion.arousal`) in `graph/nodes/responder.py:467` und `:470` — beide in derselben Zuweisungsgruppe wie `emotions_vektor`, `sprach_stil`, `gespraechs_modus`, `current_emotion`, `beziehungs_dynamik`, die alle in den Prompt gehen. **Die Gruppe sieht vollständig aus, und zwei ihrer sieben Zeilen wirken nicht.** Ob der Prompt sie tragen soll oder ob die Zeilen Reste sind, ist ohne die Absicht nicht entscheidbar — beides ist ein anderer Auftrag. - **2026-08-25** — ~~**Zwei Stellen verwerfen still und zählen es nicht.**~~ → **am 25.08.2026 behandelt:** Die Score-Lücke in `agents/notizen/suche.py` nennt jetzt die Zahl der verworfenen Treffer und ihre Scores; der Dry-Run in `tools/migrate_kzg_nova_nova.py` zeigt die Inhaltsvorschau, die er aufbereitete. `services/event_consumer.py:828` war **kein** Befund — `internal` wird in `_antwort_nutzlast_bauen` selbst gelesen, die Zeile war überflüssig und ist entfernt. Ursprünglicher Befund: `agents/notizen/suche.py:173` bindet `abgeschnitten = treffer[trennlinie:]` und loggt danach nur die Gewinner-Gruppe — **wie viele Treffer die Score-Lücke gekostet hat, steht in keiner Zeile**. `services/event_consumer.py:828` holt `result_internal = result.get("internal")` unter einem Kommentar, der beschreibt, was damit geschehen soll (Novas Wahrnehmung ihrer eigenen Antwort ins WebSocket-Payload); es geschieht nicht. Dazu `tools/migrate_kzg_nova_nova.py:82`, wo `inhalt` samt eigenem `except`-Zweig für eine Log-Zeile aufbereitet wird, die fehlt. **Alle drei sind über `F841` sichtbar geworden und bewusst stehengeblieben** — der ungelesene Wert ist hier der Zeiger auf den fehlenden Leser. - **2026-08-25** — ~~**Sechsmal wird der Vorher-Zustand geladen und nie protokolliert.**~~ → **nach `novaberg-bugs-archiv.md` als `VORHER-ZUSTAND-OHNE-SPUR`, am selben Tag behoben.** Ursprünglicher Befund: `vorher = _read_by_id(target_id)` steht in `agents/charakter_identitaet/crud.py` (265, 298, 362) und `agents/direktiven/crud.py` (288, 345, 394) jedes Mal **unmittelbar vor einem `UPDATE ... SET aktiv = FALSE`** — und wird danach nirgends gelesen. Das Muster ist in zwei Modulen identisch, also kein Versehen an einer Stelle, sondern eine **Absicht ohne Empfänger**: Genau das, was ein Löschvorgang für die Nachvollziehbarkeit festhalten müsste, wird geholt und fallengelassen. Gefunden über `F841`; die sechs Zuweisungen sind deshalb bewusst stehengeblieben, weil Löschen die Absicht mit entfernt. - **2026-08-25** — ~~**Der Prompt-Consumer ist die einzige der vier Hintergrundaufgaben, die beim Herunterfahren nicht abgeräumt wird.**~~ → **nach `novaberg-bugs-archiv.md` als `PROMPT-CONSUMER-OHNE-ABRAEUMEN`, am selben Tag behoben, mit Strukturzeuge über den AST.** Ursprünglicher Befund: `main.py` legt vier Tasks an — `delivery_task` (366), `consumer_task` (381), `prompt_task` (395), `pipeline_log_task` (404). Drei davon werden später gelesen; `prompt_task` nicht, und nur deshalb meldet `F841` ihn. **Er faehrt Pfad 1 hinter der Eingangs-Queue**, also den Weg, auf dem jede Nutzeraeusserung ankommt. Nicht gelöscht: Die Zuweisung ist die einzige starke Referenz auf den Task; ohne sie darf die Laufzeit ihn einsammeln. - **2026-08-24** — ~~**Drei Verlaufs-Renderer nennen den Anlass nicht.**~~ → **am 24.08.2026 behoben**, alle drei: `24/24` Inhalte und `8/8` Impulsmarken, gemessen ueber die echten Turns. Der Verfasser wechselte dafuer von der Nachrichtenfolge auf einen benannten Textblock — in einer `assistant`-Nachricht haette die Marke nur in den Inhalt gekonnt, und das ist die gescheiterte Iteration 1 aus `novaberg-pixie_l_kontamination.md`. Urspruenglicher Befund: `memory/kontext.py::_turns_formatieren`, `graph/nodes/enricher.py::_suchtext_bauen` und der `messages`-Aufbau in `graph/nodes/verfasser.py` tragen jeden der 24 Turns (kein Verlust), aber **0 von 8** Impulsen sind dort als solche erkennbar — sie stehen als `ASSISTANT:` / `Nova:` / `{"role": "assistant"}`. Person-eindeutig, Anlass unbekannt. `memory/kontext.py` ist live (`agents/recherche/agent.py:533`, `lagebeurteilung.py:44`). Gefunden von der zweiten Kontrolle, die alle **sieben** Renderer des Baums suchte statt der zwei, an denen der Defekt auffiel. - **2026-08-24** — ~~**Der Matrix-Kanal ist aus dem Repositorium nicht herstellbar — sechs Teile fehlen, und keins davon ist ein Geheimnis.**~~ → **am selben Tag behoben, fuenf von sechs; der Befund bleibt als Beleg stehen.** Nachgezaehlt am Tag, an dem Matrix der einzige Fernkanal wurde: - **2026-08-23** — ~~**Novas Eigeninitiative endet zwei Stunden nach dem letzten Wort des Menschen, und zwar dauerhaft.**~~ → **Am 24.08.2026 behoben** — der `else`-Zweig ist ein dritter Ausloeser (`stille`) statt eines `continue`. Im Betrieb belegt: `Trigger 'stille'` → Riegelkette `[wollen+0.96 frequenz+-0.86 ruhe+] entschieden=keiner` → Impuls zugestellt, 1293 Zeichen. **Der Befund bleibt als Beleg stehen.** Der Zustellschleife fehlt ohne `last_activity:{user_id}` **jeder** Ausloeser: `momentum` triggert nur nach einer Anfrage, und der Timeout-Zweig haengt an genau diesem Schluessel — steht er nicht, faellt die Schleife in `else: continue` (`services/shadow_delivery.py:928-971`). Gesetzt wird er **allein** vom Nutzer-Turn (`services/prompt_consumer.py:213`), mit `ex=7200`. **Ein Impuls kann sich nicht selbst anstossen.** Gemessen am 23.08.2026: `momentum:meister` und `last_activity:meister` beide leer, keine `session:*`-Schluessel, **letzter Impuls-Turn am 15.08.2026** — neun Tage, bei 489 Eintraegen auf dem Stapel. Nach einem einzigen Nutzer-Turn feuerte der Ausloeser sofort wieder, alle 30 Sekunden. - **2026-08-20** — ~~Die Zusicherungs-Pruefung an der Vertrauensgrenze zaehlt heute 244 Befunde gegen 239 am 17.08.2026 — obwohl fuer sie eine harte Wand auf den Commit-Index laeuft. Ob die Wand in diesem Zeitraum lief, ist ungeprueft.~~ → **Am 21.08.2026 mit dem Auslesefall geprueft: Sie haelt nicht.** Ein Commit mit einer oeffentlichen Funktion an einer Datenbankgrenze ohne Zusicherung ging durch. Die Ursache steht in der Datei der Aufgabe; der Fund selbst ist damit beantwortet und die 244 erklaert. Behoben, beantwortet oder umgezogen — der Beleg steht jeweils im Eintrag. Sie stehen hier und nicht unter *Offen*, weil ein erledigter Fund die Zahl der offenen verfälscht; gelöscht werden sie nicht, weil sie erklären, warum der Bestand aussieht, wie er aussieht. - **2026-08-28** — ~~**Das 🫧-Kontext-Panel war registriert, aber nicht in der Toolbar.**~~ → **Beim Bau des Gespraechskontext-Tabs gefunden und im selben Zug verdrahtet.** `client/ui/panels/sachlage_panel.py` (seit dem Morgen, Scheibe 1) stand in der `PanelRegistry`, nicht aber in `_TOOLBAR_PANELS` des Hauptfensters — kein Button, und der ausstehende Client-Zeuge konnte nie gelingen. Seit 28.08. abends als »🫧 Gesprächskontext« hinter dem Gespraechsvektor; das Panel zeigt jetzt alle fuenf Scheiben (`GET /drive/kontext`). - **2026-08-28** — ~~**Die Rueckkehr zu einer frueheren Blase beginnt bei null, und das Konzept verspricht eine Notiz, die das Artefakt nicht hat.**~~ → **Am selben Abend gebaut: Scheibe 5.** Der Knoten sucht vor dem Call mit dem Prompt-Embedding die naechste `sachlage_verlauf`-Zeile eines anderen Themas und gibt sie dem Prompt als fruehere Sachlage mit; Labor: Rueckkehrsaetze 0,40 auf die alte Blase, fremd ≤ 0,16, Objektname und Deckung 3/3 woertlich fortgefuehrt (`labor/2026-08-28_sachlage_wiederaufnahme_messung.py`). Die „Notiz im Artefakt" aus §3a ist das zweite Objekt — im Konzept so festgehalten. 8 Zeugen, Suite 2478, Gegenprobe 1/3/1/1. - **2026-08-28** — ~~**`thema` der Sachlage wird zur Meta-Beschreibung, wenn der Turn das Thema wechselt.**~~ → **Am selben Abend behoben.** Aus den echten Turns nachgestellt: 5/5 »Themenwechsel« mit einem `gegenstand` ueber den Nutzer — kein Ausreisser. Prompt-Regel (`F-PROMPT-1`, positiv): `thema` und `gegenstand` benennen die Sache, bei einem Wechsel die neue; danach 5/5 »Neutronensterne« und ein Gegenstand, der die Sache nennt (`labor/2026-08-28_sachlage_thema_wechsel.py`). Zeuge am gerenderten Prompt, Suite 2470, Gegenprobe 1 rot. Die Zeile vom 17:15-Turn in `sachlage_verlauf` bleibt, wie sie ist — ein Faktum (`F-VERFALL-1`). - **2026-08-28** — ~~**Das kurzfristige Ziel verfaellt in Stunden, aber der Verfall laeuft einmal am Tag.**~~ → **Am selben Abend behoben.** Der Befund war richtig (Takt 86400 s, `hintergrund_log` 25.–27.08. je ~19:58 UTC; Ziel 28576 haette ~25 h gelebt). Abhilfe in der typunabhaengigen Form: `ziele_aktive_laden` rechnet die Motivation beim Lesen aus Anker und Alter fuer jeden Typ mit Halbwertszeit (`ziele_live_bewerten`, `halbwertszeit_tage_fuer_typ`) und liefert nichts unter `ZIEL_DEAKTIVIERUNGS_SCHWELLE` (jetzt in `config.py`); der Tageslauf bleibt als Haushalt. 10 Zeugen in `test_kurzziel.py`, Suite 2464 gruen, Gegenprobe 2/1/6 rot; Messung 19:52 UTC (`labor/2026-08-28_ziele_live_verfall_messung.py`): 7 aktive Zeilen, 5 geliefert, Ziel 28576 live 0,545 bei 1,1 h, zwei mittelfristige (id 4, 7) live 0,148/0,146 unter der Schwelle bei Feldwerten 0,153/0,155 vom Vortag. Konzept `novaberg-thinking-drive_k.md` §7.1 markiert. - **2026-08-21** — ~~**Die KZG-Schwelle 0,40 trennt nicht: Auf eine Rueckfrage ohne Gegenstand kommen 10 von 10 Plaetzen zurueck, und fuenf verschiedene Leerfragen liefern auf 50 Plaetzen 40 verschiedene Erinnerungen.**~~ → **Am selben Tag gemessen und behoben.** Der Befund war richtig und seine Ursache eine andere als vermutet: Die Schwelle war nicht zu niedrig, sondern **wirkungslos** — der schlechteste Eintrag des gesamten Bestandes erreicht gegen eine beliebige Frage 0,48 bis 0,54, die Schwelle lag also unter dem Boden des Raums. 40 Fragen mit bekannter richtiger Erinnerung ergaben **0,72** als guenstigsten Wert, der weder eine unbezogene noch eine unaufgeloeste Frage durchlaesst; er kostet **eine** von 29 lieferbaren richtigen Antworten. Am Bestand vorher/nachher: 10 unbezogene Fragen 100 → **0** Eintraege, 3 anaphorische Rueckfragen 30 → **0**, 3 einschlaegige 30 → **30**. Der Rest zum NMCP-Dienst `dateien` steht unter *Offen*. - **2026-08-21** — ~~**`kzg_entries_retrieve` nennt im Docstring die Similarity-Schwelle 0.5, der Code verwirft bei `similarity < 0.40`.**~~ → **Am selben Tag behoben.** Beide Zahlen sind fort; die geltende steht an genau einer Stelle, in `config.py`, und der Docstring nennt den Namen statt eines Wertes. - **2026-08-20** — ~~**Die `Stand:`-Kopfzeile ist in vier Registern zu einer zweiten Chronik in *einer* Zeile geworden.**~~ → **Behoben am selben Tag, ~17:05 UTC.** Gemessen am 20.08.2026: Featureliste **11.001 Zeichen = 19 %** der Datei, Fundliste **34.653 = 17 %**, Bugs 12.096, Backlog 10.678. Das Wachstum ist neu und schnell — die Kopfzeile der Featureliste stand am 18.08. auf **134** Zeichen und am 20.08. auf 11.001, davon 8.250 an einem Tag; sie trägt 25 verschachtelte `Zuvor ~HH:MM UTC:`-Glieder. **Die Klammern sind dabei unpaarig geworden** (Featureliste 18 auf / 15 zu, Fundliste 21/15, Bugs 14/8, Backlog 19/13) — wer mitten in der Kette einsteigt, findet kein Ende. **Die Roadmap macht es anders und ist der Gegenbeleg:** Ihre Kopfzeile ist 35 Zeichen lang, ihre Chronik steht im Körper, und sie ist mit 552 KB die größte der fünf. **Ein Folgeschaden ist bereits belegt:** Ein zeilenweise arbeitender Prüfer legt bei jeder Fortschreibung den gesamten Altbestand als Neuzugang vor und schlug deshalb am 20.08. auf committeten Bestandstext an. **Nicht einfach löschbar:** Ein Teil des Inhalts steht nur dort — *„die Antwortlänge hat drei Einflüsse"* kommt in der Roadmap **null Mal** vor. Zu entscheiden ist, ob die Kopfzeile eine Standzeile bleibt und die Kette in den Körper wandert. **Entschieden am 20.08.2026: Die Kette wandert in den Körper, die Kopfzeile ist ein kleiner Block.** Umgesetzt am selben Tag: **138 Glieder** hinter `Zuvor`- und `Davor`-Marken in vier Abschnitte *Verlauf des Standes* gelöst, Wortlaut unverändert, je Punkt ein vorangestelltes Datum. Die längste Kopfzeile misst jetzt **38** statt 34.263 Zeichen; die Klammerbilanz jeder Kette steht auf **0**. **Der zweite Marker `Davor` (23 Glieder) war nicht erinnert, sondern gemessen** — gefunden von einer Klammerbilanz, die nicht aufging. Das Fortschreiben besorgt seither ein Script, das die Kopfzeile ersetzt statt sie zu verlängern und eine über 200 Zeichen ablehnt. - **2026-08-20** — **Der Verfasser liest die Haltung nicht, obwohl drei ihrer fünf Größen seine Seite betreffen.** In `graph/nodes/verfasser.py` kommt `haltung` **null Mal** vor; sein Prompt trägt als Maß nur die Landschaft (*„MASS. Der Umfang folgt der Landschaft unter [GESPRAECHSVEKTOR]“*). **Fachlich sind drei der fünf:** `umfang` — das Konzept sagt wörtlich, der Verfasser liest, *wie viel es zu sagen gibt*, der Responder, *wie viel davon sie sagt*; `fragen` — eine Rückfrage ist Inhalt und keine Tonlage; `draengen` — ob ein Lösungsvorschlag im Text steht, ist eine Inhaltsentscheidung (*„nicht auf Lösungen drängen“*). `naehe` und `waerme` sind reiner Ton und gehören dort, wo sie sind. **Der Beleg steht im Auftrag des Verfassers selbst:** Er soll bestimmen, *„was sie feststellt, was sie offen lässt, was sie zurückfragt“* — also genau `fragen` und `draengen`, und zu beidem bekommt er keine Vorgabe. **Das Konzept fordert es und begründet damit die Bauform des Graphen:** *„Ein eigener Knoten, vor der Verzweigung zum Verfasser. Beide lesen das Ergebnis aus dem Zustand“* — der Knoten sitzt aus einem Grund dort, den bisher niemand einlöst. **Dazu ein zweiter Befund:** `HALTUNG-OHNE-LESER` steht seit dem 13.08.2026 als geschlossen, geschlossen durch **einen** der beiden vom Konzept geforderten Leser. **Wirksam wurde es an diesem Tag:** Die Halbierung der Zeichenkorridore trifft nur den Responder; der Verfasser stellt weiter dieselbe Materialmenge zusammen, und gekürzt wird hinterher. → **Zur Hälfte eingelöst am selben Tag:** Der Verfasser bekommt den Block `[MASS]` mit Menge, Rückfrage und Vorschlag; `naehe` und `waerme` bleiben beim Responder. Offen bleibt daran, **ob es seinen Stoff ändert** — das ist im Betrieb ungemessen und steht als `MASSBLOCK-IM-BETRIEB-UNGEMESSEN` im Backlog. - ~~**2026-08-20** — **Die Blockkarte des Dateien-Konzepts zeigt 5 Blöcke statt rund 80 — ein durchgestrichener Codezaun bringt den Zähler aus dem Takt.** `struktur_analysieren` erkennt Zäune mit `^```` am Zeilenanfang und schaltet je Treffer um. `novaberg-agent-dateien_k.md` §1a.2 stellt eine verworfene Prompt-Fassung als **durchgestrichenen** Codeblock dar: Der Öffner heißt `~~```` und wird nicht erkannt, der Schließer heißt ` ```~~ ` und wird erkannt. Ab da läuft die Umschaltung invertiert; der Rest der Datei gilt als Zauninneres. **Gemessen am 20.08.2026** über die Leseschicht: `novaberg-architecture.md` 58 Blöcke bei 60 Überschriften, `novaberg-bugs.md` 263 — `novaberg-agent-dateien_k.md` **5** bei 83 Überschriften. Die Zahl der `^```` -Zeilen ist dort **17**, also ungerade. **Wen es trifft:** den Zoom (§6.4) und die Blockkarte im Index — für ausgerechnet das Dokument, das diesen Dienst beschreibt. Offen ist auch, welche Seite falsch liegt: ein Markdown-Leser sähe den Öffner, dieser Zähler nicht.~~ → **Behoben am 20.08.2026 als `BLOCKKARTE-STILL-HALBIERT`** (novaberg-bugs.md). Die Zahl war 5 von **83**, nicht von 80. Die Abhilfe sitzt nicht am Zaun-Regex, sondern an der Bilanz: Eine ungerade Zahl Zäune ist ohne Kenntnis des Inhalts als Defekt erkennbar und wirft seitdem. Dabei kam ein zweiter Ausgang hinzu — eine Endung ohne Erkenner wirft ebenfalls, statt eine leere Karte zu liefern. - **2026-08-19** — **Die Bibliothek hat DREI Konsumenten, nicht zwei — der dritte wurde beim Umbau mitgezogen, ohne gemessen zu sein.** Neben der Bestellung (kurze Frage) und dem Rückweg (Ø 833 Zeichen Kontext) fragt der **Enricher** über `WissenManager` mit `state["such_vektor"]` — und das ist `verschiebung.vektor`: **die eingebettete Nutzeräußerung, verschoben um die aktivierten Ziele und den Vorturn-Cluster** (`ei/gravitation.py::wahrnehmung_verschieben`, Formel `e_anfrage + Σ(e_ziel × Aktivierung) × Faktor`). Also die Frage plus Novas Motivation, nicht die nackte Frage — und cluster-abhängig unterschiedlich stark verschoben. Er ruft dieselbe `AutonomousWissenRepository.suchen` und wurde damit auf die Themenvektoren und die Schwelle 0,50 mitgestellt, obwohl **beide für die Frage-Anfrage kalibriert sind**. Aus dem Betriebslog über rund 32 Stunden: **5 Treffer**, Kosinus **0,402 bis 0,555** — bei der neuen Schwelle wären vier davon weggefallen. Der erste echte Turn nach dem Umbau lieferte für diesen Weg **null** Treffer (`Bibliothek=ja`, keine `WissenManager`-Zeile). **Zwei Einschränkungen, die dagegen stehen:** Die Kosinus-Werte sind nach dem Zielwechsel nicht mehr vergleichbar, und mindestens einer der fünf Alt-Treffer war belegt falsch (0,4700 für einen Fall ohne einschlägigen Treffer, gemessen am 19.08.). ~~**Ob der Weg besser oder schlechter geworden ist, ist damit offen**~~ — **am selben Tag nachgemessen und beantwortet: er ist deutlich besser.** 30 Fragen mit bekannter richtiger Antwort, gegen den echten Lesepfad: Themenvektoren **22/30 auf Rang 1** (Kosinus-Median 0,7620, 29/30 über der Schwelle), das alte Ziel **1/30** (Median 0,2145, **0/30** über der Schwelle). Der alte Zustand konnte praktisch nichts liefern, was die 5 Treffer in 32 Stunden erklärt. **Die Verschiebung kostet dabei 0,0000** — bei dieser Art Frage aktiviert kein Ziel: Die Stärke ist `similarity × motivation`, das stärkste von 7 aktiven Zielen erreicht 0,3903 × 0,8 = 0,312 und bleibt unter der Aktivierungsschwelle. **Im Betrieb belegt** (20:17 UTC): `WissenManager: 3 Bibliothekstreffer (Cosinus 0.730 bis 0.629, Schwelle 0.5)`. - **2026-08-19** — **Eine neu gebaute Messzeile zählte das Schema statt der Belegung und wäre in genau ihrem Anwendungsfall stumm geblieben.** Der Anbieter-Umschlag protokollierte `sorted(message)` nach `model_dump()`. Pydantic gibt **alle deklarierten Felder** zurück, auch die leeren — im Bestand immer dieselben sechs (`content`, `images`, `role`, `thinking`, `tool_calls`, `tool_name`), gleich was drinsteht. Gemessen am laufenden Client: alle sechs deklariert, **zwei belegt**. **Eine Liste, die sich nie ändert, kann keinen Befund tragen** — und der Zweck der Zeile war, beim nächsten Leerfall einen dritten Kanal sichtbar zu machen. Behoben; gezählt wird jetzt, was belegt ist. **Die Klasse ist allgemeiner:** Wer eine Menge protokolliert, prüft, ob sie sich zwischen den Fällen unterscheiden **kann**. - **2026-08-19** — **Die Ausgabe-Verifikation des Anbieters prüfte auf `dict` und stieg bei einem Pydantic-Modell aus — eine neu gebaute Prüfung, die genau das verschluckte, wofür sie gebaut war.** Der Ollama-Client liefert `ChatResponse`, ein Modell mit Indexzugriff und `.get`, das sich überall im Bestand wie ein Dict verhält; der bestehende Code greift deshalb seit jeher mit `response["message"]` und `response.get(...)` darauf zu und merkt nichts. Ein `isinstance(..., dict)` daneben meldet **Vertragsbruch**, wo keiner ist. **Die Klasse ist allgemeiner als der Fall:** Eine Typprüfung auf die konkrete Klasse statt auf die benutzte Fähigkeit schlägt bei jedem Objekt an, das sich richtig verhält. Behoben über `model_dump()`; der Kommentar im Bestand (*„`message` ist ein Dict. Kein Objekt-Zweig"*) beschreibt weiterhin eine Annahme, die so nicht stimmt. - ~~**2026-08-18** — **Der Wackelzeuge ist gefangen, und seine Ursache ist die Uhr.** `tests/test_charakter_kzg_auswahl.py::test_fremde_perspektive_bleibt_draussen` rechnet seinen Erwartungswert **zweimal**: `_schluessel(1.0)` baut den Schlüssel aus `int(time.time() * 1000)` und wird einmal beim Aufbau des Bestandes und einmal in der Zusicherung gerufen. Tickt dazwischen eine Millisekunde, unterscheiden sich die beiden um genau eins. **Gemessen am 18.08.2026, im Wortlaut:** `AssertionError: 'kzg:meister:nova:1786999319272' != 'kzg:meister:nova:1786999319273'`. **Häufigkeit gemessen: 1 von 4 vollständigen Suite-Läufen rot, einzeln 2 von 2 grün** — die volle Suite ist langsam genug, dass die Millisekunde umspringt. **Die Regel dahinter ist allgemeiner als dieser Zeuge:** Ein Erwartungswert, der aus der Uhr entsteht, wird **einmal gerechnet und festgehalten**, nie zweimal hergestellt. **Nicht behoben** — ein fremder Zeuge wird gemeldet und nicht im Zug eines anderen Auftrags repariert.~~ → **Behoben am 18.08.2026** (`ZEUGE-ERWARTUNG-AUS-DER-UHR`). Die Abhilfe sitzt **am Helfer, nicht am Zeugen**: `SCHLUESSEL_BASIS` wird beim Laden des Moduls einmal gelesen, `_schluessel()` rechnet gegen sie. Damit ist der Fall auch fuer jeden kuenftigen Aufrufer geschlossen, nicht nur fuer diesen einen. **Der betroffene Zeuge kann seine eigene Abhilfe nicht bewachen** — ob er rot wird, entscheidet die Laufzeit der Suite —, deshalb steht daneben ein zweiter, der den Fall deterministisch herstellt. Gegenprobe 1 vorhergesagt / 1 gezaehlt; **10 von 10 vollstaendigen Laeufen gruen** (vorher 1 von 4 rot). - ~~**2026-08-18** — **Die Ja/Nein-Deutung der Torwächter vergleicht Teilzeichenketten und liest damit Zustimmungen als Ablehnung.**~~ → **Umgezogen am selben Tag** nach `novaberg-bugs.md` als **`ZUSTIMMUNG-GILT-ALS-ABLEHNUNG`**, mit Reproduktionsweg und Schließbedingung. Der ursprüngliche Wortlaut steht dort; hier bleibt die Zeile durchgestrichen stehen, damit die Herkunft des Fundes auffindbar bleibt. **Ursprünglicher Wortlaut:** `_standard_interpretieren` in `agents/charakter_identitaet/resume.py` prüft `any(kw in text for kw in ...)` gegen eine Liste, die `ne` enthält — und `ne` steckt in `gerne`. **Gemessen am laufenden Bestand, 18.08.2026:** `gerne` → `abgelehnt`, `meinetwegen` → `abgelehnt`, `ja, gerne` → `abgelehnt`; `ja bitte`, `na klar` und `ok` treffen richtig. Das ist keine Randformulierung, sondern eine der häufigsten Zustimmungen im Deutschen: Der Mensch bestätigt am Tor, die Änderung unterbleibt, und die Meldung sagt ihm, er habe abgelehnt. **Gefunden wurde es nicht am Bestandscode, sondern an einem Neubau derselben Bauart** — der Wurzeln-Dienst hatte die Liste übernommen, und ein echter Turn mit `Ja, gerne.` endete ohne Schreibung. Dort ist es am selben Tag auf Wortgrenzen umgestellt; die Bestandsstelle bleibt unberührt — **keine Reparatur im Vorbeigehen**. Kandidat für `novaberg-bugs.md` mit Kennung: Der Reproduktionsweg ist drei Zeilen lang, und der Ausfall ist stumm. - ~~**2026-08-18** — **Die Zuordnung des Planners trifft über Teilzeichenketten und wird beim ersten Dienstpaar mit gemeinsamem Wortstamm falsch.**~~ → **Am selben Tag behoben, bevor der Fall eintrat** (`_manager_zu_target`): Ein exakter Treffer schlägt jeden unscharfen, und Mehrdeutigkeit ergibt keinen Gewinner statt des alphabetisch ersten. Gegenprobe 4 vorhergesagt, 4 gezählt. **Der Eintrag hat damit getan, wofür er geschrieben wurde:** Er stand da, bevor der zweite Dateien-Dienst gebaut wurde, und war beim Bau die erste Handlung. Ursprünglicher Wortlaut: `graph/nodes/planner.py:354` wählt den Manager mit `manager.ziel in target_lower or target_lower in manager.ziel`. **Bei der Aufnahme kollidierte nichts** (Stand vor dem Bau des Wurzeln-Dienstes am selben Tag), mechanisch geprüft: Die damals sieben registrierten Ziele (`charakter_identitaet`, `direktiven`, `fakten`, `kzg`, `notizen`, `timeline`, `wissen`) sind paarweise keine Teilzeichenketten voneinander. **Der Dateien-Verbund bringt das erste Paar mit**: Bei `management_target = "dateien_wurzeln"` trifft `"dateien" in "dateien_wurzeln"`, und die Registry wird in der Reihenfolge des sortierten Verzeichnis-Scans durchlaufen — `dateien_manager` stünde vor `dateien_wurzeln_manager`. Der lesende Dienst schluckte damit jede Freigabe-Anfrage, sobald beide existieren, und der Fehler sähe wie eine falsche Klassifikation aus statt wie eine Namenskollision. **Heute kein Defekt, ab dem zweiten Dateien-Dienst einer** — festgehalten vor dem Bau, nicht danach. - **2026-08-16** — **Die eigenen Impulse der Figur wurden als Äußerungen des Menschen in sein Charakterprofil destilliert.** Ein Impuls legt seinen Text in dasselbe Feld `pipeline_log.inhalt->>'user_prompt'` wie eine Nutzeräußerung; `_turns_laden` filterte nicht auf `herkunft`. Gemessen am produktiven Paar über die 40 gelesenen Turns: **25 Impulse mit 36 183 Zeichen (95,4 % des Materials)** gegen **15 echte Turns mit 1761 Zeichen (4,6 %)**. Rechnet man die Antwortseite hinzu, entstand das Profil **des Menschen** aus einem Material, das zu **98 %** von der Figur stammte. Die Diktion belegt es unabhängig: Von 138 Einträgen über 1500 Zeichen tragen **88** das Vokabular der Figur (Entropie, Thermodynamik, ontologisch) und **2** ein Fragezeichen; von den kurzen tragen 126 eines. **Die Marke `herkunft` liegt seit dem 05.08.2026 in derselben Zeile, die falsch gelesen wurde.** → **Behoben am 16.08.2026**: `_turns_laden` verlangt `herkunft='nutzer_turn'`, das Ausgenommene wird gezählt. **Ein Impuls hat kein Gegenüber und gehört deshalb in keines der beiden Profile** — Entscheidung vom 16.08.2026. - ~~**2026-08-16** — **Auch ohne Impulse bleibt das Material des Kern-Hash zu 90 % von der Figur.** Nach dem Herkunftsfilter gemessen, dieselben 40 Turns: **4404 Zeichen vom Menschen gegen 41 791 von der Figur — Faktor 9,5.** Der Median einer Nutzeräußerung liegt bei **138 Zeichen**, der einer Antwort bei 763; über die als `nutzer_turn` markierten Turns sind es **109** gegen 1055. Beide Profile lesen weiterhin denselben Text; getrennt wird nur die Anweisung darüber, und die macht **1,4 % des Prompts** aus (rund 60 unterschiedliche Zeichen gegen 87 000 Material). Dazu eine Asymmetrie in der Beschriftung: Der Träger *„Nova"* kommt im Material 40-mal als Sprecherlabel vor, der Träger *„der Nutzer"* **null-mal** — der Mensch ist dort ausschließlich als *„Gegenueber"* markiert, ein relativer Begriff, dessen Bezugspunkt die Anweisung gerade verschiebt.~~ → **Behoben am 17.08.2026.** Gegenstand ist die eigene Seite — für den Menschen seine Äußerungen, für die Figur ihre Antworten —, und jede Zeile trägt den Namen des Trägers. Gemessen am Produktivpfad: Material beider Perspektiven **nicht mehr identisch**, Prompt des Menschen 88 517 → **6351** Zeichen, Träger im eigenen Material 0 → **40** Nennungen, `Gegenueber:` → **0**. **Die Ursache war eine Signaturverkürzung:** Der Umbau vom 10.08.2026 ersetzte `_lzg_kern_laden(user, character, beobachter)` durch `_turns_laden(user_id)` — drei Argumente wurden zu einem, und der Perspektivfilter verschwand mit dem dritten. Die Vorgabe stand seit je im Konzept (§6 *„Gleicher Mechanismus, getrennte Daten"*). - ~~**2026-08-17** — **Die Impuls-Ausnahme fehlte in allen vier übrigen Profilen.** Geprüft nach dem Kern-Hash: Die Perspektivtrennung hält dort — **null** LZG-Knoten mit `beobachter='user'` stammen aus einem Impuls-Turn, weil KZG und LZG die Perspektive als eigenes Feld führen. Betroffen war allein die Seite der Figur: **496 von 1551 rückverfolgbaren Knoten (32 %)** und **86 von 122 KZG-Verweisen der letzten zwei Tage (70 %)**. Das Beziehungsprofil trug zusätzlich beide Fehler des Kern-Hash — `wortlaut_holen` lieferte beide Sprecher ohne Herkunftsfilter, formatiert mit dem relativen `Gegenueber:`.~~ → **Behoben am 17.08.2026.** Impulse fallen aus Kern, Beziehung und Intentionen (die Fragen, die ein Gegenüber voraussetzen) und bleiben in Adaptiv und Emotionen. Beide Sprecher tragen im Beziehungsprofil ihren Namen. **Und der Filter sitzt in der Auswahl, nicht dahinter:** Nachgelagert hatten null von zwanzig Einträgen der Figur einen erreichbaren Begegnungs-Wortlaut — ihr Beziehungsprofil wäre dauerhaft leer geblieben; mit eigener Auswahl sind es 20 von 20. - ~~**2026-08-16** — **Die Zeitgewichtung des Adaptiv-Hash verwirft still und wirkt nur als Beschriftung.** `adaptive_hash_destillieren` rechnet je Eintrag eine Zone samt Gewicht und schreibt das Produkt aus Salienz und Gewicht **als Zahl in den Prompttext**. Sie steuert weder Auswahl noch Reihenfolge noch Länge — alle Einträge stehen gleich ausführlich da. Zwei `continue` verwerfen dabei ohne Logzeile und ohne Zähler: `if not themen` und Alter über 30 Tage. Nachgerechnet am produktiven Paar: von 20 geladenen Einträgen landen **19** im Prompt, einer fällt still heraus; **12 der 19 tragen ein Gewicht unter 0,09** und stehen mit vollem Text neben denen bei 0,43 bis 0,76.~~ → **Behoben am 16.08.2026** (`692a17b`). Das Gewicht ordnet jetzt die Auswahl; die Kurve ist stetig (`exp(-ln2/T·t)`, T = 1,7 Tage) statt drei aneinandergesetzter Stücke mit Sprung bei einem Tag; beide `continue` zählen und stehen in der Logzeile. - ~~**2026-08-16** — **Der Adaptiv-Hash liest 20 KZG-Einträge in SCAN-Reihenfolge, nicht die jüngsten.** `_kzg_laden` läuft mit `scan_iter` und bricht bei `PIXIE_CHARAKTER_KZG_LIMIT` ab; sortiert wird weder nach Zeit noch nach Salienz. Gemessen am produktiven Paar: **2202 Schlüssel, davon 141 mit `beobachter='user'`** — die Grundmenge dieses Profils ist also 141, und 20 davon sind 14 %. Die genommenen 20 liegen auf den SCAN-Positionen 1 bis 258 des Gesamtbestandes und decken zeitlich **28.07. bis 16.08.** ab, Ränge 245 bis 2162 der Gesamt-Zeitordnung, Median 1284. Das Profil beantwortet laut `novaberg-pixie-character-hash.md` §3.2 die Frage *„Was beschäftigt ihn **gerade**?"* und soll *„mit Themen wechseln"*. Dasselbe Material trägt das Beziehungsprofil.~~ → **Behoben am 16.08.2026** (`692a17b`). Gewählt wird nach `salienz × zeitgewicht`; mittleres Alter der Auswahl **18,0 → 2,06 Tage**, und der Abbruch über die Gewichtsschranke liest 28 statt 2202 Schlüssel. - ~~**2026-08-15** — **Die Queue trägt keine Erregung, und damit kann die Recherche keinen Level auf den Stapel legen.**~~ → **Behoben am 15.08.2026**, als eigener Zug mit angekündigter DDL: `shadow_auftrag.arousal`, NULL-fähig und ohne Vorgabewert. Der ursprüngliche Wortlaut: `shadow_auftrag` führt `emotion` und `modus` des auslösenden Turns, aber keine Spalte für `arousal`; `stapel_werte_aus_auftrag` (`agents/recherche/agent.py`) gibt entsprechend vier Werte zurück und keinen Level. Gemessen am 15.08.2026 über den gesamten Stapel-Bestand: **kein einziger Eintrag trägt einen** — drei Einträge alter Bauart ohne die Felder, einer neuer Bauart mit `arousal: None`. Bauteil B (`novaberg-eigenzeit_k.md` §5.2) ist damit gebaut, bezeugt und **wirkungslos**, bis ein `nachfragen`-Eintrag zugestellt wird; nur dieser Agent liest die Erregung direkt vom auslösenden Turn. - ~~**2026-08-15** — **`server/graph/reiz.py` widerspricht sich im eigenen Docstring.**~~ → **Behoben am 15.08.2026**, im Code-Commit von Bauteil B. Der Grund für den Aufschub war *„ein `.py`-Edit gehört nicht in einen Doku-Commit"* — er entfiel, als derselbe Zug ein drittes Mal in diese Datei schrieb. Eine Auskunftsstelle, deren erste Zeile das Gegenteil dessen sagt, was alle drei Funktionen darunter tun, wäre mit dem Zuwachs schlechter geworden, nicht gleich schlecht geblieben. Der ursprüngliche Wortlaut: Der Modul-Docstring eröffnete mit *„Ein Pixie-Impuls reist als `user_prompt` durch den Graphen, auf demselben Platz, an dem sonst die Nutzereingabe steht."* — das ist der Stand vor dem 15.08. Der Docstring von `reiz_text` in derselben Datei sagt das Gegenteil und begründet es: *„Der Reiz-Platz traegt, was das Gegenueber gesagt hat. Auf einem Impuls-Turn hat niemand gesprochen — dort steht der Gedanke in `eigener_gedanke`, und `user_prompt` ist leer."* Der Code folgt der zweiten Fassung. **Ausgerechnet die Datei, die als einzige Auskunftsstelle über die Herkunft des Reizes angelegt wurde**, trägt die überholte Aussage an der Stelle, die ein Leser zuerst sieht. **Nicht mitgeändert:** Ein `.py`-Edit ist Code, gehört nicht in einen Doku-Commit und löst einen Server-Neustart aus. - ~~**2026-08-15** — **Die auslösende Salienz erreicht den Stapel nicht.** `_salienz_aus_auftrag` (`agents/recherche/agent.py`) liest sie aus dem Queue-Auftrag, sie streut in (0.0, 1.0], und ihr Docstring haelt ausdruecklich fest, dass sie kein Vorgabewert ist — mit einem `raise` gegen die stille Null. `stack_push` nimmt sie nicht entgegen; der Eintrag traegt acht Felder und keines davon ist sie.~~ → **Behoben am 15.08.2026.** `stack_push` nimmt `salienz` und `arousal`; die Recherche reicht Emotion, Modus, Intentionen und den Ausloesewert durch, das Nachfragen die Erregung. **Die zwei Fragen davor sind gemessen beantwortet:** Die Wiedervorlage hat keine Salienz und wird nie eine haben — ihr Anlass ist ein Timeline-Eintrag, und die Tabelle fuehrt keine der vier Groessen. Das Nachfragen hat keine Salienz, aber die **Erregung** des ausloesenden Turns. Und der Bestand zaehlte nicht 107, sondern **86** — die 20 Wiedervorlage-Eintraege waren verbraucht; alle 86 trugen ausschliesslich ihr Embedding und wurden nach Entscheidung des Meisters verworfen. - ~~**2026-08-14** — **Der Verfasser-Auftrag verweist viermal auf einen Block, der fehlen kann.**~~ → **Behoben am 14.08.2026.** Nachgemessen war es kein Einzelfall: In **15 von 26** Verfasser-Läufen eines Tages fehlte der Block, und alle 15 waren Impuls-Turns. Zwei Ursachen, beide behoben — das Skip-Tor des GV-Node griff auf Impulsen (`novaberg-node-gv_k.md` §10.1a), und der Block hing an der Hypothese statt an der Landschaft (`novaberg-node-verfasser_k.md` §2.2c). Fehlt das Vorausdenken heute, sagt der Block es an. - ~~**2026-08-14** — **Der Verfasser-Auftrag trägt keine Prüfbedingung und keine Konstellation.**~~ → **Behoben am 14.08.2026.** Der Auftrag trägt Konstellation, Aufgabe und drei prüfbare Bedingungen (Herkunft, Mittel, Maß), und der Inhalt entsteht in dritter Person (`novaberg-node-verfasser_k.md` §2.2b). Die Wirkung auf die Profilmerkmale ist **nicht** nachgemessen — die 5,7 gegen 3,0 stammen vom Responder. - ~~**2026-08-01** — **Der Tageswort-Zweig des Zeitparsers ignoriert den übergebenen Bezugsmoment vollständig.** `zeit_parsen_vektor("übermorgen", bezug)` liefert für Bezug 10.07., 20.07. und 30.07. dreimal denselben Wert — **2026-08-03**, also den echten lokalen Kalendertag plus zwei. `in zwei Tagen` folgt dem Bezug dagegen korrekt (13.07., 23.07., 02.08.). Sichtbar wurde es beim Überschreiten der lokalen Mitternacht: Bis dahin fiel der echte Kalendertag mit dem Bezugsmoment der Tests zusammen. **Drei Tests sind dadurch rot und bleiben es** (`test_zeit_richtung`, `test_zeit_nackte_uhrzeit` ×2). Im Live-Pfad ist der Bezug fast immer „jetzt" und der Defekt folgenlos; jede nachträgliche Verarbeitung eines älteren Turns rechnet dagegen gegen den falschen Tag.~~ → **Behoben am 01.08.2026, und die Ursache war eine andere als die Zeile vermutet.** Nicht eine fehlende Weitergabe: Der Parameter `referenz` trug **zwei Bedeutungen**. Für Dauern ist er der Anker („verschieb ihn um zwei Tage“), für Tagesworte müsste es der Sprechzeitpunkt sein („verschieb ihn auf morgen“ heißt morgen ab heute) — und der Timeline-Update-Pfad reicht dort die Zeit des bestehenden Termins durch. Ein Test hielt genau das fest und wurde rot, als die naive Reparatur beide Bedeutungen zusammenlegte. Gebaut ist deshalb ein **zweiter Parameter** `sprechzeitpunkt`, Vorgabewert weiterhin die echte Uhr. ## Stichtage Analog zum Kraft-1-Stichtag: ab wann eine Partition brauchbar ist. Kein Backfill; was davor liegt, bleibt falsch und wird nicht gelesen. - ~~**assistant-Partition (`beobachter='assistant'`) — brauchbar ab 2026-07-26 13:03:30 UTC.** Davor verdichtete Pfad 2 den User-Prompt statt Novas Antwort und legte denselben Satz wie Pfad 1 ab. Der letzte fehlerhafte Eintrag stammt aus Turn `6bc55996748f48dc9a2cfeaf26dc44e2` um 12:59:20 UTC; der erste korrekte ist `kzg:meister:nova:1785071056367`.~~ → **Gegenstandslos seit dem Reset am 27.07.2026, 09:13 UTC.** Die Partition ist leer; es gibt keinen Bestand mehr, gegen den ein Stichtag abgrenzen könnte. Die *Aussage* bleibt richtig — der Verdichtungsfehler war real und ist behoben (`DESTILLAT-SUBJEKT-SCHABLONE`) —, nur die Abgrenzung hat keinen Gegenstand mehr. - **Neuer Nullpunkt — 2026-07-27 09:13 UTC.** Alle Partitionen beginnen hier. Der erste Eintrag nach diesem Zeitpunkt ist der erste überhaupt. - **Rad-Messreihe (`charakter_rad_messung`) — brauchbar ab 2026-08-12 02:00 UTC.** Davor liegen drei verschiedene Messgeräte nebeneinander: Dreierskala, eine Nachkommastelle, und gedeckelte Profile als Quelle. `reihe_laden` mittelt über die letzten fünf Erhebungen und hielt sie für vergleichbar — bei `nova → meister` kamen dadurch **58,7 %** des angezeigten Wertes aus abgelösten Geräten, und die frische Messung mit 1,3582 erschien als 1,2099. **Die 259 Zeilen davor sind gelöscht**, gesichert in `charakter_rad_messung_archiv_20260812`; sie bleiben der Beleg für die Skalenumstellung (50 Läufe grob, 30 gerastert), taugen aber für keinen Wert. Kein Backfill. --- ## Offen - **2026-11-08** — **Zwischen dem Erwerb von `graph_run_lock` und dem `try` mit seiner Freigabe steht synchroner Code, seit dem Code-Tree `10166cb` auch ein `logger.warning`.** `server/services/event_consumer.py::_event_verarbeiten`: Würfe dort etwas, bliebe der Riegel dauerhaft belegt, und jedes weitere Ereignis liefe in die Frist. Heute wirft dort nichts — die Handler des Servers geben Fehler an `handleError` —, aber `_RedactingFilter` (`server/tools/core_schema.py`) wirft absichtlich und hängt nur am Werkzeug `schema_bootstrap`. Kein Zeuge fährt eine Ausnahme dort; ein `try` direkt nach dem Erwerb schlösse den Spalt. Rest von `EVENT-LOCK-HAELT-SCHLEIFE`, am Code gelesen. - **2026-11-07** — **Ein Abbruch während des Graph-Laufs gibt `graph_run_lock` frei, obwohl der Graph im Arbeitsthread weiterläuft.** `server/services/event_consumer.py::_event_verarbeiten`: `CancelledError` trifft das `await asyncio.to_thread`, das `finally` gibt frei; ein zweites Ereignis lief danach gleichzeitig. Dieselbe Form im Prompt-Consumer. Heute bricht nur das Herunterfahren ab. Bestand, am Code vor und nach dem Bau gleich `[gemessen 07.11.2026, labor/2026-11-07_eventlock_gegenprobe.txt]`. - **2026-11-07** — **Ein Ereignis ist aus der Queue genommen, bevor `graph_run_lock` genommen ist.** Läuft die Frist ab oder wird das Warten abgebrochen, ist es verloren — Queue leer, Marker weg, kein Lauf. Seit dem Bau zu `EVENT-LOCK-HAELT-SCHLEIFE` endet das Herunterfahren im Warten nach 0,56 s ohne Lauf; am Code davor lief das Ereignis nach dem Halter noch an, die Antwort ging mit dem Prozess ebenso verloren. `server/services/event_consumer.py` `[gemessen 07.11.2026, labor/2026-11-07_eventlock_gegenprobe.txt]`. - **2026-11-07** — **Wie lange ein Ereignis auf `graph_run_lock` wartete, steht in keiner Zeile und keinem Feld.** Nur der Abstand der Zeile *„… in den CharacterGraph gereicht“* zur nächsten zeigt es, und die Warnung beim Ablauf der Frist nennt keine Dauer. `server/services/event_consumer.py` `[gemessen 07.11.2026, labor/2026-11-07_eventlock_gegenprobe.txt]`. - **2026-11-07** — **Am `graph_run_lock` gibt es keine Reihenfolge:** Während ein Ereignis wartet, können die Zustellung der Impulse und Pfad 1 eines anderen Menschen den Riegel zuerst nehmen; derselbe Mensch nie (Turn-Marker). Gemessen mit einem auf 10 ms verkürzten Takt der Zustellung: 4 von 10, in vier weiteren Läufen 0 von 10, je nach Phase; beim echten Takt von 5 s gerechnet höchstens rund 1 % je Freigabe. Am Code davor stand die Schleife, und das Ereignis verfiel nach 60 s `[gemessen 07.11.2026, labor/2026-11-07_eventlock_gegenprobe.txt]`. - **2026-11-08** — **Kein Zeuge legt den Abstand der Versuche am `graph_run_lock` fest.** `test_attempts_keep_their_distance` (`server/tests/test_event_lock_wait.py`) rechnet seine Obergrenze aus `LOCK_RETRY_INTERVAL`; ein Abstand von 1 s oder 1 µs bliebe grün, nur 0 weist `_graph_lock_acquire` ab. Am Code-Tree `10166cb` gelesen, in der Gegenprobe blind wie vorhergesagt (labor/2026-11-07_eventlock_gegenprobe.txt). - **2026-11-08** — **Der Zeuge zur Zeile *„Kein WebSocket“* ersetzt `_antwort_nutzlast_bauen`:** `ClientCheckTest` in `server/tests/test_event_lock_wait.py` prüft, dass gesendet wird, nicht was — die echte Nutzlast ginge über `kosten_summen` an Postgres. Am Code-Tree `10166cb` gelesen. - **2026-11-08** — **Die Eingriffe zu den Zeugen der zweiten Fassung an `graph_run_lock` sind nur vorhergesagt.** Die Zeugen für den fremden Riegel nach einem Abbruch, Abbruch und Graph-Fehler nach dem Erwerb, den Abstand der Versuche und die Zeile *„Kein WebSocket“* kamen nach der Gegenprobe; ihre Eingriffe sind am Tree `9365847` nicht gezählt. Die Gegenprobe davor: labor/2026-11-07_eventlock_gegenprobe.txt. - **2026-11-07** — **`broadcast_threadsafe` weist `loop=None` aus einem Thread mit dem falschen Grund ab:** `None is None` meldet *„läuft auf der Schleife“* (`server/api/websocket.py`, am Code-Tree `737bff3` Z. 208), auch ohne Verbindung; vorher still oder die Verbindung verworfen. 0 Pfade — `loop` stammt an beiden Quellen aus `asyncio.get_running_loop()` —, kein Zeuge `[gemessen 07.11.2026, labor/2026-11-07_broadcast_gegenprobe.txt]`. - **2026-11-07** — **Ein Abbruch während der Zustellung einer Äußerung kostet jetzt das Ereignis des Turns.** Seit die Zustellung in `server/services/prompt_consumer.py::_block_verarbeiten` vor `event_erzeugen` steht, endet ein Abbruch dort mit `CancelledError`, das Ereignis liegt nicht in der Queue, der Turn-Marker bleibt; vorher stand das Ereignis. Das Fenster ist normal höchstens 1 ms, bis `SEND_TIMEOUT` je hängendem Client; abgebrochen wird nur beim Herunterfahren. Der Kommentar an der Stelle nennt es nicht `[gemessen 07.11.2026, labor/2026-11-07_broadcast_gegenprobe.txt]`. - **2026-11-07** — **`asyncio.to_thread` in `_block_verarbeiten` braucht einen freien Platz im Standard-Pool; ist er voll, verschiebt sich das Ereignis des Turns.** `server/services/prompt_consumer.py`, die Zustellung steht seit dem Code-Tree `737bff3` vor dem Ereignis. Gelesen, nicht gemessen. - **2026-11-07** — **Zwei Zeugen in `server/tests/test_broadcast_self_wait.py` hängen an der Uhr:** `MAX_REFUSAL` = 0,1 s und `MAX_GAP` = 0,5 s können auf einem stark belasteten Wirt rot werden, ohne Fehler im Code. Gemessen sind 0,000 s und höchstens 0,074 s (labor/2026-11-07_broadcast_gegenprobe.txt). Zu beobachten. - **2026-11-07** — **Zwei Eingriffe an der Abweisung von `broadcast_threadsafe` bleiben in der ganzen Suite grün:** die Prüfung nur im Hauptthread — eine eigene Schleife außerhalb des Hauptthreads würde wieder warten — und ein Aufrufer von `_graph_streamen` direkt auf der Schleife. Der Code ist richtig, die Schleife läuft im Betrieb im Hauptthread; der zweite Eingriff kostete laut die Antwort statt still 5 s `[gemessen 07.11.2026, labor/2026-11-07_broadcast_gegenprobe.txt]`. - **2026-11-07** — **Der zweite Client sieht die Äußerung erst nach allen Stufen von Pfad 1.** `_block_verarbeiten` (`server/services/prompt_consumer.py`) verteilt sie hinter `_pfad1_fahren`; mit Doppeln für die Modelle +1,03 s nach dem Senden, im Betrieb länger, an beiden Ständen. Bestand, nicht der Bau zu `BROADCAST-WARTET-AUF-EIGENER-SCHLEIFE` `[gemessen 07.11.2026, labor/2026-11-07_broadcast_gegenprobe.txt]`. - **2026-11-07** — **Mit leerer `client_id` bekommt der Absender seine eigene Äußerung zurück.** `exclude_client` greift dann nicht; an den Eltern kostete das zwei Fristzeilen und 10,07 s Stillstand, seit dem Code-Tree `737bff3` keinen. Bestand `[gemessen 07.11.2026, labor/2026-11-07_broadcast_gegenprobe.txt]`. - **2026-11-07** — **`_block_verarbeiten` ruft `_audit_log` (Datenbank) und `redis_client.set` synchron auf der Schleife.** `server/services/prompt_consumer.py`; kurz, aber dieselbe Regel wie beim Verteilen. Dauer nicht gemessen; gelesen beim Bau zu `BROADCAST-WARTET-AUF-EIGENER-SCHLEIFE`. - **2026-11-07** — **Der Kommentar über `SEND_TIMEOUT` in `server/api/websocket.py` verweist auf `_sende_threadsafe`, das es im Baum nicht gibt** (am Code-Tree `737bff3` Z. 35). Gelesen. - **2026-11-08** — **Die Eingriffe zu den letzten Zeugen von GV4 sind nur vorhergesagt.** Die Zeugen für das vertauschte Paar in der Schleife, den KZG-Ausfall neben leerem LZG, `psycopg2.DataError` und die Einbettung (unbrauchbare Antwort, leerer Vektor, `AttributeError`, `NameError`) kamen nach der Gegenprobe; ihre Eingriffe sind am Tree `f121c55` nicht gezählt, am Zeugentext gelesen werden sie rot. Die Gegenprobe davor: labor/2026-11-07_gv4q_gegenprobe.txt. - **2026-11-07** — **Der Docstring von `AnUnusableAnswerIsAnOutage` in `server/tests/test_gv4_source_outage.py` erzählt eine Umkehr (*„Umgedreht am 07.11.2026 …“*), die in keiner Historie steht.** Die Datei entsteht erst mit dem Commit zu `GV4-QUELLEN-SILENT-SKIP`; die Umkehr fand zwischen zwei Ständen des Baus statt. Am Code-Tree `9ef9a4e` gelesen. - **2026-11-07** — **`concurrent.futures.CancelledError` an der Einbettung von GV4 zählt als Ausfall, ohne Zeugen.** Nach dem Kriterium der Fangstelle in `server/ei/wissensluecken.py` (jede `Exception` außer `TypeError`, `AttributeError`, `NameError`) folgerichtig; `asyncio.CancelledError` ist eine `BaseException` und läuft durch. Welche der beiden der Worker wirft, ist nicht gelesen. Am Code-Tree `9ef9a4e`. - **2026-11-07** — **Eine Kennung mit Bindestrich oder `@` bricht die Tag-Abfrage des KZG: `ResponseError` *„Syntax error at offset …“*.** Gemessen gegen den echten RediSearch-Index mit eigens gewählten Kennungen: Bindestrich und `@` brechen, Punkt, Leerzeichen, Unterstrich und Ziffern nicht. `user_id` ist frei (`server/api/models.py:12`), einen Escape-Helfer gibt es in `server/` nicht. Ein solches Paar hätte dauerhaft keinen KZG-Weg in GV4, einen Eintrag `fehler` je langem Turn und, weil die Lader der Gewichte dieselbe Abfrage nutzen, auch keine LZG-Lücken (gelesen, nicht gemessen). Seit `GV4-QUELLEN-SILENT-SKIP` endet der Turn daran nicht mehr; ob eine Kennung im Bestand diese Zeichen trägt, ist nicht gezählt `[gemessen 07.11.2026, labor/2026-11-07_gv4q_messung.txt]`. - **2026-11-07** — **Nach einem Neustart der Datenbank liefert der nächste Turn in GV4 keine Lücken und schreibt keine Zeile ins Pipeline-Protokoll; danach ist er gesund.** Nach dem Lesen eine alte Verbindung im Pool von `server/tools/db_manager.py`. Zweimal gemessen gegen eine Wegwerf-Datenbank `[gemessen 07.11.2026, labor/2026-11-07_gv4q_messung.txt, Phase 9]`; Bestand, nicht der Bau zu `GV4-QUELLEN-SILENT-SKIP`. - **2026-11-07** — **`fehler_typ` im Ausfall-Eintrag von GV4 trägt die Unterklasse: echt `DataException`, nicht `DataError`.** Wer im Pipeline-Protokoll nach `DataError` filtert, findet nichts. Gemessen bei falscher Vektorlänge `[gemessen 07.11.2026, labor/2026-11-07_gv4q_messung.txt]`. - **2026-11-07** — **`_report_outage` in `server/ei/wissensluecken.py` schreibt den Fehlertext ungekürzt ins Pipeline-Protokoll.** In fünf echten Fehlerformen standen Host, IP-Adresse, Port und Dimensionen, kein Kennwort — auch nicht mit Kennwort in der URL — und kein Gesprächstext; ein `ProgrammingError` mit einem Ausschnitt der Abfrage ist ungemessen `[gemessen 07.11.2026, labor/2026-11-07_gv4q_gegenprobe.txt]`. - **2026-11-07** — **Vier Fangstellen von `wissensluecken_finden` schreiben einen Fehler nur ins Log, nicht ins Pipeline-Protokoll.** Gewichte, Themenbestand, Kern-Einbettung und Themen-Einbettung (`server/ei/wissensluecken.py`, am Code-Tree `9ef9a4e` Z. 367, 433, 787, 836) fangen `Exception` mit `logger.error`, ohne `log_fehler`, und fangen dabei auch `TypeError`. Anders als die Quellen seit `GV4-QUELLEN-SILENT-SKIP`. Gelesen. - **2026-11-07** — **`redis_client` wird in `server/ei/wissensluecken.py` importiert und nicht gelesen** (am Code-Tree `9ef9a4e` Z. 24, `ruff` F401), auch von keinem `patch`-Ziel. Gelesen. - **2026-11-07** — **`ValueError` in der Fangmenge des KZG trifft auch einen Fehler des Aufrufers.** Ein ungleichmäßiger `turn_embedding` wirft in `kzg_kandidaten_suchen` bei `np.array(…, dtype=np.float32)` `ValueError` und zählt als Ausfall des KZG; liefert das LZG Knoten, läuft derselbe Vektor danach bei `cosine_similarity` außerhalb jeder Fangstelle, und der Turn endet nach dem Eintrag. Künstlicher Fall, ohne Weg im Betrieb `[gemessen 07.11.2026, labor/2026-11-07_gv4q_gegenprobe.txt]`. - **2026-11-07** — **Die Ausgabe-Verifikation in `_search_sources` (`server/ei/wissensluecken.py`) kann nicht anschlagen:** Eine werfende Suche fügt nichts an; schlüge sie an, endete der Turn. Am Code-Tree `9ef9a4e` gelesen, in der Gegenprobe gleichwertig (labor/2026-11-07_gv4q_gegenprobe.txt). - **2026-11-07** — **Der Ausfall-Eintrag von GV4 ist nur mit `quelle = 'user'` bezeugt; im Betrieb steht dort immer `character`.** Die Zeugen in `server/tests/test_gv4_source_outage.py` fahren einen Zustand ohne `graph_rolle`, der Gesprächsvektor hängt nur am CharacterGraph. Ein fest gesetztes `user` bliebe grün `[gemessen 07.11.2026, labor/2026-11-07_gv4q_gegenprobe.txt]`. - **2026-11-07** — **Traceback und Fehlerart in der Fehlerzeile eines GV4-Ausfalls haben keinen Zeugen** — beim echten Datenbankausfall ist die Zeile der einzige Ort des Fehlers. Ohne `exc_info` oder ohne die Art in der Zeile bleibt jeder Zeuge in `server/tests/test_gv4_source_outage.py` grün `[gemessen 07.11.2026, labor/2026-11-07_gv4q_gegenprobe.txt]`. - **2026-11-07** — **Ein Nein auf eine Klärung oder eine Auswahl der Timeline endet weiter als `abgeschlossen`.** `server/agents/timeline/resume.py` (`resume_clarification` und die Antwort auf die Auswahl, am Code-Tree `33a7b83` Z. 54 und 162) beendet jede Antwort mit `abgeschlossen` und *„Ich habe nichts geändert …“*, auch *„nein“* und *„ja“*; geschrieben wird nichts. Über die echte Rückgabe von `agent_dispatch_node`: Block aus `aufgabe_erfolg`, der Thinker bekommt `[VERARBEITUNG]`, der Turn den Vermerk `erfolgreich`; eine Speicherbehauptung deckt es nicht. Dieselben Folgen, die `TOR-ABLEHNUNG-MELDET-ABGESCHLOSSEN` für Direktiven und Notizen hatte; seine Schließbedingung nennt die Timeline nicht. **Welchen Status eine Klärung ohne Schreiben tragen soll, ist eine Absicht und nicht entschieden.** `[gemessen 07.11.2026, labor/2026-11-07_tor_gegenprobe.txt]` - **2026-11-07** — **`_build_return` der Charakter-Identität kennt `dismissed` nicht: Nach einem Nein steht `ergebnis` im `pipeline_log` leer.** `server/agents/charakter_identitaet/resume.py` setzt den Status (am Code-Tree `33a7b83` Z. 130), `dispatch.py::_build_return` (Z. 208–228) setzt `management_result` nur bei `abgeschlossen`, `rueckfrage` und `fehler`, und `agent_dispatch.py` schreibt `ergebnis` aus `management_result`. Status und Block stimmen. Vor und nach dem Bau zu `TOR-ABLEHNUNG-MELDET-ABGESCHLOSSEN` gleich `[gemessen 07.11.2026, labor/2026-11-07_tor_gegenprobe.txt]`. - **2026-11-07** — **Der Docstring von `resume` in `server/agents/charakter_identitaet/resume.py` (am Code-Tree `33a7b83` Z. 111) sagt *„status='abgeschlossen' → User hat abgelehnt“*; der Code setzt bei einer Ablehnung `dismissed` (Z. 130).** Veraltet, gelesen beim Bau zu `TOR-ABLEHNUNG-MELDET-ABGESCHLOSSEN`. - **2026-11-07** — **Nach einem Nein am Tor der Direktiven wird ein richtiger Satz über den unveränderten Bestand korrigiert.** Seit `dismissed` keine Speicherbehauptung mehr deckt, ergibt *„Deine Regel ist weiterhin notiert.“* (synthetisch) das Urteil `warnung`, *Speicherung nicht belegt*, ebenso *„ist weiterhin eingetragen“*; nicht betroffen sind die Texte der Dienste, *„ich habe nichts gelöscht“*, *„bleibt notiert“* und *„ist weiterhin gespeichert“*. Bei den Notizen war das schon vorher so. Vom Bau verlangt (keine Deckung einer Speicherbehauptung durch ein Nein); wie oft es vorkommt, ist nicht gezählt. Nachgestellt an `server/utils/storage_claims.py` `[gemessen 07.11.2026, labor/2026-11-07_tor_gegenprobe.txt]`. - **2026-11-07** — **Die Stufenanzeige des Clients zeigt nach einem Nein der Direktiven und der Notizen `direktiven: dismissed`, ein englisches Statuswort.** `server/services/event_consumer.py` (am Code-Tree `33a7b83` Z. 161–176) reicht `: ` als Text an den Client, der es neben der Stufe zeigt; bei `charakter_identitaet` und `dateien_wurzeln` ist das schon so. Keine Logik hängt daran. An der Funktion nachgestellt (labor/2026-11-07_tor_gegenprobe.txt). - **2026-11-07** — **Dass der Block für verworfene Aufträge das Wort *Agent* nicht trägt, halten nur zwei Zeugen, die den ganzen Block vergleichen.** `server/tests/test_responder_selbstbild.py` prüft die Rahmen `aufgabe_erfolg` und `aufgabe_ablehnung` (`BLOECKE`) und den Datenteil nur über `format_success_lines`; `_build_task_dismissed` und der Rahmen `aufgabe_verworfen` haben dort keinen Zeugen. Es hängt an `test_no_builds_the_answer_from_the_discarded_block` in `DirectiveGateTest` und `NotesGateTest` (`server/tests/test_gate_refusal.py`). Am Code-Tree `33a7b83` gelesen. - **2026-11-07** — **Ein bloßes *„nein“* auf die Auswahl- und die Duplikat-Frage der Notizen beendet sie nicht, die Frage kommt erneut.** `server/agents/notizen/resume.py::_resume_disambiguierung` und `_resume_duplikat` lesen kein Nein; der Wartezustand wird erneuert. Zugesichert ist das nicht, nur beobachtet; ein verneinter Satz mit einer Wahl schreibt sogar (`NOTIZ-VERNEINUNG-UEBERLESEN`). An den Funktionen nachgestellt `[gemessen 07.11.2026, labor/2026-11-07_tor_gegenprobe.txt]`. - **2026-11-07** — **`server/plugins/notizen_manager/manager.py:809` reicht `daten.get("entitaet_ids")` ungeprüft an den Speicher.** Heute kommt dort kein Wert an: Keiner der vier Aufträge an `notizen` im Manager setzt `notiz_id` und `entitaet_ids` zugleich, und ohne Wert lässt `NotizenRepository.update` die Spalte unberührt. Ein künftiger Erzeuger brächte eine Dublette ungeprüft in die Notiz. Am Code von `b32a37a` gelesen, nicht gelaufen; gefunden bei der Gegenprobe zu `ENTITAETIDS-MIT-DUBLETTEN` (labor/2026-11-07_entitaetdub_gegenprobe.txt). - **2026-11-07** — **Die Ausgabe-Verifikation in `_entitaeten_aufloesen` kann nicht anschlagen.** `len(entitaet_ids) + len(ausgefallen) > len(roh_namen)` (`server/agents/kzg/magnete.py`, am Code-Tree `e8fd0c9` Z. 208): Jeder Name liefert höchstens einen Eintrag, vor und nach dem Bau. Die Nachbedingung *höchstens einmal* prüft sie nicht, und eine Prüfung gegen die eigene Liste zwei Anweisungen hinter dem `if`, das sie herstellt, schlüge ebenso nie an. Gelesen, nicht gemutiert. - **2026-11-07** — **Drei Eingriffe an `submit_sync` bleiben in der Suite grün.** Die Abweisung auch im Hauptthread ohne Schleife (die Schleife des Workers in einem anderen Thread), die Abweisung jedes Threads, der nicht von `asyncio.to_thread` stammt, und ein `start()`, der beim Neustart die alte Schleife behält — kein Zeuge der Suite wird rot. Der Code ist richtig, eine Probe neben der Suite fuhr alle drei; im Betrieb träfe der zweite Eingriff die Aufrufe aus dem Thread-Pool von FastAPI. Gemessen am Tree `0bb57fe` (labor/2026-11-07_submitsync_gegenprobe.txt). - **2026-11-07** — **Wartet die Schleife auf einen Thread, der `submit_sync` ruft, sieht der Eingang das nicht.** Der Thread hat keine laufende Schleife, die Prüfung lässt ihn durch, und der Aufruf endet nach der vollen Frist in einem leeren `TimeoutError`. Heute ohne Pfad: Ein `.result` auf der Schleife steht nur in `broadcast_threadsafe` (Fund darüber). → 08.11.2026: Der Fund darüber ist als `BROADCAST-WARTET-AUF-EIGENER-SCHLEIFE` behoben (Archiv); `broadcast_threadsafe` weist einen Aufruf auf der Schleife seither ab, bevor es wartet. Nachgestellt am Tree `0bb57fe` (labor/2026-11-07_submitsync_gegenprobe.txt). - **2026-11-07** — **Fakten und Timeline zählen eine Abweisung von `submit_sync` als Modellausfall.** `server/agents/fakten/klassifikation.py:275` und `server/agents/timeline/ereignis.py:208` fangen `Exception` und machen daraus `ModelCallError` mit *„Modellaufruf fehlgeschlagen: RuntimeError“*, gezählt als `OUTCOME_MODEL_FAILED` (`agents/fakten/dispatch.py:256`, `agents/timeline/ereignis.py:676`); der Text der Meldung geht dort verloren, nur der Typ bleibt. Im Log steht sie vorher wortgleich auf `error`. Heute ohne Pfad zu `submit_sync` auf der Schleife. Am Code von `b32a37a` gelesen. - **2026-11-07** — **`timeout=None` direkt an `ModelWorker.submit_sync` ergibt auf der Schleife des Workers `TypeError` statt der Meldung.** Die Meldung formatiert `{timeout:.1f}`; laut, aber ohne Aufrufstelle. Keine Stelle übergibt `None` an die Basis, `BackgroundWorker` löst es vorher auf (`server/services/model_services/background_worker.py`, Z. 124–127). Nachgestellt am Tree `0bb57fe`. - **2026-11-07** — **Der Kommentar in `server/graph/nodes/router.py:326` sagt, `route()` laufe im Thread-Pool von FastAPI; gemessen läuft es im Thread-Pool von `asyncio.to_thread`.** Veraltet, nur am Rand. Gemessen bei der Messung zu `submit_sync` (labor/2026-11-07_submitsync_gegenprobe.txt). - **2026-11-06** — **Nach einer abgelaufenen Frist bricht niemand den Auftrag von `submit_sync` ab.** `asyncio.run_coroutine_threadsafe` ohne `cancel`, dann `concurrent_future.result(timeout=timeout)` (`server/services/model_services/worker_base.py`): Der Auftrag belegt den seriellen Platz des Workers weiter, und sein Ergebnis wird verworfen. Gehört zur Frist, also zu (B) von `PFAD1-TIMEOUT-TURNVERLUST`, nicht zu dessen Eintrag. Am Code von `7b35557` gelesen, gefunden bei der Durchsicht der offenen Einträge. - **2026-11-08** — **`README.md`, `README.de.md` und `docker-compose.template.yml` kennen die Connectoren `gemma4a4b` und `qwen38` nicht.** Die Tabelle der Umgebungsvariablen in beiden READMEs nennt als Werte von `OLLAMA_CONNECTOR` nur `mistral`, `gemma4` und `qwen36` und sagt, der Name bezeichne das Hintergrundmodell, nicht das antwortende — für `qwen38` gilt das Gegenteil, er heißt nach dem Modell, das antwortet. `server/config.py` führt fünf Connectoren, `gemma4a4b` seit dem 07.09.2026, `qwen38` seit dem 07.11.2026 (`b32a37a`); die Vorlage setzt `qwen36`, das ist zugleich die Vorgabe im Code. Am Code gelesen; gefunden beim Nachzug zum Connector `qwen38`, die drei Dateien liegen außerhalb von `docs/` und sind nicht geändert. - **2026-10-24** — **Der Preis der geschlossenen Zeichen: Zeichen, die Tastaturen selbst setzen, machen eine gemeinte Zustimmung unklar.** In den vier `resume.py` (`direktiven`, `notizen`, `charakter_identitaet`, `dateien_wurzeln`) fällt außer Buchstaben, Ziffern und Apostroph nur weg, was in `DROPPED_SIGNS` steht (ASCII-Leerraum und `. , ! ; : - ( )`). *„Ja…“* (Auslassungszeichen U+2026), *„ja – gerne“* (Halbgeviertstrich), typografische Anführungszeichen (*„„ja““*), ein geschütztes Leerzeichen, *„ja 👍“* und *„ok ✅“* sind deshalb unklar und kosten eine zweite Frage; ebenso das zögernde *na* (*„na klar“*). Die sichere Richtung, gewollt; wie oft solche Antworten vorkommen, ist nicht gezählt. Am Code gelesen, nicht gelaufen; gefunden beim Nachzug zur geschlossenen Zustimmung. - **2026-10-24** — **`passt` ist nur in Direktiven und Notizen ein Zustimmungswort.** `CONSENT_WORDS` führt *passt* in `server/agents/direktiven/resume.py` und `server/agents/notizen/resume.py`, `CONSENT_WORDS` in `charakter_identitaet` und `BESTAETIGUNGS_WOERTER` in `dateien_wurzeln` nicht. *„das passt“* und *„ok, passt“* stimmen deshalb in Direktiven und Notizen zu und sind in Charakter-Identität und Dateien-Wurzeln unklar. Gemessen am Tree `d2302b4` mit der Nachprobe der Wortstellung (die Aussage-Zwillinge *„es passt“*, *„das passt“*, *„ok, passt“*, *„passt, mach das“*). Dazu fragt *„passt es“* in den beiden Diensten mit *passt* nach der Wortstellung (`ASKING_VERBS`); die Mengen stehen als Kopien nebeneinander. - **2026-10-24** — **Die Pronomen als Selbstaussage stimmen zu: *„ich bitte dich“*, *„mach ich“*, *„ja ich“*, *„ja, du“*.** `FILLER_WORDS` führt *ich*, *du*, *er*, *sie*, *es*, *wir*, *ihr* und *man* als Füllwörter, damit *„ja, das mache ich“* und *„ja ich“* zustimmen; die Menge unterscheidet nicht, ob das Pronomen eine Selbstaussage ist oder der Anfang einer Frage oder eines Einwands. Mit einem Zustimmungswort daneben (*bitte*, *mach*, *ja*) besteht die Antwort aus Zustimmung. Entschieden als Bestand (Selbstaussage), am Code gelesen und an der Nachprobe gemessen, nicht im Betrieb. - **2026-10-24** — **`server/utils/offers.py` liest *passt* und *danke* am Angebot als Ablehnung, die Ja/Nein-Tore von Direktiven und Notizen lesen *„passt, danke“* und *„ok, danke“* als Zustimmung.** Dieselben Wörter, die andere Deutung: Auf eine Rückfrage zu einer Schreiboperation stimmt *„passt, danke“* zu (*passt* Zustimmungswort, *danke* Füllwort), auf ein Angebot zu einer Handlung ist *passt* oder *danke* eine Absage. Gelesen an `utils/offers.py` und den Wortlisten der beiden Dienste, die Antworten an der Nachprobe gemessen; die beiden Fragen sind verschieden (Rückfrage zu einer Aktion gegenüber Angebot), ob die Verschiedenheit gewollt ist, ist nicht entschieden. Gehört zu den Kopien der Ja/Nein-Deutung (`KLA-KLAERFALL-AM-OBJEKT`). - **2026-10-24** — ***„mach ich das“* und *„mache ich das“* stimmen an den vier Toren zu.** Mit *ich* gelesen sind *mach* und *mache* finite Verben vor ihrem Subjekt, also eine Frage nach der Wortstellung; die Menge der fragenden Verben (`ASKING_VERBS`: *ist*, in Direktiven und Notizen auch *passt*) enthält sie nicht, weil *mach* und *mache* als Imperativ der Zustimmung gelten (*„Ja, mach das“*). Auf *„Soll ich …?“* ist die Frage des Menschen *„mach ich das“* unwahrscheinlich, aber nicht auszuschließen. Am Code gelesen, an der Nachprobe nicht geprüft; ein Hinweis für die gemeinsame Regel in `utils/klaerfall.py`. - **2026-10-24** — **An den Ja/Nein-Toren lesen sich Zustimmungen und Pausen als Ablehnung, weil ein Ablehnungsstamm in einem fremden Wort steckt.** In `server/agents/{direktiven,notizen,charakter_identitaet}/resume.py` sucht die Ablehnung die Stämme aus `REFUSAL_STEMS` als Teilzeichenkette: *„warum nicht“*, *„kein Problem“*, *„nichts dagegen“*, *„ja das wäre nett“* (*ne* in *nett*) sind Ablehnung, ebenso *„eine Sekunde“*, *„one sec“* und *„ja, nenn sie Teleskop“* — der Mensch hört *„nichts geändert“* statt einer erneuten Frage; *„warum nicht“* und *„kein Problem“* auch in `dateien_wurzeln`. Die sichere Richtung, nichts wird ausgeführt. Nachgerechnet an den Deutungsfunktionen ohne Datenbank, an einer blind geschriebenen Reihe von 305 Antworten (am Code von `2702d94` und am Tree der geschlossenen Zustimmung gleich); im Betrieb nicht beobachtet. - **2026-10-24** — **Die Auswahlfrage der Charakter-Identität führt auf eine Antwort mit Zustimmungswort aus.** `server/agents/charakter_identitaet/crud.py` stellt sie in Z. 127–129 und Z. 443–452 (*„Mehrere fruehere Anweisungen passen: … Welche soll ich wiederherstellen?“*); `resume.py::_standard_interpretieren` kennt keine Art der Frage, *„ja, die zweite“* oder *„Wie bitte?“* ist Zustimmung und geht nach `ausfuehren`, und `_reactivate` sucht ohne Kennung neu (Z. 435–441): bei mehreren Treffern dieselbe Frage, bei genau einem wird er wiederhergestellt, ohne dass gewählt wurde; *„die zweite“* allein ist unklar. Das ist der Zustand der Direktiven vor `6846120`. Die Auswahlfrage der Dateien-Wurzeln (*„Welche meinst du?“*, `server/agents/dateien_wurzeln/crud.py`, Z. 417) ist nicht verfolgt. Am Code gelesen, nicht gelaufen; gefunden bei der Klassifizierung der Funde vom 24.10.2026. - **2026-10-24** — **Beim Verschieben schreibt *„auf 12 Uhr nachts“* 00:00 am Tag des Termins, vor dem alten Termin.** Bei einem Termin am Di 20.10. um 15:30 ergibt *„Verschieb den Kaffee auf 12 Uhr nachts.“* Di 20.10. 00:00 — fünfzehneinhalb Stunden vor dem alten Termin, nicht die Nacht danach. Die Rückfrage nach der Tageshälfte bietet diese Lesart an (*„12 Uhr nachts (00:00)“*, `server/agents/timeline/crud.py::_HALF_OF_DAY_WORDS`), und `_on_day_of` setzt die Uhrzeit auf den Tag des Termins. Was *12 Uhr nachts* beim Verschieben meint, ist eine Deutungsfrage. Nachgestellt an `_update`, nichts geschrieben, nicht im Betrieb gelaufen; gefunden bei der Klassifizierung der Funde vom 24.10.2026. - **2026-10-24** — **Der Kommentar über den neuen Feldern im Dispatcher nennt *„bis 2044 Kanten je Knoten“* ohne Datum.** `server/graph/nodes/dispatcher.py` (um Z. 478–480, Code-Tree `3a5ccab`): Die Zahl ist der Bestand vom 24.10.2026 — Kanten je Knoten höchstens 2044, im Mittel 287,3 — und wächst mit jedem neuen Knoten; sie begründet die Frage nach der Dauer der Neuberechnung, die erst die Messung im Betrieb beantwortet. Am Code gelesen; gefunden bei der Prüfung des Baus. → Geprüft 24.10.2026, kein Eintrag: beim nächsten Bau an `dispatcher.py` mitnehmen. - **2026-10-23** — **Der Rückweg wird auch für eine Dublette eingereiht.** `server/agents/synapsen_promotion/agent.py::_eintrag_verarbeiten` reiht nach allen drei Pfaden einen Auftrag `wissen_rueckweg` ein (`_rueckweg_einreihen`), auch wenn der Treffer auf einen aktiven Knoten nichts Neues ins Langzeitgedächtnis bringt (Code-Tree `5342a6a`, unverändert gelassen); kehrt derselbe Inhalt aus einem neuen Turn wieder, kann er ein zweites Mal in die Wissens-Einarbeitung gehen. Am Code gelesen, nicht gemessen; gefunden beim Bau der Dublette. - **2026-10-23** — **Ein Hash, der nach einem Treffer stehen bleibt, kann ein zweites Mal in die Promotion gehen.** Nach einer Dublette oder einer Halbreaktivierung bleibt der KZG-Hash bis zu seiner TTL (Code-Tree `2d18b83`); `promotion_queue_push` (`server/services/shadow_agent/utils.py`, ab Z. 135) verhindert einen zweiten Auftrag nur, solange der erste noch in `queue:{user_id}` liegt. Wird der Eintrag erneut eingereiht, trifft er denselben Knoten wieder — ohne Verstärkung, aber Brücke, `hash_dirty` und Rückweg laufen jedes Mal. Ob und wie oft die Aufrufer von `promotion_queue_push` einen schon promoteten Schlüssel wieder einreihen, ist nicht geprüft. Am Code gelesen; gefunden beim Bau. - **2026-10-23** — **Der Kommentar über der Brücke spricht für alle drei Pfade von einem Umzug.** `server/agents/synapsen_promotion/agent.py` (um Z. 599–603): *„in allen dreien derselbe Umzug … in den dieser KZG-Eintrag gewandert ist“*; Schritt 4 und der Modul-Docstring sagen, dass nach einem Treffer — Dublette oder Halbreaktivierung — nichts vom Eintrag im Knoten ankommt (Code-Tree `5342a6a`). Am Code gelesen; gefunden bei der Prüfung des Baus. - **2026-10-23** — **Eine gescheiterte Halbreaktivierung meldet nur eine Warnung und schließt mit `erledigt`.** `server/agents/synapsen_promotion/agent.py` (um Z. 549–558): Liefert `reactivate_node` nichts, schreibt der Lauf `logger.warning` und eine Audit-Zeile `erledigt` mit `reaktivierung_fehlgeschlagen` — ein Übersprung, den nur eine Warnung meldet. Bestand wie am `5c00a98`, vom Bau nicht verändert. Am Code gelesen; gefunden bei der Prüfung des Baus. - **2026-10-23** — **Ein Leser schlägt den KZG-Hash eines bestimmten Turns nach, und sein Docstring nennt die Promotion nicht als Grund des Fehlens.** `server/agents/kalibrierung/korpus.py:190-227` (`_intentionen_laden`, M1 des Kalibrier-Korpus) holt über `verbindung` den Hash eines Turns und liest `intentionen`; der Docstring nennt als Gründe eines fehlenden Hashes nur *unter der Salienz-Schwelle* und *per TTL*. Seit dem Löschen nach einer Neuanlage (Code-Tree `2d18b83`) fehlt er auch bei jedem Turn, dessen Eintrag als neuer Knoten promotet wurde — gerade bei salienten, und ab dem nächsten Promotionslauf statt nach bis zu 30 Tagen. Der Leser zählt das Fehlen als `fehlend`, nicht als Wert. Ein Ausweg wäre der Rückfall über `verbindung.lzg_id` auf `lzg_knoten.intentionen`, wie `collect_magnets` es für die Magnete tut. Am Code gelesen; gefunden bei der Prüfung des Baus. - **2026-10-23** — **`_kzg_eintrag_loeschen` nennt *„DEL fehlgeschlagen“* auch dann, wenn erst das `exists` danach wirft.** `server/agents/synapsen_promotion/agent.py` (um Z. 826–830, Code-Tree `5342a6a`): `delete` und `exists` stehen in einem `try`; wirft erst `exists`, ist der Schlüssel fort, der Grund sagt aber *„DEL auf … fehlgeschlagen“*, und die Schlusszeile trägt `kzg_geloescht=nein`. Laut und harmlos, nur der Text ist ungenau. Am Code gelesen; gefunden bei der Prüfung des Baus. - **2026-10-23** — **Löscht die Promotion einen Schlüssel zwischen `hget` und `hset` der thematischen Verstärkung, entsteht ein Rumpf-Hash ohne `inhalt`.** Die thematische Verstärkung (`server/memory/kzg.py:494-537`, `server/agents/kzg/speicher.py:189-238`) liest einen Nachbarn mit `hget` und schreibt danach mit `hset`; fällt das Löschen nach einer Neuanlage (Code-Tree `2d18b83`) dazwischen, legt `hset` den Schlüssel mit den geschriebenen Feldern neu an, ohne `inhalt`. Unsterblich wird er nicht — `ttl` liefert −1, daraus wird 0, und `expire` setzt die neue TTL. Dasselbe Fenster gibt es beim Ablauf einer TTL; das Löschen macht es häufiger. Am Code gelesen, nicht gemessen; gefunden bei der Prüfung des Baus. - **2026-10-23** — **Der Wegweiser `novaberg-bugs.md` nennt im Kopf 159 offene Kennungen, die Bilanz zählt 177.** Die Zeile *Offen, seit 19.09.2026 in sechs Teilen* führt zuletzt `[gemessen]` 18.10.2026 mit `bugregister_bilanz.py`; seither sind Kennungen in den Teilen hinzugekommen, ohne dass der Kopf nachgezogen wurde. `bugregister_bilanz.py` am 23.10.2026: 177 offen, 188 im Archiv. Gefunden beim Umzug eines Eintrags ins Archiv, nicht nachgezogen. - **2026-10-23** — **Die Tabelle der Gegenstände im Kopf jedes Teils des Backlogs trägt die Zahlen der Teilung.** In allen sechs `novaberg-backlog-{gegenstand}.md` steht dieselbe Tabelle mit Gedaechtnis 76, Hintergrund 66, Charakter 66, Antwortpfad 46, Wissen 71, Bauart 96; das Findemittel `novaberg-backlog-index.md` rechnet am 23.10.2026 82, 69, 75, 69, 76, 104. Die Zeile *Inhalt* darüber führt die Zahl des eigenen Teils, die Tabelle nicht. Gefunden beim Eintrag `SACHLAGE-FAKTEN-PERSON-IM-OBJEKTNAMEN`, nicht nachgezogen. - **2026-10-23** — **Der Zeitparser löst einen ganzen Satz nicht auf, und ein `create` ohne Klassifikation hängt daran.** `dispatch_timeline` (`server/agents/timeline/dispatch.py`) gibt dem Agenten nur `action` und `target`; ohne `zeitausdruck` parst `_create` (`server/agents/timeline/crud.py`) den ganzen `user_prompt`. `zeit_parsen_vektor` löste in einer Probe im Behälter **0 von 7** ganzen Sätzen auf (*„Trag mir am 15.12.2031 um 10 Uhr den Zahnarzt ein“*, *„Erinnere mich am 3. November an die Sternwarte“* …), mit und ohne *mir* (`labor/2026-10-23_zeitparser_mir.{py,out}`). → 23.10.2026: Der erste Satz liegt über der Grenze von fünf Jahren, hinter der der Zeitparser jedes Datum verwirft (`novaberg-tool-timeparser.md`, *Zukunft > 5 Jahre*); er wäre auch allein nicht aufgelöst worden. Dazu macht die Fuzzy-Korrektur aus *mir* *märz* (Distanz 2) — dieselbe Klasse wie `ZEIT-EINZAHL-GREIFT-DANEBEN`. Ob der Weg mit gesetzter Aktion ohne Klassifikation im Betrieb vorkommt, ist nicht gemessen. - **2026-10-23** — **Der Kommentar über dem Katalog der Zusagen sagt für `timeline_id` *„den angelegten oder den gefundenen Eintrag“*** (`server/agents/nmcp.py`, Z. 40); die Zusage selbst (Z. 51–52) und `novaberg-agenten-uebersicht.md` §3.2 sagen *„im selben Durchlauf angelegt, nicht gefunden“*. - **2026-10-22** — **Der Docstring von `KzgManager` nennt `dispatch_kzg()` am falschen Ort.** `server/plugins/kzg_manager/manager.py:37–38` verweist für den produktiven KZG-Write auf `graph/nodes/dispatcher.py`; die Funktion liegt in `server/agents/kzg/dispatch.py:98`. Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Der Pixie-Router routet auf vier Agenten, die es nicht gibt.** `server/services/pixie/router.py` führt `vertiefen` → `vertiefung` (Z. 18) und die periodischen Aufgaben `promotion`, `decay` und `aufraeumen` auf gleichnamige Agenten (Z. 35, 38, 41); keiner davon ist registriert (die Auto-Discovery findet 21 Agenten, keinen dieser Namen). Ein Auftrag dieser Art findet keinen Agenten. Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Der Kommentar über `LZG_KNOTEN_DECAY_RATE` sagt, der Verfall werde nicht gespeichert.** `server/config.py:3921–3922`: *„Nicht persistiert, sondern bei Abfrage live aus verstaerkt_am berechnet.“* `server/memory/lzg_knoten.py::run_node_decay` schreibt `gewicht_decay` aber im Tageslauf fest; `novaberg-memory-synapsen_t.md` sagt es richtig. Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Der Docstring von `kanten_alle_neu_aufbauen` sagt, die Kandidaten der Promotion seien nur aktive Knoten.** `server/memory/lzg_kanten.py:544–545`: *„Kandidaten sind dort ebenfalls nur aktive“*; die Promotion lädt ihre Kandidaten mit `include_inactive=True` und bildet Kanten auch zu deaktivierten Knoten (`server/agents/synapsen_promotion/agent.py:503–506`, `:568`). Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Der Tageslauf importiert `quality_profile` und benutzt es nicht.** `server/agents/synapsen_decay/agent.py:66`; eine Suche nach `quality_profile` in der Datei trifft nur den Import. Der Docstring derselben Datei zählt die Schritte falsch (Z. 3–27: *„sechs“*, die Liste ohne 7, 9 und 10; Z. 392: *„zwei entkoppelte Wartungsläufe“*) — das ist der offene Bug `TAGESLAUF-DOCSTRING-SECHS-AUFGABEN` in `novaberg-bugs-hintergrund.md`, hier nur bestätigt. Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **`_run_fact_orders` nennt im Docstring `FaktenManager.execute`, den es nicht mehr gibt.** `server/graph/nodes/dispatcher.py:725`: *„er geht nie an `FaktenManager.execute` — der Manager-Weg wirft dort“*; das Plugin `fakten_manager` ist seit dem 21.10.2026 gelöscht. Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Der Docstring von `_enrich_human` nennt fünf produktive Felder, der Pfad schreibt sieben.** `server/graph/nodes/enricher.py:555–556` und `:564` nennen `raw_turns`, `user_intentionen`, `prompt_embedding`, `aktivierte_ziele`, `gravitationsterm`; geschrieben werden dazu `ziel_vektoren` und `zielsog_roh` (Z. 644, 646). Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Der Zeuge `test_beispiel_2_timeline_und_embedding` rechnet mit der Schwelle 0.85, geltend ist 0.55.** `server/tests/test_synapsen_kanten.py:34` (`KONZEPT_EMBEDDING_SCHWELLWERT = 0.85`) und Z. 49–61: Der Zeuge reproduziert das Rechenbeispiel als Fixture mit dem Wert, der zur Zeit des Konzepts galt; `LZG_EMBEDDING_SCHWELLWERT` ist 0.55 (`server/config.py`), und Beispiel 2 in `novaberg-memory-synapsen_t.md` §7.5 ist seit dem 22.10.2026 an 0.55 neu gerechnet — der Zeuge hält jetzt die durchgestrichene Rechnung. Am Code gelesen; gefunden beim Abgleich der Doku des Gedächtnisses mit dem Code (am Code geprüft am 22.10.2026). - **2026-10-22** — **Bricht der Graph-Lauf ab, bekommt ein Ereignis-Auftrag der Sachlage kein Protokoll.** Reißt der Graph, rettet `server/services/event_consumer.py` die Antwort und markiert den Stand mit `lauf_unvollstaendig`; der Dispatcher läuft dann nicht. Ein von der Sachlage gestellter Ereignis-Auftrag bekommt so weder seinen Eintrag `log_db_write` (Quelle `timeline`) noch eine Zeile *„Ereignis-Auftrag: Ausgang …“* (`server/agents/timeline/ereignis.py`) — laut ist nur der Abbruch des Turns, nicht, dass ein gestellter Auftrag ausfiel. Am Code gelesen, nicht gemessen. - **2026-10-22** — **Das Bild des CharacterGraph in `novaberg-graph.md` §3.2 zeigt `Reducer → Router`, ohne Sachlage und ohne Erinnerungsanker.** Die Tabelle darunter führt beide (4a seit dem 28.08.2026, 4b seit dem 22.10.2026, committet, Code-Tree `04f823e`), die Überschrift zählt *17 Nodes*. Gelesen beim Nachzug des Erinnerungsankers; das Bild ist nicht berichtigt. - **2026-10-22** — **Nicht jeder Zeitausdruck ohne Jahr bekommt sein Jahr aus der Zeitlage.** `server/agents/timeline/ereignis.py::_date_without_year` erkennt am Code-Tree `452f786` einen Monat und Tag und Monat in Worten oder Ziffern, auch mit Uhrzeit (*im Mai*, *am 3. März*, *am 12.2.*, *am 3. März um 10 Uhr*); *Anfang Mai*, *Mitte März* und *Ende Mai* behalten das Jahr, das der Parser liest (*am 14.* ohne Monat zählt von heute aus und bleibt gewollt beim Parser). Ob sie überhaupt gelesen werden und ob sie im Betrieb vorkommen, ist nicht geprüft; in der Messung am Modell vom 22.10.2026 kam keiner vor. Gefunden beim Bau des Jahres aus der Zeitlage. - **2026-10-22** — **Der Tagespfad von `event_time_of` liest die Uhr des Systems, nicht den Tag des Turns.** `server/agents/timeline/ereignis.py::event_time_of` ruft `zeit_parsen_vektor(expression)` ohne Sprechzeitpunkt; `server/utils/zeitparser.py` nimmt dann die echte Uhr. Ein Datum ohne Jahr (Monat, Tag und Monat, auch mit Uhrzeit) geht seit dem Code-Tree `452f786` nicht durch den Parser und hängt nur an `today`; die übrigen Tagesausdrücke hängen weiter an der Uhr des Systems. Liegen Uhr des Turns und Uhr des Systems in verschiedenen Jahren — Zeugen mit fester Uhr, ein Jahreswechsel —, passen Monat und Tag nicht zusammen, und die Zeugen müssen das Jahr in den Zeitausdruck schreiben. Am Code gelesen; gefunden ebenda. - **2026-10-22** — **Das Konfliktwerkzeug des Thinkers listet ein Ereignis einer anderen Person unter *Termine am …*.** `server/graph/nodes/thinker.py::timeline_check` liest über `find_by_date_range` und schließt nur den Erinnerungs-Anker aus; ein `ereignis` steht dann mit dem rohen Typ (`[ereignis] … Titel — Person`) unter *„Termine am :“* — `is_appointment` und `conflict_check` der Typquelle (beide falsch) liest das Werkzeug nicht. Für ein Ereignis mit Tag gilt das seit dem Ereignis-Weg, seit der Überlappung des Monats in `find_by_date_range` (22.10.2026) für jeden Tag des Monats. Dazu nennt `server/agents/timeline/suche.py::period_question` ein Monats-Ereignis, das Kandidat einer Klärung über einen Zeitraum wird, im Rahmensatz *„… habe ich diesen Termin gefunden“* (um Z. 310) — die Zeile selbst steht gekennzeichnet, und die Klärung schreibt nie. Ob das Konfliktwerkzeug Ereignisse sehen soll, sagt die Bauart nicht. Am Code gelesen; gefunden bei der Prüfung der Kennzeichnung. - **2026-10-22** — **Die Grenze *vergangen* der Titelsuche rechnet Tages- und Monatsbeginn in zwei Zonen.** `server/memory/repositories/timeline_repository.py::_past_bounds` setzt den Tagesbeginn in der Zone von `now`, den Monatsbeginn in Ortszeit (`_month_start`), und prüft danach *Monatsbeginn ≤ Tagesbeginn ≤ now*. Ist `now` nicht in Ortszeit, kann der Monatsbeginn am Monatsanfang nach dem Tagesbeginn liegen, und die Prüfung wirft `RuntimeError` — laut, nicht still; die Aufrufer übergeben heute die Uhr des Turns in Ortszeit. Am Code gelesen; gefunden ebenda. - **2026-10-22** — **Die Mappe erschließt den abgelösten Wert eines Fakts aus der Reihenfolge, nicht aus einer Verknüpfung.** `server/memory/fakten_mappe.py::_superseded_text` nimmt den neuesten inaktiven einwertigen Fakt desselben Subjekts und derselben Beziehung aus `FaktenRepository.find_historie` (sortiert `t_valid DESC`) und setzt ihn mit *bis* neben den Fakt mit Verweis. Heute trägt das, weil `t_valid` der Zeitpunkt des Schreibens ist; wird `t_valid` eine inhaltliche Gültigkeit, kann ein anderer als der abgelöste Wert dort stehen. Am Code gelesen; gefunden ebenda. - **2026-10-22** — **Weitere Kopien des Werts `"month"` und eine zweite Tabelle der Monatsnamen in `server/agents/timeline/event_time.py`.** `_VALID_PRECISIONS` (Z. 20), die Vergleiche in `range_ende` und `format_anzeige` (Z. 66, 78) und `_MONATSNAMEN` (Z. 22) stehen neben `MONTH_PRECISION` in `server/memory/repositories/timeline_repository.py` und `MONTH_NAMES` in `server/utils/local_time.py`. Kein Schreiber und kein Leser des Ereignisses liest sie heute; die Leser des Monats liegen in `memory/` und `graph/format/`, die aus `agents/` nichts importieren. `agents/` dürfte beide Quellen lesen. Am Code gelesen; gefunden beim Bau der Kennzeichnung. - **2026-10-22** — **Kein Zeuge unterscheidet die Bindung `PRECISION_MONTH = MONTH_PRECISION` von einer Kopie.** `server/agents/timeline/ereignis.py` liest den Wert der Genauigkeit *Monat* aus `MONTH_PRECISION`; eine eigene Kopie `"month"` hätte denselben Wert, und die Gegenprobe dazu ließ 0 Zeugen rot werden, wie vorhergesagt. Ein Zeuge müsste den Quelltext lesen. Gefunden beim Bau der Kennzeichnung. - **2026-10-22** — **Das Moduldokument der Timeline nennt einen anderen Typ für `precision` als die Schemadatei.** `novaberg-agent-timeline.md` §9 führt `precision VARCHAR(10)` ohne Pflicht und ohne Vorgabe; `server/agents/timeline/init.sql` legt `VARCHAR(15) NOT NULL DEFAULT 'day'` an und ändert einen Bestand mit `ALTER COLUMN precision TYPE VARCHAR(15)`. Am Code gelesen; gefunden beim Nachzug des Ereignis-Wegs. - **2026-10-21** — **Ein Ausfall der Namenssuche sieht im Protokoll aus wie *mehrdeutig*.** `server/agents/timeline/ereignis.py::_person_ids` fängt jeden Fehler von `resolve_by_name`, schreibt ihn mit `logger.exception` ins Log und gibt `None` zurück; der Eintrag entsteht dann ohne `entitaet_ids` wie bei keinem oder mehreren Treffern, und der Eintrag in `log_db_write` unterscheidet *Suche ausgefallen* nicht davon. `resolve_by_name` lässt Fehler absichtlich durch. Ohne Schaden, weil keine Entität angelegt wird. Am Code gelesen; gefunden bei der Prüfung des Ereignis-Wegs der Timeline. - **2026-10-21** — **Eine Zeile der Timeline kann ohne ihren Fakt stehen bleiben.** In `server/agents/timeline/ereignis.py::_write_event` ergibt ein Fehler von `find_by_id` nach einem gelungenen `insert` — oder eine zurückgelesene Zeile, die nicht passt — `None`: Die Zeile steht, die Abbildung meldet `ereignis_fehlt`, der Fakt entfällt. Ebenso, wenn `process_event_orders` nach einem geschriebenen Ereignis wirft: Die Fakten laufen dann ohne Abbildung. *Kein Fakt ohne Ereignis* bleibt gewahrt, umgekehrt nicht. Randfall, ohne Zeugen. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Zwei Ereignisse auf demselben Kandidaten überschreiben die Abbildung.** `server/agents/timeline/ereignis.py::_classify_and_write` setzt `mapping[result["kandidat"]]` je Ereignis; nennt das Modell zwei Ereignisse zu einer Nummer und scheitert das zweite, verliert der Fakt des ersten den Verweis und entfällt. Randfall. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Eine fehlende Salienz meldet je gerechnetem Turn eine Fehlerzeile.** `server/graph/nodes/sachlage.py::build_event_order` schreibt bei `salienz_human = None` ein `ERROR` und stellt keinen Ereignis-Auftrag. Ob ein echter Turn die Sachlage ohne Salienz rechnet — dann meldete die Zeile den Regelfall —, ist ungemessen; fünf Zeugendateien fahren `sachlage_assess` ohne `salienz_human` und erzeugen die Zeile, ohne sie zuzusichern. Im Log des Betriebs zu zählen. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Die Nachbedingung in `server/agents/timeline/ereignis.py::_run_one` hat keinen Zeugen.** Jede Nummer der Abbildung muss ein Kandidat des Menschen sein, sonst ein Eintrag `fehler` und ein `ValueError`; im heutigen Code kann sie nicht anschlagen, weil `_event_fields` jede fremde Nummer vorher verwirft — ohne die Prüfung bleibt die Suite grün. Eine Zusicherung gegen einen späteren Eingriff, nicht bezeugt. Gefunden beim Bau des Ereignis-Wegs. - **2026-10-21** — **Das Verschieben meldet jeden `ValueError` als *nicht mehr aktiv*.** `server/agents/timeline/crud.py::_update` fängt um Z. 392–399 jeden `ValueError` aus `TimelineRepository.verschieben` und antwortet *„Der Termin '…' ist nicht mehr aktiv.“* (Ausgang `nicht_aktiv`) — auch wenn eine Eingabeprüfung warf (`precision`, das Paar der alten Zeile). Das Log trägt den echten Grund (`logger.exception` in `verschieben`, `logger.error` in `_update`). Am Code gelesen; gefunden bei der Prüfung von Typquelle und Nachfolger der Timeline (nicht committet). - **2026-10-21** — **Beim Verschieben kommt die Wiedervorlage aus dem Typ des Auftrags, der Typ der neuen Zeile aus der alten Zeile.** `server/agents/timeline/crud.py::_update` liest `remind` aus `termin.get("event_type", "termin")` (um Z. 256–261), `TimelineRepository.verschieben` übernimmt den Typ aus der Zeile. Weichen beide ab, passt die Wiedervorlage nicht zum Typ der neuen Zeile; heute kommt der Auftrag aus der Suche über dieselbe Zeile. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Die übrigen Fremdschlüssel-Guards der Schemadatei der Timeline suchen nur nach dem Namen.** `server/agents/timeline/init.sql` (um Z. 134–199: `notizen_timeline_id_fkey`, `lzg_knoten_timeline_id_fkey`, `sachlage_eigenschaft_timeline_id_fkey`, `fakten_timeline_id_fkey`) prüft in `pg_constraint` nur `conname`, nicht `conrelid`; steht ein gleichnamiger Schlüssel an einer anderen Tabelle, wird der eigene still nicht angelegt. Der neue Guard für `timeline_nachfolger_id_fkey` prüft beides. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Der Prompt der Timeline-Klassifikation trägt vierfache Klammern vor einem einzigen `.format`.** `server/prompts/default/classify_timeline.task.txt:5` und `:12` stehen als `{{{{` und `}}}}`; `agents/timeline/klassifikation.py::_build_classify_prompt` formatiert einmal, das Modell bekommt `{{` und `}}` um das Antwortformat statt einer Klammer. Ebenso `classify_notizen.task.txt:5` und `:11`. Bestand, vom Bau nicht geändert. Am Code gelesen, nicht gemessen; gefunden ebenda. - **2026-10-21** — **Bei `event_time` fehlt in der Schemadatei der Timeline ein Leerzeichen der Spaltenausrichtung.** `server/agents/timeline/init.sql:11` — beim Einfügen von `character_id` darüber verloren gegangen; kosmetisch, ohne Wirkung. Gefunden bei der Prüfung der Timeline je Paar (nicht committet). - **2026-10-21** — **Der KZG-Dispatch setzt die Figur mit einem Vorgabewert.** `server/agents/kzg/dispatch.py:120` liest `state.get("character_id", ASSISTANT_USER_ID)` — ein Vorgabewert für ein Pflichtfeld. Fehlt die Figur im Zustand, schreibt der KZG-Agent still im Paar mit `nova`, und seit der Timeline je Paar legt der Magnet-Knoten auch den Erinnerungs-Anker still im Paar mit `nova` an: Die laute Prüfung in `agents/kzg/magnete.py::_timeline_aufloesen` sieht nie eine leere Figur, weil der Kontext sie aus dieser Zeile bekommt. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Die Wiedervorlage eines Termins steht ohne Titel da.** `server/agents/wiedervorlage/agent.py:217–218` liest aus der Zeile der Timeline `titel` und `beschreibung`; die Spalten heißen `title` und `details`. Jeder fällige Termin geht damit mit leerem Titel und leeren Details in die Wiedervorlage. Am Code gelesen, im Betrieb nicht gemessen; gefunden ebenda. - **2026-10-21** — **Drei Dateien lesen die Figur dem Wortlaut nach mit einem Vorgabewert.** `server/agents/timeline/crud.py` (Z. 156, 239), `server/agents/timeline/suche.py` (Z. 96, 365, 425) und `server/agents/kzg/magnete.py:103` lesen `state["kontext"].get("character_id", "")`. Wirkungslos, weil eine leere Figur danach laut abgewiesen wird (`status: fehler`, Fehlerzeile oder `ValueError` aus dem Repository); der Wortlaut verdeckt nur, dass das Feld Pflicht ist. Gefunden ebenda. - **2026-10-21** — **Ein Zeuge des Bestandsabgleichs hält die Figur nicht fest.** Die Attrappe `server/tests/test_storage_claims_reading.py::_Inventory.__call__` nimmt `character_id` an, hält aber nur Mensch und Zeitraum fest; dass der Abgleich die Figur weitergibt, bezeugt allein `server/tests/test_storage_inventory.py`. Gefunden ebenda. - **2026-10-21** — **Der Zeitparser macht ein fremdes letztes Wort zu einem Monat.** `server/utils/zeitparser.py::named_period` korrigiert ein letztes Wort, das kein Zeitraumwort ist, über `_fuzzy_korrektur` per Levenshtein ≤ 2 zu einem Wort des Wortschatzes (um Z. 1519–1520; die Korrektur um Z. 440–484): *was* und *bei* werden zu *Mai*, und das Wort allein nennt dann den ganzen Mai. Dazu fehlt *wochenende* im Wortschatz `TIME_VOCABULARY.words`, obwohl `named_period` es als Zeitraum liest (`_PERIOD_WEEKEND`, Z. 1433). Am Code gelesen; gefunden beim Bau des Zeitbezugs am Objekt der Sachlage, der sich dagegen schützt (`graph/nodes/sachlage_zeitbezug.py::_is_period_word`, nicht committet). - **2026-10-21** — **Das Qualitätsprofil zählt als gelesen nur Erinnerungen aus dem Enricher.** `server/memory/repositories/quality_profile_repository.py` zählt die Lesungen aus `pipeline_log` mit `node = 'enricher'` und dem Schlüssel `lzg_resonanz_ids` (um Z. 343–349); Erinnerungen, die ein künftiger Erinnerungsanker nach der Sachlage anbietet (`novaberg-memory-fakten_e.md` C5), zählten dort nicht als gelesen. Am Code gelesen; gefunden bei der Prüfung der Bauart des Erinnerungsankers. - **2026-10-21** — **Die Zusage zu `lzg_resonanz` nennt zu wenige Leser.** `server/agents/nmcp.py` (um Z. 66–75) nennt als Verbraucher *Reducer und Gesprächsvektor*; es lesen auch Haltung, Prägung und Dispatcher (`graph/nodes/haltung.py`, `praegung.py`, `dispatcher.py`). Am Code gelesen; gefunden ebenda. - ~~**2026-10-21** — **Ein offener Bug betrifft ein gelöschtes Plugin.**~~ → **Erledigt am 26.10.2026:** `FAKTENPLUGIN-OHNE-KAPPUNG` und `FAKTEN-UNAUFGELOESTES-OBJEKT-WIRD-WERT` sind gegenstandslos mit `bbf6c27`, geschlossen und im Archiv (`novaberg-bugs-archiv-wissen.md`). Der Fund: `FAKTENPLUGIN-OHNE-KAPPUNG` (`novaberg-bugs-wissen.md`) steht offen mit *„gegenstandslos im Tree, nicht committet … Geschlossen mit dem Commit“*; das Plugin `plugins/fakten_manager` ist am 21.10.2026 gelöscht und committet (`bbf6c27`). Ebenso steht `FAKTEN-UNAUFGELOESTES-OBJEKT-WIRD-WERT`. Gefunden ebenda. - **2026-10-21** — **Ein Ausfall beim Lesen der Erinnerungsknoten sieht für den Aufrufer aus wie ein leeres Ergebnis.** In `server/memory/lzg_knoten.py` gibt `anker_retrieval` bei einem `psycopg2.Error` `[]` zurück (um Z. 516–521), `_knoten_details_laden` `None` (um Z. 972–977) — dasselbe wie *kein Anker* und *Knoten nicht gefunden*; nur eine Fehlerzeile im Log sagt es. Kein Eintrag im Bug- oder Backlogregister nennt das. Am Code gelesen; gefunden ebenda. - **2026-10-21** — **Ein Backlog-Posten sagt, der Magnet-Knoten schreibe keine Pipeline-Log-Zeile.** `REFAC-MAGNETE-AUDIT` (Sammelposten in `novaberg-backlog-gedaechtnis.md`) sagt, `magnete_aufloesen` schreibe weder Audit- noch Pipeline-Log-Zeile; seit der lauten Auflösung (21.10.2026, `26f89b1`) schreibt `server/agents/kzg/magnete.py::_ausfall_melden` je Ausfall einer Auflösung eine Zeile über `log_fehler`. Gefunden bei der Prüfung des Magnet-Pfads. - **2026-10-21** — **Ein Docstring des Dispatchers nennt den gelöschten Manager:** `server/graph/nodes/dispatcher.py::_run_fact_orders` sagt *„geht nie an `FaktenManager.execute` — der Manager-Weg wirft dort“*; das Fakten-Plugin ist am 21.10.2026 gelöscht (nicht committet). Gefunden bei der Prüfung des Löschens und beim Nachzug der Moduldokumente. - **2026-10-20** — **Ein Docstring beschreibt noch den Bestand des Betriebs:** `server/tests/test_quality_profile.py::test_die_frisch_gelesenen_stehen_vorn` spricht vom *„echten Bestand“* und einer Gegenprobe im Bestand; seit dem Umbau der Zeugen ohne Bestand (20.10.2026, nicht committet) läuft er auf eigenen Zeilen. Gefunden bei der Prüfung jenes Umbaus. - **2026-10-20** — **Die Wiederaufnahme legt die Felder des Servers in den Prompt der Sachlage.** `server/graph/nodes/sachlage.py` rendert `wiederaufnahme.get("objekte")` ungefiltert (Z. 860), während die vorige Blase mit `SERVER_OWNED_OBJECT_FIELDS` gefiltert wird (Z. 844); heute betrifft das `quellen`, `plausibilitaet` und `recherche`. → Seit dem Zeitbezug am Objekt (21.10.2026, nicht committet) auch `zeitbezug`: Die Verlaufszeile speichert die Objekte mit allen Feldern (`_persist_history` nach `_derive`). Am Code gelesen. Am Code gelesen bei der Prüfung der Architektur zum Zeitbezug des Kalender-Angebots, nicht gemessen. - **2026-10-20** — **Ein Zeitraum ist im Kalender-Angebot der Sachlage nicht gekappt.** `server/graph/nodes/sachlage_resolver.py::_calendar_hits` liest bei einem Zeitraum jeden Termin darin (Z. 225–226), und `memory_offer` kappt den Kalender zuerst auf 8 (Z. 332); trifft das Fenster einmal, kann ein voller Monat die übrigen Quellen verdrängen. ~~Heute unsichtbar, weil das Fenster nie trifft (`SACHLAGE-KALENDER-VERFEHLT-OBJEKTNAMEN`).~~ → Seit dem Zeitbezug am Objekt (21.10.2026, nicht committet) trifft das Fenster; ein Zeitraum bleibt je Objekt ungekappt (`sachlage_zeitbezug.py::time_reference_window` über `range_window`). Am Code gelesen. - **2026-10-20** — **Der Prompt der Sachlage steht im Code.** `SACHLAGE_PROMPT` liegt in `server/graph/nodes/sachlage.py` (Z. 219), nicht unter `server/prompts/` (`Glob server/prompts/**/sachlage*`: 0 Treffer). Am Code gelesen. - **2026-10-17** — **Der Import von `tools.db_manager` öffnet zwei Verbindungen.** Die Modulinstanz `db_manager = DBManager(postgres_url=POSTGRES_URL)` (`server/tools/db_manager.py`, Z. 87) legt beim Import einen `psycopg2.pool.ThreadedConnectionPool` mit `minconn=2` an (Z. 21–26), gebunden an `config.POSTGRES_URL` (Z. 9). Der Import von `agents` zieht das Modul nach (`agents/base.py` → `memory/background_audit.py`, Z. 18): Jeder Zeuge, der `agents` importiert, verbindet sich damit schon beim Import mit der Datenbank aus der Konfiguration — auch einer, der jeden Zugriff unter `patch` stellt —, und ohne erreichbare Datenbank scheitert schon der Import. Gefunden beim Bau zu `SCHEMA-VON-NULL-SCHEITERT`; betrifft `SERVER-SUITE-TESTDATENBANK` und `AGENT-SETUP-IGNORIERT-URL`. Am Code gelesen, nicht gemessen. - **2026-10-17** — **`novaberg-agent-timeline.md` §9 zeigt ein älteres Schema der Timeline.** Der Block führt `precision` als `VARCHAR(10)` mit *day oder minute*; `agents/timeline/init.sql` legt die Spalte als `VARCHAR(15) NOT NULL DEFAULT 'day'` an, ohne Prüfbedingung, und führt `event_ende`, das im Block fehlt. `agents/timeline/event_time.py` kennt sechs Genauigkeiten (`minute` bis `year`), geschrieben werden nur `minute` und `day`. Gefunden beim Nachziehen der Genauigkeit *Monat* (`novaberg-memory-fakten_e.md` E, B8). Am Code gelesen, nicht gemessen. - **2026-10-17** — **Der Router liest auf eine Frage nach dem kommenden Termin rückwärts.** Auf *„Wann muss ich zum Zahnarzt?“* (synthetisch, Messung des gemeinsamen Lesewegs) setzte das Router-Modell eine Titelsuche mit `direction: backward`; der Block `[TERMINE]` trug nur den vergangenen Termin, gekennzeichnet, der kommende fehlte. Der Nachsatz *„Und um wie viel Uhr?“* las ebenfalls rückwärts. Die Antwort nannte den kommenden richtig, aus dem Verlauf. `[gemessen 17.10.2026, n = 2 Turns]` Zählzeilen `Termine: art=search, richtung=backward` im Serverlog; `labor/2026-10-17_messung_a2_leseweg.py`. - **2026-10-17** — **Nova bietet an, Termine einzutragen, die schon eingetragen sind.** In derselben Messung schloss jede der drei Antworten mit dem Angebot, die genannten Termine *„fest einzutragen“* — alle drei standen im Block `[TERMINE]` als Termine des Menschen. `[gemessen 17.10.2026, 3 von 3 Turns]` - **2026-10-17** — **Ein Zeitraum kann das Angebot der Sachlage ganz mit Terminen füllen.** Seit der Frame-Auflöser über den gemeinsamen Leseweg liest (17.10.2026), liest er zu einem akuten Objekt, ~~dessen Name einen Zeitraum nennt (*November*)~~ → dessen Zeitbezug ein Zeitraum ist (seit dem 21.10.2026, nicht committet), jeden Termin darin; gekappt je Objekt wird nur die Titelsuche (`SACHLAGE_BESTAND_KALENDER_LIMIT` = 3). Die Gesamtkappung `SACHLAGE_BESTAND_MAX_EINTRAEGE` = 8 bleibt, und weil der Kalender im Angebot zuerst steht, verdrängt ein Monat mit acht oder mehr Terminen Pool und Aufzeichnungen ganz (`graph/nodes/sachlage_resolver.py::memory_offer`). Hinter dem Router liest ein Zeitraum ebenso ohne Obergrenze. Am Code gelesen, nicht gemessen. → **Im Angebot gekappt im Tree am 22.10.2026** (Code-Tree `d810399`, Scheibe 13 Teil H, committet): höchstens `SACHLAGE_BESTAND_KALENDER_MAX` = 5 Kalenderzeilen in der Ordnung des Lesewegs, Pool und Aufzeichnungen behalten ihre 8, die Zählzeile nennt gelesene und weggelassene Kalenderzeilen; bezeugt mit 12 → 5 und 3 → 3, nicht gemessen. Hinter dem Router bleibt der Zeitraum ohne Obergrenze. - **2026-10-17** — **Zustandszeilen sagen *„noch nicht committet“* über Bauten, die committet sind.** Der Umbau der Timeline vom 17.10.2026 ist in `c0eecbb`, `0c38783`, `57e9eb9` und `8ce910e` committet; die Doku dazu entstand vorher und kam danach mit derselben Angabe ins Repositorium. Gezählt am 17.10.2026: 44 Zeilen mit *noch nicht committet* in 14 Dokumenten außerhalb der Chronik, darunter Featureliste (7), `novaberg-agent-timeline.md` (7), `novaberg-tool-timeparser.md` (4). In einer Kopfzeile des Standes ist das ein Zeitstempel, in einer Zustandszeile eine falsche Aussage; nicht jede Zeile ist einzeln geprüft. Berichtigt sind nur die drei Sätze, die der Nachzug vom 17.10.2026 ohnehin änderte. - **2026-10-17** — **Der Vorzug des einzigen kommenden Termins rechnet mit der Uhr des Systems.** `agents/timeline/suche.py` (Bestand) wählt unter mehreren Treffern den einzigen kommenden mit `datetime.now(tz)` statt mit der Uhr des Turns, die `suchen` schon hat. Die Zeugen dazu hängen deshalb an der echten Uhr: Ihr Bestand liegt fest im Oktober 2026, und vor dem 09.10.2026 gefahren, kippten sie. Am Code gelesen, nicht gemessen. - **2026-10-17** — **Verschieben mit Titel und mehreren Treffern wählt still den ersten.** In `agents/timeline/suche.py` gilt die Auswahl aus mehreren Treffern nur für `update` und `delete`; `reschedule` fällt zum Einzeltreffer und verschiebt ohne Rückfrage den Termin, den die Suche zuerst liefert. Dieselbe Klasse wie das stille Schreiben über einen Zeitraum, aber auf dem Weg mit Titel. Am Code gelesen, nicht gemessen. → **Gebaut am 17.10.2026** (getestet, noch nicht committet): Verschieben mit Titel und mehreren Treffern geht in dieselbe Auswahl wie Ändern und Löschen; der einzige kommende Treffer gewinnt, sonst kommt die Auswahl, und keine Antwort auf sie schreibt (`novaberg-agent-timeline.md` §4.5). Was bleibt, steht unter `TIMELINE-TITEL-MEHRERE-TREFFER-OHNE-TAG`. - **2026-10-17** — **Der Docstring des Korrekturauftrags sagt weniger, als der Code tut.** `utils/storage_claims.py::correction_order` nennt als ungedeckte wahre Aussage nur den Bestand, den der Turn ohne Dienst kennt. Seit dem 17.10.2026 gilt das auch für einen lesenden Dienst: Eine wahre Bestätigung eines Lesevorgangs wird korrigiert, wenn der Bestandsabgleich sie nicht findet (`novaberg-node-tribunal.md`, *Ein Lesevorgang deckt nicht*). In der Doku benannt, im Code nicht. - **2026-10-16** — **Der Router setzte als Ziel den Inhalt der Bitte statt eines Dienstes.** In der zweiten Simulation an einem Prüf-Nutzer am 16.10.2026 (`labor/2026-10-15_sim_timeline_notizen/simnachher2/`, Satz 11) trug der Router-Eintrag `agent/` — `management_target` war der Satzinhalt, kein Dienstname. Die Zeile `Planner-Weiche` meldet das als `router_vorzug=nein (Ziel … trifft keinen Dienst)`, im ganzen Lauf 2-mal. Zugestellt wurde trotzdem an die Notizen — über die Nähe des einzigen akuten Objekts (0,4438, `zugeordnet`). Ob der Router-Prompt das Feld so zulässt oder das Modell es falsch füllt, ist nicht gelesen. - **2026-10-16** — **Die Sachlage hält einen älteren Termin als akut, nach dem im Turn niemand fragt — die gemeinsame Wurzel zweier Defekte.** In der Simulation an einem Prüf-Nutzer am 16.10.2026 (`labor/2026-10-15_sim_timeline_notizen/simnachher1/`) stand ein Termin aus früheren Sätzen weiter als akutes Objekt in der Lage, während der Mensch um eine Notiz bat. Seine Nähe zur Timeline zog den Notizauftrag dorthin (`NOTIZAUFTRAG-GEHT-AN-TIMELINE`), und sein Eintrag im Kalender deckte im Bestandsabgleich die falsche Bestätigung (`FALSCHE-BESTAETIGUNG-WIRD-ERINNERUNG`). Gebaut sind am 16.10.2026 nur die beiden Stellen, an denen er wirkte (Planner, Bestandsabgleich); **wie lange die Sachlage ein Objekt akut hält, ist nicht geändert** — das ist eine Frage an den Sachlage-Prompt und braucht eine Absicht. - **2026-10-16** — **Eine Lese-Antwort behauptete *„gerade eingetragen"*, und die Speicherprüfung ließ es durch.** In der Simulation an einem Prüf-Nutzer am 16.10.2026 nannte die Antwort auf eine reine Lesefrage nach dem nächsten Tag die Termine richtig und sagte dazu, sie seien gerade eingetragen worden — geschrieben wurde nichts. Durchgelassen, weil jeder abgeschlossene Dienst jede Behauptung deckt, auch ein Lesevorgang eine behauptete Schreibung — die benannte Grobheit in `server/utils/storage_claims.py::uncovered_claims` (Docstring) und `novaberg-node-tribunal.md`, *Was die Prüfung nicht kann*. **Seit die Lesefragen über die Timeline laufen (15.10.2026), trifft das öfter**, weil öfter ein Lesevorgang abgeschlossen meldet. → **Im Code behoben am 17.10.2026** (gebaut und getestet, noch nicht committet, im Betrieb nicht gemessen): Eine Speicherbehauptung deckt nur noch ein Dienst, der in diesem Turn verifiziert geschrieben hat (`utils/storage_claims.py::write_evidence`); ein Lesevorgang deckt nicht, und der Bestandsabgleich wird gefragt (`novaberg-node-tribunal.md`, *Ein Lesevorgang deckt nicht*). In der dritten Simulation vom 17.10.2026 trat derselbe Fall wieder auf — zwei von drei Läufen. - **2026-10-16** — ***„… steht fest im Kalender."* wird von `find_storage_claims` vermutlich nicht als Speicherbehauptung erkannt.** `server/utils/storage_claims.py` `_STANDS_IN_STORE` (um Z. 199–205) verlangt *jetzt* oder *nun* vor dem Ort (*„steht jetzt fest in der Timeline"*), und die Zustandsform mit Hilfsverb braucht ein Partizip; ein *„Der Termin steht fest im Kalender."* fiele durch beide. Aus dem Code gelesen, nicht gelaufen — eine Hypothese. Gesehen beim Bau der Nennung im Bestandsabgleich am 16.10.2026, dessen Zeugen deshalb eine andere Form verwenden. - **2026-10-17** — **`fakten` hat neben dem geplanten Fakten-Agenten einen zweiten Schreiber.** `agents/wiedervorlage/agent.py` setzt `fakten.wiedervorlage_am` über `FaktenRepository.set_wiedervorlage` (um Z. 288). Das Konzept des Faktengedächtnisses sagt, allein der Fakten-Agent schreibe (`novaberg-memory-fakten_k.md` §3.2); ob ein Wartungsfeld darunter fällt, sagt es nicht. - **2026-10-17** — **Die Timeline hat einen Schreibweg außerhalb des Timeline-Agenten.** `agents/kzg/magnete.py` (um Z. 239) legt Erinnerungs-Anker als Zeilen in `timeline` an. `novaberg-agent-timeline.md` §5.4 führt alle Schreibwege im Agenten. - **2026-10-15** — **Zwei Dokumente beschreiben den TimelineManager noch als Schreibweg.** `novaberg-architecture.md` §4.5 (Spalten `plan()` *„LLM plant CRUD“* und `execute()` *„Zeitparser + DB-Write“*) und §4.7 (*„Manager liefert … `plan()` (Zeitparser + Entity Resolution) und `execute()`“*), dazu `novaberg-memory.md` §6 (*„CRUD-Operationen laufen ueber den TimelineManager“*). Am Code (`plugins/timeline_manager/manager.py`, 15.10.2026): kein `plan()`, `execute()` ist ein Loud-Failure-Stub; geschrieben wird seit M2.5a nur im TimelineAgent (`novaberg-agent-timeline.md` §5.4, §10). Beim Nachziehen des Lesewegs gesehen, nicht berichtigt — markiert ist dort nur die Lese-Spalte `enrich()`. - **2026-10-15** — **Die Antwort überging einen gescheiterten Auftrag an die Timeline.** In der Simulation am Code vor dem Bau (Prüf-Nutzer mit gesäten Terminen, `labor/2026-10-15_sim_timeline_notizen.py`) endete der Timeline-Agent auf die Bitte, einen Termin nur mit einer neuen Uhrzeit zu verschieben, mit `fehler` und der Rückfrage nach dem Datum. Die Antwort gab den Wunsch wieder, als werde er ausgeführt — sie sagte nicht, dass nichts verschoben wurde, und stellte die Rückfrage nicht. Am Code erreicht der Aufgabenblock mit *„nichts eingetragen, nichts geaendert“* und der Rückfrage den Prompt des Responders (`graph/nodes/planner.py::_build_task_error`, `responder.aufgabe_fehler.txt`, Kontext-Schnitt); seit dem 15.10.2026 ist das bezeugt (`tests/test_timeline_reschedule.py::ErrorReachesTheAnswerTest`). **Ob der Block in diesem Lauf im Prompt stand, ist ungemessen** — das `pipeline_log` des Turns ist nicht gelesen. Ein Datenpunkt gegen den Betriebsbeleg vom 01.09.2026 (Featureliste *TimelineAgent*: bei `status=fehler` nennt die Antwort den Fehlschlag); verwandt mit `FALSCHE-BESTAETIGUNG-WIRD-ERINNERUNG`. Kein eigener Defekt mit Kennung, solange ungemessen ist, ob der Block da war. Nach dem Bau scheitert dieser Satz nicht mehr; messbar ist der Weg mit einem Satz ohne Zeitangabe oder mit zwei Uhrzeiten ohne *auf*/*nach*. - **2026-10-15** — **Die Antwort behauptet, Daten vorliegen zu haben, die sie nie gelesen hat.** *„Ich habe deine persönlichen Termine für diese Woche vorliegen“* — zweimal, ohne einen Lesevorgang im Turn und ohne einen Termin zu nennen; keine Prüfung hinter der Antwort hält eine Verfügbarkeitsbehauptung gegen die Lesewege des Turns. (17:29, 17:50 UTC) → **Im Prompt abgefangen am 15.10.2026, im Betrieb nicht gemessen:** Der Block `[TERMINE]` des Verfassers steht in jedem Turn mit dem gelesenen Zeitraum und sagt ausdrücklich *„keine Termine vom … bis …“* oder, nach einem Lesefehler, dass über die Termine nichts bekannt ist. Der Prompt-Satz dort (`prompts/default/verfasser.termine.txt`): *„Termine von Person B nennt der Inhalt nur aus diesem Block — nicht aus dem Gedaechtnis, nicht aus einer Web-Recherche, nicht aus dem Verlauf. Steht hier "keine Termine", sagt der Inhalt genau das: dass keine eingetragen sind.“* **Eine Prüfung hinter der Antwort fehlt weiter** — der Satz ist eine Anweisung an das Modell, keine Zusicherung, und auf dem Aufgabenpfad, auf dem der Verfasser nicht läuft, gilt er nicht. Der Fund bleibt offen. Chronik 15.10.2026. - **2026-10-15** — **Ein Termin aus einer Vorrecherche wird als Termin des Menschen ausgegeben.** Auf *„was haben wir für Termine diese Woche?“* nannte die Antwort einen Programmpunkt aus einem Programmheft der Bibliothek (Freitag, 15 Uhr) — die Herkunft stand nicht im Kontext, oder sie wurde nicht gewogen. (17:26 UTC) → **Herkunft am Code geklärt, im Code behoben am 15.10.2026, im Betrieb nicht gemessen.** Die Vorrecherche war die Websuche der Sachlage: Die offene Eigenschaft trug den Träger `nachschlagen`, und der Treffer stand dem Verfasser als *„Nachgeschlagen zu …“* im `[SACHLAGE]`-Block. Fragt die Äußerung nach dem eigenen Bestand des Menschen — die erste Person als Subjekt oder Besitz **und** ein Merkmal des Bestands (*Termin*, *Kalender*, *Notiz*, *vorhaben* …) oder ein Zeitbezug auf das eigene Tun —, unterbleibt diese Websuche jetzt, mit der Logzeile *„Sachlage-Recherche unterbleibt: Frage nach eigenem Bestand (Merkmal …)“* (`graph/nodes/sachlage_research.py::own_records_cue`, die Weiche am Ende von `graph/nodes/sachlage.py::_derive`). Die Kalenderzeilen im Angebot des Auflösers schließen Erinnerungs-Anker aus (~~`graph/nodes/sachlage_resolver.py::_calendar_hits`~~ → seit dem 17.10.2026 im gemeinsamen Leseweg der Termine, den der Auflöser nimmt: `memory/timeline_reading.py`, `novaberg-thinking-lage_b.md` §4 Scheibe 6). 30 Zeugen (`tests/test_sachlage_own_records.py`, `tests/test_sachlage_calendar_anchor.py`); Chronik 15.10.2026. **Der Fund bleibt offen, weil die Erkennung eine Grenze hat** (Beispiele synthetisch): Monatsnamen und ein Datum nur mit Tag gelten nicht als Zeitbezug — *„Was mache ich im Dezember?“*, *„Hab ich am 20. Oktober was?“* werden nicht erkannt, mit einem Wort des Bestands oder *„steht … an“* schon —, und eine Folgefrage ohne Merkmal (*„Und nächste Woche?“*) liest nur die Äußerung ihres Turns. In Kauf genommen ist die Gegenrichtung: *„Was steht diese Woche in der Bundesliga an?“*, *„Wann kann ich ins Planetarium?“*, *„Wann haben wir Vollmond?“* unterdrücken eine Websuche. Ob beides im Betrieb vorkommt, zeigt die Messung nach dem Commit. - **2026-10-15** — **Der Erinnerungsanker eines neuen Termins steht auf derselben Minute wie der Termin.** Termin 16.10.2026 10:00 Ortszeit, Anker 10:00 Ortszeit (`event_time` je 08:00 UTC), angelegt im selben Turn; eine Erinnerung zur Minute des Termins erinnert nicht vorher. Absicht oder Defekt ungeprüft. (17:53 UTC) → **Geklärt am 15.10.2026, am Code:** Der Anker ist als Klasse *Bezug* gewollt — still aus der Salienz angelegt, Flags False/False/False (`novaberg-convention-magneten.md` §5) — und ist **keine Erinnerung. Eine Erinnerung gibt es im System nicht:** `timeline.remind` wird geschrieben (`agents/timeline/crud.py`, `memory/repositories/timeline_repository.py::insert`) und nirgends gelesen. Dass der Anker auf der Minute des Termins steht, verspricht also nichts, was ausbleibt. Seit dem Bau vom 15.10.2026 ist er in keinem Leseweg mehr ein Termin. Offen bleibt die Frage zur Anlage selbst (`novaberg-thinking-lage_e.md`, offene Frage 3: soll ein Termin einen vorhandenen Anker übernehmen). Ungeprüft: Nach `novaberg-agent-timeline.md` §10 übernimmt der Gedächtnisweg die Kennung eines im selben Turn angelegten Termins, statt einen eigenen Anker anzulegen — ob das hier griff, ist nicht nachgesehen. - **2026-10-15** — **Vier kurzfristige Ziele zum selben Thema in elf Minuten.** In den Messturns über Saturnringe (16:33–16:48 UTC) entstanden die Ziele 48209–48212, alle `kurzfristig`, Motivation 0,70, Thema *Saturnringe* (16:35, 16:41, 16:43, 16:46 UTC); dasselbe Bild am 04.10.2026 mit zweimal *Saturnmassenverteilung*. Ein bestehendes Ziel desselben Themas wird nicht wiedererkannt, sondern neu angelegt — und jedes neue kurzfristige Ziel ist per Bauart aktiviert. `[gemessen 15.10.2026]`, nur Zahlen- und Themenfelder gelesen. - ~~**2026-10-15** — **Verfasser, Tribunal, Thinker und Router lesen das heutige Datum mit `datetime.now()` und den Wochentag mit `%A`** (`graph/nodes/verfasser.py` um Z. 459/499, `tribunal.py` um Z. 496/522, `thinker.py` um Z. 626, `router.py` um Z. 53) — der Responder hat genau diesen Zeitzonen- und Locale-Fehler laut seinem Kommentar behoben (`responder.py` um Z. 256–264). Das Urteil des Tribunals über ein Datum und der Prompt, in dem das Datum entsteht, können sich damit um einen Tag unterscheiden. Gelesen am Code; ob der Behälter in UTC läuft, ist nicht geprüft. → **behoben am 15.10.2026**: alle Knoten unter `server/graph/` lesen *heute* über `utils/local_time.py` (dazu die Perzeption, die der Fund nicht nannte); Chronik 15.10.2026. - **2026-10-15** — **`traeger_strangnaehe` schluckt einen Lesefehler als *kein Strangbezug*.** `server/memory/fascination_store.py` (um Z. 354–380) fängt jeden `psycopg2.Error` beim Verbinden und bei der Abfrage ab, meldet ihn im Log und gibt `{}` zurück — dasselbe Ergebnis wie *kein Träger liegt an einem Strang*. Alle drei Leser (Bestandslauf, Leser des Haltungsraums, Prägungsknoten) rechnen dann mit Strangzug 1,0, und keiner kann den Ausfall vom Normalfall unterscheiden. Gelesen am Code, nicht gemessen. - **2026-10-15** — **Seit dem 12.09.2026 erreicht fast keine offene Frage mehr den Prompt des Gesprächsvektors.** `[gemessen 15.10.2026, 00:50 UTC, `pipeline_log`, Schritt `strategie_tor`, nur Zahlenfelder]` Von 321 Turns ab dem 10.09.2026 trugen 35 mindestens eine angebotene offene Frage — 33 davon in der Woche ab dem 07.09.2026, danach in vier Wochen 2 von 142. Die Auswahl nimmt seit dem 12.09.2026 nur Fragen über `OFFENE_FRAGEN_MIN_NAEHE` zum Reiz (`staerkste_luecken`, `F-GV-2`), und *„eine leere Auswahl ist jetzt der Normalfall“* steht dort als Absicht. Ob die Untergrenze so eng gemeint war, dass der Leser der Neugier im Turn praktisch schweigt, ist ungeprüft; der Hintergrundlauf ist seit dem 03.10.2026 pausiert, der Bestand an Lücken steht. - **2026-10-06** — **Das Moduldokument des Responders führt `[REGELN]` als aktiven Block:** `novaberg-node-responder.md` nennt ihn in der Blockfolge (Punkt 8, *„Antwortkürze, verbotene Floskeln, Butler-Prinzip, Tag-Unterdrückung“*) und im Kontext-Schnitt (*Stil ([KOMMUNIKATION], [REGELN])*); ebenso `novaberg-agent-directives.md` (*[DIREKTIVEN] nach [REGELN]*). Der Block ist seit dem 31.07.2026 *„zur Probe ausgesetzt“* (`server/graph/nodes/responder.py:632-646`), und am 06.10.2026 ist entschieden, dass er ausgesetzt bleibt. Gefunden bei der Suche nach Soll-Stellen, die den Entscheidungen vom 06.10.2026 widersprechen. - **2026-10-05** — **Ein Recherchelauf hinterlässt `gestartet` ohne Abschlusszeile:** In `hintergrund_log` (`aufgabe = 'recherche'`) stehen am 03.10.2026 7 Zeilen `gestartet` gegen 5 `erledigt` und 1 `fehler`; der Lauf mit `gestartet` um 11:58:35 UTC hat keinen Abschluss, der nächste beginnt um 12:08:41 UTC. `RechercheAgent.invoke` sichert *„genau eine `gestartet`- und genau eine Abschlusszeile“* zu (`server/agents/recherche/agent.py`, Docstring). Ursache nicht ermittelt; ein Neustart des Dienstes mitten im Lauf hinterließe genau dieses Bild. `[gezählt 05.10.2026, ohne Inhalte]` - **2026-10-05** — **Novas Prompt nennt an drei Stellen weiter einen „Agenten“ als Handelnden:** `server/graph/nodes/planner.py:177` und `:224` (`- Agent '{r.agent_name}': …` in den Blöcken für verworfene und gescheiterte Aufträge) und `server/prompts/default/responder.aufgabe_rueckfrage.txt:2` (*„Ein Agent benoetigt eine Rueckmeldung vom Benutzer.“*). Dieselbe Klasse wie das behobene `NOVA-SPRICHT-VON-FACHABTEILUNG`, das nur die Blöcke für Erfolg und Ablehnung umgestellt hat. → **08.11.2026:** Die erste der drei Stellen ist behoben — `_build_task_dismissed` nennt seit dem Code-Tree `33a7b83` (Kennung wird nachgetragen) den Dienst ohne das Wort. Der Block für gescheiterte Aufträge (`_build_task_error`, am Tree Z. 228; das Literal hält `server/tests/test_task_block_fehler.py:53`) und der Rahmen der Rückfrage tragen es weiter; an einer Wegwerf-Datenbank stand es im Fehlerblock zweimal (labor/2026-11-08_tor_messung.txt). - **2026-10-05** — **Ein verlorenes `ende` eines Pixie-Auftrags bleibt in der Statuszeile stehen:** Die Aufträge Pixies haben im Arbeitszustand keinen Wächter (`client/ui/work_state.py`, `_advance_job`). Geht ein `ende` verloren, etwa bei einem Verbindungsabbruch, zeigt die Statuszeile den Auftrag bis zum nächsten `beginn` derselben Spur, der ihn mit einer Warning ersetzt, oder bis zum Neustart. Der Server sendet `ende` auch nach einem Fehler. - **2026-10-05** — **Zwischen Senden und Bestätigung kennt der Arbeitszustand die neue Kennung nicht:** Trifft in diesem Fenster die Antwort auf eine ältere Nachricht ein, deren Kennung als einzige offen ist, endet das Denken, obwohl die neue Nachricht noch läuft. Die Statuszeile zeigt dann *idle*, bis zum nächsten Beginn oder zur Antwort (`client/ui/work_state.py`, `message_opened`, `turn_answered`). Das Fenster ist wenige Millisekunden lang. - **2026-10-05** — **Eine Antwort ohne `nachrichten_ids` beendet keinen Turn:** Bei offener Menge denkt der Turn in der Statuszeile weiter bis zum Wächter von 600 s (`client/ui/work_state.py`, `turn_answered`), wie es die Zuordnung `fremd` des Stream-Handlers sieht. - **2026-10-05** — **„idle“ steht zweimal im Client, und ein Kopfkommentar nennt die alte Anzeige:** der Anfangstext in `client/ui/status_bar.py` und `IDLE_TEXT` in `client/ui/work_state.py`. Der Kopfkommentar von `status_bar.py` nennt noch „Pixie-Zustand (rechts)“, wo jetzt der Arbeitszustand steht. - **2026-10-05** — **Ein Docstring nennt einen Weg, der nicht mehr über ihn läuft:** `client/avatar/base_image.py`, `draw_triangle`: *„Gilt für die Kinnverzerrung und die Kopfdrehung.“* Die Kopfdrehung zeichnet seit der Beschleunigung über `fill_triangles`; `draw_triangle` dient nur noch der Kinnverzerrung. - **2026-10-05** — **Der Prototyp ohne Fenster hängt mit gedrehtem Kopf zeitweise:** Eine Aufnahme von `labor/avatar/index.html` mit festem Kopf 8° (Drehweg über das Gitter) und `--virtual-time-budget=1500` lieferte bis 17:47 UTC ihr Ergebnis in Sekunden (12 Läufe) und hing ab etwa 18:00 UTC bei derselben Seite bis zum Abbruch nach 60 s, der Stand vor dem Bau ebenso (2 von 2 Läufen); mit Kopf 0 lief jede Aufnahme durch. Messungen an echten Zuständen des Leerlaufs (fast immer mit Kopf) sind damit zeitweise nicht möglich. Die Leerlaufseite im Aufnahmemodus hängt außerdem mit jedem zusätzlichen Skript, ohne eins nicht. Ursache offen; auf dem Wirt lief zugleich ein anderer Prozess unter Volllast. `[gemessen 05.10.2026]` - ~~**2026-10-05** — **Ein Synonym im Feld `emotion` der Antwort erreicht den Avatar unkanonisiert:**~~ Der Kanon der Wahrnehmung schließt Synonyme ein (`server/graph/nodes/perzeption.py:101`), `to_canonical` gibt einen Wert daraus unverändert zurück (`server/utils/canon.py:113-114`); `character_response.emotion` kann so etwa „sorge“ tragen, und der Avatar zeigt dann neutral mit einer Error-Zeile (`client/avatar/puppet.py:492-494`). Dasselbe gilt für die Emotion eines Pixie-Auftrags, die auf ihrem Weg nicht kanonisiert wird (`client/avatar/idle.py:455-457`). `[abgeleitet aus dem Code 05.10.2026, nicht gemessen]` → **Umgezogen am 05.10.2026** nach `novaberg-bugs-antwortpfad.md` als `EMOTION-SYNONYM-UNAUFGELOEST`, eingetragen am 05.10.2026. - **2026-10-05** — **`emotions_verlauf` in `character_response` ist immer leer:** Das Feld liest `state["emotions_verlauf"]` (`server/services/event_consumer.py:708`), dessen einziger Schreiber der HumanGraph ist (`server/graph/nodes/ei_calc.py:140`); im CharacterGraph bleibt der Anfangswert `[]`. `nova_emotions_vektor` ist zudem derselbe Wert wie `emotions_vektor` (`:707`, `:714`). `[abgeleitet aus dem Code 05.10.2026]` - ~~**2026-10-05** — **Bricht die Wahrnehmung der eigenen Antwort ab, geht der Stand von vor der Antwort ohne Kennzeichnung hinaus:**~~ `_wahrnehmung_erheben` fängt nur `JSONDecodeError` und `KeyError` (`server/graph/nodes/perzeption.py:304`); bei jedem anderen Fehler endet der Graph, und der Rückfallpfad (`server/services/event_consumer.py:929-937`) sendet `internal.emotion` aus der Rechnung vor der Antwort, ohne Marke in der Nachricht. Ebenso tragen `gespraechs_modus` und `sprach_stil` den rohen Wert der Wahrnehmung, weil `ei_calc_persist` sie erst nach dem Senden korrigiert (`server/graph/nodes/ei_calc_persist.py:172`, `:209`). `[abgeleitet aus dem Code 05.10.2026, nicht gemessen]` → **Umgezogen am 05.10.2026** nach `novaberg-bugs-antwortpfad.md` als `WAHRNEHMUNG-RUECKFALL-UNMARKIERT`, eingetragen am 05.10.2026. - **2026-10-05** — **`labor/avatar/sicht_client.py` ruft `draw_eyes` noch mit der alten Form:** Seit dem Blickhalt im Client nimmt `draw_eyes` die `Pose` (`client/avatar/drawing.py`); das Werkzeug übergibt `face, 1.0, 0` (Z. 45) und bricht beim nächsten Lauf ab. Gefunden über `grep` nach den Aufrufern, nicht gelaufen. - **2026-10-05** — **Ein Wort, das nur aus `ch` besteht, hat keinen Laut:** `word_to_phonemes` bildet den Cluster `ch` auf kein Phonem ab (`client/avatar/speech.py`, `_CLUSTERS`, `("ch", ())`; der Laut hängt sonst am Vokal davor). Ohne Vokal davor entsteht nichts: Der Mund bewegt sich nicht, und der Untertitel unterstreicht das Wort nie. Die Tabelle folgt laut Kommentar dem Prototyp, dort nicht nachgeprüft; aufgefallen beim Bau der Untertitel. - **2026-10-04** — **Ein Pflichtfeld der Pose hat einen Vorgabewert:** `client/avatar/pose.py`, `Pose.head_yaw: float = 0.0`. Der einzige Erzeuger im Code (`puppet_step`) setzt den Wert ausdrücklich; den Vorgabewert nutzt nur ein Zeugen-Helfer (`test_avatar_compose.py`). Vergisst ein künftiger Erzeuger das Feld, steht der Kopf still gerade, und nichts meldet es. - **2026-10-04** — **Ein Messwert im Kommentar eines Zeugen trägt kein Datum:** `client/tests/test_avatar_idle.py` (L-6, um Z. 737) nennt *„in den drei langen Läufen der Referenz liegt der Median 1,2 s über dem Modell“*. Der Wert stammt aus `idle.json` und veraltet, sobald die Referenz neu erzeugt wird. - **2026-10-04** — **Das Modell des L-6-Zeugen schreibt die Formel der Logik nach, statt sie aufzurufen:** `client/tests/test_avatar_idle.py`, `_longest_pause_median_ms`, gegen `client/avatar/idle.py` (Abstand der Lidschläge, um Z. 3035 und 3068). Ändert sich der Abstand in der Logik, folgt das Modell nicht; die Charakterisierung und L-6 am Lauf fangen es heute. - **2026-10-04** — **Ein paarweises `zip` ohne `strict` in einem Zeugen:** `client/tests/test_avatar_idle.py:424`, `zip(times, times[1:])` (ruff B905). Die Längen sind absichtlich verschieden, nichts geht verloren; `itertools.pairwise` sagt dasselbe ohne Befund. - **2026-10-04** — **Zeugen hängen über private Namen aneinander:** `client/tests/test_avatar_puppet.py` importiert `_replay` und `_sorted_inputs` aus `tests.test_avatar_idle`, wie schon `test_avatar_status_logic.py`. Ein Umbau der Charakterisierung bricht damit fremde Zeugen. - **2026-10-04** — **Der Zeuge des geschlossenen Auges prüft Breite, Deckkraft und Punktzahl je Strich, nicht Zittern und Lage:** `client/tests/test_avatar_drawing.py`. Ein Fehler im Index der Lidlinie, in der Spitze oder im Versatz der Wurzeln einer Wimper bliebe grün; heute stimmt der Code mit dem Prototyp überein (am Code geprüft). - **2026-10-04** — **Unter einer Sektionsmarke steht nur ein `return`:** `client/avatar/idle.py` um Z. 1133, `# ── Verarbeitung ──` und darunter nur `return StatusForm(…)` (Bestand, nicht neu). - **2026-10-04** — **Die Referenz der Kopfdrehung ist nicht bytegleich reproduzierbar:** `client/tests/avatar_reference/yaw.json` neu aus demselben Prototyp (`145c2d3f…`) erzeugt weicht in 26 von 5.568 Werten um etwa 1e-14 ab (Node aus Electron). Die Toleranz des Zeugen liegt bei 1e-9; ein Vergleich über die Prüfsumme der Datei schlüge fehl. - **2026-10-04** — **Der Monatswechsel der Chronik steht aus:** `novaberg-roadmap.md` trägt 138 Einträge aus dem September und die aus dem Oktober; ein `novaberg-roadmap-2026-09.md` gibt es nicht. - **2026-10-04** — **L-6 (längste Pause im Nachdenken) hält in der Referenz ohne Abstand:** In der Lage *langes Nachdenken* liegt der Median bei 10,0 s, die Grenze bei 10 s (`labor/avatar/leerlauf_pruefen.py`). Die Gegenprobe Y5 zu L0′c änderte nur den Zufall des Plans und machte daraus 10,1 s, einen Verstoß, der nicht zum Eingriff gehört. Jede Änderung, die die Ziehungen des Nachdenkens verschiebt, kann L-6 kippen, auch L1′. `[gemessen 04.10.2026, fünf Prüfläufe]` - **2026-10-04** — **Die Recherche zum Leerlauf trägt die Werte vor der Nachstellung:** `labor/avatar/recherche_mimik_leerlauf.md` (§1.2 Formen, §2 Zeitwerte, §5 Generator) steht auf dem 03.10.2026; F5 mit festem Blick, E1, der Weg der Iris, Gamma(3), die Pupille aus der Erregung und der Kopf aus L0′a–L0′c stehen dort nicht. `novaberg-avatar_t.md` §17.1 nennt sie als Ort der Werte des Generators und ihrer Herkunft. `[gelesen 04.10.2026]` - **2026-10-04** — **Die Antwort wartet beim Senden auf die Wahrnehmung der eigenen Antwort, 2,3–2,7 s je Turn:** Die Auslieferung „bei Freigabe“ hängt am Erscheinen von `perzeption_assistant` im Stream (`server/services/event_consumer.py`, `_KNOTEN_NACH_FREIGABE`), und ein Knoten erscheint dort erst, wenn er gelaufen ist — also nach seinem Modellaufruf. Gemessen an sieben Turns vom 04.10.2026 (letzte Weiche `evaluate` → `Antwort bei Freigabe gesendet`): 2,32, 2,54, 2,47, 2,60, 2,70, 2,60 und 2,51 s. Der Kommentar dort sagt *„Erscheint er also, ist entschieden“*, und der Docstring von `_antwort_nutzlast_bauen` sagt, die Felder aus `internal` seien *„bei der Freigabe leer“* — gemessen tragen sie die Wahrnehmung der eigenen Antwort. `[gemessen 04.10.2026, Server-Log]` → **Entschieden 04.10.2026:** Die Wartezeit ist gewollt — das Gesicht zeigt diese Wahrnehmung (`novaberg-avatar_k.md` §3). Docstring und Kommentar sind berichtigt. - **2026-10-04** — **Die Antwort trägt Novas Emotion des vorigen Turns, nicht die des eigenen:** Gespeichert hat `ei_calc_persist` nacheinander Freude 0,60 (12:09 UTC), 0,65 (13:04, Turn A) und 0,50 (13:06, Turn B). Im Avatar-Panel stand bei Turn A 0,60 und bei Turn B 0,65, also jedes Mal der Wert des Turns davor (zwei von zwei). Die Antwort geht „bei Freigabe“ hinaus (`event_consumer`) in derselben Millisekunde, in der `ei_calc_persist` erst startet. ~~**Ursache ungeprüft (Hypothese):** Die Nutzlast liest `nova_emotion`/`nova_arousal`, bevor der Turn sie schreibt.~~ `[gemessen 04.10.2026, Server-Log gegen Mitschnitt]` → **Ursache gemessen 04.10.2026, die Hypothese ist widerlegt:** Es ist kein Wettlauf. `nova_emotion`/`nova_arousal` sind Eintrag 0 von `nova_emotions_verlauf`, den `ei_calc` **zu Beginn des Turns** aus Novas früheren Antworten rechnet (mit Abklingen, dazu Empathie) — so beschrieben in `novaberg-avatar_t.md` (Tabelle der Felder: *„gerechnet vor dem Responder“*). Die Wahrnehmung der eigenen Antwort liegt beim Senden schon vor: `perzeption_assistant` endet 6 ms vor dem Senden (13:04:42,356 → 42,362; 13:06:37,221 → 37,227), und die Nutzlast trägt sie als `emotion`/`arousal` aus `internal.emotion`. Das Panel liest `nova_emotion`/`nova_arousal` (`client/avatar/puppet.py` `utterance_from_turn`). Der Verlauf zu Turnbeginn trug bei Turn A `a=0.60`, bei Turn B `a=0.65`, die Wahrnehmung der jeweiligen Antwort 0,65 und 0,50 (Server-Log, `EI-Calc/Character: Emotions-Verlauf` gegen `Perzeption: rolle=assistant`). → **Behoben 04.10.2026, 14:16 UTC:** Das Gesicht liest `emotion`/`arousal` (entschieden, `novaberg-avatar_k.md` §3; `novaberg-avatar_b.md` §16). Im Betrieb gemessen an zwei Turns: das Panel zeigt 0,65 und 0,50, die Wahrnehmung. - **2026-10-04** — ~~**Die Phasenanzeige des Avatars lässt das Gesicht springen:** Im Nachklang bricht ihre erste Zeile um, die Anzeige wird höher, und das Gesicht schrumpft von 409 auf 392 px. Bei jedem Wechsel in den Nachklang und aus ihm heraus springt es (im Mitschnitt viermal). `[gemessen 04.10.2026, Mitschnitt der Messung von L6]`~~ → **behoben 04.10.2026, 13:41 UTC:** Die Zeilen brechen nicht mehr um, sie werden gekürzt (`novaberg-avatar_b.md` §18). - **2026-10-04** — **Die Blickrichtung des Leerlaufs erreicht das Bild kaum:** Die Anzeige nennt *seitlich*, *oben-seitlich*, *unten-seitlich* und *zum Betrachter*, und die Iris steht dabei auf ≤ 1 px gleich (26,6 gegen 26,7 px bei rund 50 px Augenbreite). Ob die Ziele klein sind oder die Zeichnung sie kaum umsetzt, ist offen. `[gemessen 04.10.2026, Mitschnitt]` **Nachtrag, 04.10.2026 abends — in der Referenz behoben, der Client folgt mit L1′/L2′:** Es lag an der Zeichnung — die Iris wanderte je Einheit Blick nur 0,3 der halben Augenbreite (1–1,5 px). Seit L0′b 0,5 waagrecht und 0,26 senkrecht, dazu hebt sich das Oberlid beim Blick nach oben (`novaberg-avatar_t.md` §17.3, `novaberg-avatar_b.md` §18). - **2026-10-04** — **Der Phasenanzeige des Avatars fehlen zwei Stücke des Generators:** der Marker der Stelle im Band (der Generator zeichnet einen Strich in die laufende Form) und ein Zeuge dafür, dass das Panel den 120-ms-Takt (`status_due`) wirklich aufruft — das Panel braucht GTK, die Zeugen laufen ohne. Dazu zwei kleine Abweichungen: `n` in der Zeile der Spanne ist die Sollzahl (`span.count`), der Generator zeigt die gezogene; und ein Fehler beim **Aufbau** der Anzeige steht nur im Log, nicht im Panel (beim Aktualisieren steht er in beiden). `[gelesen 04.10.2026, Bau L6 und seine Prüfung]` → **Der Teil zu `n` behoben 09.10.2026, 14:41 UTC** (`ff20229`, `novaberg-avatar_b.md` §18): `n` ist die gezogene Zahl. Offen bleiben der Marker im Band, der Zeuge für den Takt und der Fehler beim Aufbau. - **2026-10-04** — **Im Betrieb liest sich das Nachdenken des Avatars als Warten:** Im Bildschirmmitschnitt eines Turns (125 s Nachdenken) bleibt der Blick fast immer beim Betrachter, mit 7 Blickwechseln in 125 s. Der Nachlauf desselben Turns mit dem Code des Clients bestätigt das: `|gaze_x|` liegt im Nachdenken im Mittel bei 0,23, im Rauschen bei 0,21. Die Logik plant, wie der Generator plant (L1 ist gegen ihn charakterisiert); der Abstand liegt also in der Referenz, nicht im Weg der Ereignisse. `novaberg-avatar_b.md` §18.1 verlangt im Nachdenken den Blick abgewandt. `[gemessen 04.10.2026, Mitschnitt 60 fps und Nachlauf]` **Nachtrag, 04.10.2026 abends — in der Referenz behoben, der Client folgt mit L1′/L2′:** Seit L0′a schaut F5 seitlich unten ins Leere, F9 ist im Nachdenken ein kurzer Akzent und F16 kommt dort halb so oft und kürzer; geplant beim Betrachter 9,0 % der Nachdenkzeit, vorher 29 %. Seit L0′c wendet sich dazu der Kopf mit dem Blick (`novaberg-avatar_b.md` §18). - **2026-10-04** — **Das Einatmen vor der Antwort ist kaum sichtbar, und der Sprechbeginn springt:** Der Nachlauf zeigt 0,75 s Einatmen mit einer Lippenöffnung bis 3,7 px. Danach öffnet das Sprechen den Mund in 0,1–0,2 s auf 40–60 px, und `mouth_curve` steigt in 0,6 s von 4 auf 20. Im Mitschnitt ist der Mund bis zum Sprechbeginn zu und 0,2 s später als breites Grinsen offen. Freude bei Arousal 0,50 erscheint dabei als Grinsen mit Zähnen, 110 s lang unverändert. `[gemessen 04.10.2026]` **Nachtrag, Messung von L6:** Die Anzeige nennt *atmet ein* für 0,75 s, wie geplant. Die Lippen ändern sich dabei nur um etwa 1 %. Der Sprechbeginn geht in 0,2–0,3 s von neutral zu einem offenen Grinsen. **Nachtrag, 04.10.2026 abends — in der Referenz behoben, der Client folgt mit L1′/L2′:** Seit L0′a öffnet das Einatmen den Mund auf 7–11 und weitet die Augen etwas; die Antwort gleitet über A0 in ihre Emotion mit dem Faktor 0,75, die Öffnung der Basis bleibt dort ≤ 2, der Kiefer folgt mit 0,75 (`novaberg-avatar_t.md` §17.3, §17.5). - **2026-10-04** — **Die Lidschläge des Avatars verteilen sich ungleich und schließen im Bild zu schnell:** Im Nachdenken kommen sie in Gruppen von 2–3 bei jedem Blickwechsel, mit Pausen bis 21 s. Direkt nach dem Sprechende kommen 5 in 4 s. Im Mitschnitt schließt das Auge in höchstens 33 ms und ist dann ein Strich ohne Wimpern; die Logik schließt in 67–83 ms (Median 83 ms, 63 Lidschläge im Nachlauf). Der Unterschied liegt also in der Zeichnung des geschlossenen Auges. `[gemessen 04.10.2026]` **Nachtrag, Messung von L6:** Das Schließen dauert im Bild jetzt 70–100 ms. Das geschlossene Auge bleibt ein Strich ohne Wimpern. Im Nachklang liegt die Rate mit 32,5/min am höchsten aller Zustände, etwa ein Lidschlag je Sekunde. Im Nachdenken kamen 4 Lidschläge in 1,4 s, und die längste Pause dauerte 22,3 s. **Nachtrag, 04.10.2026 abends — in der Referenz behoben, der Client folgt mit L1′/L2′:** Seit L0′b Abstände nach Sperrzeit + Gamma(3), ein in der Sperrzeit fälliger Lidschlag wird neu gezogen, am Ende der Antwort genau einer mit 1,5 s Sperre, die Energie klingt im Nachklang aus, das Auge bleibt 40 ms × Lidform geschlossen, und das geschlossene Auge trägt Wimpern (`novaberg-avatar_t.md` §17.6). Gemessen in der Referenz: um das Ende der Antwort in keinem Lauf mehr 4 Lidschläge. - **2026-10-04** — **Eine Antwort trägt eine Formel in LaTeX-Schreibweise roh in den Chat, und eine Wendung steht in derselben Antwort zweimal wörtlich:** gesehen im Mitschnitt eines Turns über Astronomie. Ob der Chat LaTeX darstellen soll oder die Antwort es vermeiden soll, ist offen. `[gesehen 04.10.2026]` - **2026-10-04** — **Der Auffangzweig des Stream-Handlers macht jeden unbekannten Typ des WebSockets zu einem Wort Novas im Chat:** `client/ui/stream_handler.py` `_ws_on_message` (`text = nachricht or json.dumps(data, …)`, dann `_invoke_impulse`) → `MainWindow._handle_impulse` → `ChatView.add_impulse_message`. L3 nimmt die vier Ereignisse der Arbeitszyklen heraus (`novaberg-avatar_t.md` §17.10); für jeden weiteren neuen Typ des Servers gilt es weiter, und kein Zeuge prüft es. `[gelesen 04.10.2026, Architekturentwurf für L3]` - **2026-10-04** — **`MainWindow._awaiting_response` ist ein einzelner Wahrheitswert für mehrere offene Nachrichten:** Nach der ersten von zwei Antworten steht die Verbindungsanzeige auf „Verbunden“, obwohl die zweite Nachricht offen ist — `StreamHandler._offene_nachrichten` führt sie. Betroffen ist nur die Verbindungsanzeige; der Arbeitszustand aus `novaberg-avatar_t.md` §17.10 folgt der offenen Menge. `[gelesen 04.10.2026]` `client/ui/main_window.py` (`_awaiting_response`, gesetzt beim Senden, gelöscht bei Antwort und Fehler). - **2026-10-04** — **`event_type` hat im Paket des Avatars zwei Bedeutungen:** In `client/avatar/puppet.py` `puppet_event(puppet, event_type: type, …)` ist es eine Klasse, in `client/avatar/idle.py` (`event_type: ClassVar[str]` der Ereignisklassen) der Name auf dem Draht. Mit L3 stehen beide nebeneinander. `[gelesen 04.10.2026]` - **2026-10-03** — **Das System-Panel zeigt Pixie immer als `idle`: Der Scheduler schreibt `shadow_status` mit dem Schlüssel `task`, das Panel liest `zustand`; der Health-Endpunkt reicht das JSON unverändert durch und schluckt einen Lesefehler mit `except Exception: pass`.** `[gelesen 03.10.2026]` `server/services/pixie/scheduler.py` Z. 132–136, 160–162; `server/api/health.py` Z. 153–161; `client/ui/panels/system_panel.py` Z. 117. - **2026-10-03** — **Die Entscheidungstabelle des Avatars endet am 02.10.2026, der Kopf des Konzepts zählt „Entschieden: 10“; die drei Entscheidungen vom 03.10.2026 stehen nur in `novaberg-avatar_k.md` §3.** `[gelesen 03.10.2026]` `novaberg-avatar_e.md` Abschnitt *Entscheidungen*, `novaberg-avatar_k.md` Kopfblock. **Seit 04.10.2026** stehen dort auch die Entscheidungen zum Weg der Arbeitszyklen im Client nur in `_k` §3 und `_t` §17.10. - **2026-10-03** — **`SECTOR_BY_NAME` steht zweimal im Client:** `client/avatar/idle_catalog.py` und `client/avatar/puppet.py` führen dieselbe Abbildung Emotion → Sektor, verschieden nur bei `neutral` (0 gegen `None`); kein Zeuge bindet die beiden aneinander. Ein Import aus `puppet.py` hätte `animator` und `speech` in die reine Logik gezogen. Mit L2 berührt ein Bau beide Dateien. **Seit L2:** Die Puppe übersetzt den Sektor für die Logik zurück in einen Namen (`NAME_BY_SECTOR`); ein Zeuge bindet diese Rückrichtung an die Tabelle der Logik, die beiden Tabellen selbst bindet weiter keiner. - **2026-10-03** — **Der Modul-Docstring von `client/avatar/animator.py` nennt den Mundversatz als einzige Art der Feder**; seit L2 rechnet die Puppe über `spring_step_each` mit ω je Kanal und ohne Versatz. - **2026-10-02** — **`novaberg-avatar_t.md` §15 nennt 1312 Zeilen für den Prototyp, gezählt sind 1335; die Umfänge in §15.2 weichen ab** (Ausdruck 65 statt ≈ 55, Sprechen 283 statt ≈ 270, Zeichnen 652 statt ≈ 600, Grundbild 82 statt ≈ 120 — Zeilenspannen aus einer Suche nach den Funktionsgrenzen). `[gemessen 02.10.2026, Entwurf der Ablage im Client]` Für den Zuschnitt der Bauteile: Das Zeichnen ist der größte Teil. - **2026-10-02** — **Der Verfasser trägt laut Docstring die Absicht, liest sie aber nicht; `gv_detail["absicht"]` hat im Antwortpfad keinen Leser.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `server/graph/nodes/verfasser.py` Z. 77 gegen Z. 125–127 (gelesen werden `strategie`, `vehikel`, `impuls`); im Responder und in `haltungssprache.py`, `farbton.py` kein Zugriff; gelesen nur im Client-Panel `client/ui/panels/gv_panel.py`. - **2026-10-02** — **Die Energie-Zeile der Regie und die EI-Mikroanweisung des Responders nehmen das Arousal des Nutzers, nicht Novas.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `server/graph/nodes/responder.py` Z. 1104, 1148–1150, 1159–1167 lesen `external.emotion.arousal`. Ob das gewollt ist, steht nirgends. - **2026-10-02** — **`emotions_verlauf` bleibt im CharacterGraph immer leer; der Responder fällt auf die Einzelemotion zurück, und `character_response` schickt das leere Feld mit.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` Einziger Schreiber ist der Zweig für den Nutzer (`server/graph/nodes/ei_calc.py` Z. 101–104, 140); Rückfall in `responder.py` Z. 520–527. - **2026-10-02** — **`responder.rules.txt` existiert, wird aber nicht geladen** — darin die Zeile, interne Tags niemals zu zeigen. `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `server/graph/nodes/responder.py` Z. 632–646; `server/prompts/default/responder.rules.txt` Z. 22–23. - **2026-10-02** — **Der Docstring von `_antwort_nutzlast_bauen` sagt, die Felder aus `internal` seien bei der Freigabe leer; ausgelöst wird die Freigabe aber erst, wenn `perzeption_assistant` gelaufen ist.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `server/services/event_consumer.py` Z. 620–624 gegen Z. 346, 447–450. Welche Seite stimmt, zeigt erst eine echte Nachricht. - **2026-10-02** — **Die CSS-Klassen `emotion-positiv`, `emotion-negativ`, `emotion-neutral` des Emotions-Panels sind nirgends definiert.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `client/ui/panels/emotions_panel.py` Z. 47–51, 262; der einzige CssProvider steht in `client/ui/main_window.py` Z. 309–327. - **2026-10-02** — **Docstrings im Client sprechen von einer SSE-Antwort; die Antwort kommt über den WebSocket.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `client/ui/panel_base.py` Z. 259, `client/ui/panel_registry.py` Z. 15; `client/ui/main_window.py` Z. 16–19 nennt alle Knöpfe Platzhalter. - **2026-10-02** — **Drei Dokumente nennen `client/ui/emotionen_tab.py` und einen QPainter-Umbau; die Datei gibt es nicht, das Emotions-Panel ist `client/ui/panels/emotions_panel.py` und zeichnet mit Cairo.** `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `novaberg-ei-plutchik.md` Z. 8 und 470, `novaberg-architecture.md` Z. 751. - **2026-10-02** — **Die Plutchik-Farben stehen nur modulintern im Gravitations-Panel, mit nicht-kanonischen Namen daneben** (`vertrauen`, `angst`, `ekel`, `erwartung`); das Emotions-Panel führt eine eigene Sektortabelle ohne Farben. `[gelesen 02.10.2026, Lese-Audit für den Avatar — nicht nachgeprüft]` `client/ui/panels/gravity_map_panel.py` Z. 51–87; `client/ui/panels/emotions_panel.py` Z. 67–76. - **2026-09-29** — **Das Findemittel des Backlogs führt 8 von 9 Kennungen weiter als mehrfach vorhanden.** `[gelesen 29.09.2026, Durchsicht der Fundliste — nicht nachgemessen]` `novaberg-backlog-index.md` Z. 31–43; das Chronik-Kapitel vom 25.08.2026, 20:10 UTC (`novaberg-roadmap-2026-08.md`) meldet „4 → 0“. - **2026-09-29** — **Der Kopf von `novaberg-bugs.md` nennt 163 offene Kennungen, der gerechnete Index 164.** `[gelesen 29.09.2026, Durchsicht der Fundliste — nicht nachgemessen]` - **2026-09-29** — **Die Schließbedingung des archivierten `ROUTERPROMPT-ZWEIFEL-WIDERSPRUCH` ist wieder verletzt.** `[gelesen 29.09.2026, Durchsicht der Fundliste — nicht nachgemessen]` `router.task.txt` Z. 62 gegen `router.py` Z. 109–112. - **2026-09-29** — **`KZG-SALIENZ-BOOST-OHNE-DECKEL` nennt noch den Deckel 10; im Code gilt seit dem 28.07.2026 der Deckel 1,0.** `[gelesen 29.09.2026, Durchsicht der Fundliste — nicht nachgemessen]` - **2026-09-29** — **Zwei Funde zählen für den 09.09.2026 verschieden viele Siez-Antworten: 34 von 189 und 3 von 189.** `[gelesen 29.09.2026, Durchsicht der Fundliste — nicht nachgemessen]` Eine der beiden Zählungen ist falsch. - **2026-09-29** — **`novaberg-salienz-berechnung_t.md` Z. 156 sagt unmarkiert, es gebe keinen Korpus roher Nutzer-Prompts; ein Fund vom August widerlegt das.** `[gelesen 29.09.2026, Durchsicht der Fundliste — nicht nachgemessen]` - **2026-09-20** — **966 der 2.413 nie verstärkten Synapsen-Knoten nach dem Skalenumbau tragen ein `gewicht_roh` unter der Einreihungsschwelle.** `[gemessen 20.09.2026, laufende DB]` Eingereiht wird nur über `KZG_SALIENZ_HIGH` = 0,88078 (`memory/kzg.py:447`, `agents/kzg/queues.py:98`); der Promotions-Agent liest die Salienz beim Verarbeiten frisch aus dem Hash, sie kann dazwischen gefallen sein. Kleinster Wert 0,72714 (503 Fälle), betroffen der Zeitraum 28.07. bis 01.09.2026, danach kein Fall mehr — warum es aufhört, ist nicht gemessen. Gefunden bei der Messung zu `SYNAPSEN-K8-SKALA`; Herkunft der Zahl: `labor/2026-09-20_k8-skala/unter_schwelle.sql`. - **2026-09-19** — **Ein Kommentar im Code trägt einen am 31.07.2026 widerlegten Vorbehalt unmarkiert.** `[gelesen 19.09.2026, beim Messen der Featureliste]` `server/config.py:3586–3589` schreibt zu `GV_INITIATIVE_SCHWELLE` weiter, der Zeuge trenne nur auf einer Seite (76,7 % gegen exakt 50,0 %, ein Münzwurf). In `novaberg-gv-initiative_m.md` Zeile 229 ist genau dieser Satz durchgestrichen und als am 31.07.2026 widerlegt markiert. Wer den Code liest, liest die widerlegte Fassung. - **2026-09-19** — **Verweise nennen Kennungen im Bugregister, die dort nie standen.** `[gelesen 19.09.2026, beim Umstellen der Bug-Verweise]` `PLANNER-AKTIV-RELIKT`, `WEB-CONTEXT-ALTPFAD` und `ENTITAET-EMBED-DREIFACH` stehen im Backlog, nicht im Bugregister. `EMBEDDING-CASING-BLIND` hat eigene Konzeptdokumente, aber keinen Registereintrag. `BUG1` (`novaberg-ei_l.md`) steht in keinem Register. Die Verweise zeigen weiter auf `novaberg-bugs.md`; die Stellen findet `grep -rn` nach der Kennung. - **2026-09-19** — **Drei Verweise zeigen auf einen bestimmten Bugeintrag, ohne ihn zu nennen.** `[gelesen 19.09.2026, beim Umstellen der Bug-Verweise]` `novaberg-convention-paar-schema.md:233` („Chat 66“), `novaberg-node-gv_m.md:30` („Abschnitt Chat 114“), `novaberg-backlog-gedaechtnis.md:2093` („Sprachstil-Eintrag“, nach dem Zitat wortgleich mit `GV-METADATEN-ERREICHEN-DIE-SPRACHE-NICHT`). Ohne Kennung sind sie nicht ohne Raten aufzulösen. - ~~**2026-09-19** — **Eine Timeline-Kante behält ihren Grund, wenn die Timeline-Zeilen ihrer Knoten gelöscht werden.**~~ `[gemessen 19.09.2026, laufende DB]` Der FK `lzg_knoten.timeline_id` steht auf `ON DELETE SET NULL`, die Kante in `lzg_kanten` ist eingefroren und trägt weiter `timeline` in `verbindungs_gruende` und `timeline_naehe_tage = 0`. Gesehen an einem Paar einer Prüf-Partition (Knoten 56942/56943, Kanten vom 18.09.2026, 23:00 UTC); im Nutzerbestand kein Fall. Gefunden bei der Abnahme von `SYNAPSEN-LIVE-VERIFY` (Abfrage der Gegenrichtung: Kanten mit Schicht gegen die heutige Bedingung). → **Eingeordnet am 19.09.2026: kein Defekt, konzeptgemäß.** Die Kante ist *„ein abgeleiteter Cache der Knoten-Stärken-Konstellation und der bei Bildung eingefrorenen Schicht-Werte“* und wird neu berechnet, wenn sich ein Knoten verstärkt (`novaberg-memory-synapsen_k.md`, Abschnitt über die Kante). Dass eine gelöschte Timeline-Zeile einen Kantengrund zurücklässt, folgt daraus. Der einzige Fall liegt in einer Prüf-Partition und gehört zum Fund vom selben Tag, dass das Aufräumen nach Läufen mit Prüf-Nutzern das Gedächtnis nicht erfasst. - **2026-09-19** — **Das Kurzzeitgedächtnis legt einen Erinnerungs-Anker für ein Datum an, das in der Äußerung nicht steht.** `[gemessen 19.09.2026, Betrieb]` `labor/2026-09-19_angebot_bedarf/`: Auf *„Ich brauche noch Mehl und Hefe."* entstand für den Prüf-Nutzer `bd1` ein Timeline-Eintrag *„Erinnerungs-Anker 09.05.2026"* — kein Datum im Satz, das Datum liegt vier Monate zurück. Weg: `agents/kzg/magnete.py::_timeline_aufloesen` aus einem Zeitausdruck der Salienz. - **2026-09-19** — **Bei Notizen fragt Novas Angebot nach einer Einzelheit statt nach der Sache.** `[gemessen 19.09.2026, Betrieb]` Dieselbe Reihe: 2 von 3 Angeboten (*„ein ganz bestimmtes notieren"*, *„die exakte Menge notieren"*) nennen die Sache nicht; das zweite führte auf *„Gerne"* zu einer Rückfrage der Klassifikation statt zur Notiz. Bei Terminen nannte Lauf 2 am 18.09. die Sache 4 von 4 — derselbe Prompt. - **2026-09-19** — **Die Zähler des Quotenabgleichs leben im Prozessspeicher, und der Prozess startet 63- bis 141-mal am Tag neu.** `[gemessen 19.09.2026]` `QuotenRegister` (`agents/nmcp_quote.py`) hält `zugestellt`, `bearbeitet` und den Nenner in einem Dict der Instanz `REGISTER`; nichts davon wird geschrieben. Gezählt über das Server-Log der letzten sieben Tage: **409 NMCP-Handshakes**, also Prozessstarts — 103 · 63 · 94 · 141 an den vier vollen Tagen. Der Abgleich braucht 30 Äußerungen eines Graphen für ein Fehlerurteil und 100 für eine Warnung, **ohne Neustart dazwischen**. Bei im Mittel zehn bis zwanzig Minuten zwischen zwei Starts ist das Fenster praktisch nie erreichbar; `/health` meldet am 19.09.2026 alle Zähler auf null, `gemessen: null` bei allen neun Einträgen. **Damit ist das Schweigen des Abgleichs kein Mangel an Äußerungen, sondern ein Speicherort** — und es sieht genauso aus wie *„noch keine Aussage“*, der Zustand, den die Konvention ausdrücklich sichtbar halten will. Die Neustarts sind vermutlich das Nachladen bei Code-Änderungen (Quelltext als Bind-Mount) und damit eine Eigenschaft der Entwicklung, nicht des Betriebs — **nicht geprüft**. Aufgefallen beim Festhalten des NMCP-Standes. - **2026-09-19** — **Der Charakterkern wird beim Einbetten gekürzt, sobald er länger als ~1500 Zeichen ist.** `[gemessen 19.09.2026]` Das betriebene Einbettungsmodell ist auf 512 Tokens begrenzt (`context_length = 512`), und `/api/embed` kürzt still am Ende (`truncate` Voreinstellung `true`, vom Server nicht gesetzt). Die destillierten Kerne der sieben Paare sind 635 bis 4720 Zeichen lang; zwei liegen deutlich über der Grenze (2658 und 4720). Betroffen ist der Charakter-Filter des Lückenpfades: `ei/wissensluecken.py` bettet `internal.character.core` in **einer** Anfrage ein und vergleicht dagegen mit `GV_CHARAKTER_RESONANZ_SCHWELLE` (seit 12.09.2026 0,15). **Nicht gemessen:** wie stark die Kürzung die Resonanzwerte verschiebt; die am 12.09.2026 gemessene Längenabhängigkeit der Resonanz (Median 0,097 bei 807 Zeichen, 0,282 bei 2658) ist davon nicht zu trennen. `novaberg-embedding-casing-blind_k.md` Phase 1 führt die Längen-Vorprüfung nur für fünf persistierte Spalten. - **2026-09-19** — **Eine Telefonnummer als Aussage wird weiter als Notiz angelegt.** `[gemessen 19.09.2026]` `labor/2026-09-18_notizen_vorpruefung/`: *„Die Nummer vom Hausmeister ist 0171 2345678."* 3 von 3 `create` — in allen gemessenen Fassungen außer den beiden verworfenen (*„nur mit Liste"*, Beispielpaar), auch in der übernommenen mit der Ausnahme für die laufende Liste (`labor/2026-09-19_notizen_liste/`). Die Vorprüfung nennt *„Das WLAN-Passwort ist Sonnenblume7"* als Beispiel für rejected; die Nummer liest das Modell trotzdem als Auftrag. - **2026-09-18** — **Die Sonden-Auswertung folgert aus ihrer Temperaturreihe das Gegenteil dessen, was die Tabelle zeigt.** `[gelesen 18.09.2026, Hinweis von Ben im Sitzungsbus]` `labor/ergebnis/auswertung_sonden.md`, Abschnitt vor §8 (*„Zur Temperatur"*): *„Temperatur senken macht sie [die nachgiebige Antwort] wahrscheinlicher"* — die Tabelle darüber zählt Korrekturen **1, 1, 0, 0, 0** bei 0,0 / 0,1 / 0,4 / 0,7 / 1,0, also gerade bei niedriger Temperatur. Dazu nennt der Text den einzigen echten Widerspruch bei 1,0, wo die Tabelle 0 zählt. n = 5 je Temperatur; die Richtung trägt keine der beiden Lesarten sicher. - **2026-09-18** — **„Zwei der drei Fehler mit deutlichem Abstand kommen aus der Objektwahl" stimmt nicht — es ist einer.** `[nachgezählt 18.09.2026, Hinweis von Ben im Sitzungsbus]` `labor/2026-09-16_objektkriterium/naehe.jsonl`: drei Fehler mit Abstand ≥ 0,04 — Nr. 9 *Mietvertrag* (0,070), Nr. 35 *Ausflug* statt *Regenjacke* (0,123), Nr. 39 *Kopfschmerzen* (0,099); aus der Objektwahl nur Nr. 35. Der zweite genannte Fall, *Lena* statt der Unverträglichkeit (Nr. 46), liegt bei **0,0009** und gehört zu den neun unter 0,04. Betroffen: `novaberg-roadmap.md` (Eintrag zur Objekt-Nähe, *„daher zwei der drei Fehler"*) und `labor/2026-09-16_objektkriterium/ergebnis_reihe.md` („Die zwölf Fehler"). Nr. 9 (Mietvertrag → Notiz statt Termin) ist dort nicht erklärt. - **2026-09-18** — **Planner und Angebot ordnen die Dienste verschieden.** `[gerechnet 18.09.2026, zweite Kontrolle, 81 Urteile]` `object_nearness.service_order` ordnet über alle akuten Objekte zusammen, `utils/offers.py::_writing_services` je Objekt; 1 von 81 weicht ab (drei akute Objekte, id 337500: Angebot `notizen` für „Spülmittel", Planner zuerst `timeline` wegen „Schwester abholen"). Nach einem Angebot folgt die Zustellung dem angebotenen Dienst — ohne Wirkung dort, aber zwei Ordnungen für eine Frage. Beleg: `labor/2026-09-18_angebot_wortlaut/zweite_kontrolle/`. - **2026-09-18** — **Zu jedem Termin entsteht ein zweiter Timeline-Eintrag „Erinnerungs-Anker ".** `[gemessen 18.09.2026, Betrieb]` In zwei Läufen mit je vier Prüf-Nutzern (`labor/2026-09-18_angebot_wortlaut/`) legte `agents/kzg/magnete.py::magnete_aufloesen` zu 7 von 7 Terminen einen Anker gleichen Zeitpunkts an, dazu einen für ein Treffen, das nie Termin wurde. Ob der Anker gewollt ist, sagt der Lauf nicht; in der Timeline des Menschen stehen damit zwei Einträge je Termin. - **2026-09-18** — **`ValueError` im DelegationsAgent auf Zustimmungs-Turns.** `[gemessen 18.09.2026, Serverprotokoll]` `embed_text_bauen(delegation): themen und zusammenfassung sind leer — kein Embed-Text baubar`, geworfen aus `dispatch_delegation` (`graph/nodes/dispatcher.py`); 27 Mal in 72 h, erstmals 17.09.2026, 19:28 UTC, in beiden Messläufen auf jedem *„Gerne"*. Der Turn läuft weiter. Verwandt: `DISPATCH-DELEGATION-RUECKGABE-VERWORFEN`. - **2026-09-18** — **Der Router wählt auf ein „Gerne" zu einem Timeline-Angebot `agent/notizen`.** `[gemessen 18.09.2026, Betrieb]` 3 von 4 im zweiten Lauf (`vom_modell` in `router.zustellung`), obwohl das offene Angebot an `timeline` hängt; der Planner ordnet nach Nähe und fragt die Timeline zuerst, der Termin entstand 4 von 4. Hält nur, solange der Planner ordnet. - **2026-09-18** — **Teilweise behoben am 18.09.2026, 22:13 UTC** (`offer_binding`: gebunden an die angebotene Sache; der Router nimmt deren Dienst; Prompt verlangt den Namen — im Betrieb nicht gemessen). **Offen bleiben:** ein Angebot Novas von sich aus zu einer *weiteren* Sache bindet bei einer einzigen akuten Sache an diese; die 7 konstruierten Nicht-Angebote. — **Ein Angebot kann einen anderen Gegenstand tragen als den abgelegten.** `[gemessen 18.09.2026, zweite Kontrolle]` Von 4 echten Angeboten, die `find_offers` in sieben Tagen erkannte, galten 2 einer Nebensache oder einem *weiteren* Termin, abgelegt wurden sie mit den akuten Objekten des Turns — ein *»Gerne«* hätte die falsche Sache zugestellt. Dazu nimmt die Weiche im Router den ersten Dienst aus der Vereinigung **aller** akuten Objekte (0 von 233 Ablagen betroffen, möglich in 55 von 467 Lagen mit zwei und mehr akuten Objekten). Und 7 von 7 konstruierte Nicht-Angebote (*»Soll ich den Schwerpunkt auf die Gravitation setzen?«*) gelten als Angebot — im Bestand 0. Beleg: Bericht der zweiten Kontrolle, Exporte in `labor/2026-09-18_zweite_kontrolle_block_a/`. - **2026-09-18** — **`with psycopg2.connect(...) as conn` schließt die Verbindung nicht, nur die Transaktion.** `[gemessen 18.09.2026]` psycopg2 2.9.9 im Server-Behälter: nach dem Block `conn.closed == 0`. Die Form steht an **13 Stellen in 3 Dateien** unter `server/` (`memory/praegung.py`, `api/drive.py`, `graph/nodes/emotionale_gravitation.py`). Ob Verbindungen offen bleiben, ist nicht gemessen — CPython schließt eine Verbindung, wenn ihr Objekt abgeräumt wird. - **2026-09-18** — **Der Recherche-Zeuge schreibt bei jedem Suite-Lauf zwei Zeilen ins produktive `hintergrund_log`** (`recherche_bibliothek`, Nutzer `test_wis3_mensch`) und eine Zeile in `autonomous_wissen`, die er danach entfernt. `[gemessen]` **2478 Zeilen** mit `user_id like 'test_%'` im `hintergrund_log`, vom 04.08.2026 bis heute. Dieselbe Klasse wie `A15` (entworfen). - **2026-09-18** — **Drei Agenten mit eigenem Audit hinterlassen im Leerlauf keine Zeile**: `charakter` ohne `hash_dirty`, `synapsen_decay` und `ziel_decay` bei abgeschaltetem Schalter. Bei `charakter` und `ziel_decay` ist das im Docstring begründet (144 leere Zeilen am Tag); bei `synapsen_decay` steht keine Begründung. Der Rahmen im Pixie-Dispatch greift bei ihnen nicht, weil sie `writes_own_audit` melden. - **2026-09-18** — **`/qualitaet/lauf` (`api/admin.py`) ruft `profil_lauf` direkt** und schreibt keine Zeile ins `hintergrund_log`; der Tageslauf desselben Profils tut es. - **2026-09-17** — **Eine Aussage über einen Bedarf wird ohne Bitte als Notiz geschrieben.** `[gemessen 17.09.2026, Labor]` *»Ich brauche noch Mehl und Hefe«* — ohne Angebot, ohne Bitte — stellte der Router in 6 von 6 Aufrufen an die Notizen zu, und deren Klassifikation macht daraus in 6 von 6 `add_content` (mit und ohne Objektbezug gleich). Für die Timeline ist seit dem 13.09.2026 entschieden, dass nur ein ausdrücklicher Auftrag schreibt; ~~für die Notizen steht die Entscheidung nicht~~ → **für die Notizen entschieden am 17.09.2026, zur Hälfte wirksam:** Die neue Vorprüfung der Klassifikation senkt geschriebene Aussagen von 12 auf 8 von 12, **dieser Satz aber bleibt 3 von 3 `add_content`**; die Sperre am Empfang wurde gemessen und zurückgenommen (sie nahm einer Zustimmung das Ziel). Bleibt offen. Belege: `labor/2026-09-17_router_lage/`, `labor/2026-09-17_objektbezug/`, `labor/2026-09-17_notizen_auftrag/`. - **2026-09-17** — **Die Antwort nennt einen anderen Tag als der angelegte Termin.** `[gemessen 17.09.2026, Betrieb]` *»Die Gravitationswellen sind für Donnerstag um 18 Uhr fest in deinem Kalender!«* — angelegt ist Freitag, 18:00 (richtig aus dem Objekt). Der Riegel aus Scheibe 12 A prüft, **ob** ein Dienst abschloss, nicht **was** er schrieb. - **2026-09-17** — **Der Nähe-Eintrag trägt keine Dauer, der Router-Prompt wird gedrosselt geloggt.** `[gemessen 17.09.2026, Betrieb]` `objekt_naehe` führt `ergebnis`, `herkunft`, `untergrenze`, `regelfassung` und die Objekte — keine Zeit. Und seit dem Neustart steht im Log genau ein Router-Prompt-Abzug für mehrere Aufrufe. Damit sind im Betrieb weder die Zeitkosten der Nähe noch die Häufigkeit des `[LAGE]`-Blocks zählbar. - **2026-09-17** — **Ein Wort der Messfälle steht im Router-Brett.** `[gezählt 17.09.2026, zweite Kontrolle]` Der Notizen-Zettel führt *»Merk dir, dass ich morgen Mehl brauche«*; fünf Fälle der Reihen `2026-09-17_router_lage` und `2026-09-17_notizen_auftrag` tragen *Mehl* (S2, B2, Z5, N2, K2) — in allen Armen gleich, der Vergleich bleibt fair, die absoluten Zustellraten dieser Fälle sind geschönt. Außerdem tragen Aussagen ohne Bitte in `labor/2026-09-16_objektkriterium/reihe_eingaben.json` das Soll *notiz* (Fälle 37, 39, 40, 42, 43) — gegen die Entscheidung vom 17.09.2026, falls die Reihe einmal die Klassifikation misst. - **2026-09-17** — **Ein Intent-Treffer des Planners verdrängt das Ziel des Routers aus der Reihenfolge.** `[gelesen 17.09.2026, zweite Kontrolle]` Stufe 2 (`router_intents`) schlägt Stufe 3 (`management_target`) — älteres Verhalten, seit D1 folgenreicher: Der Intent-Treffer steht in der Reihenfolge, das Router-Ziel gar nicht, und die Regel *Dienst ohne Merkmal zuerst* greift für das Router-Ziel dann nicht. Nur `fakten`, `notizen`, `timeline` tragen `router_intents`; *»Match via intent«* kam in den Server-Logs 0-mal vor. - **2026-09-17** — **Der Quotenabgleich zählt eine Weitergabe als Zustellung und als Ablehnung.** `[gelesen 17.09.2026, zweite Kontrolle]` Seit D1 fragt der Planner nach einer Ablehnung den nächsten Dienst; `agent_dispatch.py` zählt jede solche Frage als Zustellung am Empfang und die Ablehnung als Bearbeitung mit `abgelehnt`. Die Diagnose des Abgleichs (*Aushang richtig, Grenzangabe fehlt*) liest eine Weitergabe damit als Aushangproblem. Ob Weitergaben getrennt gezählt werden sollen, ist nicht entschieden. - **2026-09-16** — **Die Objektwahl des Betriebs weicht von der der Eichung ab.** `[gemessen 16.09.2026, 20:14 UTC]` Die Eichung der Objekt-Nähe nahm das erste akute Objekt und fiel ohne akutes auf das erste latente zurück; der Schattenlauf rechnet jedes akute und kein latentes. In der Reihe haben **5 von 60** Fällen kein akutes Objekt — dort rechnete die Eichung und der Betrieb schweigt. Beleg: `labor/2026-09-16_objektnaehe_schatten/nachrechnung.out`. - **2026-09-16** — **Die Probe-Nutzer einer Messreihe stehen dauerhaft im Bestand der Lage.** `[gemessen 16.09.2026]` Die Reihe zum Zuordnungskriterium fuhr 60 Aeusserungen ueber je ein eigenes Paar `objektprobe01` bis `objektprobe60`; im Bestand stehen seither **62 zusaetzliche Lage-Zeilen** (521 → 583) und **64 zusaetzliche Objekte** (14 → 78). Termine und Notizen blieben unberuehrt (100 → 100, 1 → 1). **Wer Bestandszahlen ueber `sachlage_verlauf` oder `sachlage_objekt` zieht, zaehlt sie mit**, solange nicht nach `user_id` gefiltert wird — dieselbe Klasse wie die Messturn-Werte vom 13.09.2026. Ob sie bleiben oder geraeumt werden, ist nicht entschieden. - **2026-09-16** — **Fast ein Drittel der Lage-Objekte hat keine Klasse, und die vorhandenen Werte haben keinen Kanon.** `[gemessen 16.09.2026]` Über alle 521 Zeilen von `sachlage_verlauf`: **316 von 1067** Objekt-Vorkommen tragen kein Feld `klasse` (29,6 %). Die übrigen verteilen sich auf `objekt` 318, `vorgang` 283, `anliegen` 108, `person` 22, `objt` **8**, `ort` 5, `objjekt` **4**, dazu `eigenschaft`, `gegenstand`, `konzept` je 1 — zwei davon sind Schreibfehler derselben Klasse. Die Formprüfung der Lage verlangt das Feld nicht. Gefunden bei der Vorfrage zu Scheibe 12 C, die die Klasse als Merkmalsträger prüfen sollte. - **2026-09-16** — **Die Klasse eines Lage-Objekts trennt Termin und Gesprächsthema nicht.** `[gemessen 16.09.2026, Handurteil über 32 Objekte mit Zeitbezug]` `vorgang` steht bei **9 von 10** Objekten, die ein Ereignis mit Zeitpunkt sind — und ebenso bei 5 Gesprächsthemen, 1 Zustand und 3 unklaren Fällen. Das Signal sitzt stattdessen in den **Eigenschaftsnamen** (`zeitpunkt`, `uhrzeit`, `datum`, `ort`, `dauer`): Alle 10 tragen eines, aber auch 4 der 14 Gesprächsthemen — und diese vier sind dieselbe Klasse, ein **fachlicher** Zeitpunkt (*„Zeitpunkt des Entropiemaximums"*). Beleg: `labor/2026-09-16_objektkriterium/ergebnis.md`. - **2026-09-16** — **Ein Schnitt auf 200 Zeichen schreibt in eine Spalte, die niemand liest.** `[Code, zweite Kontrolle 16.09.2026]` `agents/delegation/akte.py:56` kappt `turn["inhalt"]` auf 200 Zeichen für die Spalte `session_auszug JSONB` (`agents/delegation/init.sql:48`). Sie hat zwei Schreiber (`akte.py:164`, `:309`) und **kein einziges `SELECT`** im ganzen Server. Betroffen sind **291 von 1494** Nutzer-Turns (19,5 %), Verlust im Mittel 1277 Zeichen, Max 2805; in der laufenden Datenbank tragen **1623 von 2918** Zeilen Inhalt. Ob der Auszug gewollt ungelesen ist oder sein Leser fehlt, ist eine Absichtsfrage. - **2026-09-16** — **Die Compose-Datei nennt einen anderen Connector als den, der läuft.** `[gemessen 16.09.2026, Container]` `docker-compose.yml:82` setzt `OLLAMA_CONNECTOR: qwen36`; der laufende Server meldet beim Import `ChatWorker … Modell=gemma4-a4b-gpu`, also Connector `gemma4a4b`. Beide tragen `gpu_num_ctx: 32768`, deshalb folgenlos für die Kontextfenster-Rechnung vom selben Tag — **aber die Compose-Datei ist nicht die Quelle**, und wer sie liest, bekommt das falsche Modell. - **2026-09-15** — **Eine Uhrzeit vor „am TT.MM." bekommt den Tag des Datums als Minute.** `[gemessen 15.09.2026, zweite Kontrolle und Parser direkt]` *„9 Uhr am 24.08."* ergibt am 31.07.2026 den **08.07. um 09:24**: Block 0a streicht „am", Block 2 liest `9 Uhr 24` als Stunde und Minute, und der Rest `.08.` wird zum Datum. In beiden Fassungen des 15.09. gleich; 24 erzeugte Eingaben. - **2026-09-15** — **Eine Zahl nach „um" ohne Einheit gilt als Uhrzeit, auch wo sie keine ist.** `[gemessen 15.09.2026, zweite Kontrolle]` *„Version um 2.10"*, *„kostet um 3.20"*, *„der Preis stieg um 2.50"*: `uhrzeit_erkannt` ist wahr, das Datum bleibt, wie es war. Über 48 280 erzeugte Nicht-Zeit-Eingaben 1 584 solche, nachdem die gemessenen Mengenwörter aufgenommen sind (vorher 3 520). **Der einzige Leser ohne Datum ist die Sachlage-Bindung** (`graph/nodes/sachlage_memory.py::_has_time_expression`): Ein Eigenschaftswert dieser Art bindet an einen Termin des Turns. Syntaktisch nicht von *„Treffen um 9.30"* zu trennen. - **2026-09-15** — **Eine Uhrzeit mit nachgestellter Tageszeit ergibt kein Datum.** `[gemessen 15.09.2026, Parser direkt]` *„um 7:45 Uhr morgens"* und *„um 12.00 Uhr mittags"* lösen zu nichts auf: Block 0 nimmt eine Tageszeit hinter „Uhr " nicht heraus, Block 1b streicht das „Uhr" davor, und `7:45 morgens` passt auf keinen Pfad. Vor dem 15.09.2026 stürzte die Punktform ab oder ergab einen Monatstag; jetzt folgt sie dem Doppelpunkt-Zwilling ins Leere. - **2026-09-15** — **Block 2 des Zeitparsers schluckt das Leerzeichen hinter „Uhr".** `[gemessen 15.09.2026, zweite Kontrolle und Parser direkt]` Das Muster `\s*[Uu]hr\s*(\d{2})?\s*(Tageszeit)?\b` nimmt den Zwischenraum hinter „Uhr" mit, auch wenn danach nichts kommt, was es verwendet: *„morgen um 1 Uhr Termin"* wird zu `…1:00Termin` und löst in beiden Fassungen zu nichts auf. Bis zum 15.09.2026 traf es ebenso *„um 1 Uhr abend"*; seit die Einzahl eine Tageszeit ist, verbraucht Block 2 das Wort. - **2026-09-15** — **Der Korpusläufer meldet eine geschlossene Lücke nicht.** `[Code, gemessen 15.09.2026]` `tests/korpus_laeufer.py::_fall_laufen` setzt bei `ab_phase: null` den Zustand `LUECKE`, bevor es das Ergebnis liest. `ZON-009` (*„in 24 Stunden"*, im Korpus als ohne typisierte Einheiten unlösbar begründet) besteht in der Fassung vor und nach dem 15.09.2026. `REG-023` und `REG-024` bestanden am 15.09. über drei Läufe als *dokumentierte Lücke*, bis sie von Hand umgestellt wurden. **Die Zahl der Lücken sagt damit nicht, wie viele offen sind** — und eine geschlossene bleibt als Begründung im Korpus stehen. - **2026-09-15** — **Die Nacht verschiebt keine Stunde, und die Mitternacht steht in zwei von drei Lesern.** `[gemessen 15.09.2026, Parser direkt]` `_TAGESZEITEN["nachts"]` ist 0: *„11 Uhr nachts"* und seit dem 15.09. auch *„nachts um 11"* ergeben 11:00. Block 2 und `_shift_hour_by_daypart` setzen *„12 nachts"* auf 0 Uhr, Block 1 (Zahlwörter) nicht: *„zwölf Uhr nachts"* → 12:00, *„12 Uhr nachts"* → 00:00. Die Tageszeitregel steht damit in drei Fassungen, von denen eine abweicht. - **2026-09-15** — **Ein Tag des Monats ohne Monat wird nicht in die Zukunft gelegt.** `[gemessen 15.09.2026, Parser direkt]` *„am 24."* am 31.07. gesagt ergibt den **24.07.**, *„am 10."* den 10.07. — vergangene Tage, obwohl dateparser `PREFER_DATES_FROM: future` bekommt. Seit dem 15.09.2026 trägt auch *„am 24. um 10"* diese Rechnung (24.07., 10:00; davor der 24.10. um 00:00, ebenfalls falsch). Der Plausibilitäts-Check verwirft erst ab zwei Jahren. - **2026-09-15** — **Reißt der Graph zwischen Responder und Freigabe, geht der letzte Stand der Antwort ungeprüft hinaus.** `[Code, zweite Kontrolle 15.09.2026]` `services/event_consumer.py:397–405` liefert bei einem Abbruch den zuletzt gestreamten Zustand, `:910–918` sendet ihn als normale Antwort. `_agent_vote` fängt nur JSON-, Schlüssel- und Wertfehler (`graph/nodes/tribunal.py`, `except (json.JSONDecodeError, KeyError, ValueError)`), nicht die Frist des Modellaufrufs; `corrector.correct` fängt nichts. Hinaus geht dann die ungeprüfte oder die beanstandete Fassung, ohne die Fehlerzeile der letzten Runde. So seit dem 25.08.2026 (Auslieferung bei Freigabe); der Riegel erhöht auf den Turns mit Anschlag die Zahl der Modellaufrufe auf genau dieser Strecke. - **2026-09-15** — **Die `Stand:`-Kopfzeilen sind wieder Ketten geworden — die Entscheidung vom 20.08.2026 hält nicht.** `[gemessen 15.09.2026]` Erste `Stand:`-Zeile: Featureliste **37.554** Zeichen, Fundliste **15.634**, Bugs **14.304**; Backlog 416, Roadmap 348. Am 20.08.2026 war entschieden und umgesetzt, dass die Kette in den Abschnitt *Verlauf des Standes* wandert und die Kopfzeile ein kleiner Block bleibt (Eintrag vom 20.08.2026 unter *Erledigt*: *„Die längste Kopfzeile misst jetzt 38 statt 34.263 Zeichen"*, dazu ein Script, das eine Kopfzeile über 200 Zeichen ablehnt). Die Featureliste ist damit länger als am Tag des Befunds (11.001). Der jüngste Eintrag im *Verlauf des Standes* dieser Datei ist vom 07.09.2026. Nicht im Zug von Scheibe 12 A behoben; die Einträge dieses Tages folgen der gelebten Form. - **2026-09-14** — **Ein ausdruecklicher Auftrag „morgen um 10" legt einen Termin um die aktuelle Uhrzeit an, mit Genauigkeit Tag.** `[gemessen 14.09.2026, 19:16 UTC, Betrieb]` Die Kette lief (zugestellt, `create`, Titel aus dem Verlauf aufgeloest, Timeline-Eintrag angelegt und verifiziert) — gespeichert ist `event_time` = **Anlagezeitpunkt plus 24 Stunden** (19:16:30 UTC) mit `precision = day`; die Antwort nannte den Termin *„fest verankert"* mit Datum. `[gemessen, Parser direkt]` `zeit_parsen_vektor`: *„morgen um 10"* → Tag erkannt, **Uhrzeit nicht**, Datum mit der Uhrzeit von jetzt; *„morgen um 10 Uhr"* → 10:00 richtig; *„morgen früh um 10"* → **kein Datum**; *„um 10"* → **ein vergangener Tag** (00:00 Uhr, vier Tage zurueck). Die Grenze *„Einzelne Ziffer ohne Uhr"* steht seit Juli als *„Spätere Iteration"* in `novaberg-tool-timeparser.md` §8 — im Betrieb trifft sie den haeufigsten gesprochenen Auftrag. Dazu: **Eine Zeile mit `precision = day` traegt eine Uhrzeit, die niemand genannt hat** — ein Vorgabewert, der wie eine Angabe aussieht. → **Die erste Hälfte ist behoben am 15.09.2026:** Die nackte Stunde nach „um" ist eine Uhrzeit, mit Tageswort und ohne, auch hinter „früh" (`novaberg-tool-timeparser.md` §4 Block 9b). `[gemessen]` Der wörtliche Ausdruck aus dem Serverlog, mit beiden Sprechzeiten des Abends alt gegen neu: die Sprechzeit des Folgetags → **die genannte Stunde**, Uhrzeit erkannt. **Offen bleibt die zweite Hälfte** — ein Rückfall, der eine Uhrzeit liefert, die niemand genannt hat, ist weiter möglich (Punkt als Trenner, eigener Fund vom 15.09.2026). → **Am Abend desselben Tages eingegrenzt:** Trägt der normalisierte Text eine Uhrzeit, muss sie im Ergebnis stehen, sonst gibt es kein Datum (`novaberg-tool-timeparser.md` §5 *Nach den Pfaden*) — ein Rückfall kann keine andere Uhrzeit mehr liefern als die erkannte. **Offen bleibt der Rest:** Erkennt die Normalisierung keine Uhrzeit, kann der Rückfall weiter eine Uhrzeit mitbringen, die dann mit `precision = day` gespeichert wird. → **Der Bestandseintrag ist am 16.09.2026 deaktiviert** (`aktiv = false`, Entscheidung des Eigentümers; kein Fremdschlüssel zeigte darauf). Der Defekt im Parser ist am 15.09.2026 behoben; die falsche Zeile blieb bis dahin stehen. - **2026-09-14** — **Die Quote des TimelineAgent stammt vom breiten Aushang.** `agents/timeline/agent.py` fuehrt `quote = {"user": 25}` — ein Viertel der Nutzer-Aeusserungen, geschaetzt fuer einen Zettel, der jede Zeitangabe annahm. Seit dem 14.09.2026 nimmt er nur Auftraege; der Quotenabgleich meldet ab n ≥ 30 einen Fehler und steht heute bei n = 0. Gefunden von der zweiten Kontrolle. - **2026-09-14** — **Erinnerungs-Anker werden als Termine gelesen.** Die Magnet-Aufloesung legt aus jeder Zeitangabe einen `erinnerungs_anker` in `timeline` an (`agents/kzg/magnete.py`); der Thinker (`timeline_check`) und der Enricher-Hook des TimelineManagers lesen `timeline` ohne Filter auf den Typ und fuehren die Anker als *Termine*. `[gemessen 13.09.2026]` Der Enricher lieferte in einem Termin-Turn drei Eintraege, alle drei Anker. Gefunden von der zweiten Kontrolle, Bestand. → **Beide genannten Lesewege schließen den Anker inzwischen in der Abfrage aus:** der Enricher-Hook des TimelineManagers seit dem 15.10.2026, `timeline_check` und `timeline_search` des Thinkers seit dem 17.10.2026 (gebaut, noch nicht committet; `novaberg-node-thinker.md` §4.1). - **2026-09-14** — **Der Doppel-Fehlschlag des Thinkers hat live gefeuert, und die Wiederholung wiederholt die erste Antwort woertlich.** `[gemessen 18:52–18:57 UTC, Turn b1e1c250…]` Unter `gemma4-a4b-gpu` lieferte der Thinker in **beiden** Nachfass-Iterationen leeren `content` bei gefuelltem `thinking` — erst im ersten Durchlauf (18:53:07, 18:53:44 → Geste *„Hmm... ich muss das nochmal durchgehen."*, Self-Trigger), dann im Wiederholungslauf noch einmal (18:55:43, 18:56:13 → *„Nachfass-Limit erreicht im Unsicherheits-Retry"*). Die zweite Antwort (`turn_roh` 18:57:26, dieselbe `turn_id`) **beginnt mit dem vollstaendigen Text der ersten** und haengt einen neuen Absatz an; im Client stehen damit zwei Bloecke mit demselben Anfang. Es ist der Fall, auf den `THINKER-DOPPELFEHLSCHLAG-LIVE-VERIFIKATION` wartet — die Verifikationskette lief vollstaendig, das erwartete Erlebnis (*„zweite Nachricht mit Klaerung"*) trat nicht ein. - **2026-09-13** — **Eine Dauer laesst sich an einem Termin nicht festhalten: `update` kann nur verschieben, und `event_ende` hat keinen Schreiber.** `[gemessen 20:50 und 20:53 UTC]` Zweimal richtig zugestellt, richtig klassifiziert (`action='update'`, *„Dauer auf 1,5 Stunden setzen"*) und richtig gefunden (Einzeltreffer id=507) — dann `_update` (`agents/timeline/crud.py:173`), das nur ein neues Datum kennt: *„Konnte das neue Datum nicht erkennen"*, `status=fehler`. Die Faehigkeit `termin_details_aendern` steht in `agents/timeline/agent.py`, `ausfuehren` fuehrt `update` und `reschedule` auf dieselbe Verschiebung. `event_ende` steht nur in `init.sql` — **kein Schreiber im ganzen `server/`**. Die erste Antwort erfand dazu einen Grund — eine Verwechslung mit einem anderen Termin —, den der Agent nie gemeldet hatte. - **2026-09-13** — **Die Nutzerhaelfte eines Termin-Turns bindet ihren KZG-Kern an den Tagesanker, nicht an den Termin, den derselbe Turn anlegt.** `[gemessen 20:42–20:43 UTC]` `magnete_aufloesen` lief um 20:42:45 mit `timeline_id=491` (Erinnerungs-Anker 14.09.) und `clipboard_uebernommen=False`; der TimelineAgent legte Termin 507 erst um 20:43:07 im CharacterGraph an. Das Clipboard (`dispatch_timeline` → `state["timeline_id"]`) kann die Nutzerhaelfte strukturell nicht erreichen, weil der HumanGraph vor dem CharacterGraph schreibt. Verwandt mit `PLANNER-TIMELINE-INTENT-MISS` („Clipboard-Pattern strukturell vorbereitet, aber im Live-Betrieb selten getriggert"). - **2026-09-13** — **Eine Eigenschaft wechselt ihren Namen zwischen zwei Turns und steht danach doppelt.** `[gemessen]` Am Objekt `**Meeting**` stehen `Charakteristik` (Eigenschaft 726) und seit 20:43 UTC `Charakteristikika` (Tippfehler des Modells) mit demselben Wert, beide aktiv. Dieselbe Klasse wie die Namensdrift eines Objekts, eine Ebene tiefer: Der Eigenschaftsschluessel vergleicht wortgleich. - **2026-09-13** — **Ein Termin mit Tag, Uhrzeit und Dauer wurde ueber vier Turns nicht angelegt, und die Antwort sagte das Gegenteil.** `[gemessen 19:18–19:34 UTC, produktives Paar]` Der Router setzte in **4 von 4** Turns `needs_timeline: true` und fuellte die `timeline_query`, liess aber `management_action` in **4 von 4** leer — obwohl der Aushang *TIMELINE-ERKENNUNG* bei zeitgebundener Information ausdruecklich `"agent"` verlangt. Der Planner lief damit durch, der TimelineAgent nie; `timeline` hat seit dem 12.09.2026 keine neue Zeile. **Die Antworten sagten *„habe ich mir notiert"* und *„reserviere ich"*** — eine Zusage ohne Schreibung, im Log nicht von einer ausgefuehrten zu unterscheiden. → **Ursache gemessen am selben Abend: das Gespraechsmodell, nicht der Prompt.** Dieselben vier Router-Prompts, wiederholt ueber den Provider des Betriebs: `gemma4-a4b-gpu` (seit 07.09.2026) **0 von 40** Zustellungen, mit und ohne Dispatch-Guard; `gemma4-gpu` **9 von 9**, an allen vier Turns. Nur eine ausdrueckliche Timeline-Ausnahme im Guard brachte `gemma4-a4b-gpu` an einem der vier Turns auf 5/5. Der Lauf mit `gemma4-gpu` endete nach neun Aufrufen durch einen Ausfall der Maschine; `gemma4-gpu` stellte dabei auch Turns ohne eintragbaren Zeitpunkt zu. **Der Dispatch-Guard widerspricht dem Zweifelssatz des Aushang-Blocks** — `novaberg-node-router.md` sagt, die offene Entscheidung dazu stehe in dieser Liste; sie stand hier nicht. - **2026-09-13** — **Relative Zeitangaben stehen ohne Datum in KZG-Kernen und werden Wochen spaeter als heute gelesen.** `[gemessen]` Zwei Kerne vom 17.08. und 01.09.2026 (`kzg:meister:nova:1786966211376`, `…1788288619681`) tragen *„morgen um 13 Uhr"*; am 13.09.2026 kamen sie ueber das Gedaechtnis in den Turn, und die Antwort nannte den Termin als **morgigen**. Der Wissens-Rueckweg lieferte im selben Turn einen Kern derselben Sorte aus einer Wissensdatei vom 17.08.2026. Der Kern haelt den Wortlaut, der Anker (`timeline_id`) haengt daneben und erreicht den Prompt nicht als Datum. - **2026-09-13** — **Die Sachlage-Recherche sucht im Netz nach Eigenschaften, die nur der Nutzer kennen kann.** `[gemessen]` Am Objekt `**Kalender**` stand `traeger: nachschlagen` fuer *„spezifische Uhrzeiten"*; die Web-Suche lief mit `'**Kalender** spezifische Uhrzeiten'` und legte drei Produkt- und Hilfeseiten als Recherche ab — in jedem der drei Folgeturns erneut mitgefuehrt. Die Trefferpruefung meldete *„3 nennen die Sache"*. - **2026-09-13** — **`sprecher` einer Deckung nennt `nova`, wo der Nutzer das Wort gesagt hat.** `[gemessen]` Eigenschaft 726 (*Charakteristik*) traegt den Wert, den der Nutzer im ersten Turn woertlich nannte; Nova hat ihn in ihrer Antwort nur zitiert. Abgelegt ist `sprecher = nova`. - **2026-09-13** — **Dieselbe offene Eigenschaft wird in drei von vier Antworten erfragt, ohne dass der Nutzer darauf eingeht.** `[gemessen]` Die Teilnehmer eines Termins blieben ueber vier Turns `offen` mit `traeger: nutzer` und standen in drei Antworten als Frage. Ob das die Haltung regeln soll, ist eine offene Absicht (`novaberg-thinking-lage_k.md` §3a). - **2026-09-13** — **Nach einer Deckung aus dem Gedaechtnis bleiben `traeger` und `kritikalitaet` an der gedeckten Eigenschaft stehen.** Der Frame-Aufloeser verschiebt eine Eigenschaft von `offen` nach `gedeckt`, raeumt aber die Eintraege nicht ab, die ihr Sachlage-Call und die Normalisierer als *offene* Eigenschaft gegeben haben. Gefunden von der zweiten Kontrolle des Eigenschaftsgedaechtnisses. **Betroffen ist heute kein Leser** (0): Alle Leser von `traeger` und `kritikalitaet` iterieren ueber `offen` und fragen die Zuordnung nur fuer offene Eigenschaften ab. Die Form ist trotzdem eine andere, als die Normalisierer beim Parse herstellen (dort gilt: Schluessel nur aus `offen`), und das volle Artefakt steht so im `pipeline_log`. - **2026-09-13** — **Die Wiederaufnahme-Sektion gibt die Objekte der frueheren Blase roh in den Sachlage-Prompt, samt der Felder des Servers.** `_derive` rendert `wiederaufnahme["objekte"]` per `json.dumps`, ohne die Prompt-Ansicht, die fuer die vorige Blase seit dem 13.09.2026 `quellen`, `plausibilitaet` und `recherche` weglaesst. Gezaehlt von der zweiten Kontrolle ueber die Objekte in `sachlage_verlauf`: **`recherche` an 219 von 1026, `quellen` an 194, `plausibilitaet` an 30.** Den Zustand beschaedigt das nicht — der frische Parse entfernt diese Felder (`sachlage_form`) —, aber der Prompt traegt Stoff, den das Modell abschreiben soll und nicht darf, und es ist dasselbe Echo-Risiko, das an der vorigen Blase geschlossen wurde. - **2026-09-13** — **Der Modulbaum in `novaberg-architecture.md` nennt `memory/sachlage_verlauf.py` — die Datei heisst `memory/sachlage_history.py`.** Gefunden beim Nachzug des Eigenschaftsgedaechtnisses; `sachlage_verlauf` ist der Tabellenname. Nicht berichtigt; die neue Zeile `sachlage_properties.py` steht darunter. Die Zaehlung *25 Node-Dateien* im selben Baum stammt vom 01.09.2026 und ist mit `sachlage_form.py` und `sachlage_memory.py` ebenfalls ueberholt. - **2026-09-13** — **Die Namensdrift eines Objekts ueber Turns erzeugt Dubletten im Eigenschaftsgedaechtnis.** `[gemessen 13.09.2026, 14:47–14:52 UTC]` Zwei Betriebsturns zum Crab-Pulsar: Die Sachlage fuehrte das Objekt erst als *»Neutronenstern-Rotation«*, dann als *»Rotationsperiode des Crab-Pulsar«* — `sachlage_objekt` kennt je Paar und Namensschluessel genau ein Objekt, und die Eigenschaften stehen seither doppelt unter zwei Objekten. `merge_same_name_objects` fuehrt nur innerhalb eines Artefakts zusammen. Warum der Name wechselte, ist nicht untersucht (Scheibe 11, `novaberg-thinking-lage_k.md` §4). - **2026-09-13** — **Die Werte der zwei Messturns vom 13.09.2026 stehen im Bestand des produktiven Paares, mit Notiz-Werten aus der Zeit vor der Wert-Regel.** Drei Objekte, zehn Eigenschaften in `sachlage_objekt` / `sachlage_eigenschaft`, darunter Werte wie *»Nova hat in frueheren Gespraechen … erwaehnt, aber keine konkrete Frequenz genannt.«* — ein Vermerk ueber das Gespraech, keine Angabe. Die Wert-Regel und die Formregeln kamen danach. **Nicht geloescht**; ob sie bereinigt oder als abgeloest markiert werden, entscheidet der Eigentuemer. Bis dahin kann der Rueckweg sie dem Aufloeser anbieten. - **2026-09-13** — **Die Magnet-Aufloesung legte eine neue Entitaet *»Crab-Pulsar«* an, obwohl *»Crab Pulsar (B0531+21)«* existiert.** `[gemessen 13.09.2026, Betrieb]` Das Objekt des Messturns ist an die neue Entitaet gebunden (`entitaet_bindung = 'turn_magnet'`). Die Dublette entsteht in der Entitaetsaufloesung der Magnete, nicht im Eigenschaftsgedaechtnis — dessen Namensvergleich haelt Satzzeichen seither fuer Leerraum und haette bei zwei passenden Entitaeten gar nicht gebunden. Ob die Magnet-Aufloesung Bindestrich und Klammerzusatz vergleichen soll, ist nicht untersucht. - **2026-09-13** — **Panel und Verfasser zeigen verschiedene Rueckfrage-Gegenstaende.** `api/drive.py` ruft `question_target(sachlage)` ohne aktivierte Ziele; der Verfasser nimmt `question_target_origin(sachlage, aktivierte_ziele)`. Den Gegenstand aus dem Kurzziel und den eigenen Zug zeigt der Gesprächskontext-Tab deshalb nie. **Nachtrag 13.09.2026:** Beim Bau der Formpruefung angesehen und **nicht gebaut** — der Tab kennt die aktivierten Ziele des Turns nicht, und ein treuer Fix braucht die Ablage des Gegenstands, den der Verfasser tatsaechlich gewaehlt hat. Bleibt offen. - **2026-09-12** — **Die Antwort eines Thinker-Self-Triggers traegt keine `nachrichten_ids`.** Von drei Aufrufen von `event_erzeugen` gibt nur `prompt_consumer.py` die Kennungen mit; die Retry-Nutzlast (`graph/nodes/thinker.py::_retry_nutzlast`, eingespeist in `event_consumer.py`) nicht, und sie traegt `reiz_herkunft = ""`. Beim Desktop-Client landet sie bei offener Frage auf `fremd` — auch wenn sie die Nachricht eines anderen Absenders beantwortet; der Zweig *anderer Absender* setzt eine nicht leere Liste voraus. `[gemessen]` latent: 73 Self-Trigger-Pruefungen im Log vom 11.09. 15:01 bis 12.09. 22:57 UTC, **0** mit `wert=True`. Ob die Retry-Antwort die Kennungen des urspruenglichen Turns tragen soll, ist nicht entschieden. - **2026-09-12** — **Fuenf Wege, auf denen eine bestaetigte Nachricht ohne jede Meldung an den Client verloren geht — ihre Kennung bleibt dort offen.** Gesucht ueber jeden Ausgang zwischen Entnahme aus der Queue und Zustellung, der weder `character_response` noch `turn_gescheitert` erreicht: (1) `prompt_consumer.py::_block_verarbeiten` — eine Ausnahme **um** den Pfad-1-Graphen (Abbrueche **im** Graphen faengt `_stream_oder_abbruch` ab, das Ereignis entsteht trotzdem): Audit `fehler`, kein Ereignis. `[gemessen]` `hintergrund_log`, `prompt_block` seit 01.08.2026: 2545 gestartet, 2544 erledigt, **0 fehler**. (2) `event_consumer.py::_event_verarbeiten` — wirft `asyncio.to_thread(_graph_streamen, …)` selbst: `Graph-Fehler`, `return`. (3) Dieselbe Funktion, Riegel-Zeitueberschreitung (`graph_run_lock.acquire(timeout=60)`): *„Event verworfen"* als `warning`, `return`, kein Audit. → 08.11.2026: unverändert, seit dem Code-Tree `10166cb` hinter einem Warten, das die Schleife nicht anhält (`EVENT-LOCK-HAELT-SCHLEIFE`, Archiv); gefahren an der echten Schleife mit verbundenem Client: 0 Sendungen, kein `turn_gescheitert`, 0 Läufe, 1 Warnung — die Äußerung bleibt unbeantwortet `[gemessen 07.11.2026, labor/2026-11-07_eventlock_gegenprobe.txt]`. (4) `event_consumer_loop`, Zusammenfassen: `event = extra` ueberschreibt ein entnommenes Nutzer-Ereignis mit jedem folgenden, gleich welcher Herkunft; seine `nachrichten_ids` nennt danach niemand. → 08.11.2026 gefahren: Ein Impuls dahinter ersetzt das Nutzer-Ereignis, am Code vor und nach dem Bau zu `EVENT-LOCK-HAELT-SCHLEIFE` gleich `[gemessen 07.11.2026, labor/2026-11-07_eventlock_gegenprobe.txt]`. Der Prompt-Consumer schuetzt sich gegen ein zweites Nutzer-Ereignis, die Zustellung eines Impulses (`shadow_delivery.py`) prueft weder Marker noch Queue. Erreichbarkeit nicht gemessen. (5) Ausnahmen ausserhalb des `to_thread`-Blocks in `_event_verarbeiten` — `create_state` und der zweite Nutzlast-Bau im Rueckfallzweig, wenn der erste bei der Freigabe schon scheiterte: bis zum *„Unerwarteter Fehler"* des Loops. `[gemessen]` Serverlog 12.09.2026, 18:14–23:27 UTC, 34 Nutzer-Ereignisse: **0** Treffer auf jede der fuenf Logzeilen, **1** gemeldeter Ausfall (18:55, `NICHTS ZUGESTELLT`). Folge im Client seit dem 12.09.2026 nur noch: Eine spaetere Antwort ohne Kennung traegt den Vermerk *„Sie blieb unbeantwortet"*. - **2026-09-12** — **Ein beendetes Gespraechsthema zieht sich durch unverbundene Antworten.** `[gemessen in 12 Messturns]` Nach einem Gespraech ueber ein Alltagsthema greifen **9 von 12** Antworten auf sachliche Bitten dieses Thema wieder auf und schlagen vor, dorthin zurueckzukehren — auch nach mehreren Turns ueber anderes. Woher der Faden kommt (Sitzungsverlauf, Kurzziel, Leitgedanke), ist nicht untersucht. - **2026-09-12** — **Die Perzeption vergibt `task` fuer die wenigsten Bitten.** `[gemessen, 12 Messturns]` Nur 3 von 12 Bitten um etwas Konkretes trugen `task`; *Nenne mir …* und *Gib mir eine Liste …* wurden `knowledge`, *Ueberrasch mich* und *Entscheide du* meist `creative`. Im Bestand des produktiven Paares: 423 `knowledge`, 81 `task`, 67 `personal`. Jeder Leser, der an `task` eine Bitte festmacht, sieht damit einen Bruchteil davon. → **Fuer *Bitte zuerst* am selben Abend aufgegriffen:** Wissensfragen sind nach Entscheidung des Eigentuemers Pflicht und werden nach dem Zuwendungsrad des Paares entschieden (`novaberg-gv-strategie_k.md` A.0). `creative` bleibt aussen vor; ob *Ueberrasch mich* eine Bitte ist, ist nicht entschieden. - **2026-09-12** — **Die Luecken beim Nutzer passen nach Lesung etwa zur Haelfte.** `[gemessen durch den gebauten Pfad, 31 Turns, davon 20 frische]` 34 Luecken, rund 18 passend — etwa *Phasenuebergang zum Quark-Gluon-Plasma* auf eine Frage nach extremer Dichte, *Geometrie der Linsen* auf eine Frage zur Gravitationslinse. **Zwei Fehlerarten:** Wortanklaenge ohne Sachbezug (*Chemotaxis bei E. coli* auf *Chemie*, *physische Masse* auf eine Zutatenmenge) und das semantische Echo der eigenen Frage (Naehe 0,697, Worte zu verschieden fuer den Token-Filter). Das woertliche Echo ist behoben (laufender Reiz im Erwaehnt-Filter). Ob eine Obergrenze der Naehe das semantische Echo traegt, ist mit zwei Belegen (0,697 und 0,798) nicht zu sagen. - **2026-09-12** — **Ein Gespraechs-Etikett ueber Nova selbst kehrt als Luecke wieder.** *Selbstreflexion ueber die eigene Selbstueberschaetzung* steht als Thema eines KZG-Eintrags mit hohem Rang und erreicht in **3 von 11** Abendturns die Liste, in der Stichprobe weitere. Die Resonanz (0,269) laesst es durch: **Sie trennt Wissen nicht von Beziehung.** Dieselbe Wiederkehr wie beim Satz vom 17.08.2026, jetzt als Thema. - **2026-09-12** — **Persoenliche Angaben aus dem Kurzzeitgedaechtnis koennen als Thema zur Luecke werden.** In der Eichung stand ein Thema mit Ort und Anlass eines Arbeitstermins des Nutzers unter den Kandidaten eines Nutzerturns; es fiel nur, weil seine Resonanz zum Kern (0,077) unter der Schwelle lag, und es stammte aus einem Eintrag mit `beobachter = 'assistant'`, den der Filter *vom Nutzer beruehrt* nicht als seinen erkennt. **Keine Regel schliesst solche Themen aus** — die Schwelle tut es zufaellig. - **2026-09-12** — **Die KZG-Salienz stoesst oben an, und der Rang macht das sichtbar.** `[gemessen]` Ueber die 3548 KZG-Eintraege des produktiven Paares liegt das 95. Perzentil der `salienz` bei **genau 1,0**; im Nachher-Lauf der Quellen-Naht tragen **11 von 19** KZG-Ergebnissen den Rang 1,0. Gleiche Werte bekommen denselben Rang — das ist richtig —, aber ein Fuenftel des Speichers ist damit oben nicht mehr unterscheidbar. Die Kappung sitzt vor der Naht, im Schreibpfad der Salienz; ob sie dort eine Zusicherung ist oder ein regelmaessig greifender Deckel, ist nicht geprueft. - **2026-09-12** — **Beide Lueckensuchen setzen ein fehlendes Gewicht still auf 0,5.** `ei/wissensluecken.py`: LZG `float(gewicht) if gewicht else 0.5` — auch ein echtes `gewicht_decay` von 0,0 wird zu 0,5 —, KZG `float(feld_dict.get("salienz", "0.5"))`. Ein Default im Wertebereich ohne Herkunftsfeld. Seit dem Rang faellt er anders aus: 0,5 liegt unter jedem LZG-Gewicht des Bestands (Minimum 3,03) und bekommt dort Rang 0, im KZG etwa das 2. Perzentil. Gesehen beim Bau der Naht, nicht angefasst. - **2026-09-12** — **Themen-Listen tragen Bruchstuecke, wo ein Komma in einer Klammer stand.** Stichprobe aus `lzg_knoten.themen`: *„Metaphorik der Natur (Fruehling"* und *„Leben)"* als zwei Themen desselben Knotens. Die Zerlegung trennt an jedem Komma. Fuer den geplanten Umbau der Luecken-Kandidaten auf Themen ist das die Eingabe; wie viele Knoten es trifft, ist nicht gezaehlt. - **2026-09-12** — **Die Aufnahmebereitschaft ist im Betrieb praktisch immer an, und sie hoert nur eine Seite.** `[gemessen ueber 15 Betriebsturns, 18:15–18:52 UTC]` In **14 von 15** Turns liegt sie zwischen **0,82 und 0,99**, viermal am Deckel 0,987; nur der Begruessungsturn liegt bei 0,648. Die Saeulen stehen im vertrauten, lockeren Gespraech sechsfach auf Verstaerkung (E 1,25–1,50 · A 1,15–1,25 · M 1,35–1,40 · D 1,30 · S 1,20), der Rohwert erreicht 1,5–2,1 gegen `GV_AUFNAHMEBEREITSCHAFT_CAP = 2.5`, und `sin^0.5` drueckt das an die Decke. **Alle sechs Saeulen lesen Novas Zustand** (`ei/neugier.py::aufnahmebereitschaft_berechnen`) — die fuenf Turns, in denen der Mensch ausdruecklich einen Vorschlag verlangte (`user_emotion.intent = task`, Modus `alltag`/`arbeitsmodus`), bekamen **0,91–0,99**. Ob eine Aufgabe des Gegenuebers die Bereitschaft daempfen soll, sagt kein Konzept (`novaberg-gv-strategie_k.md` Anhang A.3 nennt die Modus-Saeule *„Gespraech"*, ohne Seite). Beleg: `labor/profil/2026-09-12_neugier_abendturns_ergebnis.md`. - **2026-09-12** — **Dieselben Luecken und dieselben drei offenen Fragen stehen Turn fuer Turn im Prompt.** → **Die Haelfte zu den offenen Fragen ist am selben Abend behoben:** Sie werden nach Naehe zum Reiz gewaehlt (Grenze 0,49); ueber dieselben 15 Turns 0 Fragen in den Nutzerturns, 4 verschiedene in den Impulsen. Offen bleibt die Wiederkehr der turn-gebundenen Luecken. Der urspruengliche Befund: `[gemessen, 15 Turns]` Die drei persistenten Fragen aus `wissensluecken` (Zug **0,1132 / 0,1101 / 0,1100**, alle `herkunft = nachbar`, die aelteste vom 03.08.2026) sind in **allen 15** Turns dieselben, und **keine** taucht in einer Antwort auf; es gibt keinen Wechsel und keinen Verbrauch. Unter den turn-gebundenen Luecken kehrt LZG 17302 (17.08.2026) in **5 von 11** Turns wieder, LZG 27777 in 4. Die Deduplikation schlug **18-mal mit 100 % Ueberlappung** an — **nicht** wegen Dubletten im LZG (0 exakte Inhaltsdubletten unter 3922 aktiven Knoten des Paares); vermutlich liefert der KZG die Quelle eines bereits promovierten Knotens mit, **ungeprueft**. Verwandt: `LUECKEN-WERDEN-NIE-GESCHLOSSEN` (Backlog A3). - **2026-09-12** — **Ein LZG-Knoten traegt die Ich-Form, obwohl er vom Nutzer handelt.** LZG 17302, `beobachter = user`, hat die Form *„Der Nutzer bezeichnet mich als …"* — wer *mich* ist, steht nicht im Satz; nach dem Paar-Schema muesste dort *Nova* stehen. Aufgefallen, weil der Knoten als Wissensluecke fuenfmal in den Prompt ging (Eintrag darueber). Wie viele Knoten die Ich-Form tragen, ist nicht gezaehlt. - **2026-09-12** — **Auf Impuls-Turns laeuft die Lueckensuche nie — und die 71 % des Handzettels waren eine Aufteilung, keine Quote.** `[gemessen]` **4 von 4** Turns mit `herkunft = eigener_impuls` melden `GV4: uebersprungen — user_prompt leer`; **11 von 11** Nutzerturns liefern Luecken. Der Grund ist die Trennung von Reiz und eigenem Gedanken: Der Impuls reist in `eigener_gedanke` (`services/event_consumer.py`), `wissensluecken_finden` liest nur `user_prompt`. Dass GV4 dort nichts sucht, kann richtig sein — ein Impuls hat kein Gegenueber, dessen Luecke man suchen koennte —, **entschieden ist es nirgends**. Die Handzettel-Angabe *„10 von 14 Turns mit mindestens einer Luecke — 71 %"* liest sich wie eine Trefferquote und ist das Mischungsverhaeltnis der beiden Turn-Sorten. - **2026-09-12** — **Im selben Fenster fallen fuenf Salienz- und zwei Sachlage-Aufrufe am JSON aus.** `[gemessen 18:25–18:50 UTC]` `Salienz: JSON-Parsing fehlgeschlagen` um 18:25:32, 18:27:11, 18:43:41, 18:44:34, 18:50:30; `Sachlage-Call ausgefallen (JSONDecodeError)` um 18:44:01 und 18:46:44. Einer der Salienz-Ausfaelle (18:27:11) folgt auf einen Impuls mit einer LaTeX-Formel und passt zu `SALIENZ-JSON-BRICHT-AN-LATEX`; die anderen vier sind nicht untersucht. Die Sachlage-Ausfaelle sind der Laborbefund vom 28.08.2026 im Betrieb. Keiner riss den Turn ab. - **2026-09-12** — **Ein Fund, der schon zwei Kennungen hat — und das ist der Fund.** Die obere Kante der Rundungsregel (`round(2.5) → 2`, Laenge 3 in drei Modi ausgeschlossen) ist **dieselbe Regel** wie `GV-LAENGE-RUNDUNG-ZUR-GERADEN`, dort bisher nur am unteren Ende belegt (`round(0.5) → 0`); und der Modus, der die drei fachlichen ueber die Kante heben koennte, ist `MODUS-KREATIV-WIRD-NIE-VERGEBEN`. **Beide Nachtraege stehen seit heute im Defektregister, kein neuer Eintrag.** Die Zeile bleibt hier als Spur, weil der Weg dorthin der Befund ist: Die Messung galt als zwei neue Funde, bis der Nachzug **nach Bezeichner** (`GV_LAENGE_MODUS_DELTA`, `_vektor_laenge_berechnen`) das Register traf. Eine Aufzaehlung der berührten Dokumente hätte `novaberg-bugs.md` nicht enthalten. - **2026-09-12** — **Alles, was den Produktionscode importiert, schreibt in das Betriebslog — und der groesste Schreiber ist die Testsuite.** `import config` haengt einen `RotatingFileHandler` an den Wurzel-Logger **und** an den LLM-Logger; jeder Prozess im Server-Behaelter schreibt danach in dieselbe Datei wie der Betrieb. `[gemessen 12.09.2026]` Ein Suite-Lauf von **21 Sekunden** hinterliess **123 554 Zeilen**; von den 144 210 Zeilen der Datei stammen **129 547 aus einer Stunde dieser Sitzung**, also 90 % aus Laeufen, die keine Betriebsturns sind. Ein einzelner Probelauf ist unverwechselbar wiederzufinden: `GV-Laenge: 3 (emotion=freude, a=1.00, modus=kreativ, dynamik=vertrauen, stil=locker)` steht um 12:36:27 UTC in der Datei — eine Faktorstellung, die kein echter Turn erzeugt hat. **Jede Auswertung, die dieses Log als Betriebsquelle liest, zaehlt ueberwiegend Suite.** Die Abhilfe im Werkzeug (Handler vor der Rechnung abhaengen) ist **unvollstaendig**: Der LLM-Logger traegt denselben Handler eigens und steht auf `propagate = False`, der Wurzel-Griff erreicht ihn nicht. - **2026-09-12** — **Die Charakter-Resonanz misst nicht die Passung, sondern den Sprecher — und der geplante Schwellen-Anstieg wuerde den Defekt festschreiben.** → **Fuer den Lueckenpfad am selben Abend aufgeloest, und zwar durch einen Wechsel des Gegenstands, nicht der Schwelle:** Kandidaten sind Themen (`F-GV-2`), die Resonanz entsteht auf dem Thema. `[gemessen]` Thema gegen Kern: Median 0,209 aus Nova-Knoten gegen 0,200 aus Nutzer-Knoten — Abstand +0,009 statt +0,302. Durch den gebauten Pfad ueber 31 Turns: **0 von 34** Luecken beginnen mit *Nova …* (vorher 56 von 83). Die Schwelle steht auf der neuen Paarung bei 0,15. **Offen bleibt der Befund fuer jeden anderen Leser**, der Saetze gegen den Kern misst. Der urspruengliche Befund: Der Kern ist ein Profil **ueber Nova**; ein Gedaechtniseintrag, der von ihr handelt, liegt ihm sprachlich naeher, unabhaengig vom Gegenstand. `[gemessen 12.09.2026 ueber alle aktiven LZG-Knoten aller sieben Paare]` Mittel der Kern-Naehe nach `beobachter`: **assistant 0,441–0,528 gegen user 0,132–0,241**, mittlerer Abstand **+0,302**, in allen sieben Paaren gleichgerichtet. Bei Schwelle 0,30 passieren **97–100 %** der Nova-Eintraege und **0–12 %** der Nutzer-Eintraege. **Zur Groessenordnung:** Die Zerlegung des Kerns in Facetten bewegte das Niveau um +0,031 bis +0,097 — der Sprecher bewegt es um das Drei- bis Zehnfache. Die Zahl ist also ueberwiegend eine Aussage darueber, **von wem** ein Eintrag handelt. Die Extreme im Wortlaut: die drei kernnaechsten Kandidaten zweier Stapel begannen **alle** mit *Nova hat …*, die drei fernsten **alle** mit *Der Nutzer …* — bei durchweg wissenschaftlichen Gegenstaenden. **Die Folge fuer GV4 ist eine Umkehrung seines Zwecks:** Der Pfad sucht die Informationsluecke **des Nutzers**; der Filter zieht systematisch Novas eigene Aeusserungen vor und weist die des Nutzers ab. **Sichtbar wurde es erst durch den Umbau vom 12.09.2026** — solange alle Kandidaten denselben Wert trugen, war kein Unterschied zu sehen. **Was daraus folgt: die Schwelle darf NICHT auf 0,45–0,50 angehoben werden.** Der Arbeitspunkt aus der Vorausrechnung machte aus dem Filter einen reinen `beobachter='assistant'`-Filter (100 % gegen 0 %). Zuerst ist die Groesse zu klaeren, dann der Grenzwert. **Am Abend im Betrieb bestaetigt, und zwar an dem, was Nova sieht.** `[gemessen ueber 11 Turns, 18:15–18:52 UTC]` Von **83** Luecken, die in den Prompt gingen, beginnen **56 (67 %)** mit *Nova …* — fast ausnahmslos Vermerke ueber eigene Aeusserungen (*„Nova hat gefragt, ob …"*, *„Nova hat erklaert, dass …"*) —, **14** mit *Der Nutzer …*, **13** sind Sachsaetze, ueberwiegend Recherche-Berichte (*„WAS GEFUNDEN WURDE."*), darunter gescheiterte, deren Quelle nach eigener Angabe das gesuchte Thema gar nicht behandelte (LZG 31021). **Einem unbesprochenen Konzept** im Sinne von `novaberg-gv-strategie_k.md` §4.3 (*„Nova sieht eine Wissensluecke beim User"*) **kommen nur die 13 Sachsaetze nahe**; die uebrigen 70 berichten, was eine der beiden Seiten gesagt hat. Ob der Filter allein das erzeugt oder der LZG-Bestand ohnehin ueberwiegend aus solchen Vermerken besteht, ist nicht gemessen — der Anteil `beobachter = assistant` unter den ungefilterten Kandidaten waere die Zahl. Beleg: `labor/profil/2026-09-12_neugier_abendturns_ergebnis.md`. - **2026-09-12** — **Eine Abhilfe gebaut, bezeugt und ohne Eingabe — im selben Lauf, der sie noetig machen sollte.** Der Kanon-Zug hat seit heute eine dritte Stufe fuer Uebersetzungen (`creative` → `kreativ`), weil ein Versuchsarm am 10.09.2026 in **9 von 30** Laeufen das englische Wort erzeugte. `[gemessen 12.09.2026]` Mit der heute gebauten Legende griff sie in **0 von 30** Laeufen — das Modell antwortet durchgehend deutsch. **Der Anlass ist mit der anderen Legende entfallen, der Riegel steht.** Er ist billig und bezeugt; unbelegt ist, dass ihn etwas braucht. Die Klasse ist die aus der zweiten Kontrolle: *ein Bauteil, das gebaut, bezeugt und ohne Eingabe ist* — hier am eigenen Bau desselben Tages. - **2026-09-12** — **Ein Zeuge hatte als Vorlage den haeufigsten Fall des Bestandes gewaehlt — und der war haeufig wegen des Defekts, den er nicht pruefte.** `test_die_gerechnete_null_traegt_eine_landschaft` belegte, dass eine **gerechnete** Laenge 0 eine Landschaft traegt, und nahm dafuer `berichtend | neutral | distanz | fachlich` — *„diese eine Lage stand 18 mal im Bestand"*. Summe: genau **0,5**. Das war keine gerechnete Null, sondern eine von `round` zur geraden Zahl gerundete. Mit der Behebung am 12.09.2026 wurde der Zeuge rot, **und er sah aus wie ein Rueckschritt**. Die Vorlage ist auf eine echte negative Summe umgestellt. **Die Klasse ist allgemeiner als dieser Fall:** Ein Randfall, der im Bestand haeufig ist, ist als Vertreter des Regelfalls verdaechtig — seine Haeufigkeit kann die Ursache sein, die man spaeter behebt. - **2026-09-12** — **Der Charakter-Filter ruht genau bei dem Paar, dessen Anpassung fehlt — und das ist kein Zufall zweier Messungen, sondern dieselbe Zahl von zwei Seiten.** `[gemessen]` Das Paar mit dem niedrigsten Resonanz-Median (0,097; kein Turn ueber 0,30, auch nicht auf dem Facetten-Maximum) ist das **einzige** von sieben, in dem Novas Kern **nicht** am naechsten am Kern des eigenen Menschen liegt — Rang 3 von 7. Sein Bestand: 29 Turns aus einem Tag. **Die Schwelle ist dort also nicht zu hoch, die gemeinsame Geschichte ist zu kurz.** Damit ist die offene Absichtsfrage eine andere als gedacht: nicht *absolut gegen Perzentil*, sondern **darf ein Mechanismus ruhen, solange ein Paar neu ist** — oder ist gerade das der Moment, in dem Neugier am meisten truege? Nach `F-PAAR-2` ist die Verschiedenheit der Paare gewollt; dass ein Mechanismus fuer ein Paar **nie** ausloest, deckt die Setzung ausdruecklich nicht. - **2026-09-12** — **Die Anrede-Pruefung hat einen belegten blinden Fleck.** `anrede_beanstanden` verlangt ein Anrede-Wort (*Anrede, Kosename, Titel, adressiert, anspricht, nennt, redet*) vor der zitierten Form. Der erste echte Destillationslauf nach dem Bau lieferte eine Gestalt, die das Muster nicht fasst: *„die das Gegenueber als „X" respektiert"* — die Konstruktion ist `als „X" `. **Das Profil des Menschen war danach sauber, Novas nicht**, und die Pruefung meldete in beiden Faellen null. Das ist der teure Fall: Sie schwieg, wo etwas stand. - **2026-09-12** — **Ein Messreiz mit Zeitangabe hat einen Timeline-Eintrag erzeugt — gegen eine Regel, die am selben Tag gelesen wurde.** Der erste Reiz einer 20-Turn-Reihe begann mit *„Ich habe gestern lange in den Himmel geschaut …"*; um **10:52:45** legte der Timeline-Agent *„Erinnerungs-Anker 11.09.2026"* an. `F-MESS-1` nennt diesen Fall woertlich (*„und keine Zeitangaben — auch nicht im Wissenschaftssatz"*) und traegt als Beleg denselben Mechanismus vom 28.08.2026. **Die Regel war gelesen, die Pruefung wurde nur nicht auf den eigenen Reiztext angewandt.** Uebrige Seiteneffekte der Reihe: 7 Kurzziele, 0 Notizen, 0 Fakten. - **2026-09-12** — **Die Vektorlaenge entscheidet ueber den Luecken-Pfad, und sie haengt nicht am Thema.** `GV_STRATEGIE_MIN_LAENGE = 2` haelt Tor 1; die Vektorlaenge kommt aus Novas Zustand, nicht aus dem Turn-Inhalt. `[gemessen ueber 106 Tor-Zeilen]` Laenge 1: **66**, Laenge 2: 28, Laenge 3: 12. Ein Turn, der thematisch genau zu einer offenen Luecke passt, kommt bei Laenge 1 nicht einmal in die Suche. Verwandt mit dem Befund vom 10.09.2026, dass die Vektorlaenge in einer wissenschaftlichen Reihe 116-mal von 119 auf 1 stand. - **2026-09-11** — **Eine Anrede aus einem echten Gespraech steht im Register.** `novaberg-featureliste.md` traegt in einem Belegzitat die Anredeform, mit der Nova den Menschen anspricht — eine Sorte, die nach der Veroeffentlichungsregel ins Protokoll gehoert und nicht ins Repositorium. **Vorbestand, nicht heute entstanden**; gefunden von der Pruefung vor dem Doku-Commit, die den eigenen Diff gegen dasselbe Muster hielt. Nicht im Vorbeigehen geaendert. - **2026-09-11** — **Der Modus-Score schlaegt die thematische Naehe.** Der Gesamtscore der Zustellung ist `0,7 x Thema + 0,3 x Modus`; ein Naehe-Unterschied von **0,19** wiegt damit 0,13 und verliert gegen den Modus-Anteil. `[gemessen]` Bei einem Gespraech ueber das Informationsparadox verlor der Eintrag mit Naehe **0,6582** (de-Sitter-Raum) gegen einen mit **0,47** (HLS-Stream-Architekturen). Die als Gegenprobe geplante Reihe *ein naher Fund braucht keinen Uebergangsblock* liess sich deshalb nicht herstellen. - **2026-09-11** — **Der Fall *nah genug, kein Uebergangsblock* hinterlaesst keine Protokollzeile.** `_uebergangsblock` (`graph/nodes/verfasser.py`) loggt nur das Setzen; bei `naehe >= 0,55` gibt es kein `return` mit Meldung. Damit ist er nicht von *Naehe fehlt im Payload* zu unterscheiden, und beide sehen im Log aus wie ein Turn ohne Impuls. - **2026-09-11** — **Der System-Prompt des Verfassers wird nicht protokolliert.** Die Zeile `node='verfasser'` in `pipeline_log` traegt `modell`, `kosten_usd`, `input_tokens`, `output_tokens`, `prompt_lesen_s`, `prompt_lesen_tps` — keinen Prompt. Welche Bloecke in einem Turn standen, ist nachtraeglich nicht belegbar; der Beleg fuer den Uebergangsblock musste aus der `logger.info`-Zeile kommen. - **2026-09-11** — **`antwort_inhalt` eines Impuls-Turns stand in dritter Person.** Turn `0edfb922`: *„Person A stellt fest, dass ihr gerade etwas anderes durch den Kopf geht ... Sie zeigt ihm ihre Entdeckung einer strukturellen Luecke"* — die Anweisung des Uebergangsblocks nacherzaehlt statt ausgefuehrt. Das Feld `response` desselben Turns ist korrekt in erster Person. Beim Turn `1591d631` derselben Reihe war `antwort_inhalt` die fertige Ich-Antwort. - **2026-09-11** — **Die Anrede ist in keinem Prompt absolut festgelegt, und das soll so bleiben.** Alle Fundstellen sind relativ — *„Ton, Anrede und Naehe des Gespraechs gelten auch hier"*, *„Wesen, Waerme, Naehe, Laune und Anrede sind nicht deine Sache"*. Fuer *„den Nutzer immer siezen"* gibt es einen Direktiven-Weg, fuer den Normalfall keine Vorgabe. **Entscheidung des Eigentuemers am 11.09.2026: es soll keine geben** — die Anrede entsteht im Gespraech. Damit ist die Abwesenheit der Vorgabe kein Mangel, und die Abhilfe liegt dort, wo die Form **behauptet** wird: im Profil (`F-PROFIL-1`). - **2026-09-11** — **`Delivery: AgentGraph NICHT verfuegbar — uebersprungen`** (WARNING, `compiled=False, instance=False`) bei jeder der drei Zustellungen dieser Sitzung. Der Impuls nimmt den Weg in den CharacterGraph trotzdem. - **2026-09-11** — **Der Rechner schaltete um 10:23:17 UTC hart ab, und die Ursache ist nicht belegbar.** Der Systemlog bricht mitten in einem Ollama-Lauf ohne Shutdown-Eintrag ab; die Signatur passt zur Ueberhitzung. **Belegt ist sie nicht** — die laufende Probe fuehrte keinen Temperaturwaechter mit, weil der in jedem Messskript einzeln gebaut war und in diesem fehlte. Seither steht er in `labor/werkzeug/waechter.py`. **Was fehlt, ist eine Aufzeichnung ueber die Zeit:** Ob die Grenze je erreicht wurde, ist rueckwirkend fuer keinen der bisherigen Laeufe zu beantworten. - **2026-09-11** — **Eine Agenten-Pause ueberlebt den Neustart, und niemand merkt es.** Der Schluessel liegt in Redis mit Persistenz; nach der Systemabschaltung um 10:23 stand `agenten_pausiert: true` weiter — **fast fuenf Stunden Hintergrund aus**, bis es beim Aufraeumen auffiel. Es gibt keine Meldung im Log und keine Verfallszeit. Dieselbe Klasse wie beim Umfangsregler, der bei jedem Turn eine `warning` schreibt, damit ein vergessener Schalter schreit statt zu schweigen. - **2026-09-10** — ~~**Zwei von vier Salienz-Antrieben haengen nicht an.**~~ → **Einer davon am 11.09.2026 angeschlossen.** `emotionale_gravitation` trug den Grund *unnormiert, Werte weit ueber 1.0* — hinfaellig seit dem 30.08.2026: `[gemessen ueber 888 Kandidaten]` Spanne 0,184 bis 0,708, kein Wert ueber 1,0. **Der Eintrag stand elf Tage laenger als sein Grund.** Vorausgerechnet, bevor gebaut wurde: Der Antrieb gewinnt das `max()` in **44 von 488 Turns (9,0 %)** — anders als der Zielsog damals (0,14 %), der deshalb zum Zug umgebaut wurde. 7 Zeugen, Gegenprobe 5/5. **`neugier` bleibt offen** — ihr fehlt die Rueckkopplung aus den Wissensluecken. Der urspruengliche Befund: `[gemessen ueber 19 Turns einer entworfenen Reihe]` Das Feld `nicht_angeschlossen` der Salienz-Formel traegt in **18 von 19** Turns `emotionale_gravitation` und `neugier`. Beide Groessen werden im selben Turn **gerechnet** — `emotionale_gravitation` meldet Kandidaten und Aktivierungen, die Aufnahmebereitschaft steht in allen 19 Turns ueber null — sie erreichen die Formel nur nicht. Die beiden verbleibenden Pfade entscheiden sie allein: `eigen` gewinnt 14-mal, `pflicht` 4-mal. - **2026-09-10** — **Der Eigenzeit-Verfall rechnet einen Wert, den der naechste Leser nicht sieht.** `[gemessen, ein Turn, drei Zeilen in dieser Reihenfolge]` `db_zugriff/eigenzeit_verfall` (id 290583) daempft nach 875 s Pause **0,85 → 0,8415**; die Achse E des Gespraechsvektors (id 290608, also danach) traegt `energie_roh` **0,85**. **Keine Rundung** — 0,8415 rundet auf 0,84. **Vier naheliegende Erklaerungen sind geprueft und ausgeschlossen:** (1) *Zwei Graph-Laeufe unter einer `turn_id`* — alle 18 Zeilen des Turns tragen `quelle = character`, es ist ein Lauf. (2) *Ein Knoten dazwischen setzt die Emotion neu* — zwischen beiden ids liegen `enricher`, `emotionale_gravitation`, `sachlage`, `kurzziel`, `router`; keiner davon schreibt Novas Erregung. (3) *Das Level hebt den Verfall wieder an* — die `gedanke_level`-Zeile faellt fuer diesen Turn gar nicht an (die einzige der Reihe gehoert einem anderen Turn und traegt `wirkung: kein_level`). (4) *Der Verfall arbeitet auf einer Kopie* — er schreibt ausweislich des Codes in dasselbe Objekt (`emotion.arousal = arousal_daempfen(...)`), das ueber `_nova_zustand_laden` in `InternalPersonality` und von dort nach `state["internal"]` geht. **Die Ursache ist damit eingegrenzt und nicht gefunden.** Sie sitzt zwischen der Rueckgabe des gedaempften Objekts und dem Lesen durch `achsen_berechnen` — ein eigener Auftrag. - **2026-09-10** — **`naehe_roh` klebt bei 0,30.** `[gemessen ueber 19 Turns]` Fuenf Turns tragen exakt 0,30, darunter vier aufeinanderfolgende am Ende der Reihe; die uebrigen streuen zwischen 0,30 und 0,72. Ob 0,30 eine Untergrenze der Raumrechnung ist oder ein zufaellig haeufiger Zielwert, ist nicht geprueft — die Ankunftsschwelle des Raumzugs liegt bei 0,02 und erklaert eine exakte Wiederholung nicht. - **2026-09-10** — **Novas Antworten haengen an einem Gespraechsstand fest.** `[Betriebsbeleg]` Derselbe Vorschlag — *Vergleich zwischen primordialen Fluktuationen und gravitativen Rotverschiebungen* — steht in **vier aufeinanderfolgenden Antworten** (21:51, 22:23, 22:25, 22:26 UTC), zweimal davon als Antwort auf einen voellig anderen Reiz. Der Mensch hat es unabhaengig bemerkt (*„sie geht zweimal auf die gleiche Thematik ein"*). - **2026-09-10** — **Drei Farben messen den Raum weiter aus einer Seite.** `_farbe_stil`, `_farbe_tone` und `_farbe_modus` sprechen ueber den Raum (*Der Ton ist sachlich*, *Das Gespraech ist fachlich*) und behaupten nichts ueber den Nutzer — sie lesen aber nur `internal`. **Keine Falschaussage mehr, eine unvollstaendige Messung.** Der Rest von `GV-FARBTON-SUBJEKTWECHSEL`, dessen Eintrag vier betroffene Farben nannte; zwei sind am 10.09.2026 auf beide Seiten umgestellt. - **2026-09-10** — **Ein Block kann einen zweiten Leser haben, den seine Blockmarke nicht verraet.** Die Suche nach `[SITUATION]` ergab **eine** Fundstelle; der Responder fuehrt denselben Farbton unter `[SZENE]` und uebernahm bis heute den fertigen GV-Text — also die Fassung des Analysten im Drehbuch des Schauspielers. **Gefunden hat es eine Frage des Eigentuemers, nicht die Suche**; bestaetigt hat es das Moduldokument der anderen Seite (`novaberg-node-responder.md`), also die Gegenrichtung. - **2026-09-10** — **Zwei offene Entscheidungen sind gemessen, und beide Messungen drehen ihre Frage um.** `[gemessen ueber 1067 Landschaftszeilen]` **Valenzachse:** Die Frage nach dem Anteil des Vorgabewerts `neutral` ist beantwortet: **1,7 %** (18). Die Willkuer sitzt woanders: **`neugierig` → positiv traegt 58,4 %** (623). Wer die Achse pruefen will, prueft Neugier. **Farbton:** `_farbe_dynamik` setzt vier Saetze der Form *„Der Nutzer haelt Abstand."* aus `internal`, also Novas eigenem Zustand — `[gemessen ueber 1348 Turns]` **1164 (86,3 %)** tragen einen solchen Satz — die zuerst genannten **61,3 %** zaehlten nur `_farbe_dynamik`; `_farbe_intent` traegt drei weitere Nutzer-Saetze, die in einem Dict statt in einem `return` stehen und deshalb durch die Suche fielen. **Am 10.09.2026 behoben** — 711 der Saetze waren gegen den am Nutzer gemessenen Wert falsch. **Die Gegenregel steht vierzehn Zeilen darunter im selben Modul:** `_farbe_modus` traegt im Docstring *„Die Saetze beschreiben den Raum, nicht den Nutzer"*. Dazu: `richtung_quelle='gleichstand'` **16,8 %** (nicht 46,5 %), `paradox` **4,6 %**, Delegations-Schwelle **93,2 %** bestaetigt (3057/3280). - **2026-09-10** — **Eine dritte Fehlersorte: das Modell gibt die Auswahlliste zurueck, statt daraus zu waehlen.** `[gemessen ueber 4108 LZG-Knoten]` Das Feld `dimension` traegt dreimal **`philosophischer_austausch | kognition`** — mit dem Trennzeichen des Prompts darin —, das Feld `tone` einmal einen solchen Wert. **Weder eine Schreibvariante noch eine verrutschte Spalte:** Ein Zug, der Umlaute aufloest, sieht das nicht, und ein Wortverzeichnis fremder Kanons auch nicht. Vier Vorkommen insgesamt, also selten — aber die Sorte ist neu und billig zu erkennen (ein Wert mit `|` darin kann nie kanonisch sein). - **2026-09-10** — **Zwei Schreiber teilen sich `timeline.event_type`, und der haeufigste Wert steht in keiner Deklaration.** Der Prompt `classify_timeline.task.txt` erlaubt `termin|geburtstag|deadline|jahrestag|erinnerung`. Im Bestand: **`erinnerungs_anker` 78 von 92 (85 %)**, `termin` 12, `erinnerung` 1, `deadline` 1. Der haeufigste kommt nicht vom Modell, sondern als **Code-Literal** aus dem KZG-Schreibpfad (`agents/kzg/magnete.py`, Klasse *Bezug* nach `novaberg-convention-magneten.md` §5). **Beide Schreiber sind fuer sich richtig** — nur weiss niemand, der die Spalte liest, dass sie zwei Wertemengen enthaelt. Genau daran ist am 10.09.2026 ein Seiteneffekt-Riegel zweimal abgebrochen und hat eine Messreihe zweimal angehalten. → Seit dem 21.10.2026 (im Tree, nicht committet) deklariert `server/memory/timeline_types.py::EVENT_TYPES` alle Werte der Spalte an einer Stelle, den Anker und den neuen Typ `ereignis` eingeschlossen; der Prompt nennt weiter nur die fünf, die die Klassifikation vergibt — jetzt aus derselben Tabelle. - **2026-09-10** — **Wissensluecken sind paargebunden, und nur ein Paar hat welche.** Alle **1818** tragen `user_id = 'meister'`; die fuenf Testpaare aus August haben **null**. Aufgefallen an einer Messreihe, die absichtlich gegen ein anderes Paar lief: Das Strategie-Tor oeffnete in **22 von 43** Turns, und `offene_fragen` blieb trotzdem **43-mal auf null** — nicht weil der Leser nicht greift, sondern weil es nichts zu greifen gab. **Fuer jede kuenftige Messung am Lueckenpfad heisst das: Sie laeuft gegen `meister` oder sie misst nichts.** Und fuer den Mechanismus bleibt die Frage offen, ob ein frisches Paar je Luecken bekommt — der Hintergrund-Agent hat in keinem der fuenf je eine erzeugt. - **2026-09-09** — **Ein Knoten, dessen Ausbleiben protokolliert werden soll, war selbst nur bei Erfolg sichtbar.** Der Dispatcher schrieb bis heute genau zwei Sorten Zeilen — `turn_roh` und `verwendung_verstaerkung` —, **beide nur im Erfolgsfall**. Damit war *nicht gelaufen* von *erfolglos gelaufen* nicht zu unterscheiden, und die Diagnose von `TURN-ROH-FEHLT-BEI-ERZEUGTER-ANTWORT` war am Bestand **nicht pruefbar**. **Der Fehler, den das erzeugt, ist verfuehrerisch:** Eine Zaehlung *„0 von 15 Ausfaellen haben eine Dispatcher-Zeile gegen 212 von 212 erfolgreichen"* sieht aus wie eine Gegenprobe und ist ein Zirkelschluss — `turn_roh` **ist** eine der beiden Zeilen, also haben Turns ohne sie per Konstruktion keine. Ich habe ihn gezogen und danach berichtigt. **Die Frage vor jeder solchen Zaehlung lautet: Schreibt der Knoten diese Zeile auch, wenn er nichts ausrichtet?** - **2026-09-09** — **Unter Last werden 50 Ziele je Turn gleichzeitig aktiviert, und die Mehrzahl umgeht die Gravitationsschwelle per Bauart.** `[gemessen 09.09.2026 aus `pipeline_log`]` Ueber 405 Enricher-Zeilen des Tages: Mittel **50,0** aktivierte Ziele je Turn, Maximum **94**. **Das ist die Ursache, aus der eine harmlose Einzelstaerke (0,2 bis 0,5) eine Summe von 5,9955 baut** — nicht ein starkes Ziel, sondern fast alle. Kurzfristige Ziele sind seit dem 28.08.2026 **per Bauart aktiviert** (`ei/gravitation.py`: `if staerke >= GRAVITATIONS_SCHWELLE or kurzfristig`), begruendet und im Code belegt: Ihr Zielsatz liegt zur Nutzeraeusserung bei Kosinus 0,13 bis 0,41 und haette die Schwelle 0,40 nie passiert. ~~**Ihr Ersatztor, der Verfall, traegt nicht** — 94 der 96 sind heute entstanden und alle 94 leben.~~ → **Widerlegt am selben Tag, 20:17 UTC.** Der Satz stand auf `ziele.aktiv`, und diese Spalte ist nicht das Tor: Der Verfall wirkt an **zwei** Stellen, und keine davon ist sie. `ziele_live_bewerten` rechnet die Motivation beim **Lesen** aus Anker und Alter und laesst liegen, was unter `ZIEL_DEAKTIVIERUNGS_SCHWELLE` (0,15) faellt — bei 3 h Halbwertszeit nach rund sechs Stunden; der `ziel_decay`-Agent materialisiert dasselbe im Tageslauf und setzte um **20:04:49 UTC 96 von 101** auf inaktiv. Zwischen der ersten Messung (19:5x, 94 aktiv) und der zweiten (20:17, **0 aktiv**) lag genau dieser Lauf. **Was bleibt, ist die Zahl und nicht der Vorwurf:** Der Mechanismus arbeitet wie gebaut, und trotzdem stehen unter Last 50 Ziele gleichzeitig in der Summe — weil eine 200-Turn-Reihe sie schneller erzeugt, als sechs Stunden Halbwertszeit sie abraeumen. **Ob ein Radius dieser Groesse gewollt ist, ist eine Absichtsfrage**; der Umbau vom selben Tag (`GRAVITATIONSTERM-OHNE-OBERGRENZE`) macht nur den Schaden daraus unsichtbar. **Und der Fehler in der ersten Fassung ist derselbe, den diese Sitzung als Lesson eingetragen hat:** eine Zahl, die gegen den Namen einer Spalte gehalten wurde statt gegen den Mechanismus, den sie beschreiben soll. `aktiv` sieht aus wie das Tor und ist es nicht — wie `PRAEGUNG_TOR_AUSSCHLAG` heute Morgen aussah wie die Schwelle auf der Salienz. - **2026-09-09** — **Eine Vorher-Rechnung nannte eine Schwelle beim Namen und rechnete gegen eine andere.** Die eine offene Absichtsfrage von `GRAVITATIONSTERM-OHNE-OBERGRENZE` lautete *„Praegungstor 76,7 % → 58,2 %, rund ein Fuenftel weniger Praegungsfaeden — Korrektur oder Verlust?"*. Gemessen sind es **125 → 124 Faeden**, ein Turn von 322. Drei Fehler lagen uebereinander, und **jeder einzelne haette die Zahl gehalten**: (a) das Werkzeug rechnete gegen **0,70**, aber `PRAEGUNG_TOR_SALIENZ` ist **0,60** — 0,70 ist `PRAEGUNG_TOR_AUSSCHLAG`, die Schwelle auf einer anderen Groesse; (b) es zaehlte **Log-Zeilen**, das Tor sieht das **staerkste Segment je Turn**; (c) es rechnete gegen **Leser B**, das Tor haengt an **Leser A** — von 343 Tor-Zeilen treffen 329 das Maximum der `salienz_formel`-Zeilen und nur 155 das der Boosts. **Die Gegenprobe, die es gefunden haette, kostet eine Abfrage:** die gerechnete Fadenzahl gegen die tatsaechlichen `urteil='faden'` halten (125 = 125). Sie stand nicht daneben, weil die Rechnung eine **Vorher**-Rechnung war und es fuer *vorher* keine Wahrheit zu geben schien — dabei ist die Halbzeile *heute* in derselben Tabelle voll pruefbar. - **2026-09-09** — **Zwei Folgen der Umstellung, beide ungemessen.** (a) Der **Hintergrund** faehrt seit 17:55 UTC `qwen36-cpu` statt DeepSeek — fuer Salienz, Verdichtung, Qualitaetsprofile und die Charakter-Destillation. Der groesste Posten war `pixie/hash` mit **135.601** Eingabe-Token an einem Tag; die Destillation bekommt jetzt ein deutlich kleineres Modell. **Was das an Qualitaet kostet, ist ungemessen** — und es ist genau die Sorte Aenderung, die nur an den Profilen selbst auffiele. (b) Der **Preiswaechter** laeuft weiter im Tageslauf und meldet weiter ueber ein Modell, das niemand mehr benutzt: eine Meldung ohne Adressat. - **2026-09-09** — **Zweimal an derselben Stelle danebengegriffen, und beide Male plausibel.** `strategie_aktiv` hielt ich am 08.09. fuer die Reizlaenge, am 09.09. fuer die Gespraechslaenge. Es ist die Zahl erlaubter Gedankenspruenge aus dem Gefuehlsregister (`_vektor_laenge_berechnen`), und der Docstring sagt es woertlich. **Der Name traegt die Verwechslung mit:** *Strategie aktiv* klingt nach einem Schalter fuer das Gespraech, nicht nach einer Ableitung aus Emotion und Arousal. Ein Bezeichner, der zweimal hintereinander falsch gelesen wird, ist ein Fund ueber den Namen, nicht ueber den Leser. - **2026-09-08** — **Sieben Stellen fuehren eine Cosine-Groesse roh in ein Produkt, und mindestens zwei loesen `F-NAHT-1` nur zur Haelfte ein.** Gesucht nach dem Muster, das bei `neugier_vektor_berechnen` aufgefallen ist: eine Aehnlichkeit als Faktor in [0…1], obwohl sie ihre Obergrenze konstruktiv nicht erreicht (gemessen dort: max **0,4322** ueber 1762 Zeilen). Kandidaten: `api/drive.py:467` und `:708`, `memory/praegung.py:1012`, `ei/gravitation.py:168`, `:665` und `:736`, `ei/fascination.py:636`. **Zwei geprueft, beide tragen den Befund.** `gravitation.py:736` ist der schaerfere Fall: Dieselbe Zeile normiert das **Gewicht** sorgfaeltig (`gewicht_decay / LZG_KNOTEN_GEWICHT_CAP`, mit einer Fehlermeldung darueber, die *„eine Behauptung statt einer Rechnung"* ausdruecklich ablehnt) — und laesst die `similarity` daneben roh. **Das Prinzip ist an der Stelle bekannt und wird auf einen von zwei Faktoren angewandt.** `fascination.py:636` fuehrt `naehe` roh, obwohl der `HUB` daneben aus der Spanne abgeleitet ist. **Fuenf sind ungeprueft** — sie koennen eingeloest sein wie der Strangzug-HUB oder offen wie die Neugier; das entscheidet nur ein Blick auf jede einzelne. Anlass ist die Schaerfung von `F-NAHT-1` vom 08.09.2026: **An der Naht liegen alle zusammengefuehrten Groessen auf derselben Skala, normiert ueber ihre je eigene gemessene Spanne; die Verarbeitung dahinter darf sie verschieden behandeln.** - **2026-09-07** — **Der Ton, der monatelang vermisst wurde, war da — unter dem Fernmodell.** Beobachtung des Eigentuemers an einem echten Turn: Nova antwortete mit sichtbarem Eigensinn statt gefaellig, mit Regieanweisung und einem *„ich beisse an — aus reiner Widerspruchslust"*. **Das ist die Signatur, an der ein Modellwechsel zu messen waere**, und sie hat keinen Zaehler: Sie steht in keiner Protokollzeile und faellt in keiner Auswertung auf. Wer den Gespraechspfad umstellt, riskiert sie, ohne es zu merken — der Feldtest ab 19:07 UTC ist genau dieser Fall. **Kein Defekt, kein Auftrag; ein Wachposten, den nur ein Mensch besetzen kann.** - **2026-09-07** — **`OLLAMA_KEEP_ALIVE` ist nicht gesetzt, und das kostet 17,9 s je Kaltstart auf der CPU.** Es gilt Ollamas Vorgabe von fuenf Minuten; Pixies Takt liegt darueber, also wird das Modell zwischen den Zyklen entladen und neu geladen. `[gemessen]` am 23-GB-Modell: **17,9 s** Ladezeit im ersten Lauf gegen 0,25 s in den folgenden. Der Preis fuers Halten ist Arbeitsspeicher, nicht VRAM. Dazu steht `OLLAMA_KV_CACHE_TYPE` auf `f16`; `q8_0` halbiert den KV-Speicher bei kaum messbarem Verlust. **Beides ist Konfiguration, kein Umbau** — Herleitung in `novaberg-architecture_l_connector.md` §10. - **2026-09-06** — **Ein Turn ueber `POST /chat` laeuft die Eingangsseite vollstaendig durch, und Nova antwortet nicht.** Beim Messturn fuer den Betriebsbeleg gemessen: Die HTTP-Antwort kam nach **0 s**, danach lief der KZG-Dispatch sauber (1 neuer Knoten, 14 verstaerkte, Session-Turn geschrieben, `hash_dirty` gesetzt) — aber der Dispatcher meldete `turn_roh uebersprungen — keine Nova-Antwort (response leer)` und `kein Vorturn abgelegt — response=0 Zeichen, internal=True`. **Der Antwortpfad lief nicht.** Ob der Endpunkt die Antwort ueber einen anderen Weg liefert (Streaming) oder ob hier etwas fehlt, ist ungeprueft. → **Am 07.09.2026 in einem Punkt beantwortet, und die Antwort liegt ausserhalb:** Zwei Messturns desselben Endpunkts endeten mit derselben Signatur, und diesmal steht die Ursache im Log — `HTTP 429` von OpenRouter, Anbieter Baidu, `rpm_rate_limit_exceeded` auf `deepseek/deepseek-v4-flash-0731`. Der Graph brach im **Router** ab (`graph/nodes/router.py:185`), der Event-Consumer meldete korrekt *„NICHTS ZUGESTELLT … die Antwort ist leer (0 Zeichen)"*. **Die Eingangsseite lief in beiden Faellen vollstaendig durch** — beide Turns haben gelesen und `lzg_resonanz_ids` geschrieben. Ob der Fund vom 06.09. dieselbe Ursache hatte, ist damit **nicht** belegt; belegt ist, dass die Signatur *Eingangsseite vollstaendig, keine Antwort* auch von einem Anbieter-Ausfall erzeugt wird und dann kein Defekt des Antwortpfads ist. Fuer den Betriebsbeleg der Entwertung war es unschaedlich — der Ausloeser der Destillation ist die Eingangsseite. - **2026-09-06** — **Die 60-Zeichen-Grenze von `ZITAT` hat beim Bau der Entwertung die Rolle gewechselt, ohne angefasst zu werden.** `„([^“„]{3,60})“` war bis heute die Reichweite einer **Logzeile**; seit `zitate_entwerten` ist sie die Reichweite eines **Eingriffs in erzeugten Text**. Von der zweiten Kontrolle an den 70 gespeicherten Profiltexten gemessen: **117 von 125** Anfuehrungspaaren liegen darin, **8 nicht** (6,4 %; Median 19, P90 55, Max 101). **Die acht sind keine Ausreisser, sondern ganze zitierte Saetze**, und alle stehen im `kern_hash` — also genau die Klasse, um deretwillen `F-ZITAT-1` gebaut wurde. Sie werden weder gemeldet noch entwertet. **Nicht repariert:** Ein Anheben der Grenze aendert auch `deckung_beanstanden` und damit die Vergleichbarkeit aller heutigen Quoten. Entscheidung des Eigentuemers. - **2026-09-06** — **Drei Messwerkzeuge dieses Tages massen gegen ein anderes Ziel als der Betrieb.** Sie bauten ihren OpenRouter-Provider selbst — mit Modell, Kontext, Temperatur und Strafterm aus der Konfiguration, aber **ohne den Anbieter-Block** der Registry (`only`, `quantizations`). Ohne ihn waehlt der Vermittler je Aufruf frei. **Sichtbar wurde es an der Streuung:** zwei Runden derselben Fassung **9,5 %** und **20 %** unbelegte Zitate, Ausgabelaengen **2702 bis 14 052** Zeichen gegen **5074** im Betrieb — bei nachweislich gleichem Material (`in=3852` Token hier wie dort). Die Werkzeuge sind seither gepinnt; **die Zahlen der Zitatregel (24 % → 10 %) stammen aus dem ungepinnten Ziel** und sind gegen das des Betriebs noch nicht bestaetigt. - **2026-09-06** — **Der Umfangs-Richtwert des Kern-Prompts wird nicht gehalten.** *Rund 3000 Zeichen, hoechstens 4000* steht seit heute Vormittag im Prompt; ueber zwoelf Laeufe gemessen: **2702 bis 14 052 Zeichen**, neun davon ueber 4000, drei ueber dem Dreifachen. Die Wirkung des Richtwerts galt bis dahin als *nicht gemessen* — sie ist es jetzt, und sie fehlt. **Die Zitatquote waechst dabei mit der Laenge**: die vier kuerzesten Laeufe 0–12 %, die drei laengsten 18–35 %. Gemessen am ungepinnten Ziel (Zeile darueber), also mit Vorbehalt. - **2026-09-06** — **Novas Kern wird viel seltener neu destilliert, als das Konzept nahelegt.** `novaberg-pixie-character-hash.md` §3.1d begruendet den Sammel-Takt von drei Stunden damit, dass *„Pixie ohnehin alle zehn Minuten destilliert und dabei `charakter_hash` ueberschreibt“* — dann traefe jeder Abgriff eine neue Fassung, also rund **8 je Tag**. Gezaehlt ueber die Mitschrift vom 26.08. bis 06.09.2026: **29 Fassungen an 11 von 12 Tagen**, im Mittel **2,6 je Tag** (Spanne 1 bis 7), und der **03.09. traegt keine einzige**. Der Sammler schreibt nur bei veraendertem Zeitstempel fort — die Luecken sind also keine Ausfaelle des Sammlers, sondern ausbleibende Destillationen. Damit steht die Begruendung des Takts auf einer Zahl, die der Betrieb nicht liefert. **Am selben Tag aus einer zweiten Quelle nachgezaehlt und praezisiert:** Die Rad-Messreihe traegt vom 24.08. bis 06.09. im Median **4 Erhebungen je Tag** (zwei Rad-Arten je Zyklus, also rund zwei Zyklen), und der **03.09. traegt auch dort null**. Pixie **prueft** alle zehn Minuten und destilliert nur bei gesetztem `hash_dirty` — der Halbsatz im Konzept ist widerlegt und dort durchgestrichen. **Die 2,6 aus der Mitschrift sind eine Untergrenze**, kein Betriebswert: Zwischen zwei Abgriffen kann mehr als eine Fassung entstehen, und der Sammler sieht nur die letzte. - **2026-09-06** — **`log_token` stand seit dem Bau des Pipeline-Logs ohne Aufrufer.** Ein Helfer, dessen Docstring *„Token-Verbrauch (prompt, completion, total)"* verspricht, mit **0 Zeilen** der `art` `token` im Bestand `[gemessen 06.09.2026]`. Er ist seit heute verdrahtet; der Fund steht hier, weil dieselbe Frage fuer die uebrigen Helfer offen ist: `log_switch`, `log_bemerkung` und `span_start`/`span_end` sind **nicht** gezaehlt worden. - **2026-09-05** — **Die Meinungsbildung hat kein Konzept-Eintrag in der Featureliste.** `novaberg-thinking-opinion_k.md` steht seit Wochen und traegt inzwischen eine Setzung des Eigentuemers (§2a); die Featureliste nennt es an **keiner** Zeile — gezaehlt ueber `Meinungsbild|valenzierte Synapsen|opinion_k`: null Treffer ausserhalb des Kopfes. Die Pflegeregel verlangt, dass jedes angelegte Konzept Zeilen liefert. - **2026-09-05** — **Der Laengenfilter der Profil-Auswahl laesst nur 7 von 36 gelesenen Knoten durch.** `QUALITAET_LAENGE_MIN` = 400 Zeichen trennt Sachtexte von Sprechakt-Vermerken, und er tut das richtig — aber der **Lesepfad liefert ueberwiegend Sprechakt-Vermerke** (*„Nova hat erklaert, dass …"*). Damit hat die Faszination strukturell kaum Traeger: Von 3.363 aktiven Knoten sind 50 profiliert, und von den je Turn gelesenen passieren 4 von 5 den Filter nicht. Dieselbe Familie wie `DESTILLAT-SUBJEKT-SCHABLONE`; §13 des Faszinationskonzepts nennt sie (*„21 von 50 Knoten sind Sprechakt-Vermerke … kostet 40 % des Korpus"*) und fuehrt sie als **nicht belegt**. Jetzt belegt, und der Preis ist hoeher als 40 %. → **Am 06.09.2026 gemessen, in einem Punkt widerlegt und behoben.** Der Satz *„er tut das richtig“* traegt nicht: Nach der Form ihres Satzanfangs klassifiziert liegen **Sachaussagen bei 271 Zeichen im Mittel und Sprechakt-Vermerke bei 281** — die Schwelle 400 liess **8** Vermerke durch und **1** Sachaussage. Sie trifft nicht zu streng, sie trifft **falsch herum**. Und der Preis war hoeher als hier vermutet: **0 von 95** je gelesenen Traegern standen als Kandidat offen. `QUALITAET_LAENGE_MIN` steht seither auf **100**, die inhaltliche Ablehnung liegt beim Modell (ein Nullprofil wird geschrieben). Die Faszination trug um 20:52:54 UTC ihren ersten Turn-Wert. **Der Verweis auf `DESTILLAT-SUBJEKT-SCHABLONE` bleibt** — die Schablone ist die Wurzel und unberuehrt, nur ihr Preis wird nicht mehr am Filter bezahlt. - **2026-09-04** — **Der `pipeline_log`-Bestand beginnt am 27.07.2026, und `turn_roh` deshalb auch.** Der aelteste Eintrag der Tabelle traegt **`id = 1`** — sie hat nie eine aeltere Zeile getragen. Damit sind die in `novaberg-charakter-resonanz_k.md` §2.1 genannten **150 Rohturns seit dem 10.07.** (Stand 25.07.2026, davon 111 als verwertbar gefuehrt) **im heutigen Bestand nicht enthalten**; dort stehen 1.023 `turn_roh`-Zeilen ab dem 27.07. Die Retention ist als Ursache ausgeschlossen (365 Tage, Tabelle 39 Tage alt, `turn_roh` ohnehin ausgenommen) — der Schnitt liegt **vor** dem Beginn dieser Tabelle. **Warum, ist nicht geklaert.** Betrifft die Abnahme von CHARAKTER-RESONANZ Bauteil 3, das genau auf diesen Rohturns aufbauen sollte; `charakter-resonanz_k` ist **nicht angefasst**. - **2026-09-04** — **Es gibt im ganzen Protokoll keine einzige LZG-Reaktivierung ueber die emotionale Gravitation.** Alle **105** protokollierten Aktivierungen stammen aus dem **KZG**; `knoten_id` traegt dort einen KZG-Schluessel, keine LZG-ID. `novaberg-thinking-faszination_k.md` §14 fuehrt *„Reaktivierung zaehlbar: `knoten_id` im `pipeline_log`"* als **erfuellte** Vorbedingung — fuer LZG-Knoten stimmt das nicht. Die brauchbare Verlaufsquelle ist der **Promotion-Pfad** (`synapsen_promotion`, `art='db_write'`), nicht die Gravitation. Ueber 39 Tage: 14.947 `reinforcement`- und 3.318 `neuanlage`-Zeilen an 34 verschiedenen Tagen. - **2026-09-03** — **Die Dominanz der Qualitaetsprofile kollabiert auf `komplexitaet`: 23 von 25 Traegern.** Vier der sechs Dimensionen sind an **keinem einzigen** Traeger die staerkste. Das widerspricht der Handmessung in `novaberg-thinking-faszination_k.md` §6.2 unmittelbar (dort war `komplexitaet` mit 2 von 26 die zweitschwaechste, und der Satz lautete ausdruecklich *„Kein Kollaps auf `komplexitaet`"*). **Die naheliegende Erklaerung ist ausgeschlossen:** Vier kurze Proben zeigen, dass die Dimension nicht die Textlaenge misst — 34 Zeichen → 0,0 · 125 Zeichen → 0,0 · 203 Zeichen → **1,0**, und eine Probe traegt `weite` 1,0 bei `komplexitaet` 0,5. Zwei Erklaerungen stehen noch und sind **nicht** getrennt: der gefilterte Korpus ist homogen (lange, oft reaktivierte Astrophysik-Texte *sind* alle komplex), oder Modell und Mensch bewerten verschieden. **Der Zugriff, der es entscheidet, ist benannt und nicht gemacht:** dieselben Knoten maschinell **und** von Hand, Zeile fuer Zeile — die Handmessung liegt nur als Verteilung vor, die 50 Knoten waeren mit `setseed(0.42)` neu zu ziehen. - **2026-09-03** — **`node_stance_repository.stance_upsert` prueft die Ladung nicht auf `bool`.** `not isinstance(ladung, (int, float))` laesst `True` durch, weil `True` in Python ein `int` ist — die Ladung landete als **+1.0** in `lzg_knoten_haltung`, auf dem Erfolgspfad und ohne eine Zeile im Log. **Gefunden, weil derselbe Fehler heute im neuen Code an zwei Stellen gebaut wurde** und ein Zeuge ihn dort abfing (`merkmalszug` gab 1,07 statt 0,0). Beide neuen Stellen sind behoben; diese hier ist Bestand und **nicht angefasst**. Wirkung heute null, weil die Tabelle 0 Zeilen traegt und niemand schreibt — sie wird es, sobald der Erzeuger der Meinungsschicht gebaut wird. - **2026-09-03** — **Eine von vier Antworten der Messreihe ging am Thema vorbei.** Auf *„Ein naher Gammablitz wuerde die Ozonschicht wegreissen, und niemand haette eine Vorwarnung"* antwortete Nova *„Stimmt. Sterne kollabieren oder verschmelzen einfach."* — und die Salienz-Bewertung fuehrt als Themen `Sternenkollaps` und `Verschmelzung von Sternen`. **Weder Gammablitz noch Ozonschicht noch Vorwarnung.** Die drei uebrigen Antworten trafen ihr Thema. Da die Salienz auf **Novas Antwort** gerechnet wird, schlaegt eine themenferne Antwort direkt auf die Torgroesse durch: Dieser Turn kam auf 0,408. **Einzelfall, kein Muster** — eine von vier. Ob es an der Laenge liegt (die Antwort hat 52 Zeichen), am Reiz oder am Verfasser, ist ungeprueft. - **2026-09-03** — **Die Praegungsschicht hat zu wenig Gelegenheiten, um irgendetwas ueber sie zu sagen.** Das Tor existiert seit dem 31.08.2026 und hat **64 Pruefungen** gesehen, davon **32 im echten Paar**. Die Grundrate negativer Emotionen dort liegt bei **1,24 %** (35 von 2825 Knoten). **Erwartungswert fuer einen negativen Faden: 0,27 bis 0,40** — je nachdem, ob man Knoten oder Torzeilen zaehlt. Fuer **einen** negativen Knoten braucht es im Erwartungswert rund **80 Turns**, und er muesste zusaetzlich beide Torschwellen reissen. **Jede Aussage ueber „das Tor lehnt ab" oder „der Zustand kommt nicht vor" ist bis dahin eine Aussage ueber die Stichprobe.** Was hilft, ist Laufzeit, nicht ein Umbau. - **2026-09-03** — **Die Bauart des Reizes entscheidet ueber die Salienz staerker als sein Thema.** Dieselbe Themenwelt, vier Turns: Aussagen **ueber** etwas erreichten 0,163 und 0,408; Reize, die **Novas Haltung verlangen** (*„Was macht es mit dir, dass…"*, eine Provokation), erreichten **0,752** und 0,644 — Faktor 2 bis 4. Beide letzteren rissen die Salienzschwelle und scheiterten erst am Ausschlag (0,20 und 0,44 gegen 0,70). **Fuer jede kuenftige Messreihe heisst das: Wer eine Torschwelle kalibrieren will, muss die Bauart konstant halten** — sonst misst er sie und nicht die Schwelle. - **2026-09-03** — **Die Emotion eines Praegungsfadens kommt aus Novas eigener Antwort, nicht aus dem Reiz.** Belegt in der Pipeline: `graph_rolle: character`, `eingabe_label: "Antwort der Assistentin"`; das staerkste Segment, aus dem Tor und Faden ihre Emotion nehmen, ist Novas Text. Das passt zu `beobachter = assistant` und ist vermutlich Absicht — **es steht aber in keinem Dokument.** Wer das Konzept liest, nimmt an, der Reiz praege. Die Folge ist erheblich: Ein erschuetternder Reiz, auf den Nova sachlich antwortet, hinterlaesst keinen Faden. - **2026-09-03** — **Der `pipeline_log` mischt Urteile verschiedener Schwellen-Generationen, und eine Kalibrierung darauf vergleicht gegen eine bewegte Regel.** Von acht Torzeilen, die die heutigen Schwellen (0,60 / 0,70) passieren wuerden, tragen **zwei** das Urteil *abgelehnt* — begruendet mit *„salienz 0.73 < 0.75"* und *„salienz 0.65 < 0.7"*. Beide sind gegen aeltere Werte gefallen; die Salienzschwelle wurde am 31.08.2026 von 0,70 auf 0,60 gezogen. **Wer den Log gegen `urteil` auswertet, misst die Geschichte der Konstante mit.** Der Grundtext nennt die damalige Schwelle und ist damit die Rettung — ohne ihn waere die Abweichung ein Widerspruch ohne Aufloesung. - **2026-09-03** — **170 Verweise auf Harness-Dateien stehen im veroeffentlichten Repositorium, in 77 Dateien.** Gezaehlt ueber `server/` und `docs/` nach dem Muster einer zweistelligen Nummer vor einem Grossbuchstabennamen. Ein Verweis auf ein Dokument, das der Leser nicht hat, ist zugleich nutzlos und ein Hinweis auf internes Material. **Die Regel wird gerade dann verletzt, wenn sie frisch gelesen wurde** — heute zweimal beim Bauen entstanden und vor dem Commit entfernt, in derselben Sitzung fuenf weitere. **Bestandsfund, kein Aufraeum-Auftrag:** Die Zahl steht hier, damit die naechste Entscheidung sie kennt; ob 170 Stellen umgeschrieben werden oder die Regel fuer Docstrings anders gefasst wird, ist eine Absicht. - **2026-09-03** — **Eine veraltete `.pyc` im Behaelter laesst eine zurueckgesetzte Datei den geaenderten Stand fahren.** Bei einer Gegenprobe wurde `memory/praegung.py` geaendert und binnen derselben Sekunde zurueckkopiert; der Bytecode-Cache haelt die Quell-`mtime` sekundengenau und sah die Datei als unveraendert. Der Lauf **nach** der Wiederherstellung meldete weiter den geaenderten Stand. **Diesmal fiel es auf, weil der Zeuge rot blieb — der gefaehrliche Fall ist der umgekehrte:** Eine Gegenprobe, deren Eingriff durch den Cache gar nicht ankommt, meldet *gruen* und sieht aus wie ein fehlender Zeuge. Abhilfe im Lauf: die `.pyc` vor jeder schnellen Wiederholung loeschen, oder ein `touch` mit Abstand. Ungeprueft ist, wie viele frueher gemeldete Gegenproben davon betroffen waren. - **2026-09-03** — **Die Praegungsschicht hat keinen negativen Faden aus dem Betrieb.** Zweimal berichtigt am selben Tag, und die zweite Fassung ist die tragende: 1. Erst: *„keinen einzigen negativen Faden aufgenommen"* — richtig fuer den Bestand, ohne Begruendung. 2. Dann: *„das Tor hat einen durchgelassen, er wurde geloescht"* — **irrefuehrend**, es klang nach einem echten Reiz. 3. Jetzt gemessen: Faden **41**, `traurigkeit`, 31.08.2026 18:41 UTC stammt vom **Testpaar** `sektorprobe` aus einer Sektor-Messreihe und wurde mit deren Bestand entfernt. Die 60 Torzeilen verteilen sich auf `meister`/`nova` **32**, `scheibe2probe` 20, `sektorprobe` 8 — und **im echten Paar trug keine einzige Pruefung eine negative Emotion**. Das Tor hat nichts abgewiesen; es hat nie negatives Material gesehen. Der Bestand: alle 5 Faeden liegen in Sektor 1 (Freude, viermal) und 8 (Neugier, einmal). Damit steht die Einfaerbung im Bestand auf `abstand_max = 0,000000`, das Sektor-Histogramm kennt keinen bimodalen Fall, die Strang-Richtung ist nie ueber Regel 4 gegangen und `PRAEGUNG_ZUG_UNBESTIMMT` ist nie ausgeloest worden. **Vier Bauteile warten auf dieselbe Eingabe.** Ob das an den Messthemen liegt (Wissenschaft, ausdrueckliche Vorgabe) oder am Tor, ist ungeprueft — die Frage ist die naechste Messung wert, nicht ein Umbau. - **2026-09-03** — **`EMOTION_AROUSAL_DECAY` und der Fading-Affect-Bias sagen Gegenteiliges, und das Konzept nannte die eine als Bauform der anderen.** Die Tabelle gibt Trauer 0,02 (*„graebt sich ein"*) und Freude 0,10; der Bias verlangt, dass negative Erinnerungen **schneller** verblassen. Beide sind fuer sich richtig — sie beschreiben die **Erregung im Turn** gegen den **Affekt ueber Monate** —, aber eine Ableitung der Sektorfaktoren aus der Tabelle haette den Bias umgekehrt. Der Satz im Konzept §7.9 ist markiert; ob die beiden Zeitskalen irgendwo sonst vermischt werden, ist ungeprueft. - **2026-09-03** — **Docstrings tragen das abgeschaffte Paar-Vokabular *„Subjekt / Gegenueber"*.** `novaberg-convention-paar-schema.md` §2 ist am 16.08.2026 richtiggestellt worden: `user_id` ist **der Mensch**, `character_id` **die Figur**, die Perspektive traegt allein der `beobachter`. Die alte Lesart *„Subjekt — ueber wen geht der Eintrag?"* erlaubte ausdruecklich, die Figur in die `user_id`-Spalte zu setzen, und ihre Beseitigung hat Arbeit gekostet. **Der Code ist richtig**, nur die Beschreibung nicht — `memory/praegung.py:146/147` (`faden_anlegen`) und `:1445/1446` (`beruehrung_anlegen`) sagen weiter *Subjekt* und *Gegenueber*. Gefunden von der Konventionspruefung des Sitzungsendes, nicht vom Bau. Die beiden heute angelegten Stellen sind auf die Konvention gezogen; der Bestand nicht im Vorbeigehen. **Wie viele Stellen es ueber `server/` insgesamt sind, ist ungezaehlt.** - **2026-09-03** — **`SEKTOR_GRUPPE` wird in `memory/praegung.py` importiert und nirgends benutzt.** Der Linter meldet es als `F401`; die Familie `F` ist ausserhalb von `F821` nicht hart geschaltet, deshalb faellt es durch. Der Import stammt aus der Zeit vor `EMOTION_VALENZ`, das die Sektorgruppe als Valenzquelle abgeloest hat. **Bestandsfund, nicht aus diesem Umbau** — gegen `HEAD` geprueft, dort steht dieselbe Zeile. Nicht im Vorbeigehen entfernt. - **2026-09-03** — **`S35` steht in der Uebersichtstabelle der Rechenkette und hat keinen eigenen Abschnitt.** Alle uebrigen 39 Systeme tragen einen. Gefunden beim Nachzaehlen fuer `S38`; dabei stellte sich auch heraus, dass **`S37` in derselben Tabelle fehlte** und die Gliederzahl seit dem 02.09.2026 auf 36 statt 40 stand — beides am 03.09.2026 nachgezogen, der fehlende Abschnitt nicht. - **2026-09-02** — **Drei Altstellen tragen woertliche Gespraechsinhalte und stehen seit Wochen veroeffentlicht.** `novaberg-bugs.md:399` und `novaberg-bugs-archiv.md:773` zitieren denselben echten Turn samt Termintitel, Datum und Uhrzeit (Befund vom 17.08.2026); `novaberg-thinking-drive_k.md:306` traegt einen Beispielsatz, dessen Herkunft **ungeprueft** ist — nach `32_VEROEFFENTLICHUNG` §1a ist das ein *Fund mit offener Herkunft* und kein Verstoss, solange niemand gefragt hat. Bei der Bereinigung der elf eigenen Stellen am selben Tag **nicht mit angefasst**: Sie sind nicht aus dieser Sitzung, und ein Umbau dort ist ein eigener Auftrag. - **2026-09-02** — **Novas eigener Wissensspeicher traegt Gespraechsinhalte im Dateinamen.** Unter `ki-assistent/knowledge/autonomous/nova/meister/` stehen Dateien wie `…_terminplanung-meeting-mit-dem-chef-selbstreflexion_wissen.md`. Der Speicher liegt **ausserhalb** des veroeffentlichten Repositoriums, also heute kein Verstoss — **aber der Name ist dort der Inhalt**, und ein Dateiname laesst sich nicht durch einen strukturellen Befund ersetzen wie ein Satz im Fliesstext. Wandert der Speicher je in ein oeffentliches Repo, ist die Bereinigung eine Umbenennung mit allen Verweisen daran.- **2026-09-02** — **Zwei Valenz-Tabellen im Bestand, und sie widersprechen sich bei Sektor 4.** `GV_VALENZ_SEKTOR` (Gespraechsvektor) fuehrt Ueberraschung als **negativ** (Wert 0 auf einer Binaerskala), `SEKTOR_GRUPPE` als **neutral**, und `EMOTION_VALENZ` seit heute als **nahe null mit schwach positivem Vorzeichen**. Drei Aussagen ueber denselben Sektor an drei Stellen. Keine ist offensichtlich falsch — sie beantworten verschiedene Fragen —, aber welche wo gilt, steht nirgends. Nicht im Vorbeigehen vereinheitlicht.- **2026-09-02** — ~~**`mittel(|valenz_faden|)` steht nahezu konstant auf 1,0.**~~ → **am selben Tag geschlossen** (`EMOTION_VALENZ`, 16 Werte; gerechnet 0,225–1,000 statt 97,05 % exakt 1,00; am einen Strang 1,000 → **0,8375**). Ein Faden traegt seine Valenz nur als Sektorzugehoerigkeit — +1, -1, oder 0 bei Ueberraschung (Sektor 4, der einzige mit `SEKTOR_GRUPPE = neutral`). Das Mittel der Betraege ist damit `(gesamt − sektor4)/gesamt` und misst **die Abwesenheit von Ueberraschung**, nicht die Ausprae­gung der Ladung. Beim einen Strang: 1,000. Die Absicht des Eigentuemers ist bestaetigt (*„wenn die sich aufheben wuerden, wuerden viele Faeden zu einer Nullung fuehren"*) — die **Groesse** wird erst tragend, wenn Sektor 4 haeufiger vorkommt oder die Faden-Valenz feiner wird als ±1. Der naechstliegende Weg waere der Sektor-Ausschlag als Betrag; nicht entschieden. - **2026-09-02** — **Eine Aggregat-Abfrage zaehlte Paare statt Faeden, und 16 gruene Zeugen sahen es nicht.** `strang_staerke` holte die letzte Beruehrung ueber ein `LEFT JOIN praegung_beruehrung` in derselben Abfrage; jeder Faden erschien so oft, wie er Beruehrungen hat. `count(*)` meldete **8 Faeden fuer einen Strang mit vier**, `avg(salienz)` gewichtete die oft beruehrten staerker. Suite 2872 gruen, Linter sauber. **Gefunden von der Vorhersage vor dem Lauf** — die Fadenzahl stand als erste Groesse darin. Am selben Tag behoben (eigener Unterausdruck); die Klasse steht als Lesson im Harness (`20_TESTS/mock-verdeckt-die-abfrage.md`).- **2026-09-01** — **Die Rad-Regel der Strangrichtung trennt bei Novas heutigem Charakter nichts.** `konfrontationsmass` steht auf **+0,5379** (wild: eigensinn 0,8746 · widerspruchsfreude 0,8014 · wissbegier 0,7825 · assoziationsdrang 0,7283; schuetzend: pflicht 0,5108 · behutsamkeit 0,2477 · misstrauen 0,2188 · zurueckhaltung 0,0578) gegen eine Schwelle von 0,0. Reiner Aerger, reine Furcht und reine Trauer ergeben **alle drei Annaeherung**. Fuer diesen Charakter ist das die richtige Antwort und genau das, was die Vorgabe des Eigentuemers beschreibt — **die Achse faellt im Betrieb aber keine Entscheidung, die Regel 1 nicht schon gefaellt haette.** Ob sie je trennt, ist ungeprueft; geschlossen ist der Punkt, wenn ein Rad unter der Schwelle gemessen ist oder die Schwelle mit Grund verschoben wird. - **2026-09-01** — **Ein Einmal-Prozess schreibt keine `pipeline_log`-Zeilen, und der Zaehler meldet trotzdem Erfolg.** Das Protokoll puffert und flusht ueber einen Task des Server-Lifespans; in `docker exec … python -c` ist der Buffer nicht initialisiert, der Eintrag wird verworfen (`_log_eintrag`: *„Bei nicht-initialisiertem Buffer: warning-Log, Eintrag verworfen"*). `_richtungen_protokollieren` meldete **1 protokolliert** bei **0 Zeilen** im Bestand. **Wer einen Tageslauf-Schritt ausserhalb des Servers misst, verliert seine Forensik und sieht es an der Rueckgabe nicht.** - **2026-09-01** — **Das Paar `scheibe2probe` hat kein Charakter-Rad** (0 von 8 Speichen). Der eine Strang kam nur ueber Regel 1 zu einer Richtung; ein negativer Strang stuende auf `unbestimmt`. Jedes junge Paar traegt diesen Zustand, und er ist der Regelfall am Anfang — die Frage ist, ob `unbestimmt` beim Praegungszug wie `vermeidung` oder wie `annaeherung` wirkt. ~~Nicht entschieden.~~ → **Am 03.09.2026 entschieden: keins von beidem.** Vorgabe des Eigentuemers — Vermeidung traegt 0, `unbestimmt` traegt **0,5** (`PRAEGUNG_ZUG_UNBESTIMMT`), weil es Unkenntnis ist und keine Vermeidung. Gebaut in `praegungszug`, bezeugt, **ungemessen** (beide Straenge des Bestands stehen auf Annaeherung).- **2026-09-01** — **Der bimodale Fall ist bezeugt und nicht gemessen.** `sektor_histogramm` ist gebaut, weil ein Mittelwert die Ambivalenz loeschen wuerde (§7.8) — der eine Strang im Bestand traegt aber **[3,0,0,0,0,0,0,1]**, vier Faeden aus zwei benachbarten positiven Sektoren. Zwei Gipfel kommen nicht vor. Die Messung prueft damit die Abbildung Emotion → Sektor und drei Formeln, **keine Entscheidung mit offenem Ausgang**; geschlossen ist der Punkt, wenn ein Strang Faeden aus entgegengesetzten Sektoren traegt.- **2026-09-01** — **Ein neuer Schritt im Tageslauf, und ein Zeuge von gestern schreibt in den Produktivbestand.** `TageslaufRuftDenBestandslaufTest` ersetzt vier Schritte des `SynapsenDecayAgent` und ruft `invoke`; der am selben Tag hinzugekommene **fuenfte** stand nicht in der Liste und lief gegen `POSTGRES_URL` ueber **alle** Paare — bei jedem Suitenlauf entstand ein Strang ueber die vier Faeden des Messpaars. Der Zeuge wurde nicht geaendert; er wurde gefaehrlich, weil sein Gegenstand wuchs. **Zweiter Weg derselben Sitzung:** vier `tearDown`-Pfade loeschen `praegung_faden`, aber nicht den Strang, den `faden_anlegen` seither mitgruendet — `ON DELETE SET NULL` nimmt ihn nicht mit. **Dritter Fall der Klasse in fuenf Tagen** (`20_TESTS/neuer-seiteneffekt-alte-zeugen.md`). Beide Wege am selben Tag geschlossen, Bestand zurueckgesetzt, Gegenprobe: Suitenlauf danach, `praegung_strang` 0 Zeilen. - **2026-09-01** — **`PRAEGUNG_STRANG_NAEHE` = 0,62 ist ungemessen fuer den Vergleich, den sie macht.** Der Wert ist von `PRAEGUNG_BERUEHRUNG_NAEHE` uebernommen, dort vergleicht ein Turn gegen einen **einzelnen Faden**; hier ein Faden gegen ein **Mittel ueber n Faeden**, und ein Mittel liegt naeher an allem als jedes seiner Glieder. Erster Beleg, dass sie ueberhaupt trennt: das Zentroid gegen 15 LZG-Themenknoten, kein Treffer ueber 0,62 (naechster 0,5165). **Was fehlt, ist der Gegenbeleg** — ein Faden zu einem anderen Thema, der einen zweiten Strang gruendet. Braucht Faeden aus mehreren Tagen und Themen.- **2026-09-01** — **Zwei `[AUFGABE]`-Bloecke tragen drei Verbote und verletzen damit `F-PROMPT-1`** (*„Ein Prompt leitet, er verbietet nicht"*, seit 14.08.2026). `responder.aufgabe_rueckfrage`: *„DIES IST DEINE EINZIGE AUFGABE. Erfinde keine eigene Antwort."* und *„veraendere den Inhalt nicht"*; `responder.aufgabe_disambiguierung`: derselbe Satz. Die uebrigen fuenf Bloecke tragen **null**. Gefunden von der zweiten Kontrolle zum Fehler-Block, nicht vom Bau. Nicht im Vorbeigehen geaendert — die positive Fassung ist ein eigener Auftrag mit eigener Messung.- **2026-09-01** — **Eine fehlende Angabe reist als `status="fehler"` statt als `status="rueckfrage"`.** Vier der fuenf Fehlerquellen des Timeline-Agenten (`crud.py` 122/206/329, `suche.py` 131) nennen eine beantwortbare Frage nach der fehlenden Angabe — *„Wann soll '{Titel}' stattfinden?"* — und werden als Stoerung transportiert. Der Kanon trennt beides ausdruecklich (`agents/base.py`: *„Ein Fehler ist eine Stoerung und geht den Betreiber an, eine Ablehnung ist ein Urteil und geht den Auftraggeber an"*), und der Rueckfrage-Pfad ist der einzige, der den Kontext **nicht** schneidet (`planner.py`, Prioritaet 1). Am 01.09.2026 am Prompt-Block abgefangen, nicht an der Quelle. - **2026-09-01** — **Vier von elf `turn_roh`-Zeilen des Meisters sind keine Nutzeraeusserungen** — ein Zustandstext (*„Die Belastung nimmt zu…"*, 18:42), zwei Recherche-Rücklaeufe (18:45, 18:58) und eine Nova-Fehlermeldung (18:52). Alle tragen `quelle='character'` und `herkunft='nutzer_turn'` wie die sieben echten. **Damit ist der Korpus aus dem Eintrag oben nicht per Feld filterbar**, und die 985 sind eine Obergrenze, keine Menge. - **2026-09-01** — **`beruehrung_anlegen()` hat weiterhin keinen Aufrufer im Produktivcode.** Der Befund steht seit dem 31.08.2026 in der Featureliste und ist beim Bau der Nachfuehrung erneut aufgefallen — die Funktion faltet jetzt mit, aber sie wird von nichts gerufen. Erster Anwendungsfall der geplanten Pruefung `A17` (Funktion ohne Aufrufer). - **2026-09-01** — **Zwei unabhaengige Stellvertreter bestaetigten einander und lagen beide um Faktor 2,6 zu hoch.** Die verdichteten `lzg_knoten` des Hauptpaars und seine nutzerseitigen KZG-Eintraege ergaben Median 0,308 bzw. 0,299 und endeten beide bei 0,427; die vier echten Betriebswerte des Zielsogs liegen bei Median **0,1187**. Sie teilen ihre Textsorte — beide sind verdichtet — und damit ihren Fehler. **Die Uebereinstimmung zweier Stellvertreter misst, wie aehnlich sie einander sind, nicht wie nah sie am Gegenstand liegen.** Nicht getrennt: ob die Abweichung von der Verdichtung oder vom anderen Paar kommt — es gibt keinen Korpus roher Nutzer-Prompts (`gespraech_archiv` traegt 0 Zeilen). - **2026-09-01** — **Eine Gegenprobe-Vorhersage in Testmethoden, gezaehlt in Fehlschlaegen.** Vorhergesagt waren 2 Methoden, gemeldet wurden 5 — `subTest` zaehlt je Fall. Kein Defekt, aber dieselbe Klasse wie `l_zwei-grundgesamtheiten`: Zwei Zahlen ueber dieselbe Menge, in verschiedenen Einheiten, sehen wie ein Widerspruch aus. - **2026-09-01** — **Die Vorausberechnung eines Messreiz-Ergebnisses loest 3 % Abstand nicht auf.** Der Dry-Run ueber den Produktivpfad sagte fuer Reiz G zwei Beruehrungen voraus; im Turn verdraengte ein dritter Eintrag (Gravitation 0,336) den vorausberechneten zweiten (0,325). Vorhersage 5, gemessen 4. Die Ursache der Abweichung ist nicht bestimmt — dieselbe Reizzeichenkette, derselbe Pfad, andere Rangfolge. - **2026-09-01** — **Zwei weitere Dokumente nennen Dateien, die es nicht gibt** — `novaberg-node-thinker_l.md` verweist auf `services/web_search.py`, `novaberg-pixie-deepdive_k.md` auf `agents/vertiefung/agent.py`. Beide sind Sorten, die Vergangenes (Lesson) oder Absichten (Konzept) halten; dort wiegt ein toter Pfad weniger als in einem Moduldokument. **Gefunden mit demselben Kriterium**, das den Promotions-Fall aufdeckte: den ersten genannten Pfad jedes Node- und Pixie-Dokuments gegen den Baum halten. Von 40 geprueften Dokumenten drei Treffer. - **2026-09-01** — **`F-MESS-2` und die Verstaerkung stehen gegeneinander.** Die Festlegung verlangt, dass Pixie waehrend einer Messreihe pausiert — damit die Reihe den Turn misst und nicht den Turn plus Hintergrund. Die Praegungs-Verstaerkung braucht aber genau diesen Hintergrund: Ohne Pixie entstehen keine LZG-Knoten, und ohne sie keine Reaktivierung. Die erste Reihe des Tages lief deshalb ins Leere (`lzg +0`). Aufgeloest wurde es durch **Trennung in zwei Phasen** — Reize bei pausiertem Pixie, dann Pixie an und warten, dann messen. Ob das die Regel ist oder ein Sonderfall, ist offen. - **2026-09-01** — **Eine Festlegungs-Kennung des Harness steht in der Featureliste.** `novaberg-featureliste.md` nennt in der Praegungs-Zeile `F-DDL-1` — eine Kennung ohne Pfad, aber sie verraet, dass ein internes Register existiert. Vorbestand vom 31.08.2026, beim Nachziehen derselben Zeile gesehen und **nicht im Vorbeigehen entfernt**. Grenzfall zu `32_VEROEFFENTLICHUNG` §1c: Ein Zeiger ist es nicht, ein Hinweis schon. - **2026-08-31** — **Die Gegenstands-Tabelle steht in allen sieben Backlog-Dateien und driftet in sechs davon.** `novaberg-backlog-index.md` wird von `backlog_index.py` erzeugt und ist nach dem Lauf richtig; dieselbe Tabelle in `novaberg-backlog-charakter.md` nennt am 31.08.2026 Hintergrund 66 statt 67, Antwortpfad 46 statt 54 und Bauart 96 statt 97. **Eine Zahl, die an sieben Stellen steht und an einer erzeugt wird, ist an sechs eine Kopie mit Verfallsdatum.** Aufgefallen beim Anlegen eines Eintrags: Die fortgeschriebene Gesamtzahl 434 war falsch, das Werkzeug zaehlte 435 — die Ausgangszahl 433 stimmte bereits nicht. - **2026-08-31** — **Ein Reizsatz aus einem Register misst die Monotonie des Reizsatzes.** Eine isolierte Perzeptions-Reihe ueber acht Wissenschaftssaetze ergab 24-mal `knowledge`, 24-mal `sachlich` und nur drei Arousal-Werte (0,40/0,50/0,60) — daraus wurden drei Aussagen ueber den Klassifikator abgeleitet. Mit nach Wucht gestaffelten Reizen fielen **alle drei**: Die Spanne ist 0,10 bis 0,90, `intent` wechselt auf `personal`, `tone` auf `empathisch` und `direkt`, `beziehungs_dynamik` kennt vier statt zwei Werte. Verwandt mit `l_abdeckung-ohne-trennschaerfe`, aber die andere Richtung: nicht der Bestand ist zu eng, sondern die **Sonde**. - **2026-08-30** — **Ein Zeuge, der die Formel nachrechnet statt sie aufzurufen, ueberlebt jede Gegenprobe.** Beim Bau von `EMGRAV-SCHWELLE-TOT` rechnete der erste Zeuge die Gravitationsformel in der Testdatei nach; die Gegenprobe baute die Normierung im Produktivcode zurueck und der Zeuge blieb **gruen**. Dieselbe Falle sass im Bestandstest `GravitationVerfaelltEinmalTest`, dessen Fixture das Alter der Testzeile aus einer wiederholten Formel bestimmte. **Beide Male war die Rechnung nur hinter einer Datenbankabfrage erreichbar** — das ist die Ursache, nicht die Bequemlichkeit: Wer nicht aufrufen kann, rechnet nach. Abhilfe war eine eigene reine Funktion (`gravitation_lzg_berechnen`). Verwandt mit `20_TESTS/zwei-quellen` (dort sieht der Zeuge zu viel, hier bringt er den Gegenstand selbst mit). - **2026-08-30** — **Ein Grenzwert »ueber dem erreichbaren Maximum« ist zweideutig, und die falsche Lesart macht den Zeugen blind.** Zu `EMGRAV-SCHWELLE-TOT` hiess es, die Schwelle 0,40 laege nach der Normierung ueber dem erreichbaren Maximum. **Rechnerisch erreichbar sind 0,5** (Aehnlichkeit 1, Gewicht am Deckel, frisch); ueber dem **gemessenen** Maximum von 0,2872 liegt sie. Ein Zeuge auf das theoretische Maximum blieb gruen, als die Schwelle testweise auf 0,40 zurueckgesetzt wurde — er prueft einen Fall, den der Bestand nie hervorbringt. **Wer eine Schwelle bezeugt, nimmt den staerksten *gemessenen* Fall, nicht den denkbaren.** - **2026-08-30** — **Der GV-Prompt sagt »Du denkst als Nova« und »dein Vehikel«** (`gv.charakter.txt`, `gv.strategie.txt`). Der Gespraechsvektor ist ein Analyse-Knoten und darf den Charakter beim Namen nennen (F-PROMPT-2); ob *»Du denkst als Nova«* das Modell trotzdem als den Charakter anspricht, ist nicht entschieden. Beim Umbau der drei Verfasser-Bloecke (30.08.) ausdruecklich nicht angefasst. Dazu fehlt ein Zeuge ueber den **ganzen** Verfasser-Prompt — »du« ist dort zulaessig, wo es den Verfasser meint. - **2026-08-30** — **Der Name `valenz` ist belegt, und die Meinungsschicht braucht einen eigenen.** Im Bestand ist die Valenz eine der **sechs Gespraechsachsen** des GV: binaer aus dem Plutchik-Sektor abgeleitet (`GV_VALENZ_SEKTOR`, `config.py`), je Turn ins `pipeline_log` geschrieben und mit ihrer Eingangsgroesse belegt (`valenz_quelle`). **Gemessen 30.08.2026: 618 Landschaftszeilen seit dem 08.08., alle mit Quelle, davon 573 positiv und 45 negativ** — die Achse steht in 93 % der Turns auf 1. Sie misst, wie der **Turn** gefaerbt ist. Die Valenz aus `novaberg-thinking-opinion_k.md` misst etwas anderes: wie Nova zur **Sache** steht — mit Vorzeichen *und* Staerke, mehrere je Knoten, persistent und ueber Praemissen revidierbar. **Zwei Gegenstaende, ein Wort.** Wer die Meinungsschicht baut und sie wieder `valenz` nennt, erzeugt dieselbe Verwechslung, vor der das Opinion-Konzept bei *Cluster* warnt (dort `Valenz-Region` gegen `Strategie-Cluster`). Vorschlag zur Trennung: `turn_valenz` fuer die Achse, `haltung` fuer die Ladung am Knoten. **Und die 93 % sind selbst ein Befund:** Eine Achse, die fast immer 1 sagt, trennt nichts. - **2026-08-30** — **Die Suite schreibt echte Zeilen in `shadow_auftrag` des Produktivsystems.** Gemessen seit dem 28.08.2026: **122 Auftraege mit `user_id='zeuge'`**, Aufgabe `recherche`, leeres Thema, leerer Kontext — gegen **59** echte Auftraege des Paares im selben Zeitraum. **Jede Bestandszaehlung ueber diese Tabelle misst damit die Suite mit**, und sie tut es lautlos: Die Zeilen sehen aus wie Auftraege, tragen plausible Salienzwerte und fallen erst auf, wenn jemand nach `user_id` gruppiert. Am selben Tag ist genau das passiert — eine Diagnose ueber die Sachlage-Bruecke stuetzte sich auf *6 von 148* und war nach der Trennung *22 von 59*. Verwandt mit dem Befund vom 28.08.2026 (die Suite schreibt ins Server-Log); dies hier ist die schwerere Form, weil eine Tabelle gezaehlt wird und ein Log nur gelesen. - **2026-08-30** — ⚠ **Die Zahlen dieser Zeile waren durch Testzeilen verfaelscht; die Berichtigung steht am Ende.** ~~Nur 4 % der Auftraege tragen die `ausloeser_turn_id`, und damit ist die Bruecke praktisch tot.~~ Gemessen ueber alle Auftraege seit dem Bau (28.08.2026, 12:00 UTC): **6 von 148** — 4 von 124 `recherche`, 2 von 24 `vertiefen`; am 30.08.2026 **0 von 14**. Die Sachlage-Bruecke haengt hart an dieser Kennung (`graph/nodes/sachlage.py::bridge`, `weg=turn_id`); ohne sie laeuft jede Zustellung ueber den Vektor-Rueckfall. **Das Konzept nennt als Grund den Altbestand des Stapels** (`novaberg-thinking-lage_k.md` §4 Scheibe 4) — das stimmt seit dem 28.08. nicht mehr: Die **neuen** Auftraege tragen sie ebenso wenig. Vier Erzeuger setzen sie (`agents/kzg/queues.py:119` aus `state["kontext"]["turn_id"]`, `memory/kzg.py:470`, `agents/synapsen_promotion/agent.py:558`, dazu die Weiterreichung in `recherche` und `nachfragen`). **Eine Stelle ist am 30.08.2026 benannt, aber nicht als alleinige Ursache belegt:** `agents/recherche/agent.py` haelt die Kennung in der Hand und reicht sie an **einer von zwei** Stellen weiter — Zeile 680 an den Folgeauftrag (`queue_eintrag.get("ausloeser_turn_id")`), Zeile 723 **nicht** an `kzg_store`, wo sie in der Argumentliste fehlt und der Vorgabewert `""` greift. Genau aus diesem KZG-Eintrag entstehen bei hoher Salienz die naechsten Auftraege (`memory/kzg.py:470`), und der Recherche-Agent erzeugt die Mehrzahl (124 von 148). **Der Platzhalter ist nicht das Problem:** `turn_id or "kzg-store-unbekannt"` steht nur im Aufruf von `log_db_write`, nicht an der Spalte. → **BERICHTIGT am 30.08.2026, nachgemessen nach Erzeuger getrennt:** Von den **122** `recherche`-Auftraegen ohne Kennung gehoeren **alle** zu `user_id='zeuge'` — der Suite. Die echten Auftraege seit dem 28.08. stehen so: `recherche` **4 von 4** mit Kennung, `wissen_rueckweg` 16 von 31, **`vertiefen` 2 von 24**. Der Recherche-Pfad war also im Betrieb in Ordnung; der offene Punkt ist `vertiefen`. Ebenfalls nachgemessen: Die **neuen** KZG-Hashes tragen die `turn_id` (12 der 14 juengsten) — eine erste Stichprobe von 1 aus 40 hatte ueber `--scan` den Altbestand vor dem 28.08. erwischt. **Die Uebergabe in `agents/recherche/agent.py:723` fehlte trotzdem und ist am 30.08.2026 gebaut** (5 Zeugen, Gegenprobe 2/1/1); **ihre Wirkung auf die Quote ist unbelegt**, weil die echten Auftraege dieses Pfades die Kennung schon vorher trugen. **Die erste echte Zustellung mit Bruecke ist deshalb keine Frage der Zeit**; die einzigen Bruecken im Log stammen aus dem Labor (`turn=t-ausloeser`). - **2026-08-30** — **Zwei Suchtreffer mit verschiedenen Werten sind kein Widerspruch, sondern eine Auswahl.** Im Betriebsturn zu Scheibe 8 (10:33 UTC, Oberflaechentemperatur von Beteigeuze) trugen die beiden Treffer im `[SACHLAGE]`-Block **3600 K** (Wikipedia, erster Treffer) und **3450 K** (zweite Quelle). Nova nannte 3450 K und erwaehnte die Abweichung nicht; das Tribunal bewertete die Antwort als *sachlich korrekt*. **Der Block reicht die Treffer nebeneinander durch, ohne dass irgendwo geprueft wird, ob sie dasselbe sagen** — bei einer Zahl faellt das auf, bei einer Aussage nicht. Scheibe 7 prueft Plausibilitaet gegen Weltwissen, nicht Treffer gegeneinander. - **2026-08-30** — **Staan (Ecosia + Qwant) ist als dritter Suchanbieter nutzbar — recherchiert, nicht gemessen.** Staan (*Search Trusted API Access Network*) ist der Zugang zum gemeinsamen Index des Joint Ventures European Search Perspective; der deutsche Index traegt rund eine Milliarde Seiten. **Endpunkt** `https://api.staan.ai/v2/search/web` (dazu `/answer`), Authentifizierung `Authorization: Bearer `, Antwortfelder `title` / `url` / `snippet` — damit bauartgleich zu `SerperProvider` und ohne Umbau auf die gemeinsame Trefferform abbildbar. Maerkte `de-de`, `fr-fr`, `en-us`, `en-uk`. **Kontingent 1000 Anfragen je Monat frei**, danach 1 EUR je 1000 (Websuche) bzw. 2 EUR je 1000 in der KI-Variante. Quellen: `staan.ai`, `docs.staan.ai` (OpenAPI-Spec), `eu-searchperspective.com`. **Ungemessen bleibt, ob die API aus diesem Netz antwortet** — ohne Schluessel nicht pruefbar. **Der Weg ueber die Metasuche ist versperrt:** Die `qwant`-Engine steht in der searxng-Konfiguration und ist abgeschaltet; die Endnutzer-API `api.qwant.com/v3/search/web` antwortet aus diesem Netz mit **HTTP 403** `[gemessen 30.08.2026]` — dieselbe Sperre wie bei Mojeek und Brave. Fuer Ecosia gibt es keine Engine, weil es keine oeffentliche Endnutzer-API gibt. **Ein Monatskontingent dieser Groesse traegt den Turn, nicht die Hintergrundrecherche:** 1000 im Monat sind rund 33 am Tag. - **2026-08-30** — **Der Anbieter nach dem Serper-Startguthaben ist entschieden: Tavily, 1000 Anfragen je Monat.** Serper traegt die naechsten Tage aus seinem einmaligen Startguthaben (2500); danach wird auf Tavily umgestellt. Der Umbau ist eine weitere Anbieterklasse in `tools/web/search.py` neben `SerperProvider` — gleiche Form (`name`, `configured`, `search`), gleiche Trefferform, Rangfolge in der Modul-Instanz. **Ein Monatskontingent ist eine andere Groesse als ein Startguthaben:** 1000 je Monat sind rund 33 am Tag, und allein die Hintergrundrecherche erzeugte im August im Mittel ~90 Auftraege taeglich mit 1 bis 12 Suchen je Auftrag. Vor der Umstellung ist deshalb zu entscheiden, welche Konsumenten den bezahlten Anbieter ueberhaupt sehen (Vorschlag: der Turn ja, Pixies Hintergrundrecherche auf SearXNG). - **2026-08-30** — **Der Health-Check kennt den ersten Suchanbieter nicht.** `api/health.py::searxng_testen` prueft per HTTP GET auf `SEARXNG_URL`, und `/health` sowie die Client-Statusleiste fuehren `searxng` als den Suchdienst. Seit dem 30.08.2026 ist SearXNG der **Rueckfall**; faellt Serper aus (Schluessel abgelaufen, Guthaben leer, Endpunkt tot), bleibt die Anzeige gruen und die Suche wird still schlechter. Ein Lebenszeichen fuer Serper fehlt — offen ist, ob es eine echte Anfrage kostet oder ob der Zustand aus dem Log der letzten Suchen abgeleitet wird. - **2026-08-29** — **Die Quellen einer Gedaechtnis-Deckung gehen verloren, sobald das Objekt latent wird.** `sachlage_resolver.py::apply_memory_coverage` und `carry_sources` ueberspringen latente Objekte (Scheibe 6, Bestand): `sachlage_verlauf` 374 (06:53) deckte *Zusammenhang Masse/Radius* aus dem KZG (`quellen` G4), 386 (07:04, Objekt latent) trug kein `quellen` mehr, 422 (08:51) dieselbe Eigenschaft als vom Sprecher `nova` gesagt. Gefunden von der zweiten Kontrolle der Scheibe 9; die Sprecherzeile ist seither auf akute Objekte beschraenkt, die Quellen bleiben verloren. - **2026-08-29** — **Die Wiederaufnahme schliesst nur das Thema der vorigen Blase aus, nicht das der eigenen.** Log 08:51:09: *»Wiederaufnahme: fruehere Blase 'Neutronenstern-Kollaps'«* — und die Blase, die daraus entstand, traegt selbst `thema = Neutronenstern-Kollaps` (`history_nearest(ausser_thema=…)`, Scheibe 5, Bestand). Nebenbefund der zweiten Kontrolle. - **2026-08-29** — **Nach dem Neustart des Hosts (~06:32 UTC) waren die Projekt-Container entfernt, nicht gestoppt.** `docker ps -a` kannte keinen von ihnen, das Docker-Journal seit dem Boot zeigt kein Prune, die Volumes waren vollstaendig (`postgres_data`, `redis_data`, `ollama_data`); `up -d` der vier Kerndienste stellte den Betrieb her, synapse und matrix-bot laufen seither nicht. Die Ursache (ein `compose down` vor dem Neustart? ein Aufraeumen beim Herunterfahren?) ist nicht geklaert. - **2026-08-28** — **Die Suite schreibt ins Server-Log.** Ein Suite-Lauf im Container (`docker compose exec … unittest`) landet mit jeder Log-Zeile seiner Zeugen in `/logs/server.log` — um 23:01:13 UTC stehen dort ~60 Zeilen `Sachlage [frisch]`, `Sachlage-Verlauf: turn=zeuge-…` und `Rueckfrage-Gegenstand: Geburtstag` zwischen echten Turns. Wer das Log als Betriebszeuge liest (Ereignisse statt Stille), kann eine Zeugenzeile fuer einen Turn halten; ein Zaehler ueber das Log zaehlt sie mit. Dazu rotierte das Log um 23:01 UTC mitten in einem Messturn (`server.log.1`) — ein Messskript, das nur `server.log` liest, sieht die Zeilen vor der Rotation nicht. - **2026-08-28** — **Die Notizen-Leser mit Treffersemantik schreiben beim Lesen.** `NotizenRepository.find_by_stichwort` und `find_by_volltext` sind `UPDATE … SET last_touched = NOW() … RETURNING` — wer eine Notiz nur nachschlaegt (der Frame-Aufloeser, Scheibe 6 des Lage-Konzepts), beruehrt sie damit wie einen Zugriff des Nutzers; ein reiner Leser fehlt. Deshalb liest der Aufloeser heute keine Notizen (Bestand des Paares: 1 Zeile). Dazu am selben Abend gemessen: `fakten` traegt fuer das Paar 0 Zeilen und `FaktenRepository.find_similar` hat keinen Aufrufer — die erste Quelle des Pipeline-Konzepts (§4.3) ist leer, Novas Wissen liegt in `autonomous_wissen` (1012 Zeilen) und `lzg_knoten` (2910). - **2026-08-28** — **Sechs Aufzaehlungs-Luecken im Altbestand, gefunden vom ersten Lauf des neuen C18** (`harness`-Werkzeug, Deckung der Aufzaehlungen): `verfasser.py` und `thinker_cache.py` fehlen im Dateibaum von `novaberg-architecture.md` — dessen Dokumenten-Index den Verfasser zudem als *nicht gebaut* fuehrt, waehrend er seit Wochen laeuft; `[GESPRAECHSVERLAUF]` fehlt in der Blocktabelle des Verfasser-Dokuments; `[GEDAECHTNIS]`, `[GEDANKEN]`, `[GESPRAECHSVERLAUF]`, `[SITUATION]`, `[WISSENSLUECKEN]` fehlen im GV-Dokument. Kein Aufraeum-Projekt — die Zeile ist der Bestand, C18 meldet sie jetzt bei jedem Abschluss, bis sie behandelt sind. - **2026-08-28** — **Der GV-Parse verliert zwei Drittel seiner eigenen Felder.** Ueber 610 GV-Parses aus dem Serverlog: `Vehikel` leer in 456 (75 %), `Absicht` leer in 405 (66 %), `Strategie` leer in 400 (66 %). Der Knoten laeuft, die Hypothese kommt an — die strukturierten Zeilen darunter reissen im Parse oder fehlen in der Modellantwort. Jede Vorgabe, die an diesen Feldern haengt, erreicht ihren Leser nur in jedem dritten bis elften Turn; genau daran scheiterte am 27.08. der erste Anlauf der Frage-Art. Ursache ungeklaert: Prompt-Treue des Modells oder Parser. - **2026-08-28** — **Der `pipeline_log`-Buffer ist in Standalone-Prozessen nicht initialisiert** — ein Laborlauf, der einen Graph-Knoten direkt aufruft, verwirft dessen Forensik-Eintraege mit einer `warning` je Zeile. Die Messreihe zur Sachlage schrieb dadurch 0 Protokollzeilen, waehrend derselbe Weg im Serverprozess schreibt. Wer im Labor Protokollzeilen erwartet, prueft erst den Buffer — oder die Messung schweigt an der Stelle, die sie belegen soll. **Betrieb belegt 28.08., 16:05 UTC:** derselbe Weg im Serverprozess schrieb 6 von 6 Zeilen. - **2026-08-28** — **Die Akutheits-Entscheidung der Sachlage kippt am Grenzfall zwischen Laeufen.** „Ich habe eine neue Pflanze" wurde bei Temperatur 0,1 einmal als akut, einmal als latent eingestuft (beides vertretbar — Possessiv ohne Vorhaben-Verb). Fuer Faelle mit klarem Vorhaben trennt die Entscheidung 10/10; der Grenzfall braucht entweder eine schaerfere Prompt-Regel oder die Duldung als Grauzone. - **2026-08-28** — **Die Schwelle der Sachlage-Bruecke steht auf einem Fremdwert mit n=1.** `SACHLAGE_BRUECKE_MIN_KOSINUS` 0,35 liegt zwischen dem schwaechsten eigenen Treffer (0,40, zehn Proben) und dem einzigen gemessenen Fremdtreffer (0,25, Sanskrit gegen Naturwissenschaft). Ob ein thematisch benachbartes Fremdthema (Mykorrhiza gegen Hainbuchen-Wurzeln) unter 0,35 bleibt, hat niemand gemessen — eine Reihe mit nahen Fremdthemen fehlt. - **2026-08-28** — **Die Objektnamen der Sachlage sind nicht ganz stabil, und die kurzfristige Zielstrecke haengt an ihnen.** Vor der Prompt-Regel (»behaelt seinen Namen woertlich«) benannte die Fortschreibung das akute Objekt in einem von drei Laborlaeufen um (»Rettichbewaesserung« → »Bewaesserungsstrategie«), das Ziel entstand einen Turn spaeter; nach der Regel ein Lauf von einem stabil, im Betrieb einer von einem. n ist klein. Wer die Strecke haerten will, vergleicht Objektnamen per Embedding statt woertlich — Preis: eine Schwelle mehr. - **2026-08-28** — **`tests/test_sachlage.py::test_der_verfasser_baut_den_block_ein` ist ein Quelltext-Grep** (`inspect.getsource` auf `sachlage_block`) — dieselbe Klasse wie der Zeuge, der am selben Tag in der Gegenprobe gruen blieb, weil die `import`-Zeile den Namen trug. Altfund vom Vormittag, nicht im Vorbeigehen behoben; der verhaltensbasierte Zeuge daneben (`test_sachlage_bruecke.py`) zeigt die Form. - **2026-08-28** — **Der Sachlage-Call liefert im Labor in einem von drei Laeufen kein gueltiges JSON.** `expect_json`, T 0,1: `JSONDecodeError: Expecting property name enclosed in double quotes (char 613)` — das Modell schrieb mitten im Objekt eine unquotierte Eigenschaft; der Call fiel laut aus (`Sachlage-Call ausgefallen`), im Betrieb naehme der Knoten den Ausfall-Weg (Vorgaenger uebernommen, Marke `ausfall_uebernommen`). Ueber die ~9 Betriebsturns des Tages kein Ausfall; die Quote im Labor (1/3 in einem Lauf, 0/3 in fuenf anderen) ist n = 18. Wer die Ausfallquote kennen will, zaehlt `herkunft='ausfall_uebernommen'` in `pipeline_log` ueber eine Woche. **Nachtrag 13.09.2026 — zwei weitere Zaehlungen, beide mit derselben Groessenordnung:** In der Wechselmessung der Wert-Regel (roher Parse, sechs Zweierfolgen, ~~vier~~ fuenf Durchgaenge je Fassung) lieferte der Sachlage-Call **0 von 60** Calls kein lesbares JSON mit der alten Prompt-Fassung und **3 von 57** mit der neuen; ~~in den Laborlaeufen zum Eigenschaftsgedaechtnis ohne Wiederaufnahme (Arm B, alte Fassung) **2 von 35**~~ → berichtigt (zweite Kontrolle): mit der alten Fassung in den uebrigen Laboren zum Eigenschaftsgedaechtnis **2 von 50** (Arm A 0 von 15, Arm B 1 von 15, Arm B nach den Nachbesserungen 1 von 20). Mit diesen Stichproben ist die neue Fassung von der alten nicht zu unterscheiden — ein Wachposten, kein Befund. Im Betrieb fielen am 12.09.2026 zwei Sachlage-Calls am JSON aus (Eintrag vom 12.09.2026). Die Zaehlung ueber `herkunft='ausfall_uebernommen'` steht weiter aus. - **2026-08-28** — **Die Wiederaufnahme-Sektion im Sachlage-Prompt drueckt die Nebensache eines Zwei-Sachen-Turns.** Ohne Sektion stand die Einkaufsliste 3/3 als Objekt im Artefakt, mit Sektion 0/3; der Satz *„Was der Turn sonst noch nennt, bleibt ein eigenes Objekt"* holt sie in 2/3 zurueck, latent (`labor/2026-08-28_sachlage_wiederaufnahme_messung.py`). Fuer den Agentenpfad ohne Folge (er liest den Reiz, nicht die Sachlage); fuer Scheibe 3 ist ein latentes Auftrags-Objekt ohnehin kein Rueckfrage-Gegenstand. Dazu zweimal am Abend gesehen: **eine Frage des Nutzers wird als Deckung gelesen** — „Stimmt das physiologisch?" und „kann man … hernehmen?" landeten als gedeckte Eigenschaft mit dem Inhalt der Frage. Ob das Absicht ist (der Nutzer hat es genannt) oder Scheibe 3 dadurch eine gestellte Frage nie als offen sieht, ist eine Entscheidung. - **2026-08-26** — **Der Kommentar an der Frist in `_llm_call` nennt Dauern, die um eine Groessenordnung zu hoch sind.** `agents/charakter/destillation.py` begruendet `timeout_s = 1800` mit *„gemessen wurden 3288 Zeichen und rund 18 Minuten fuer Kern und Rad zusammen, bei einem einzelnen Rad-Aufruf von rund 8 Minuten"*. **Gemessen am 26.08.2026:** Ein Rad-Lauf dauert im Median **28 s** (222 Laeufe aus `charakter_rad_messung`, Spanne 6–39 s), ein Kern-Lauf **43,2 s** bei 4390 Zeichen und **71,7 s** bei 15 585 Zeichen, und eine **volle Destillation aus zehn Calls ueber beide Subjekte 261 s** (drei Zyklen, Spanne 204–395 s). Die behaupteten 8 Minuten fuer einen Rad-Aufruf sind das **17-fache** des gemessenen Medians. **Die Frist selbst ist davon unberuehrt** — eine Obergrenze, die zu weit steht, kostet nichts. Falsch ist die **Begruendung**, und sie wird zitiert: Dieselbe Zahl steht als Kostengrund in `PROFIL-EINMALERHEBUNG` und hat den Eintrag seit dem 19.08.2026 zurueckgehalten. **Ein Messwert im Kommentar altert wie ein Befund, und niemand haelt ihn nach.** - **2026-08-25** — **Alle drei Waende dieses Projekts messen nur `server/`, und der Gegenstandsbereich ist nirgends begruendet.** Gemessen am 25.08.2026: ueber das ganze Repositorium **1324 Linter-Treffer**, die Nulllinie nennt **1143** — **181 liegen ausserhalb**, in 30 Python-Dateien: `client/` 116, `matrix_bot/` 56, `telegram_bot/` 9. **`matrix_bot/` laeuft als eigener Dienst im Betrieb** und ist seit dem 24.08.2026 der einzige Fernkanal; seine 56 Treffer zaehlt niemand. Dasselbe gilt fuer `ruff-hart.toml` und die neue Namens-Wand (`F-NAME-1`) — beide laufen gegen `server/`, weil es immer so war. **Eine Wand mit unbegruendetem Gegenstandsbereich sieht aus wie eine Wand und ist eine Tuer**; die Frage ist nicht, ob die Auswahl richtig ist, sondern dass sie nie getroffen wurde. - **2026-08-25** — **Die Begruendung der `T201`-Ausnahme steht nur zur Haelfte in der Konfiguration.** `per-file-ignores` nimmt `print` fuer `tests/korpus_laeufer.py` aus und nennt den Grund. **Nicht dokumentiert ist, warum die uebrigen 23 Treffer stehenbleiben:** gemessen am 25.08.2026 liegen von 36 `T201`-Treffern **13 in `tools/`, 13 in `scripts/`, 10 in `tests/`** — und in `scripts/` sind es Messwerkzeuge, bei denen `print` dieselbe Schnittstelle ist wie im Korpus-Laeufer. Die Entscheidung, sie **nicht** mit auszunehmen, ist gefallen und nirgends festgehalten; wer sie das naechste Mal trifft, faengt bei null an. - **2026-08-25** — **Der Audit-Trail der Agenten hat kein Dokument.** `schritte` ist in `agents/base.py` ausdruecklich als *Audit-Trail* deklariert, jeder Agent schreibt hinein, und die Dispatcher lesen daraus den Grund eines Fehlschlags. **Gesucht ueber alle Repo-Dokumente: keins beschreibt ihn** — die einzigen Fundstellen sind ein Defekteintrag und ein Chronikeintrag, beide von heute. Aufgefallen beim Nachzug zu `VORHER-ZUSTAND-OHNE-SPUR`: Es gab keine Stelle, an der die neue Spur haette eingetragen werden muessen, also wurde sie in die beiden Agenten-Moduldokumente geschrieben. **Ein Kanal, den jeder Agent fuellt und kein Dokument beschreibt, hat keine Form, gegen die man ihn pruefen koennte** — welche Felder ein Schritt-Eintrag traegt, steht nirgends. - **2026-08-25** — **Drei Zustandsfelder tragen Vorgabewerte, die von einer Messung nicht zu unterscheiden sind.** `Emotion.intent` steht auf `"smalltalk"`, `tone` auf `"sachlich"`, `mode` auf `"alltag"` — Vorgabewerte der Klasse, nicht leer und deshalb von jeder Belegungspruefung als **gefuellt** gezaehlt. Aufgefallen bei der Reparatur von `BELEGUNG-ZAEHLT-DAS-TRAEGEROBJEKT`: Die neue Zeile misst am Feldwert und ist damit richtig, **aber sie kann nicht sagen, ob der Wert gemessen oder voreingestellt ist**. Ein Turn, in dem die EI-Berechnung ausfaellt, meldet weiter `8 von 8` und liefert dem Client drei plausible Werte, die niemand berechnet hat. Genau die Klasse aus `22_STILLE_FEHLER` §3 — ein Default, der wie ein Messwert aussieht. Zum Vergleich: `emotions_vector` traegt `""` und faellt deshalb auf, `arousal` traegt `0.5`. - **2026-08-25** — **Die Belegungszeile misst 8 von 24 Nutzlastfeldern, und die Auswahl ist nirgends begruendet.** Ungemessen bleiben unter anderem `emotion`, `arousal`, `emotions_vektor`, `sprach_stil`, `beziehungs_dynamik`, `nova_arousal`, `nova_emotion_konflikt`, `modell`, `token_total`, `reiz_herkunft`. **Faellt eines davon aus, sagt das Log weiterhin nichts** — dieselbe Lage, aus der die Zeile entstanden ist, nur fuer die anderen sechzehn Felder. Ob die Acht die richtigen sind, ist eine offene Frage; die Konstante nennt sie, ohne sie zu begruenden. - **2026-08-25** — **Neun ausgerichtete Dict-Eintraege in `services/event_consumer.py` liegen bei 101 bis 105 Zeichen — Regel und Bestandsstil stehen gegeneinander.** Der Block (Zeilen 644 bis 653) schreibt Zustandsfelder spaltenbuendig; genau diese Ausrichtung kostet die letzten ein bis fuenf Zeichen. **Ein Umbruch loest die Regel und zerstoert den Block, ein `noqa` loest den Block und schwaecht die Regel, ein engerer Einzug loest beides und macht die Datei inkonsistent zu den fuenfzehn anderen Bloecken derselben Bauart.** Dieselbe Lage in `agents/delegation/dispatch.py:76` und `graph/nodes/enricher.py:972`. Das ist keine Formatierungsfrage mehr, sondern die Entscheidung, ob die Spaltenausrichtung eine Konvention dieses Bestands ist oder eine Gewohnheit. - **2026-08-25** — **Fuenf Feld-Kommentare in `graph/state.py` sind bis zu 390 Zeichen lang.** `turn_id: str # UUID4-Hex zur Korrelation …` (152), Zeile 100 mit **390**, Zeile 179 mit 313, Zeile 121 mit 177, Zeile 224 mit 122. Sie tragen die einzige Beschreibung, die diese Zustandsfelder haben — und sie stehen hinter dem Feld, wo sie beim Lesen der Struktur nicht auffallen. **Ein Kommentar, der laenger ist als der Bildschirm, wird beim Lesen des Feldes uebersprungen**; er gehoert entweder ueber das Feld oder in das Moduldokument. Ueber `E501` sichtbar geworden. - **2026-08-25** — **Zwei Zeugen patchen einen Namen, den ihr Modul nicht benutzt.** `tests/test_segment_durchstich.py` und `tests/test_reiz_platz.py` setzen `patch("agents.kzg.dispatch.cfg_redis_client", MagicMock())`. In `agents/kzg/dispatch.py` kommt dieser Name **nur in der Importzeile vor** — der Patch ersetzt etwas, das keine Zeile des Moduls liest. Aufgefallen ist es nur, weil der maschinelle F401-Durchgang den ungenutzten Import entfernte und vier Tests mit `AttributeError` starben. **Solange der Import steht, sind die vier gruen, ohne dass der Patch etwas bewirkt** — und die Stelle, die sie zu schuetzen glauben, ist ungeschuetzt. Der Import ist deshalb am 25.08.2026 bewusst stehengeblieben und als einziger F401-Treffer geduldet; die Frage darunter ist, was die Zeugen eigentlich pruefen wollten. - **2026-08-25** — **Ein Konzeptdokument hat den Defekt vorhergesagt und wurde nie gelesen.** `novaberg-microservice-modell-queue_k.md` §153 nennt die Ausnahme woertlich: *„Locks brauchen wir nur dort, wo zwei Worker denselben Endpoint anfassen — und das ist genau der Fall beim Embedding-Modell, das von Nova und Pixie geteilt wird."* Genau dieser Fall trat ein und lief unbemerkt (`GPU-LOCK-SCHUETZT-EINEN-VON-FUENF`, 7407 + 2897 Aufrufe in 42 Stunden am selben Client). Zwei Absaetze weiter behauptet dasselbe Dokument das Gegenteil — *„keine Locks, keine Race Conditions"* —, weil die FIFO-Ordnung **je Worker** gilt und nicht je Ressource. **Ein Dokument, das die Bedingung nennt und die Ausnahme daneben, ist ohne eine Pruefung nur eine Notiz**, und beim Bauen wird die Zeile gelesen, die passt. Beide Stellen sind am 25.08.2026 markiert. - **2026-08-25** — **Ein Messskript unter `scripts/` heisst `test_*` und laeuft bei jedem `unittest discover` mit.** `scripts/test_anker_retrieval.py` wurde beim Umbau der LLM-Riegel eingesammelt und brach die Suite mit einem `ImportError` — es ist kein Test, sondern ein Werkzeug mit Netzzugriff auf Ollama und Postgres. **Bis dahin war es gruen, weil sein Import zufaellig durchging**, nicht weil jemand es geprueft hatte. Ein Werkzeug im Suchpfad des Discover ist ein Test, den niemand geschrieben hat: Er kann rot werden, ohne dass sich Produktivcode geaendert hat, und er kann bei einem echten Defekt schweigen. - **2026-08-25** — **Ein Fehlerobjekt des Modells zaehlt als geparste Antwort.** Im Betriebslog: Die Ziel-Destillation erhielt `{"error": "InvalidOutputFormat", "message": "The response must be exclusively a JSON array …"}` — also die Meldung des Modells, dass es die Vorgabe **nicht** erfuellt hat —, und der Worker meldete `parsed=True`. Danach `Ziel-Destillation: 0 langfristige Ziele fuer nova`. **Die Null ist kein Ergebnis, sondern ein verschluckter Fehlschlag**, und sie ist von einer echten Null nicht zu unterscheiden. `parsed` sagt heute *es war gueltiges JSON* und wird gelesen als *es war die erwartete Antwort*. Verwandt mit `UNFERTIGE-ANTWORT-GILT-ALS-FERTIG`: Beide Male traegt der Umschlag die Auskunft, und niemand verzweigt danach. - **2026-08-25** — **Die Fuzzy-Korrektur des Zeitparsers zieht 13 von 57 gebraeuchlichen Woertern auf einen Monats- oder Wochentagsnamen.** `mittag` → `montag`, `mail`/`main`/`mais`/`rat`/`rad`/`mama`/`oma` → `mai`, `apfel` → `april`, `dienst` → `dienstag`, `mars` → `märz`. **Der teuerste Fall ist `Mittag`:** Gegen einen Donnerstag gemessen loest er auf den **naechsten Montag** auf statt auf 12:00 desselben Tages — vier Tage daneben —, waehrend `mittags` mit s korrekt rechnet; `morgen Mittag`, `heute Mittag` und `Freitag Mittag` parsen **gar nicht**. Dieselbe Ursache wie `ZEIT-EINZAHL-GREIFT-DANEBEN` (dort behoben), aber eine groessere Klasse: **Die Schutzliste zaehlt Einzelfaelle auf, waehrend der Schaden aus einer Eigenschaft folgt** — kurze Alltagswoerter liegen auf Distanz 2 zu einem Kalendernamen. Eine Liste kann das nicht einholen; die Frage ist, ob die Korrektur ueberhaupt greifen darf, wo das Wort im Duden steht. → **Nachtrag 15.09.2026, zwei weitere gemessen:** `und` → `juni` und `min` → `mai`, beide auf Distanz 2. **`und` trifft jeden Ausdruck mit zwei Zeitangaben:** *„morgen um 7 Uhr und um 9 Uhr"* ergibt den **01.06.** (seit dem Abend des 15.09.2026, nachdem Pfad 2 das ISO-Datum richtig herum liest, den 08.06. — Datenmüll bleibt es), *„um 10 und um 11"* den 10. Juni des Folgejahres, *„um 15 min"* den 15. Mai. Der Datenmüll sah aus wie ein Defekt der zwei Uhrzeiten; ein am 15.09. dagegen gebauter Schutz änderte über 13 solcher Formen **kein einziges Datum** und wurde wieder entfernt. - **2026-08-25** — **Die Chronik traegt Zeitstempel, die noch nicht eingetreten sind.** Ihre Kopfzeile stand auf `25. August 2026, 21:30 UTC`, ihre juengsten Kapitel auf 21:30, 20:10, 18:40 und 17:15 UTC; die Zeitbasis dieser Sitzung ist `date -u` = **12:24 UTC** desselben Tages. Die zuletzt geschriebenen Regeldateien tragen als mtime **12:15 UTC** — der vorangegangene Arbeitsabschnitt endete also neun Minuten vor der Zeitbasis, waehrend seine Eintraege bis 21:30 UTC datiert sind. Betroffen sind Chronik und Fundliste (`21:00 UTC`). **Ein Eintrag, dessen Zeit in der Zukunft liegt, sortiert jeden spaeteren unter sich** — der Eintrag vom 12:45 UTC steht heute oben und traegt die kleinere Zahl. - **2026-08-25** — **Der Bestand der autonomen Wissensdateien waechst schneller, als die Zaehlungen ueber ihn altern.** 474 am 24.08.2026 (Doppelabsatz-Pruefung), **524 am 25.08.2026** — 50 in einem Tag. Jede Aussage der Form *„n von 474"* im Register und in der Featureliste ist damit auf einen Nenner bezogen, den es nicht mehr gibt. Dieselbe Klasse wie die geduldeten Bestaende vom Vortag: **eine Zahl ueber eine wachsende Menge ist ein Datum, keine Konstante.** - **2026-08-25** — **Neun Kennungen stehen im Backlog mehrfach: 421 Eintraege tragen nur 412 Schluessel.** `AUDIT-PIXIE-TURN-ID` · `EI-CALC-ROLLE-DEFAULT-ASYMMETRIE` · `HALTUNG-SPANNENENDEN-OFFEN` · `PIX-CLEAN` · `ROUTE-CHAR-NOTIZ` · `ROUTE-MISS1` · `SPRACH-STIL-DEFENSIV-STUMM` · `TOK-DRIFT-SALIENCE` · `TURN-ROH-VOR-KRAFT1-ENTWERTET`. **Aufgefallen sind zuerst nur sechs** — die, an denen der Einsetzer der Zustandszeilen haengenblieb; die vollstaendige Zahl nennt erst eine Zaehlung ueber die ganze Menge. Zwei der urspruenglich elf sind beim Aufloesen der Zustandswidersprueche entfallen. **Eine Kennung ist ein querreferenzierter Schluessel; wo sie zweimal steht, trifft jeder Verweis zwei Stellen zugleich.** - **2026-08-25** — **Die Testsuite schreibt in die produktive `shadow_auftrag`-Tabelle.** 80 aktive Zeilen unter der Testkennung, alle ohne `thema`, juengste vom selben Tag — **12 % des Bestands von 683 Zeilen**, und alle in derselben Auftragsart. Jede Rate ueber diese Tabelle ist ohne Filter auf den Schreiber falsch; eine Bestandszaehlung hatte den Befund `VERTIEFEN-AUFTRAEGE-OHNE-THEMA` deshalb beinahe bestaetigt, obwohl er dort nicht mehr gilt. - **2026-08-25** — **21 Verweise auf Messskripte ausserhalb des Repositoriums stehen in der veroeffentlichten Doku**, verteilt ueber 13 Dokumente unter `docs/`. Sie nennen jeweils das Werkzeug, mit dem eine Zahl entstanden ist — ein Zeiger auf eine Datei, die der Leser nicht hat. Verwandt mit `REPODOKU-VERWEIST-NACH-INNEN`, aber eine eigene Menge: Dort ging es um interne Dokumente, hier um Messwerkzeuge. **Die Herkunft einer Zahl gehoert genannt, ihr Ablageort nicht.** - **2026-08-25** — **Drei Nachtraege tragen eine `###`-Ueberschrift, obwohl sie zu einem `####`-Eintrag darueber gehoeren.** Fuer jedes Werkzeug, das an der Ueberschriftenform schneidet, sind sie eigenstaendige Abschnitte — und der Eintrag, zu dem sie gehoeren, verliert sie. Beim Teilen des Registers eigens ausgenommen; die Bauart bleibt. - **2026-08-25** — **Die letzte Zeile der Chronik ist ein Zeiger in den Harness.** `novaberg-roadmap.md` endet auf `` — ein HTML-Kommentar, fuer den Leser unsichtbar, im veroeffentlichten Repositorium aber vorhanden. `32_VEROEFFENTLICHUNG.md` §1c verbietet genau das: Der Zeiger geht fuer jeden oeffentlichen Leser ins Leere und verraet zugleich, dass internes Material existiert. **Bestand**, gepusht mit `c3f598d`; das Entfernen aus der laufenden Fassung ist ein normaler Schnitt, das Entfernen aus der Historie eine Entscheidung. Gemeldet von der zweiten Kontrolle am 24.08.2026 — und **an diesem Tag nicht abgelegt**, was der eigentliche Fund ist: Ein Befund, der im Bericht steht und in keinem Speicher, ist am naechsten Tag keiner mehr. - **2026-08-25** — **Der Reiz-Platz ist im `turn_roh` gefuellt, wo das Payload ihn abwesend haelt.** `novaberg-convention-event-model.md` §Reiz-Platz sagt fuer den Eigen-Impuls: `user_prompt` wird **nicht gesetzt** — *„ein gefuelltes Feld waere die Behauptung, jemand habe gesprochen"*. Die Konvention spricht vom **Payload**; die forensische Zeile `turn_roh` traegt es trotzdem: **109 von 109** Impuls-Turns haben dort ein gefuelltes `user_prompt`, im gemessenen Fall den Recherche-Auszug, der den Impuls ausgeloest hat. Ob die Konvention diesen Ort mitmeint, ist eine Frage ihres Geltungsbereichs — **die Begruendung trifft ihn jedenfalls**: Wer die Zeile liest, sieht eine Aeusserung des Nutzers, die es nicht gab. Gefunden beim Halten des Umbaus gegen die Konventionen. - **2026-08-24** — **29 nahe Absatzpaare im Wissensbestand, nicht zusammengefaltet.** Nach der Raeumung der woertlichen Dubletten mit derselben Trigramm-Schwelle nachgemessen (0,65): **29 Paare**, bis hinauf zu **0,96**; in `2026-08-16_meister_metaphorik-…` stehen drei fast gleiche Absaetze. **Automatisch geraeumt wird das nicht:** Bei einer woertlichen Kopie sagt die zweite Fassung nachweislich nichts Eigenes, bei 0,80 kann die Differenz der Inhalt sein. Das ist eine Entscheidung je Fall. Der Riegel verhindert **neue**; dieser Bestand ist aelter als er. - **2026-08-24** — **Der Gruppenkopf im Responder-Verlauf traegt seit heute manchmal Novas Emotion statt der des Nutzers.** `----- Turn n von m (begeisterung, a=0.8) -----` nimmt `gruppe[0]`, und bei einer Impulsgruppe ist das Nova. Von 16 Koepfen betrifft es **8**. Vorher war es immer der Nutzer. Die Zeile sagt nicht, wem der Wert gehoert. Nicht entschieden, ob gewollt. - **2026-08-24** — **`state["session_turns"]` ist seit heute dasselbe Listenobjekt wie `raw_turns`, keine Kopie.** Der Enricher filtert nicht mehr und weist direkt zu. Kein Konsument mutiert heute (`responder.py` kopiert mit `list()`), die Wirkung ist also null — aber eine unbenannte Zusicherung weniger. - **2026-08-24** — **`filtered_turns_count` im `pipeline_log` traegt seit dem 24.08.2026 dieselbe Zahl wie `raw_turns_count`.** Der Enricher filtert nicht mehr; das Feld ist absichtlich stehengeblieben, weil ein entfallenes Feld in Auswertungen ueber den Bestand nicht von einer Null zu unterscheiden waere. Ob es bleibt oder mit einem Stichtag endet, ist nicht entschieden. - **2026-08-24** — **Der Verlauf der Featureliste ist nicht sortiert.** Unter *Verlauf des Standes* steht der Eintrag von **19:40 UTC** hinter denen von 18:20 und 18:05; die Kopfzeile sagt *juengster zuerst*. Nicht im Vorbeigehen berichtigt. - **2026-08-24** — **Dreizehn rote Ampeln der Featureliste tragen keine Kennung — die Legende verlangt eine.** 🔴 heisst dort *eine offene Kennung im Defektregister zeigt darauf* · **oder** *gebaut und gemessen ohne Wirkung* · **oder** *es erzeugt etwas, das niemand liest*. Die zweite und dritte Lesart brauchen keine Kennung, aber dann steht der Grund nirgends: Die dreizehn Zeilen nennen weder eine Kennung noch, welche der beiden anderen Lesarten gilt. **Sie sind damit nicht nachpruefbar** — weder zu bestaetigen noch zu widerlegen. Betroffen unter anderem `Entscheidungs-Eintrag je Knoten`, `Haltungsraum — Prompt-Block`, `Audit-Pflicht`, `NachfragenAgent`. Werkzeug: `labor/2026-08-24_featureliste_gegen_code.py`. - **2026-08-24** — **Mit dem Fall der Wand wird der Burst zum bindenden Riegel — und er ist ein Cooldown, kein Rate-Limit.** Die ersten 90 Sekunden nach dem Umbau zeigen den neuen Takt vollstaendig: **vier Riegelketten** (17:56:37 · 17:57:08 · 17:57:38 · 17:58:08 — genau alle 30 s, wie gebaut), **zwei Impulse** (17:57:59, 17:59:33), danach **Stille**. Gemessen um 18:17 UTC: `shadow_burst_count:meister = 2` bei TTL **2459 s**, waehrend `last_activity` noch 6042 s traegt — die Wand steht also nicht, Pruefung 1 blockt. **`_burst_erhoehen` setzt die TTL bei jedem Inkrement neu** (`incr` + `expire(key, BURST_TTL)`). Damit heisst `MAX_BURST=2` nicht *zwei je Stunde*, sondern *zwei, dann eine volle Stunde ab dem letzten*. Die beiden Nicht-Wand-Luecken des Bestands bestaetigen es: **1:00:33 und 1:00:17**. **Die Groessenordnung ist unvermessen und sie ist gross.** Der Takt erlaubt rechnerisch zwei Impulse je Stunde, also bis zu 48 am Tag; im Bestand waren es **15 in zwei Tagen**. Wieviel davon Riegel 2 wegnimmt (er blockt 78 %), sagt keine Rechnung — das ist die Messung, die einen Betriebstag braucht. **Vor ihr wird an `MAX_BURST` und `BURST_TTL` nichts gedreht.** **Und Pruefung 1 steht vor dem Ausloeser** — sperrt sie, wird nicht einmal ein Trigger vergeben und die Riegelkette schreibt keine Zeile. Die Luecken des Burst sehen im Protokoll deshalb genauso aus wie die der Wand; unterschieden werden sie allein an ihrer Laenge (`labor/2026-08-24_wand_gegen_burst.sql`). - **2026-08-24** — **`last_activity` misst nicht mehr, was sein Name sagt — und tat es schon vorher nicht.** Der Name verspricht *wann der Mensch zuletzt gesprochen hat*; geschrieben wird er von **drei** Stellen: dem Nutzer-Turn (`prompt_consumer.py:213`), dem Timeout-Zweig und seit dem 24.08.2026 dem Stille-Zweig der Zustellung. Die beiden letzten schreiben ihn, um ihren **eigenen Takt** zu halten, nicht weil jemand gesprochen hat. **Der Bruch ist aelter als der heutige Bau** — der Timeout-Zweig tat es schon —, aber der Stille-Zweig weitet ihn aus: Der Schluessel laeuft jetzt **nie mehr ab**, solange eine Verbindung offen ist. Wer ihn als *letzte Menschenaeusserung* liest, liest falsch; die richtige Quelle ist die `turn_roh`-Zeile mit `herkunft='nutzer_turn'`. **Nicht im Vorbeigehen repariert** — ein eigener Taktschluessel waere die Abhilfe. - **2026-08-24** — **Ein Zeugen-Docstring beschreibt eine Abhaengigkeit, die es seit Chat 125 nicht mehr gibt.** `tests/test_pixie_aging.py:52` nennt als Operationen der Kandidaten-Sammlung *„scan_iter (Schedule-Keys und last_activity)"*. `_aktive_user_ids` entscheidet seit Chat 125 ueber `AKTIVES_PAAR_USER_ID` und liest `last_activity` nicht mehr; im Produktivcode steht der Name nur noch in einem historischen Kommentar. Gefunden von der zweiten Kontrolle ueber alle Leser und Schreiber (12 Treffer im Baum), nicht vom Bau. - **2026-08-24** — **Entschieden: Der Salienz-/Erregungs-Anschub auf Riegel 2 wird nicht gebaut. Naehe und Initiative reichen.** Die acht Funde darunter, die den Zuschnitt vermessen haben, bleiben als Messung gueltig und beschreiben **keine anstehende Arbeit** mehr. Die Entscheidung samt ihrer drei Belege steht in `novaberg-eigenzeit_k.md` §2.5; der Abschnitt ist als zurueckgestellt markiert, nicht geloescht. **Wer ihn wieder aufnimmt, prueft zuerst die 205** — Riegel 2 laesst seit dem 24.08.2026 21,7 % durch, wo er von seinem Bau bis zum 23.08. nie oeffnete —, nicht den Aufwand. - **2026-08-24** — **Der Anschub war fuer ein Regime entworfen, das es seit dem 24.08.2026 nicht mehr gibt.** Als er aufgeschrieben wurde, sperrte Riegel 2 **jeden** Zyklus — 15.–22.08.: 8902 Blockaden, **0 Durchlaesse**. Seit der Behebung von `FUEHRUNGSMASS-AUF-FALSCHER-EBENE` laesst er **205 von 946 durch (21,7 %)**. Der Weg ist offen, ohne dass ein Anschub gebaut wurde. **Was den Anschub begruendete, ist die Zahl 0; sie ist heute 205.** Das entwertet ihn nicht, aber es verschiebt ihn von *notwendig* auf *waehlbar* — und der Vergleich gehoert vor jede Kalibrierung. - **2026-08-24** — **Die Salienz taugt nicht als Kohaerenzkriterium: auf dem Stapel ist sie praktisch konstant.** 454 von 457 Eintraegen tragen sie, Spanne **0,8670–1,0000**, Median **0,9960** — **99,3 % liegen ueber 0,6**. Ein Filter *nur salient genug* schliesst niemanden aus. Sie steht auf der alten Skala und traegt deren Saettigung (36 verschiedene Werte auf 454). **Damit ist `arousal` das einzige Feld des Stapeleintrags, das eine Kohaerenzbedingung tragen koennte** — und es liegt auf 17 %. - **2026-08-24** — **Riegel 1 und Riegel 2 messen zu einem Viertel dasselbe.** Auf den 741 Blockaden von heute korrelieren Zuwendung und Fuehrungsmass mit **r = −0,491** (n=741) — hohe Zuwendung geht mit *Nova fuehrt* einher. Der Modulkopf von `riegel.py` warnt ausdruecklich davor, dass *„Riegel 1 den Riegel 2 verdeckt"*, und loest es dadurch, dass beide immer gerechnet werden. **Die Abhaengigkeit der Werte selbst ist damit nicht adressiert:** Wer Riegel 2 aus einer Person-Groesse anschiebt, sollte wissen, ob sie mit dem Zielmass korreliert. Fuer die Zuwendung ist das gemessen (r=−0,49, ~24 % gemeinsame Varianz), fuer Novas Erregung nicht. - **2026-08-24** — **Riegel 2 ist der einzige, der ueberhaupt blockt — und seine Quote fiel an einem Tag von 100 % auf 78 %.** Ueber **9865** Riegelketten seit dem 15.08.2026: `wollen` 9865 gerechnet und **0** Blockaden, `ruhe` **0**, `frequenz` 9669. **Die Gesamtquote von 98,1 % ist ein Mischfenster-Artefakt und darf nicht zitiert werden.** Nach Tagen getrennt zerfaellt sie in zwei Regime: | | Blockgrund `initiative_fehlt` | `mensch_fuehrt` | durchgelassen | |---|---|---|---| | 15.–22.08. | **alle** | 0 | **0** | | 23.08. | 1168 | 26 | 0 | | **24.08.** | **0** | 741 | **205 (21,7 %)** | `initiative_fehlt` heisst *der Haltungsstand traegt kein Fuehrungsmass* — **unbekannt, nicht der Mensch fuehrt**, und ein Anschub auf den Wert greift dort gar nicht, weil es keinen Wert gibt. Mit der Behebung von `FUEHRUNGSMASS-AUF-FALSCHER-EBENE` ist das Regime seit dem 24.08. ein anderes. **Die belastbare Zahl ist die von heute: 741 Blockaden, 205 Durchlaesse.** - **2026-08-24** — **Die Stellgroesse des Anschubs ist fein, seine Wirkung ist grob: 741 Blockaden liegen auf 15 Werten, und drei tragen 79 %.** Die Verteilung des Fuehrungsmasses auf den Blockaden von heute klumpt — `0,549` traegt **410** (55 %), `0,399` traegt **167** (23 %), `-0,001` traegt **58** (8 %); dazwischen liegen einstellige Zahlen. | Schwelle angehoben auf | zusaetzliche Durchlaesse | |---|---| | 0,00 | 59 (8 %) | | 0,10 | 70 | | 0,25 | 81 | | 0,40 | 246 (33 %) | | 0,55 | 741 (alle) | **Ein Anschub aus Novas Erregung (127 verschiedene Werte, 0,092–0,941) traefe damit drei Stufen, kein Kontinuum** — und wer die 0,549 erreicht, oeffnet 55 % der Blockaden auf einen Schlag. Die Klippe gehoert in die Kalibrierung, sonst sieht ein linearer Regler wie ein Schalter aus. - **2026-08-24** — **Die bedingte Kopplung braucht hoch-arousale Eintraege, und davon gibt es 32.** Entschieden ist der Zuschnitt: Arousal senkt Riegel 2, es wird **nichts mehr gehoben**, und **wenn** der Anschub den Unterschied machte (`wert > SCHWELLE` aber `wert <= SCHWELLE + anschub`), **dann muss** ein Eintrag mit hohem Arousal gewaehlt werden. Ein Eintrag ohne Arousal ist in diesem Fall **nicht waehlbar** — das braucht keinen Vorgabewert und folgt der Regel in `pixie/stack.py`. Der Preis ist gemessen: Von 462 Stapeleintraegen sind dann waehlbar **65 bei ≥ 0,5** (14 %), **32 bei ≥ 0,6** (7 %), **19 bei ≥ 0,7** (4 %). Die 80 vorhandenen Werte verteilen sich auf neun Stufen mit Gipfel bei 0,5 (33 Eintraege). - **2026-08-24** — **Novas Erregung bewegt sich und taugt als Stellgroesse — anders als die drei toten Radspeichen.** 796 Erhebungen ueber 30 Tage (`ei_calc_persist.arousal_ei`): **127 verschiedene Werte**, Spanne **0,092–0,941**, Median 0,372, p90 0,736. Das ist die Groesse, die *„voller Energie und Begeisterung"* misst — und sie ist eine Eigenschaft der **Person**, nicht des Gegenstands. Damit ist sie an Riegel 2 zulaessig, wo eine Salienz es nicht waere (`novaberg-eigenzeit_k.md` §2.5, *erst die Person, dann der Gegenstand*). - **2026-08-24** — **Der Auswahl-Score des Themen-Riegels kennt die Salienz nicht, obwohl 460 von 463 Stapeleintraegen sie tragen.** `shadow_delivery.py` waehlt den Eintrag ueber `gesamt_score = thema_sim * 0.7 + modus_score * 0.3` — **Aehnlichkeit und Modus, sonst nichts.** Der Eintrag traegt daneben `salienz` (460 von 463, 99,4 %) und `arousal` (80 von 463, 17,3 %); beide gehen in die Wahl nicht ein. ~~**Das ist die Stelle, an der ein Salienz-Anschub gehoert.**~~ → **Am selben Tag durch die Riegelstatistik ueberholt:** Riegel 5 wird kaum erreicht (siehe den Fund darunter), ein Anschub dort waere fast wirkungslos. Der Befund ueber den Score bleibt richtig und offen — die Wahl laeuft ohne die Salienz, die 460 von 463 Eintraegen tragen —, aber er ist eine **Frage der Auswahlguete**, nicht des Durchkommens. - **2026-08-24** — **`arousal` liegt nur auf 17 % der Stapeleintraege, und es ist kein Alterseffekt.** 79 von 462. Nach Tagen aufgeschluesselt streut der Anteil ohne Trend zwischen **1 % und 50 %** — er waechst nicht heran, das Problem loest sich nicht von selbst. **Die Ursache liegt eine Stufe frueher:** Der Agent reicht durch, was der Auftrag traegt (`stapel_werte_aus_auftrag`), und die Queue selbst traegt ihn unregelmaessig — **100 % am 17.08., 9 % am 24.08.** Die Schreibstelle, die ihn auslaesst, ist nicht bestimmt. **Wo er da ist, ist er grob:** 9 verschiedene Werte ueber 79 Eintraege, Spanne 0,300–0,900, Median 0,500. Als Kopplungskriterium unterscheidet er, aber schwach. **Ein Vorgabewert ist ausgeschlossen, und der Code sagt es selbst.** `pixie/stack.py`: *„`None` heisst unbekannt und wird nie zu einer Zahl … eine 0.5 saehe aus wie eine Messung."* Genau diese Klasse steht sechsmal im Defektregister. - **2026-08-24** — **Die Kopplung Zustand ↔ Gedanke ist im Bauplan schon vorgesehen — in der GEGENRICHTUNG.** `pixie/stack.py` dokumentiert zu `arousal`: *„die Erregung, in der der Gedanke gefasst wurde. **Sie hebt Novas Zustand beim Einwurf, wenn er niedriger liegt** (Bauteil B)."* Das ist ein **Anheben**: Der Gedanke zieht sie hoch. Die Forderung *„energiegeladen darf sie nur energiegeladene Themen liefern"* ist ein **Filter**: Ihr Zustand waehlt den Gedanken aus. **Beide koennen nicht zugleich gelten** — im einen bestimmt der Gedanke den Zustand, im anderen der Zustand den Gedanken. Zu entscheiden, bevor an einem von beiden gebaut wird; Bauteil B ist ausserdem ungeprueft, ob es ueberhaupt laeuft. - **2026-08-24** — **Das Herkunftstor der Gravitation unterdrueckt jedes Mal genau zwei Punkte — fuenfzehn Mal, ohne eine einzige Abweichung.** Ueber zwei Tage Behaelterlog feuerte es auf allen 15 Impuls-Turns, und jede der 15 Meldungen nennt **2 Gravitationspunkt(e) nicht angewendet**. Nie 1, nie 3, nie 0. Dass es nie 0 ist, ist der Beleg dafuer, dass das Tor nicht im Leerlauf schliesst; dass es **immer 2** ist, ist etwas anderes und ungeklaert. Entweder liefert der Gravitationsscan des Enrichers auf Impuls-Turns einen strukturell konstanten Satz, oder eine Kappung begrenzt ihn auf zwei. **Auf Nutzer-Turns waere dieselbe Frage stellbar** — die Faerbungsmeldung nennt die Punkte einzeln (32 Durchlaeufe im selben Fenster), gezaehlt wurde sie noch nicht. - **2026-08-24** — **Die Dienstetabelle der Architektur kennt den Kanal nicht, der seit einem Tag traegt.** `novaberg-architecture.md` §1.2 fuehrt `server`, `postgres`, `redis`, `searxng` und `telegram-bot`; `synapse` und `matrix-bot` laufen seit dem 23.08.2026 und stehen dort nicht. Derselbe Rueckstand im Compose-Auszug §8.1 und in der Startreihenfolge §8.3. **Gefunden hat es die Abschaltung des abgeloesten Kanals**, nicht der Nachzug des neuen — wer eine Zeile *entfernt*, liest die Tabelle; wer eine *hinzufuegt*, liest sein Konzept. | Fehlt | Wo es im Betrieb liegt | Warum es ins Repositorium gehoert | |---|---|---| | die Compose-Dienste `synapse` und `matrix-bot` | `docker-compose.yml` | ohne sie gibt es weder Homeserver noch Connector | | die AS-Registrierung als **Muster** | `matrix/config/novaberg-as.yaml` | `id`, `url`, `sender_localpart` und vor allem `exclusive: false` in **beiden** Namensraeumen sind Struktur, nicht Geheimnis — die Begruendung steht im Konzept §3.3, die Datei, die sie umsetzt, nirgends | | `as-tokens.env` als **Muster** mit leeren Werten | `matrix/config/as-tokens.env` | genau die Bauart, die `.env.template` fuer die uebrigen Geheimnisse schon hat | | das Anlegen der Datenbank `synapse` mit `LC_COLLATE=C` / `LC_CTYPE=C` | von Hand | **nachtraeglich nur ueber einen Neuaufbau aenderbar** — der eine Schritt, bei dem ein Fehler teuer ist. `db/init.sql` legt sie nicht an | | das Anlegen der Konten `@meister` und `@nova` | von Hand | ohne sie hat der AS niemanden zu puppeten | | die `homeserver.yaml` als Muster | `matrix/data/homeserver.yaml` | erzeugt und dann von Hand auf Postgres und `app_service_config_files` gestellt | **Richtig ausserhalb bleiben** die beiden Tokens, das Passwort, der Signaturschluessel und `matrix/data/`. **Behoben am 24.08.2026:** Die beiden Compose-Dienste stehen in der Vorlage (sechs Dienste beidseitig, `synapse` und `matrix-bot` **feldgleich** mit der Betriebsdatei, keine Wertabweichung). Unter `novaberg/matrix/` liegen drei Muster mit leeren Geheimnissen — **16 von 16** Schluesseln der `homeserver.yaml` und **6 von 6** der AS-Registrierung, keine Abweichung ausser den geleerten Werten. Datenbank und Konten stehen als Befehl in beiden READMEs, Schritt 6; beide sind gegen ein frisches Postgres bzw. den laufenden Homeserver gefahren. **Offen bleibt einer, und er gehoert nicht hierher:** Die Dienstetabelle der Architektur kennt `synapse` und `matrix-bot` weiterhin nicht — das ist der Fund darueber, nicht dieser. **Und die Anleitung nannte den Kanal mit null Woertern:** `README.md` und `README.de.md` haben **0 Treffer** auf `matrix` und `synapse`. Wer ihnen folgt, baut ein Novaberg ohne Fernkanal und merkt es nicht — es fehlt nichts, wonach er gesucht haette. **Die Trennung Geheimnis/Struktur ist bei `.env` sauber gezogen und bei Matrix gar nicht.** - **2026-08-24** — **Die Featureliste kennt keinen Zustand *ausser Betrieb*.** Die vier Ampeln beschreiben den **Bauzustand** (⚫ nicht begonnen · 🟠 begonnen · 🟢 fertig · 🔴 fehlerhaft); ein Feature, dessen Code steht und dessen Dienst abgeschaltet ist, passt in keine davon. Die Telegram-Zeile traegt seit dem 24.08.2026 ⚫ mit einem Vermerk daneben — ⚫ heisst aber laut Legende *Code existiert nicht*, und der Code existiert. Zu entscheiden ist, ob das Register eine fuenfte Ampel bekommt oder ob abgeschaltete Zeilen in einen eigenen Abschnitt wandern. - **2026-08-24** — **Der Matrix-Connector bekommt Zustellungen nicht innerhalb der Frist bestaetigt.** Im Betriebslog des Servers zweimal in 30 Minuten: `WebSocket-Send (threadsafe) nicht innerhalb von 5.0 s bestaetigt fuer 'meister' (client=matrix): Zustellung laeuft im Event-Loop weiter, Verbindung bleibt bestehen`. Folgenlos beobachtet — die Zustellung laeuft weiter —, aber die Frist ist da, um etwas zu erkennen, und sie erkennt hier regelmaessig. Der abgeloeste Telegram-Client zeigte dieselbe Zeile zur selben Zeit; **es ist also nicht der Connector, sondern der Sendepfad des Servers.** Ungeprueft ist, ob eine Zustellung je ausbleibt. - **2026-08-24** — **Der KZG-Akkumulator saettigt, und das ist entschieden so.** `salienz_roh = salienz_eingang + (haeufigkeit-1) * KZG_SALIENZ_BOOST` waechst unbegrenzt; die Kurve kappt ihn bei 1,0. Nach dem Wartungslauf stehen **859 von 3390 Schluesseln (25,3 %)** dort, gegenueber 1156 (34,1 %) vorher — davon **324 allein durch den Boost**, mit `haeufigkeit` 10 bis 152. **Entschieden am 24.08.2026: Ein 152-mal verstaerkter Gedanke IST maximal salient.** Kein Defekt, sondern die Bauart. **Was daraus fuer die Auswahl folgt, ist die eigentliche Auskunft:** Unter den 859 ordnet die Salienz nichts mehr — die **Haeufigkeit** aber schon, mit 96 verschiedenen Werten von 1 bis 152, und die Spitze teilt sich niemand (Rang 1/2/3 sind 152, 151, 126). Eine Top-2/3-Auswahl unter den Gesaettigten laeuft also ueber `haeufigkeit`, und das ist nicht ein Ersatz, sondern die genauere Groesse: Die Salienz sagt *maximal*, die Haeufigkeit sagt *wie oft es wiederkam*. - **2026-08-24** — **`SALIENZ_EREGUNG_MAX_ZUSCHLAG` ist unvermessen, seit die Wiederholung fort ist.** Die Simulation vom selben Tag (*0,30 ist zu gross, 0,20 ist die Kante, unter 0,10 kontraproduktiv*) mass einen Verstaerker, der je Segment erneut angewandt wurde. Mit der Behebung von `SALIENZ-RECHNET-AUF-IHREM-ERGEBNIS` ist diese Grundlage weg; die Konstante steht unveraendert bei 0,30 und braucht eine **neue** Messung am Betrieb. **Eine Zahl, deren Eingangsbedingung sich geaendert hat, ist keine Zahl mehr, sondern eine Erinnerung.** - **2026-08-24** — **Der Bestand steht auf zwei Skalen, sobald der Wartungslauf laeuft.** 1042 Zeilen sind nicht umrechenbar — ihr Eingang stand auf der Kappung, der wahre Wert ist verloren. Sie bleiben auf der alten Skala und tragen **keine Marke**, die das sagt; entschieden am 24.08.2026, sie stehen zu lassen. Wer spaeter zwei Werte vergleicht, kann nicht sehen, aus welcher Zeit sie stammen. Dasselbe gilt fuer die TTL: Sie ist eine Frist und wandert nicht mit. - **2026-08-24** — **`hgetall` auf einem KZG-Hash bricht mit `UnicodeDecodeError`.** Das Feld `embedding` ist binaer, der Client laeuft mit `decode_responses=True`. Am 24.08.2026 beim ersten Schluessel getroffen. Kein Defekt des Bestandes, aber eine Falle fuer jedes Werkzeug, das den Hash im Ganzen liest — `hmget` mit den gebrauchten Feldern ist der Weg. - **2026-08-23** — **Das Dateilog mischt Suite und Betrieb, und die Suite schreibt in die Produktivdatenbank.** Ein Zaehlversuch ueber `Delivery:`-Zeilen ergab Impulszustellungen mit `turn_id=turn-1`, `thema='T'` und `'Enceladus'` — Zeugenfixtures, nicht der Betrieb. Dieselbe Klasse wie schon einmal gemessen, hier zum zweiten Mal. **Die Datenbank ist das saubere Instrument** (`pipeline_log.art='turn_roh'` mit `herkunft`). Nebenbefund: drei Zeilen `user_id='test_wis3_mensch'` vom 19.08.2026 liegen unverbraucht in `shadow_auftrag` — sie treffen den Heartbeat nicht, weil der fuer ein anderes Paar laeuft. - **2026-08-23** — **Die Spalte `shadow_auftrag.grund` hat heute keinen Leser im Code.** `LESE_SPALTEN` (`memory/repositories/shadow_auftrag_repository.py:35`) fuehrt sie nicht, und die Auswahlpfade filtern ohnehin auf `aktiv = TRUE` — dort ist der Grund per Kanon immer leer. **Bewertet und nicht behoben:** Die Spalte ist als forensische Auskunft gebaut, nicht als Entscheidungsgrundlage eines Lesepfads; sie per SQL nachzulesen ist der gemeinte Zugriff. Was fehlt, ist die Stelle, an der jemand sie **braucht** — etwa ein Durchsatzzaehler, der `verfall` von `fehlversuch` trennt. Aufgefallen bei der Suche nach den Lesern der neuen Spalte. - **2026-08-23** — **14 grossgeschriebene Modulkonstanten sind in mehr als einem Modul definiert.** Gezaehlt ueber den Produktivbaum mit einem AST-Lauf: `GUELTIGE_AKTIONEN` an sechs Stellen, `PENDING_TTL_SECONDS` an fuenf, `AUFGABE`/`DIENST`/`NODE`/`QUELLE` an je drei, dazu acht weitere. **Die meisten sind agenten-lokale Namen mit gleicher Rolle und kein Defekt** — genau deshalb steht die Klasse hier und nicht als Zeuge: Ein Zeuge ueber sie stuende bei 14 statt bei null und waere nicht hart schaltbar. Aufgefallen beim Bau des Zeugen gegen `NEGATIVE-EMOTIONEN-DOPPELT`, wo derselbe Name in zwei Modulen **doch** ein Defekt war. Der bestehende Struktur-Zeuge (`test_config_struktur.py`) sieht nur Doppelungen **innerhalb** einer Datei. - **2026-08-23** — **Der Enricher fragt `lzg_knoten` zweispaltig, unmittelbar neben der Bibliotheksabfrage, die seit heute dreispaltig filtert.** `graph/nodes/enricher.py:736` prueft `EXISTS(… WHERE user_id = %s AND character_id = %s AND aktiv)` ohne `beobachter`, waehrend `lzg_knoten` die Spalte fuehrt und laut `novaberg-convention-paar-schema.md` §3.2 alle drei belegt sind. Dieselbe Fehlerklasse wie `BIBLIOTHEK-FILTERT-ZWEISPALTIG`, anderer Speicher. - **2026-08-23** — **Der Wert `assistant` steht an acht Stellen des Produktivbaums als Literal.** `agents/kzg/dispatch.py`, `agents/kzg/verdichtung.py`, `agents/recherche/agent.py` (zweimal), `graph/nodes/salience.py`, `tools/migrate_kzg_keys.py` und weitere. Seit dem 23.08.2026 gibt es mit `BEOBACHTER_KANON` (`config.py`) eine Deklaration; **migriert ist keine der acht Stellen** — die neue Konstante ist die Quelle fuer neue Pruefungen, nicht fuer den Bestand. - **2026-08-23** — **Der Testhelfer `_zeile` in `tests/test_queue_verfall.py` brach mit `TypeError` statt einer Meldung**, wenn die Zeile fehlte (`dict(cur.fetchone())` auf `None`). Am 23.08.2026 behoben und in zwei Funktionen getrennt — *lies die Zeile, die es gibt* gegen *gibt es sie noch*. **Die Klasse ist allgemeiner:** Ein Helfer, der den Fall nicht kennt, den ein Zeuge pruefen will, macht aus einer Zusicherung einen Stacktrace. - **2026-08-23** — **Der Bestand der Shadow-Queue laesst sich nicht an ihren Zeilen ablesen.** Ein abgearbeiteter Auftrag wird **geloescht** (`memory/repositories/shadow_auftrag_repository.py:416`), ein verfallener bleibt stillgelegt stehen. Wer den Fortschritt zaehlen will, sieht deshalb nur, was **nicht** vorangeht. Am 23.08.2026 zwischen 15:20 und 20:25 UTC gemessen: **653 → 597 Zeilen** bei unveraendert 247 stillgelegten — also 56 abgearbeitet, rund elf je Stunde. Die naheliegende Diagnose war an diesem Tag falsch: *keine neuen Eintraege seit dem 19.08.* und *403 von 406 mit `versuche = 0`* stimmten beide und trugen die Schlussfolgerung nicht. **Was fehlt, ist ein Zaehler, der Durchsatz sichtbar macht** — ohne ihn beantwortet der Bestand die Frage *arbeitet sie* mit dem Gegenteil. - **2026-09-05** — **`ei_calc` meldet einen ERROR fuer einen erwartbaren Zustand.** Beim **ersten** Turn nach Ablauf der Session (`SESSION_TTL` vier Stunden) gibt es per Konstruktion keine historischen Nova-Turns; die Zeile *„nova_emotions_verlauf ist leer — internal.emotion behaelt den Stand des Vorturns"* steht dann auf `ERROR`, obwohl nichts kaputt ist. Am 05.09.2026 gemessen: 17,7 Stunden Pause, die Zeile feuerte, der Folgeturn lief sauber. **Ein ERROR, der regelmaessig ohne Defekt feuert, erzieht dazu, ERRORs zu ueberlesen** — und er hat hier fast einen falschen Befund gegen den Modellwechsel getragen. `WARNING` mit dem Grund (Session abgelaufen) waere die ehrliche Stufe. - **2026-09-05** — **`LLM_PROFILE` ist seit heute doppelt vertreten.** Die Konstante hat **genau einen Leser** — `get_thinking_normalizer()` —, und dort entscheidet sie dasselbe wie die Modellpruefung eine Zeile tiefer: ob der Aufraeumer fuer den content/thinking-Split laeuft. Seit dem 05.09.2026 liest diese Pruefung das **antwortende** Modell, und ein Fernmodell traegt keinen der bekannten Staemme; der No-Op greift also ohnehin. **Zwei Wege zu einer Entscheidung, und der zweite ist der aeltere** — er wird beim Umstellen leicht vergessen und kann dann als einziger widersprechen. Der Kommentar in `config.py` nennt sie schon *„nur noch ein Schalter fuer den ThinkingNormalizer"*. Zu entscheiden: streichen oder als ausdruecklichen Uebersteuerungs-Schalter behalten. - **2026-09-05** — **`OPENROUTER_GEFUEHRTE_PARAMETER` ist eine Kopie fremder Faehigkeiten.** Die Liste steht als Konstante und stammt aus dem `supported_parameters` des Anbieters vom 05.09.2026. Sie altert lautlos: Nimmt der Anbieter eine Schraube dazu, meldet der Provider sie weiterhin als ungefuehrt — ein Fehlalarm, und der ist nach `19_WERKZEUGE` §5 teurer als er aussieht. Der Preiswaechter prueft genau das, aber nur wenn er laeuft (siehe den Eintrag darueber). - **2026-08-23** — **Die Aussage *0 hardcoded Prompts in Python* stimmt seit den Agenten-Diensten nicht mehr.** Gemessen ueber 261 Produktivdateien: **33 Prompt-Literale ab 100 Zeichen**, davon 17 mit der `[BLOCKNAME]`-Konvention — `agents/charakter/destillation.py` 9, `agents/recherche/` 7, `memory/kontext.py` einer mit 1714 Zeichen. Die Aussage galt fuer die **Graph-Knoten** und ist dort weiterhin richtig; in `novaberg-architecture.md` stand sie im Praesens und ohne diese Einschraenkung. Dort berichtigt; zu entscheiden, ob die Agenten-Prompts nach `prompts/` wandern. - **2026-08-23** — **Die Nutzer-Seite der Vektorzeile im Responder hat keinen `else`-Zweig und keine Logzeile.** `graph/nodes/responder.py:484` lautet `if emotions_vektor and emotions_vektor in EMOTIONS_VEKTOREN:` — faellt der Wert durch, entfaellt die Zeile still. Die Nova-Seite derselben Datei (`:354`/`:359`) trennt denselben Fall in **zwei** Zweige, `warning` fuer leer und `error` fuer unbekannt. **Der Kanon-Kommentar verspricht genau diese Unterscheidung** und ist am 23.08.2026 an diese Konstante gezogen — an der Lesestelle 484 wird das Versprechen nicht eingeloest. **Gemessen:** ueber 31 Logdateien 0 Treffer auf *Unbekannter Emotions-Vektor* und **2809** auf *Emotions-Vektor ist leer*; im Bestand tragen 2018 von 3319 KZG-Hashes einen Vektor, **0 davon ausserhalb der neun**. Der Fall, gegen den der Kanon gebaut ist, ist nie eingetreten — der haeufige Fall ist der leere Wert, und der ist kein Kanonmitglied. - **2026-08-23** — **Drei Dateien unter `/files` sind echte Kopien aus `Texte/Paper/` und nennen in ihrer Kopfzeile den Ort des Originals.** `novaberg-papers.md`, `novaberg-papers-stoffsammlung_k.md`, `novaberg-papers-themenanalyse_k.md` tragen `**Pfad:** Texte/Paper/…`, liegen aber unter `/files` und werden von dort indiziert; das Modell bekommt `/files/novaberg-papers.md` als Fundstelle und im Text einen anderen Ort genannt. **Keine Hardlinks:** verschiedene Inodes, Linkzahl je 1, Inhalt heute md5-gleich — zwei driftfaehige Exemplare, und indiziert ist die Kopie. Dieselbe Klasse wie die drei berichtigten Kopfzeilen unter `docs/archive/`, nur ausserhalb des angesehenen Verzeichnisses und **auf dem Weg zum Modell**. Zu entscheiden ist, ob die Kopie eine Kopie bleiben soll. - **2026-08-23** — **Die Fundstelle traegt zwei gleichartige Klammern hintereinander:** `- /docs/archive/novaberg-mem-lzg.md (archiviert) (ueber den Dateinamen) — …`. Etikett und Kanalnotiz sind typografisch nicht unterscheidbar; die erste ist eine Einschraenkung der Geltung, die zweite eine Auskunft ueber den Suchweg. Am echten Lauf gesehen. - **2026-08-23** — **Wurzel 3 ist freigegeben und leer:** `/knowledge/autonomous/nova/meister` traegt `eigentum='figur'`, hat **1173 Dateien auf der Platte und 0 Zeilen in `dateien_index`**. Damit kann der `[EIGENE FUNDE]`-Block nie feuern — er ist gebaut und bezeugt, aber ohne Eingabe. Die 175 Indexzeilen decken **2 von 3** freigegebenen Wurzeln; jede Aussage ueber den Bestand des Dateienindex meint diese zwei. - **2026-08-23** — **Der Verzeichnisbaum in `novaberg-architecture.md` fuehrt unter `tools/dateien/` eine von sieben Dateien** und behauptete bis heute *Lesepfad fehlt*, obwohl `operationen.py`, `hand.py`, `redaktion.py` und `versionierung.py` dort liegen und der Lesepfad seit dem 18.08.2026 im Betrieb ist. Beim Eintragen von `etikett.py` aufgefallen; die falsche Halbaussage ist mit derselben Zeile entfernt, die fehlenden Dateien sind es nicht. Zu pruefen, ob der Baum an weiteren Stellen aelter ist als das Verzeichnis. - **2026-08-23** — **`dateien_index.aktiv` ist aus `grund` ableitbar, und nichts haelt die beiden zusammen.** `aktiv = (grund IS NULL OR grund IN ('created','changed'))` gilt heute an allen 175 Zeilen — gemessen: 0 Zeilen mit `aktiv = TRUE` und `grund IN ('deleted','excluded')`, 0 mit `aktiv = FALSE` und `grund IN ('created','changed')`. Die Konvention *Abgeleitete Werte* §3 Regel 1 erlaubt das Mitspeichern ausdruecklich, weil die Eingabe (`grund`) danebensteht. **Was fehlt, ist der Riegel:** Ein Schreibweg, der nur eine der beiden Spalten setzt, erzeugt eine Zeile, die zwei verschiedene Dinge sagt, und keine Pruefung faellt darueber. Ein `CHECK` in der Datenbank wuerde es ausschliessen und ist DDL. Beide Schreibwege setzen die Spalten heute gemeinsam. - **2026-08-23** — **Ein Begriff, der einen Schritt unserer internen Arbeitsweise benennt, steht an 11 Stellen im veroeffentlichten Repositorium** — 2 in Code-Docstrings, 9 in `novaberg-bugs.md` und `novaberg-roadmap.md`. Solche Begriffe gehoeren nicht hierher; die Stellen sind gepusht und nur mit einem Rewrite zu entfernen. Beim Schreiben faellt es nicht auf, weil der Begriff an seinem Herkunftsort richtig ist — zum Verstoss wird er erst durch den Ablageort. Zu entscheiden, ob umformuliert wird oder ob die Stellen als Vorbestand danebenstehen bleiben wie die uebrigen in `novaberg/CLAUDE.md`. - **2026-08-23** — **Ein Dienst ausserhalb von `server/` laeuft an jeder Pruefung vorbei.** Der Matrix-Connector (`matrix_bot/`) wird von der Testsuite nicht gefunden (`unittest discover` laeuft im Server-Behaelter ueber `/app`), von den Codepruefungen nicht erfasst (**0 Treffer** auf `matrix_bot` in allen sieben) und von der harten Wand nicht beruehrt. Seine 21 Zeugen laufen nur ueber einen eigenen Aufruf, den niemand automatisch startet. **Derselbe blinde Fleck gilt seit Chat 41 fuer `telegram_bot/`** — er ist mit dem zweiten Dienst nur sichtbar geworden. Zu entscheiden ist, ob die Pruefstrecke die Nebendienste aufnimmt oder ob sie ausdruecklich ausserhalb stehen. **Am 24.08.2026 beziffert:** Die harte Wand ueber `server/` meldet `All checks passed`; derselbe Lauf ueber das **ganze** Repositorium findet **einen** Treffer — `N818 MatrixFehler should be named with an Error suffix` in `matrix_bot/matrix_api.py:48`. Ein einziger, und genau die Sorte, die eine harte Wand fangen soll. Der Preis der Ausweitung ist damit gemessen und klein. - **2026-08-22** — **Der Aussenrand des Dateien-Verbunds prueft den Pfad, nicht das Paar.** Eine Wurzel traegt `user_id x character_id`; `DATEIEN_AUSSENRAND` ist eine globale Liste von Pfaden. Seit dem 22.08.2026 steht dort `/knowledge/autonomous/nova/meister` — **ein Paarverzeichnis in einer Schranke, die kein Paar kennt.** Kaeme ein zweiter Nutzer hinzu, koennte er dasselbe Verzeichnis fuer **sein** Paar freigeben, sofern er den Pfad nennt; der Rand liesse ihn durch, und die Freigabe traegt danach seine Kennung. Heute mit einem Nutzer folgenlos — und genau die Sorte Luecke, die beim zweiten Nutzer niemand mehr sucht. - **2026-08-22** — **Am Rueckweg des Wurzel-Dienstes wird *„keine Ahnung"* als Ablehnung gelesen und beendet den Vorgang.** `_antwort_deuten` (`agents/dateien_wurzeln/resume.py`) prueft die Ablehnungswoerter zuerst, und `keine` steht darunter. Fuer eine **Ja-Nein**-Bestaetigung am Tor ist das die sichere Seite — es wird nichts geschrieben. Fuer eine Frage nach einem **Wert** ist es die falsche Antwort auf ein *ich weiss es nicht*: Der Dienst sagt *„Gut, dann lasse ich es"*, statt die Frage zu wiederholen. Gefunden beim Bau der Eigentumsfrage am 22.08.2026; das heutige Verhalten ist als Zeuge festgehalten (`test_dateien_wurzeln_eigentum.py`), nicht geaendert. - **2026-08-22** — **Die Figur schreibt die Recherchen ihres eigenen Hintergrundprozesses dem Nutzer zu — und haelt das gegen ausdruecklichen Widerspruch aufrecht.** Belegt an zwei aufeinanderfolgenden Turns: Auf *„Du hast recherchiert"* antwortet sie noch richtig (*„meine kleinen Studien"*), im selben Zug aber schon gedreht (*„dient **dir** das eigentlich"*); auf die Korrektur *„Du recherchierst ja, nicht ich"* antwortet sie *„die ganze Recherche war **dein** Werk, nicht meins. Ich habe nur beobachtet."* **Der Dateien-Index scheidet als Quelle aus** — von 174 Eintraegen ist keiner eine Recherche des Hintergrundprozesses; die zwei Treffer mit *knowledge* im Pfad sind Konzeptdokumente. **Die Spur liegt im Langzeitgedaechtnis:** Die Recherchen stehen dort mit `beobachter='assistant'`, und der Prompt-Block gibt als einzigen Urheberhinweis das englische Schemawort aus (`Beobachter: assistant`) neben einem Inhalt, der oft mit *„Der Fund verknuepft…"* beginnt und selbst keinen Urheber nennt. **Eine Kategorie fuer „vom eigenen Hintergrundprozess recherchiert" gibt es nicht** — sie faellt mit „im Gespraech geaeussert" zusammen. ⚠ Dass diese Eintraege im fraglichen Turn tatsaechlich im Prompt standen, ist **nicht** belegt. **Der Folgeschaden ist bereits persistiert:** Ein LZG-Knoten desselben Tages traegt *„Nova fragt den Nutzer, ob **seine** Recherche…"* → **Am 22.08.2026 zur Haelfte behoben.** Der Dateiweg ist gebaut: `dateien_wurzeln.eigentum` und zwei Bloecke im Verfasser (`novaberg-agent-dateien_k.md` §1a.5). **Offen bleibt der Gedaechtnisweg** — die Recherchen stehen im LZG mit `beobachter='assistant'` und einem Inhalt ohne Urheber, und genau von dort kam der gemessene Fall: Der Dateiweg konnte ihn gar nicht verursachen, weil der Wissensspeicher nicht indiziert ist. **Der Umbau nimmt dem Fehler also einen Weg, den er noch nicht ging, und laesst den, den er ging.** - **2026-08-22** — `server/prompts/default/salienz.assistant_task.txt:7` bildet den Genitiv des Traegers als `{traeger}s` statt ueber `_genitiv_bilden`. Fuer *Nova* stimmt das; ein Name auf s/ss/ss/tz/z/x — genau der Fall, fuer den `_genitiv_bilden` am 16.08.2026 gebaut wurde — bekommt hier die falsche Form. Gefunden von der zweiten Kontrolle ueber den ganzen Baum: 36 Dateien setzen eine Person in einen Prompt ein, vier Vorlagen ausserhalb der Destillation tragen `{traeger}`, und **alle vier fuellen ihn mit `ASSISTANT_NAME`** — die Kasusfehler des Rollenbegriffs treffen sie deshalb nicht, dieser eine Genitiv schon. - **2026-08-22** — In `agents/charakter/destillation.py` steht der Trennkommentar `# Prompts — Nova (eigene Perspektive)` ueber einem leeren Abschnitt: Die Nova-Prompts sind am 16.08.2026 in den parametrisierten Satz aufgegangen, die Ueberschrift blieb stehen und sagt jetzt eine Gliederung an, die es nicht gibt. - **2026-08-20** — Eine Zeile der Featureliste widersprach sich in sich selbst: Das Belegfeld sagte *„die Schwelle ist uebernommen, nicht gemessen"*, waehrend derselbe Eintrag zwei Spalten weiter die Kalibrierung samt Zahlenreihe fuehrte. Beim Nachzug korrigiert; ob weitere Zeilen ein Belegfeld tragen, das aelter ist als ihr eigener Text, ist ungeprueft. - **2026-08-21** — Der NMCP-Dienst `dateien` liefert seine Kappung von 8 Zeilen ohne jede Schwelle, auch auf eine Frage ohne Gegenstand (gemessen: 25 verschiedene Dateien auf 40 Plaetzen ueber fuenf Leerfragen). Beim KZG ist derselbe Fall am 21.08.2026 behoben; hier nicht mitgeaendert, weil ein Agent, der ausdruecklich sucht, eine andere Lage ist als ein Kontext, der ungefragt mitgeht. - **2026-08-21** — Der Boden des KZG-Vektorraums liegt bei 0,48 bis 0,54, der des Langzeitgedaechtnisses bei 0 (dieselben Fragen, 0 Anker). Der Unterschied zwischen beiden: Ein Langzeit-Knoten wird ueber den nackten Inhalt eingebettet, ein KZG-Eintrag ueber `"Thema: {themen}. Aussage: {kern}"` — in jedem Eintrag des Bestandes stehen dieselben zwei Schablonenwoerter. Ob sie den Boden heben, ist ungemessen. - **2026-08-21** — Die Nulllinie *Rang 1 in 8 von 12* fuer den Dateienindex misst zum Teil das Sollurteil und nicht die Rangfolge: Bei zwei der vier Fehlschlaege ist der Verdraenger inhaltlich richtig — einmal eine zweite Datei zum selben Gegenstand, einmal das Moduldokument ueber seinem Konzept. Wer gegen 8/12 optimiert, optimiert dort gegen ein falsch gesetztes Ziel. **Davor leer, seit dem 20.08.2026** — Alle 168 Punkte sind klassifiziert und an ihren Ort gewandert. Wohin, steht im Abschnitt *Umgezogen*; erledigte stehen unter *Erledigt*. Der naechste Fund kommt hierher, als **eine Zeile mit Datum**. --- ## Widerlegt — der Gegenstand ist da, die Aussage über ihn war falsch Ein widerlegter Eintrag behält seinen Wortlaut und bekommt die Korrektur mit Datum daneben. Er wandert **nicht** unter „Ohne Gegenstand": Dort fehlt der Gegenstand, hier ist er vorhanden und die Aussage über ihn war falsch. Wer beides vermischt, verliert die Gegenmessung — und der nächste Durchgang findet denselben Befund erneut. **Der Rest eines widerlegten Eintrags wird eigens klassifiziert.** Ein Befund kann in seiner Diagnose falsch und in seiner Frage richtig sein; die Frage bleibt dann offen und bekommt ihr eigenes Ziel. **Durchsicht am 29.09.2026 — 9 Einträge.** Die Korrektur steht hinter dem Pfeil; ein Rest ist dort genannt. - **2026-09-11** — ~~**Der Wartungslauf `charakter_hash` wird ausgehungert.**~~ → **am selben Tag widerlegt.** Nach 31 Minuten stand die Aufgabe bei Prioritaet 0,72 und hatte jeden Zyklus gegen Shadow-Auftraege bei 0,99 verloren; daraus wurde ein Aushungern geschlossen. **Um 20:05 UTC lief sie** — nach **1,36 h** Wartezeit und bei Prioritaet **0,98**. Der Verhungerungsschutz ist auf 0,5 je Stunde ausgelegt und ueberholt den hoechsten Queue-Wert nach rund 1,4 h. **Die Messung war kuerzer als die Zeitkonstante des Mechanismus, den sie pruefte** — und die gemessene 0,72 war der Beleg, dass er arbeitet, nicht dass er versagt. → **Widerlegt, geprüft am 29.09.2026:** Eintrag selbst: Aufgabe lief um 20:05 UTC nach 1,36 h bei Prioritaet 0,98 - **2026-09-11** — **Die Modellwechsel-Erklaerung ist widerlegt, und zwar von der Uhrzeit.** Der Wechsel auf das lokale Modell war am **09.09. abends**; die ersten drei Siez-Turns fielen am **09.09. um 09:59, 10:02 und 11:22 UTC**. Die frueher hier notierte Zeile *„fuenf Ursachen ausgeschlossen, was bleibt ist der Modellwechsel"* ist damit falsch — **der Kandidat, der fehlte, war der zweite Befund desselben Tages.** Herkunft, Sprachstil-Wert, Kern, Direktiven und das Session-Vorbild waren richtig ausgeschlossen; die Kandidatenliste war ueber **Mechanismen** gebildet und enthielt die gleichzeitig laufende Beobachtung nicht. → **Widerlegt, geprüft am 29.09.2026:** roadmap.md:1644-1646 (Modellwechsel durchgestrichen; erste Siez-Turns 09:59/10:02/11:22 UTC, Wechsel erst abends) - **2026-09-11** — **Zwei Tageszahlen dieser Sitzung waren ueber alle 14 Paare gezaehlt statt ueber eines.** Der Bestand traegt neben dem produktiven Paar 13 weitere (`hartmut` 85 Turns, `konrad` 30, `sarah` 30 …). Falsch war dadurch unter anderem der *„Ausreisser 10.09., 25 %"* — auf das produktive Paar allein gerechnet steht die Anrede an allen drei letzten Tagen bei **100 %**, und der 10.09. hat 26 statt 81 Turns. Die Richtung der Aussagen blieb, die Zahlen nicht. → **Widerlegt, geprüft am 29.09.2026:** roadmap.md:1662-1663 ('Ausreisser 10.09., 25 %' existiert nicht; produktives Paar 100 %) - **2026-09-10** — **Ein Rechercheergebnis Novas steht im Feld `user_prompt` und wird als Nutzeraeusserung perzipiert.** `[Betriebsbeleg 10.09.2026, 22:25 UTC]` Ein Turn mit `herkunft = eigener_impuls` trug im `user_prompt` einen 900-Zeichen-Abstract ueber Gaia-DR3-Massenbestimmung — **Novas eigene Recherche**, vom Menschen nie geschrieben (auf Nachfrage bestaetigt). Die Perzeption bewertete ihn trotzdem als Gegenueber: `user_emotion` = `task` / `freude` / `spielerisch`. **Der Reiz gehoert nicht in dieses Feld** — es traegt ausschliesslich, was das Gegenueber gesagt hat. Die Antwort des Turns ging denn auch nicht auf die Recherche ein, sondern auf den Gruss zwei Minuten davor. → **Widerlegt, geprüft am 29.09.2026:** server/graph/nodes/dispatcher.py:574-579 (turn_roh-Feld user_prompt traegt absichtlich reiz_text, herkunft daneben); server/graph/character_graph.py:51 (perzeption_rolle=assistant, keine Nutzer-Perzeption auf Impuls-Turns) - **2026-09-10** — ~~**Die `[AUFGABE]` des GV-Prompts fragt nur nach dem Nutzer.**~~ → **Am 10.09.2026 widerlegt: Das ist Absicht.** Der Knoten soll die Aeusserung des Ausloesers hernehmen, seine Absicht erkennen und **weiterfuehren** — daher *Was beschaeftigt den Nutzer? Welcher Gedanke kommt in seinem Kopf als naechstes?* Setzung des Eigentuemers: *„Sie soll explizit die Absicht erkennen und weiterfuehren, um dadurch lebendiger und beteiligter zu wirken."* **Kein Widerspruch zum Farbton:** Der Kontext beschreibt den Raum, die Aufgabe fuehrt den Gedanken des Ausloesers weiter. → **Widerlegt, geprüft am 29.09.2026:** Setzung des Eigentuemers 10.09.2026 im Eintrag; server/graph/nodes/gespraechsvektor.py:611 (gv.task bleibt Nutzer-Fassung, Absicht) - **2026-09-03** — **Chat-Nummern in der Stand-Zeile der Architektur.** `novaberg-architecture.md` nennt am Ende ihrer Stand-Kette *„Kern: Chat 94"* und *„Embedding-Modellwechsel Chat 107"*. Ein Chat-Verweis zeigt fuer jeden Leser des oeffentlichen Repositoriums ins Leere und ist entweder an Ort und Stelle zu erklaeren oder wegzulassen. Bestandsfund, beim Nachziehen derselben Zeile aufgefallen; nicht im Vorbeigehen geaendert, weil die Kette Historie ist und der Ersatz eine Umschreibung braucht. → **Widerlegt, geprüft am 29.09.2026:** Entscheidung des Eigentümers: Chat-Nummern bleiben in Repo-Dokumenten (`novaberg/CLAUDE.md`, Z. 25). - **2026-09-01** — **Der Satz „es gibt keinen Korpus roher Nutzer-Prompts" ist widerlegt.** Er stuetzte sich auf `gespraech_archiv` (0 Zeilen, heute nachgemessen) und die eine Redis-Session; `pipeline_log` wurde nicht angesehen. Dort liegen unter `node='dispatcher'`, `art='turn_roh'` **985 vollstaendige Prompt/Antwort-Paare** ueber **33 Tage** (27.07. bis 01.09.) und **17 Paar-Kennungen** — `user_prompt` bis 3011 Zeichen, `response` bis 5069. Davon **768 vom Meister** (Mittel 562 Zeichen), 169 aus sechs Personas, 48 aus Probe-Kennungen. **Die Einschraenkung, die an die Zahl gehoert:** kein Herkunftsfeld — Messturn und echtes Gespraech sind bei `meister` nicht maschinell trennbar, und der naheliegende Stellvertreter faellt aus (nur **1 von 768** Prompts folgt in unter 30 s, weil ein Turn Minuten braucht). Dieselbe Klasse wie der `neutral`+`0.5`-Fingerabdruck und der Altfund vom 30.07. („der Kalibrier-Korpus besteht zu einem Drittel aus Messturns"). → **Widerlegt, geprüft am 29.09.2026:** Gegenmessung 01.09.2026: 985 turn_roh-Paare im pipeline_log; der widerlegte Satz steht unmarkiert in novaberg-salienz-berechnung_t.md:156 - **2026-09-01** — **Die Salienz stand bei drei aufeinanderfolgenden Turns auf exakt 0,442.** In der dritten Reihe (Torzeilen 8, 9, 10) liefert die effektive Salienz dreimal denselben Wert, bei zwei verschiedenen Emotionen (`neugierig`, zweimal `neutral`). Ein konstanter Wert ueber verschiedene Reize ist die Signatur einer Groesse, die nicht mehr rechnet — dieselbe Klasse wie der Ausschlag vor der Reizstaerke-Kalibrierung. Nicht weiter verfolgt. → **Widerlegt, geprüft am 29.09.2026:** novaberg-fundliste.md:209 (am selben Tag aufgeklaert: sprachlich 0,500 und Erregungszuschlag 0,150 quantisiert, 'Die Formel rechnet; die Stichprobe war zu eng'); roadmap.md:5261 - **2026-08-24** — **`DESTILLAT-PERSPEKTIVE-VS-SUBJEKT` hat keinen eigenen Abschnitt im Defektregister.** Die Kennung wird dreimal als *Verwandt* genannt (`ZIELE-AUS-ZERRBILD`, zwei weitere) und nirgends gefuehrt. Damit ist der Grund, aus dem `ZIELE-AUS-ZERRBILD` offen steht, aus dem Register nicht zu beantworten. → **Widerlegt, geprüft am 29.09.2026:** novaberg-backlog-charakter.md:863 '## Bug: DESTILLAT-PERSPEKTIVE-VS-SUBJEKT', offen, dort seit Juli 2026 (072a2f4); im Backlog-Index gefuehrt - **2026-08-28** — **Eine offene Eigenschaft bleibt offen, nachdem Nova sie beantwortet hat.** Betriebsmessung der Sachlage (fuenf Turns, Rettich-Wasserhaushalt): »Einfluss von Licht vs. Wasser« stand nach Turn 2 als offen, die Antwort desselben Turns behandelte genau das, und in Turn 3, 4 und 5 stand es unveraendert offen. Der Prompt fragt nach dem, »was noch niemand genannt hat« — die Fortschreibung liest Deckung aber nur aus den Nutzer-Aeusserungen, obwohl die Antworten im Verlaufsfenster stehen. Entweder Absicht (offen = vom Nutzer nicht gesagt) oder Scheibe 3 fragt nach Dingen, die Nova gerade selbst erklaert hat. Entscheidung vor Scheibe 3. → **Widerlegt am selben Abend, in der Diagnose — und in der Frage halb richtig.** Novas Antwort war keine: Sie wiederholte »Licht oder Wasser« in vier Varianten und schlug ein Experiment vor; *offen* war die richtige Fortschreibung. Dass die Fortschreibung Novas Antworten liest, zeigt der gestellte Fall (Nova beantwortet eine von zwei offenen Eigenschaften → 3/3 gedeckt, `labor/2026-08-28_sachlage_deckung_aus_antwort.py`). **Der Rest:** `_render_history` schnitt jeden Beitrag bei 400 Zeichen — diese Antwort war 973 lang, die Substanz begann bei 384 (154 Zeichen kamen an); sechs von elf Antworten des Paares liegen ueber 400. Behoben (1600, Regieanweisungen entfallen, eine Antwort eine Zeile, Deckungsregel im Prompt); 5 Zeugen, Suite 2469, Gegenprobe 1/2/1. Nachgestellt aus den echten Turns: `labor/2026-08-28_sachlage_deckung_nachmittagsfall.py`. - **2026-08-01** — In **28 aufeinanderfolgenden Turns eines Tages** trug kein einziger eine negative Emotion: `freude`, `neugierig`, `zufriedenheit`, `begeisterung`, `verwundert`, `neutral`. Die Modi streuen dabei durchaus (`spielerisch` 5×, `alltag` 8×, `philosophischer_austausch` 10×, `emotional` 2×, `lernmodus` 2×). ~~Für die Abwendungsseite der Charakter-Räder heißt das: Sie hat in diesem Bestand nichts zu beobachten — eine leere Abwendungsseite ist dort keine Auffälligkeit, sondern die zu erwartende Messung.~~ → **Widerlegt am 01.08.2026, noch am selben Tag.** Die Abwendungsseite füllte sich, ohne dass eine negative Emotion hinzugekommen wäre: `nova → meister` trägt jetzt `distanz 1.0`, `selbstbezogen 0.5`, `gespraechsdistanz 1.0`. **Die Abwendung wird also nicht aus dem Affekt gelesen, sondern aus dem Gesprächsverhalten** — aus langen, sachlichen, nicht mitgehenden Antworten. Der Schluss von „keine negative Emotion“ auf „nichts zu beobachten“ war falsch. - **2026-07-30** — Zwei Befunde der Initiative-Kalibrierung sind **widerlegt**, Ursache war ein Defekt in der Eingabe (`KALIBRIER-INTENTIONEN-UNGEPARST`, behoben). Die 98 % negativen Rohwerte waren kein Merkmal des Gesprächs, sondern ein Konstantbeitrag von −1.0, den ein ungeparstes JSON-Feld in jeden Turn trug; geparst sind es 57,6 %. Und die Konstante `GV_INITIATIVE_SCHWELLE` = −0.45 ist weit weniger widerlegt als berichtet: κ 0,320 gegen 0,383 der gesuchten Schwelle, und sie ist selbst die zweithäufigste über 200 Zufallshalbierungen gefundene Schwelle. **Der Fund ist nicht der Defekt, sondern die Klasse:** Ein Fehler an der Eingabegrenze erzeugt keine falschen Zahlen, sondern richtige Rechnungen mit falschen Schlüssen — beide Befunde standen mit Beleg in der Chronik. Einzelheiten in `novaberg-lesson_l_teilmenge-verdeckt-muell.md`. > **Rest, keiner:** Die Ursache ist behoben und als `KALIBRIER-INTENTIONEN-UNGEPARST` im Bug-Register geführt; die beiden Befunde sind damit vollständig aufgelöst. > **Rest, offen:** Woraus die Abwendungsseite tatsächlich gelesen wird, ist damit eine Aussage über den Mechanismus und gehört zum Charakter-Rad — nicht in diese Liste. - **2026-07-29** — ~~Das bestehende Charakter-Rad (`nutzer_gewichtung`) hat in Novas Profil **keine einzige Abwendungs-Speiche** gefunden~~ → **Widerlegt am 30.07.2026, zweifach gemessen.** Die Abwendungsseite ist nicht leer: um 20:07 UTC trugen `gleichgueltig` 0.5, `selbstbezogen` 0.5 und `distanz` 1.0, um 22:00 UTC `selbstbezogen` 0.5 und `distanz` 1.0. Auch die Zuwendungsseite steht anders als notiert. Der Eintrag bleibt stehen, weil er den damaligen Stand richtig festhält und die Frage nach der Formulierung der Speichen — Haltung gegen Handlung — davon unberührt bleibt; als Beleg für eine leere Abwendungsseite ist er aber nicht mehr brauchbar. **Was die beiden Messungen stattdessen zeigen, steht in den drei Einträgen darüber.** Der ursprüngliche Wortlaut: > **Rest, offen:** Die Frage nach der Formulierung der Speichen — **Haltung gegen Handlung** — ist von der Widerlegung unberührt und weiterhin zu entscheiden. --- - **2026-08-12** — ~~**Ein karger Zeichenkorridor wirft Inhalt weg.** Bei `umfang ≤ 0,20` (bis 120 Zeichen) kamen von drei Inhaltsmarken im Mittel 1,0 bis 2,7 durch, im weiten Korridor durchgehend 3,0.~~ → **Am 13.08.2026 widerlegt, einen Tag später.** Dieselbe Enge liefert **3,0 von 3** Marken in 95 bis 103 Zeichen, sobald der Inhalt als eigener Baustein mit ausdrücklichem Auftrag danebensteht (*„Kepler-452b, Chef. 385 Tage, 1400 Lichtjahre. Masse unklar."*). Der Verlust hing an der Prompt-Form, nicht am Korridor — die Aussage war aus einem Lauf verallgemeinert, in dem beides zugleich variierte. **Der Telegrammstil trägt mehr Fakten je Zeichen als Prosa**, und genau deshalb war er zu retten. ## Ohne Gegenstand — der Hinweis überlebte, die Frage nicht Diese Einträge halten **einen Verlust** fest, keine Aufgabe. Ihr Gegenstand steht in keinem Repo-Dokument mehr; sie sind ohne Rückgriff auf Quellen außerhalb des Repos nicht bearbeitbar. Sie stehen hier getrennt, damit „Offen" bedeutet, was es sagt — vier von fünfzehn Zeilen sahen sonst nach Arbeit aus, die niemand aufnehmen kann. **Wer eine davon anfasst, erhebt sie neu.** Die alte Zeile ist kein Ausgangspunkt, sondern nur der Hinweis, dass hier einmal etwas war. **Durchsicht am 29.09.2026 — ein Eintrag.** - **2026-09-06** — **Dasselbe Modell, derselbe Lauf, zwei Rechtschreibniveaus.** Die Destillation vom 06.09. um 08:43 UTC schrieb beide Profile eines Paares 32 Sekunden auseinander. Novas Kern ist gegen `hunspell -d de_DE` sauber (9 Treffer, alle echte Fachwoerter); das Profil des Menschen traegt **sechs echte Tippfehler** im eigenen Fliesstext des Modells, nicht in zitierten Aeusserungen — `Gartten`, `Wiedersrand`, `zuzuberaiten`, `fordt` und zwei weitere, dazu `transparenz` klein. Warum die eine Seite sauber ist und die andere nicht, ist offen. → **Ohne Gegenstand, geprüft am 29.09.2026:** Destillation lief am 06.09. auf dem Fernmodell; seit 09.09.2026 lokal auf qwen36-cpu (Commit 9b963a6) - **2026-07-28** — `novaberg-kzg-liberalisierung_k.md` §3.6 und §5 sind als überholungsbedürftig notiert. **Der Grund ist nirgends festgehalten** — das Dokument trägt an beiden Stellen keine Markierung, und was genau dort nicht mehr stimmt, steht in keinem Repo-Dokument. Vor der Bearbeitung neu ermitteln. - **2026-07-28** — Eine Manager-Signatur-Drift „über 19 Dateien" wird geführt, **ohne dass das Kriterium irgendwo steht**. Ein Nachmessen am 28.07. fand mit selbst gewählten Mustern 4 Dokumente. Ob 19 überholt ist oder das Muster zu eng, ist **nicht entscheidbar** — die Zahl steht ohne die Abfrage, die sie erzeugt hat. Vor der Bearbeitung ist der Fund neu zu erheben; die alte Zahl ist kein Ausgangspunkt, sondern nur ein Hinweis, dass hier etwas war. - **2026-07-28** — Vier in Chat 107 identifizierte Lessons sind nie als Datei angelegt worden. **Welche vier, steht in keinem Repo-Dokument** — der Inhalt liegt nur im Protokoll außerhalb. Auf der Platte liegen 44 `_l`-Dateien. Diese Zeile hält den Verlust fest, nicht die Aufgabe: Ohne Rückgriff aufs Protokoll ist sie nicht bearbeitbar. - **2026-07-28** — `broadcast()` steht seit Chat 107 als ungeprüfter Punkt, **ohne dass die Frage dazu festgehalten wäre**. Wie bei der Signatur-Drift: Der Hinweis überlebte, die Fragestellung nicht. --- ## Umgezogen — Chat 115 (29.07.2026) - **2026-07-28** — `novaberg-roadmap.md` trug in der Kopfzeile „Stand: Chat 109, 26. Juli 2026", während der Inhalt bis Chat 114 reichte. → **Erledigt Chat 115.** Kopfzeile nachgezogen. Der Klammerkommentar darunter hält jetzt fest, dass die Drift zum zweiten Mal auftrat — sie ist kein Einzelfall, sondern das Verhalten dieser Datei. --- ## Umgezogen — Chat 114 (28.07.2026) - **2026-07-27, nachgemessen 27.07. abends** — `novaberg-architecture.md` §7 nennt „**72 Dateien**" in `docs/`; tatsächlich sind es **130** (`ls docs/*.md`). Die Zahl im ursprünglichen Fund lautete 123 und war beim Nachmessen desselben Tages schon überholt — eine Zählung ohne Messdatum ist hier wertlos. **Teilkorrektur:** Die Behauptung „kein einziges `novaberg-convention-*.md` steht im Index" trifft nicht zu. Von sechs Konventionsdateien wird **eine** genannt (`novaberg-convention-event-model.md`, als Querverweis im Fließtext, nicht als Index-Eintrag). Die anderen fünf fehlen. → **Erledigt Chat 114.** - **2026-07-27** — `novaberg-bugs.md` führt `SHADOW-DELIVERY-DATENVERLUST` mit einem Beleg auf `services/shadow_delivery.py:514-522`, der dort nicht mehr steht; der Chat-110-Umbau hat den Pfad ersetzt. Restrisiko besteht weiter, aber an anderer Stelle und an `BROADCAST-VERSCHLUCKT-FEHLER` hängend. → **Erledigt Chat 114.** - **2026-07-27, nachgemessen 27.07. abends** — Mehrere Dokumente nennen eine „Promotions-Schwelle 0.8". Im Code gibt es keine 0.8; das Tor ist `KZG_SALIENZ_HIGH = 0.7` in `agents/kzg/queues.py`, `_aufgabe_aus_intention`-Nachbarschaft. **Die ursprüngliche Aufzählung war unvollständig und in einem Punkt irreführend:** - Nicht genannt war `novaberg-mem-lzg.md` („Salienz ≥ 0.8 → Promotion-Queue" im ASCII-Diagramm). - Die Zeilennummern für `novaberg-backlog.md` (2940, 3544) stimmen nicht mehr; die Stellen liegen heute bei 2947 und 3556. Das Kriterium trägt weiter, die Nummern nicht. - **`novaberg-memory-synapsen-p4-entscheidungen_k.md` darf nicht mitkorrigiert werden.** Dort steht die 0.8 in einem historisch richtigen Satz: dass `queues.py` *von* `PROMOTION_THRESHOLD` (0.8) *auf* `KZG_SALIENZ_HIGH` (0.7) umgehängt wurde. Wer über alle `0.8`-Vorkommen greppt und ersetzt, tilgt eine zutreffende Aussage. **Kriterium statt Aufzählung:** zu korrigieren ist jede Stelle, die 0.8 als *geltende* Schwelle beschreibt — nicht jede, die die Zahl nennt. → **Erledigt Chat 114.** --- ## Umgezogen — Chat 112 (27.07.2026) Die Messung gehörte auch hier zum Umzug — bei jeder der vier Zeilen hat sie etwas an der Notiz korrigiert. | Fundlisten-Zeile | Wurde zu | Korrektur beim Umzug | |---|---|---| | Themen aus dem `[LAGEBILD]` übernommen | `SALIENZ-PROMPT-NUTZER-SCHABLONE` | Kein eigener Defekt, sondern dieselbe Ursache: Die Regel wies an, den Hintergrund zu bewerten. Mit dem Rollen-Switch behoben und am Turn vom 21:41 UTC gegengemessen | | Verdacht: Salienz bewertet den Gesamtzusammenhang | `SALIENZ-PROMPT-NUTZER-SCHABLONE` | Der Verdacht traf zu, aber **die Begründung war die falsche**: Nicht der Gesamtzusammenhang wurde bewertet, sondern das Lagebild — die Anweisung war invertiert, nicht unscharf | | `pending_write` trägt das Segment nicht weiter | — **erledigt** | Der Fund war zu dem Zeitpunkt richtig und ist seit Bauteil 1a behoben. Belegt: `graph/nodes/salience.py` legt `segment` in `daten` ab, `agents/kzg/verdichtung.py` liest es aus `state["parameter"]`. Die Zeile stand noch offen, weil sie beim Bauen nicht mitgezogen wurde | | `uvicorn --reload` überwacht nur `.py` | — **gehört nicht ins Repo** | Der Befund stimmt und ist nachgezogen, aber am richtigen Ort: Er beschreibt die **Entwicklungsumgebung**, nicht das Projekt. Nach `CLAUDE.md` bleibt solches Wissen außerhalb — ersatzlos gestrichen, nicht verloren | --- ## Umgezogen — Chat 110 (26.07.2026) Elf Zeilen sind in `novaberg-bugs.md` zu Einträgen mit Reproduktionsweg geworden. Beim Umzug haben zwei von ihnen sich als ungenauer erwiesen als gedacht — die Messung gehört zum Umzug, nicht zur Notiz: | Fundlisten-Zeile | Wurde zu | Korrektur beim Umzug | |---|---|---| | Zwei bis drei identische Kernsätze je Impuls | `KZG-SEGMENT-DUPLIKAT` | Betrifft **jeden** Turn, nicht nur Impulse: Nutzer-Turn 2 identische, Impuls 3 je Graph | | Impuls erzeugt zwei assistant-Einträge | `IMPULS-DOPPELTE-SPUR` | Es sind **sechs** (2 Graphen × 3 Segmente); ein Nutzer-Turn hat 1 `user` + 2 `assistant`, nicht je einen | | Salienz-Node ohne `pipeline_log` | `SALIENZ-OHNE-PIPELINE-LOG` | — | | Kontaminationsfilter ohne Setzer | `KONTAMINATIONSFILTER-TOT` | Zeile 424 → **448** (nach den Chat-110-Änderungen) | | Destillat behauptet Handlung | `DESTILLAT-BEHAUPTETE-HANDLUNG` | — | | `[EIGENER GEDANKE]` nur teilweise | `IMPULS-ICH-PERSPEKTIVE-TEILWEISE` | — | | Beziehungsrecherche im Gedächtnispfad | `IMPULS-BEZIEHUNGSRECHERCHE` | — | | Zwei herrenlose `hash_dirty`-Keys | `HASH-DIRTY-WAISENKEYS` | — | | `queues.py:111` ohne Gate | `HASH-DIRTY-SETZER-DRIFT` | Nicht „ohne Log": das Kürzel `dirty_flag` steht in einer Sammelzeile. Fünf Setzer, **drei** Bauarten | | Telegram `shadow_delivery` | `TELEGRAM-SHADOW-TYP-TOT` | Zweig war **nie** erreichbar — der Broadcast hieß immer `shadow_impuls` | | Leere Abschnittsüberschrift | `DESTILLATION-LEERE-UEBERSCHRIFT` | — | | Duplikat-Verstärkung auf dem user-Pfad | Nachtrag in `KZG-SEGMENT-DUPLIKAT` | Zeitlich begrenzt, klingt mit der TTL ab | | Client-Impuls-Zweig ohne Testlauf | — | **Erledigt am selben Tag**, am laufenden Client sichtbar geprüft | --- ## Verlauf des Standes - **2. Oktober 2026** — **Neun Funde aus den Lese-Audits für den Avatar**, alle gelesen und nicht nachgeprüft: der Verfasser und die Absicht, das Arousal in der Regie, der leere `emotions_verlauf`, die ungeladene Regeldatei des Responders, der Docstring der Antwort-Nutzlast, undefinierte CSS-Klassen, veraltete Docstrings und Dokumente im Client, die Plutchik-Farben. Offen 251 → 260. - **29. September 2026, 05:46 UTC** — (`date -u`) **Die ganze Liste ist durchgesehen: 434 Einträge unter *Offen*, jeder mit Klasse und Beleg.** Vorgabe des Eigentümers: *„die Einträge klassifizieren nach Beobachtung, Bug oder bereits erledigt, sprich also in die Roadmap“*. Umgezogen sind die 181, deren Ausgang ohne neue Kennung feststeht: **92 erledigt** (Abschnitt *Erledigt*, Beleg hinter dem Pfeil; Roadmap, Kapitel vom 29.09.2026, 05:46 UTC), **42 schon mit Kennung** registriert (*Umgezogen — 29.09.2026*), **9 widerlegt**, **1 ohne Gegenstand**, und **37 über die Entwicklungsumgebung**, die nicht ins veröffentlichte Repo gehören. **Offen bleiben 253 Einträge**, 245 nach der Zählregel, dazu 6 neue Funde der Durchsicht oben unter *Offen*: vorgeschlagen sind 72 Bugs, 71 Backlog-Einträge, 68 Beobachtungen für ihr Dokument, 44 offene Entscheidungen, 4 äußere Schranken; 40 Einträge tragen zwei Funde verschiedener Klasse. **Ein Drittel der Liste war schon abgeflossen** — ins Register, in die Chronik, in den Code —, ohne dass die Quelle geschlossen wurde; mehrere Funde stehen neben ihrer Behebung vom selben Tag. - **18. September 2026, 08:13 UTC** — (`date -u`; **vier neue Funde und ein geprüfter** — der Hänger von heute früh war der Serverstart, nicht die Suite). Davor 16. September 2026, 19:31 UTC (`date -u`; **ein neuer Fund aus der Vollstaendigkeitsfrage** — die Probe-Nutzer der Reihe stehen dauerhaft im Lage-Bestand, 62 Zeilen und 64 Objekte). Davor 16. September 2026, 19:00 UTC (`date -u`; **ein neuer Fund aus der Testreihe** — die Lage benennt als Objekt den Anlass statt des Gegenstands, *Ausflug* statt *Regenjacke*). Davor 16. September 2026, 18:05 UTC (`date -u`; **zwei neue Funde aus der Vorfrage zu Scheibe 12 C** — 316 von 1067 Lage-Objekten tragen keine Klasse und die Werte haben keinen Kanon; und die Klasse trennt Termin von Gesprächsthema nicht, 9 gegen 9). Davor 16. September 2026, 17:33 UTC (`date -u`; **ein neuer Fund** — die Bilanzzahl des Defektregisters ist mit keiner genannten Zählweise nachrechenbar, 161 gegen 151. Dazu klassifiziert: der Fund vom 14.09. zur Merk-Bitte mit Datum ist nach der Entscheidung ein Defekt mit Kennung). Davor 16. September 2026, 17:19 UTC (`date -u`; **kein neuer Fund** — der Eintrag vom 14.09. zur falschen Termin-Zeit trägt jetzt, dass die Bestandszeile deaktiviert ist). Davor 16. September 2026, 15:10 UTC (`date -u`; **drei Funde aus der zweiten Kontrolle zu Scheibe 12 B** — ein achter Verlaufs-Renderer kürzt weiter auf 1600 Zeichen entgegen seinem Docstring, ein Schnitt auf 200 Zeichen schreibt in eine Spalte ohne Leser, und die Compose-Datei nennt einen anderen Connector als den laufenden. Offene Funde: **345**). Davor 16. September 2026, 10:05 UTC (`date -u`; **ein neuer Fund aus der zweiten Kontrolle** — `session_turn_mark_action` hat keinen Aufrufer, während das Moduldokument sagt, er werde nach dem Agent-Dispatch gerufen; zweiter Weg zu derselben Lücke wie die fehlende `[ERLEDIGT]`-Marke. Der Fund vom 15.09. zum Ausgangsstatus der Dienste hat seit heute eine Kennung: `DIENST-MELDET-ABGESCHLOSSEN-OHNE-VERIFIKATION`. Offene Funde neu gezählt: **342**). Davor 15. September 2026, 19:13 UTC (**Zeitparser, zweiter Zug**: Punkt als Trenner, ungültiger Kalendertag und das ISO-Datum in Pfad 2 nach *Erledigt*; die Rückfall-Hälfte des Fundes vom 14.09. eingegrenzt; drei neue Funde — die Uhrzeit mit nachgestellter Tageszeit, die Uhrzeit vor „am TT.MM.", die Zahl nach „um" ohne Einheit —; **356** Einträge der Form `- **JJJJ-MM-TT**` im Abschnitt *Offen*, mechanisch gezählt). Davor 15. September 2026, 15:56 UTC (**Zeitparser, die Stunde ohne „Uhr"**: die erste Hälfte des Fundes vom 14.09. behoben; **sechs neue Funde** — Punkt als Trenner, Abbruch an einem ungültigen Kalendertag, Block 2 schluckt das Leerzeichen hinter „Uhr", der Korpusläufer übersieht geschlossene Lücken, die Nacht-Regel, der Monatstag ohne Zukunft —; Nachtrag zur Fuzzy-Korrektur vom 25.08.; **355** Einträge der Form `- **JJJJ-MM-TT**` im Abschnitt *Offen*, mechanisch gezählt). Davor 15. September 2026 (**vier neue Funde aus dem Bau von Scheibe 12 A**, zwei davon aus seiner zweiten Kontrolle — ein Dienst meldet `abgeschlossen` trotz gescheiterter Verifikation, ein Abbruch zwischen Responder und Freigabe liefert ungeprüft aus; dazu: die Marken `[ERLEDIGT]`/`[FEHLGESCHLAGEN]` im Verlauf haben seit dem 23.04.2026 keinen Schreiber, und die Standzeilen sind wieder Ketten; die Messung zu den falschen Erfolgsmeldungen steht beim Backlog-Eintrag `SYK-B3-VORZEICHENREGEL`, der die ausgesetzte Regel zurückholen will; **349** Einträge der Form `- **JJJJ-MM-TT**` im Abschnitt *Offen*, mechanisch gezählt). Davor 14. September 2026, 19:52 UTC (**sechzehn neue Funde vom 13. und 14.09.** — Termin-Zustellung unter `gemma4-a4b-gpu`, Speicherbehauptung ohne Schreibung, Dauer nicht speicherbar, Verlauf in 100 Zeichen für neun Leser, Doppel-Fehlschlag des Thinkers live, Sternchen in Objektnamen, Recherche nach Nutzerwissen, relative Zeitangaben in KZG-Kernen, Sprecher, wiederholte Rückfrage, Clipboard der Nutzerhälfte, doppelte Eigenschaft, dazu drei aus der zweiten Kontrolle und der Zeitparser im ersten Auftrag des Betriebs; **345** Einträge der Form `- **JJJJ-MM-TT**` im Abschnitt *Offen*, mechanisch gezählt, durchgestrichene mitgezählt). Davor 13. September 2026, 15:55 UTC (**nach der zweiten Kontrolle des Eigenschaftsgedaechtnisses**: zwei neue Funde — `traeger`/`kritikalitaet` bleiben nach einer Gedaechtnis-Deckung stehen, die Wiederaufnahme-Sektion traegt die Felder des Servers in den Prompt; JSON-Ausfallzahl und Durchgaenge berichtigt). Davor 15:11 UTC (**Formpruefung und Eigenschaftsgedaechtnis der Sachlage**: zwei Funde vom Morgen erledigt und nach *Erledigt* verschoben — die Formpruefung haelt jedes Feld, und der Wert in `gedeckt` ist die Angabe selbst; drei neue Funde aus dem Betrieb — Namensdrift erzeugt Dubletten, Notiz-Werte der Messturns im Bestand, eine Entitaetsdublette der Magnet-Aufloesung; Nachtrag zur JSON-Ausfallquote des Sachlage-Calls). Davor 12. September 2026, abends (**Bauteil 4: die Bitte zuerst**, gebaut; der Befund vom Abend liess sich in acht Messturns nicht nachstellen; zwei neue Funde — ein beendetes Thema zieht sich durch unverbundene Antworten, und `task` erfasst die wenigsten Bitten). Davor 20:53 UTC (**Bauteil 3: Themen als Luecke beim Nutzer**, der Sprecher-Befund fuer den Lueckenpfad aufgeloest; drei neue Funde — Plausibilitaet etwa die Haelfte, ein wiederkehrendes Gespraechs-Etikett, persoenliche Themen nur zufaellig ausgeschlossen). Davor 20:31 UTC (Bauteil 2, offene Fragen nach Naehe). Davor 20:20 UTC (**die Quellen-Naht ist gebaut und ein Fund damit geschlossen**; drei neue vom Bau — die KZG-Salienz stoesst oben an, beide Suchen setzen ein fehlendes Gewicht still auf 0,5, Themen-Listen tragen Klammer-Bruchstuecke). Davor 19:50 UTC (**sieben Funde aus 15 Betriebsturns des Abends** — die Neugier greift, aber nicht richtig: Aufnahmebereitschaft praktisch immer an, 6 von 83 Luecken aus dem KZG, dieselben drei offenen Fragen in jedem Turn, GV4 nie auf Impuls-Turns, ein Vorschlag erst beim fuenften Nachfragen, ein LZG-Knoten in Ich-Form, sieben JSON-Ausfaelle; dazu ein Nachtrag zum Sprecher-Befund: 56 der 83 Luecken beginnen mit *Nova …*). Davor 19:30 UTC (**der Blocker hat eine Kennung** — `LAGE-FORMPRUEFUNG-UNVOLLSTAENDIG` im Defektregister; die Zeile hier ist die Spur. Davor 19:10 UTC: **ein Betriebsturn ist abgebrochen, und die Ursache ist eine nicht abgeschlossene Formpruefung** — `_validate_artifact` normalisiert die drei spaeter hinzugefuegten Felder der Lage und nicht die zwei, mit denen sie anfing; der Absturz ist dabei der glueckliche von vier ungeriegelten Lesern). Davor 12. September 2026, 16:50 UTC (**der schwerste Fund des Tages, und der Umbau hat ihn sichtbar gemacht** — die Charakter-Resonanz trennt nach `beobachter` statt nach Passung, mittlerer Abstand +0,302; der geplante Schwellen-Anstieg ist damit gesperrt). Davor 12. September 2026, 16:20 UTC (**ein Fund aus dem dritten Bau** — ein Docstring nannte die Bedingung, die der Eingriff brach, und der Bruch sah aus wie ein leerer Speicher; 0 Kandidaten bei 3544 Schluesseln). Davor 12. September 2026, 15:45 UTC (**zwei Funde aus dem zweiten Bau** — `berichtend` saugt `alltag` und `emotional` auf, sechs von sieben Fehlgriffen des Spektrums; und die Uebersetzungsstufe des Kanon-Zugs ist gebaut, bezeugt und griff 0 von 30 mal). Davor 12. September 2026, 15:05 UTC (**ein Fund aus dem Bau** — ein Zeuge hatte als Vorlage den haeufigsten Nullfall des Bestandes gewaehlt, und der war haeufig wegen des Defekts, den er nicht pruefte; bei der Behebung wurde er rot und sah aus wie ein Rueckschritt). Davor 12. September 2026, 14:10 UTC (**ein neuer Fund aus zwei Messungen, die sich treffen** — der Charakter-Filter ruht bei dem Paar, dessen Anpassung fehlt: niedrigster Resonanz-Median und das einzige Paar, in dem Novas Kern nicht am naechsten am eigenen Menschen liegt. Die Spreizung selbst ist nach `F-PAAR-2` kein Defekt mehr). Davor 12. September 2026, 13:30 UTC (**der Konventions-Fund ist am selben Tag gemessen und halbiert** — die Zerlegung des Kerns in Facetten hebt jeden Median um 0,03 bis 0,10, laesst die Spreizung zwischen den Paaren aber unveraendert; der Fund bleibt als Befund ueber das **Mass** und ist als Erklaerung der Spreizung erledigt. Dazu: die Konventions-Erhebung ueber sieben Vektorspalten konnte ihn strukturell nicht finden, weil er keine Spalte ist). Davor 12. September 2026, 13:05 UTC (**vier neue Funde, zwei beantwortete und einer, der schon eine Kennung hatte** — der Resonanz-Vergleich steht gegen beide einschlaegigen Saetze der Embedding-Konvention; ein Messwerkzeug schreibt in das Betriebslog, das spaetere Messungen lesen; die Kapitelzahl im Kopf der Chronik war 25 Kapitel alt. Die Decke der Vektorlaenge gehoert zu `GV-LAENGE-RUNDUNG-ZUR-GERADEN` und `MODUS-KREATIV-WIRD-NIE-VERGEBEN` — beide nachgetragen, kein neuer Eintrag. Beantwortet sind die globale Schwelle auf paarweiser Groesse und die Frage, woran der dritte Antizipationsschritt haengt). Davor 9. September 2026, abends (**der Fernanbieter ist abgeschaltet** — Preis in vier Tagen um Faktor 8,8 gestiegen, Rabatt weg; dazu zwei ungemessene Folgen der Umstellung). Davor 9. September 2026 (**drei Funde aus der langen Reihe** — eine Naht, die erst unter Last bricht; ein bekannter Messgeraet-Defekt, der als Ergebnis zurueckkam; ein Bezeichner, der zweimal falsch gelesen wurde). Davor 8. September 2026, nachmittags (**der Preis-Fund vom 07.09. ist berichtigt und dabei groesser geworden** — der Preis fiel binnen eines Tages um Faktor 2,15, der Rabatt ist zurueck; eine Konfigurationskonstante kann ihm nicht folgen). Davor 8. September 2026 (**ein Fund aus der Naht-Schaerfung** — sieben Stellen fuehren eine Cosine-Groesse roh in ein Produkt; zwei geprueft, beide tragen den Befund, fuenf ungeprueft. Der schaerfere Fall normiert in derselben Zeile den einen Faktor und laesst den anderen roh). Davor 7. September 2026, spaet (**vier Funde aus dem Modellwechsel** — die Kostenspalte rechnet mit dem konfigurierten statt dem lebenden Preis; zwei Drittel der Kosten entstehen im Hintergrund; `OLLAMA_KEEP_ALIVE` kostet 17,9 s je Kaltstart; und der freche Ton, der lange vermisst wurde, war unter dem Fernmodell da — ein Wachposten ohne Zaehler). Davor 7. September 2026, abends (**zwei Funde aus dem Modellwechsel** — die Kostenspalte rechnet seit dem Rabattwegfall mit dem konfigurierten statt dem lebenden Preis, Faktor 2,80; und zwei Drittel der Modellkosten entstehen im Hintergrund. Dazu die Setzung des Eigentuemers, das Ferne vorerst laufen zu lassen). Davor 7. September 2026 (**zwei Funde neben dem Bau des Faszinations-Lesers** — ein Zeuge, der eine Konstante symbolisch fuehrt, kann ihre Eichung nicht halten; und `neugier_vektor` gilt im Konzept als nicht gebaut und steht im Code. Dazu ist der Fund vom 06.09. zum Turn ohne Nova-Antwort in einem Punkt beantwortet: Dieselbe Signatur entsteht aus einem Anbieter-`HTTP 429`). Davor 6. September 2026, 21:05 UTC (**der Laengenfilter-Fund vom 05.09. ist geschlossen und in einem Punkt widerlegt** — der Filter trennt Sachaussage und Sprechakt-Vermerk nicht, er trifft falsch herum; Schwelle auf 100, die Faszination rechnet seither im Turn). Davor 6. September 2026, 19:50 UTC (**vier Funde neben dem Bau der Entwertung** — ein Turn ueber `POST /chat` durchlaeuft die Eingangsseite, ohne dass Nova antwortet; dazu die 60-Zeichen-Grenze, die `hash_dirty`-Altlasten und der Zeuge hinter dem fruehen Ausstieg). Davor 6. September 2026, 19:25 UTC (**drei Funde neben dem Bau der Entwertung** — die 60-Zeichen-Grenze von `ZITAT` ist vom Melde- zum Eingriffskriterium geworden und laesst 8 von 125 Anfuehrungspaaren durch, allesamt ganze Saetze im Kern; dazu die `hash_dirty`-Altlasten und der Zeuge hinter dem fruehen Ausstieg). Davor 6. September 2026, 19:10 UTC (**zwei Funde neben dem Bau der Entwertung** — die `hash_dirty`-Altlasten sind zum dritten Mal gezaehlt und steigen monoton (5 → 13 → 16), und drei von vier Grenz-Zeugen erreichten den geprueften Eingriff wegen eines fruehen Rueckkehrpfads gar nicht). Davor 6. September 2026, 17:45 UTC (**zwei Funde am Messgeraet und am Richtwert** — drei Werkzeuge massen ohne das Anbieter-Pinning des Betriebs, und der Umfangs-Richtwert des Kern-Prompts wird in neun von zwoelf Laeufen ueberschritten). Davor 6. September 2026, 16:15 UTC (**der Fund von 15:40 ist behandelt** — die Zitatregel senkt die unbelegten Zitate auf ein Zehntel; offen bleibt der Rest). Davor 6. September 2026, 15:55 UTC (**die unbelegte Zitierweise ist nicht modellspezifisch** — zwei Modelle zweier Familien erfinden rund ein Fuenftel ihrer Belege, ein drittes zitiert gar nicht). Davor 6. September 2026, 15:40 UTC (**ein Fund aus dem ersten Betriebslauf der Deckungspruefung** — der Kern setzt eigene Wendungen in Anfuehrungszeichen, und die Klasse *Beleg ohne Fundstelle* meldet sie). Davor 6. September 2026, 15:05 UTC (**der Fund von 14:05 ist aus einer zweiten Quelle praezisiert** — 4 Rad-Erhebungen je Tag im Median, der 03.09. auch dort leer; die 2,6 der Mitschrift sind eine Untergrenze). Davor 6. September 2026, 14:05 UTC (**ein Fund aus der zweiten Kontrolle der Drift-Reihe** — 29 Fassungen an 11 von 12 Tagen statt der rund 8 je Tag, die der Sammel-Takt unterstellt). Davor 6. September 2026, 13:40 UTC (**ein Fund aus der Deckungsmessung** — das Beziehungsprofil zitiert zwei Wendungen, die im Material nicht vorkommen). Davor 6. September 2026, 13:20 UTC (**zwei Funde vom Vormittag nach `novaberg-bugs.md` umgezogen** — `PROFIL-VERALLGEMEINERT-EINZELBELEG` und `PROFIL-VERSTAERKT-WAS-ES-BESCHREIBT`, nachdem der Eigentuemer die Absichtsfrage entschieden hat). Davor 6. September 2026, 10:20 UTC (**ein Helfer ohne Aufrufer**, gefunden beim Bau der Verbrauchsrechnung — und der Preiswaechter-Eintrag vom 05.09. ist geschlossen). Davor 6. September 2026, 09:06 UTC (**drei Funde aus der Durchsicht der Charakter-Profile** — zwei Rechtschreibniveaus im selben Lauf, eine Anrede aus 0,24 % der Quellen als *„durchgehend", und die Rueckkopplung des Profils auf den Zug, den es beschreibt). Davor 5. September 2026, 20:39 UTC (**ein Fund aus der dritten Vollstaendigkeitsfrage** — `LLM_PROFILE` entscheidet seit heute dasselbe wie die Modellpruefung daneben). Davor 5. September 2026, 19:45 UTC (**die Sprechrichtung des Beziehungsprofils ist geschlossen** — drei von vier Deutungsebenen nannten keinen Sprecher; alt 3/5 verdreht, neu 0/5). Davor 5. September 2026, 19:41 UTC (**dritte Fundstelle der Klasse *nach dem konfigurierten statt dem antwortenden Modell geschluesselt*** — diesmal im Herkunftsfeld der Rad-Messung, das damit die falsche Auskunft gibt). Davor 5. September 2026, 18:12 UTC (**ein Fund aus der Messung des Fernmodells** — eine ERROR-Zeile fuer den Normalfall *erster Turn nach Session-Ablauf*; sie trug beinahe einen falschen Befund gegen den Modellwechsel). Davor 5. September 2026, 17:41 UTC (**zwei Funde aus dem Fernmodell** — der Preiswaechter hat keinen Aufrufer, und der Kanon der gefuehrten Parameter ist eine Kopie, die lautlos altert). Davor 5. September 2026, 17:06 UTC (**ein Fund vom 23.08.2026 geschlossen** — die Prompt-Modellebene hing am konfigurierten statt am antwortenden Modell; sie wurde mit dem vierten Modell-Rueckhalt wirksam und im selben Zug aufgeloest). Davor 5. September 2026, 11:05 UTC (**zwei Funde an der Chronik selbst** — ihr Findemittel lief 12 Chronik-Commits lang nicht, und der abgeschlossene August liegt weiter in der laufenden Datei). Davor 5. September 2026, 10:20 UTC (**der Laengenfilter ist der Engpass der Faszination** — nur 7 von 36 gelesenen Knoten passieren ihn, der Rest sind Sprechakt-Vermerke). Davor 5. September 2026 (**die Faszination rechnet im Betrieb, und ihr erster Wert ist 0,0** — der gelesene Traeger hat keine Bruecke; dahinter eine unentschiedene Absichtsfrage: ist Lesen eine Beruehrung?). Davor 4. September 2026 (**Messung gegen die laufende Datenbank**: der `synapsen_k`-Fund noch am selben Tag erledigt, dafuer ein neuer — der `pipeline_log`-Bestand beginnt bei `id = 1` am 27.07.2026, die frueheren Rohturns der Charakter-Resonanz sind nicht darin). Davor 4. September 2026 (**zwei Funde aus der Metakognitions-Ueberarbeitung** — der Doku-Nachzug steht aus, und `synapsen_k` §10 fuehrt die `pipeline_log`-DDL ohne die Paar-Spalten). Davor 4. September 2026 (**zwei Funde aus der Verstaerkungsfrage** — keine LZG-Reaktivierung im Protokoll, und `lzg_resonanz` erreicht den Dispatcher nicht). Davor 3. September 2026, 21:30 UTC (**zwei Funde aus der abstrakten Schicht** — der Kollaps der Qualitaetsdominanz auf `komplexitaet`, und dieselbe `bool`-Luecke in der Meinungsschicht, die im neuen Code an zwei Stellen gebaut und behoben wurde). Davor 3. September 2026, 20:45 UTC (ein Fund **nach `novaberg-bugs.md` umgezogen** — er gehoerte zu einer Kennung, die es seit dem 18.08. gibt; dazu eine themenferne Antwort aus der Messreihe). Davor 3. September 2026, 20:35 UTC (**die zweite Kontrolle hebt den Hauptbefund der Messreihe auf**: Novas negatives Register existiert — 35 von 2825 Knoten im echten Paar —, und der Nullbefund war der Erwartungswert. Was bleibt, gilt fuer die vier Reize.). Davor 3. September 2026, 20:25 UTC (**Messreihe gegen das Produktivsystem**: Nova hat auf negative wissenschaftliche Reize kein negatives Register — viermal `neutral`/`neugierig`; die Bauart des Reizes hebt die Salienz um Faktor 2–4; die Faden-Emotion kommt aus Novas Antwort und steht so in keinem Dokument. Dazu **ein Fund zum zweiten Mal berichtigt**). Davor 3. September 2026, 19:45 UTC (Messreihe gegen die Rechnung: **47,9 % des Korpus ohne Sektor** mit drei Ausreissern, und ein Log, der Urteile verschiedener Schwellen-Generationen mischt; dazu **ein Fund berichtigt** — das Tor hat sehr wohl einen negativen Faden durchgelassen). Davor 3. September 2026, 19:30 UTC (drei Funde aus der Einfaerbung — eine veraltete `.pyc`, die eine Gegenprobe verfaelschen kann; ein Bestand ohne jeden negativen Faden, auf den **vier** Bauteile warten; zwei Tabellen mit gegenlaeufiger Aussage). Davor 3. September 2026, 19:00 UTC (zwei Funde aus dem Praegungszug — ein toter Import im Bestand und ein System der Rechenkette ohne eigenen Abschnitt; ein Eintrag vom 01.09. geschlossen, weil der Eigentuemer die Frage entschieden hat). Davor 2. September 2026, 19:20 UTC (drei Funde aus Scheibe 3 und 4 — die Suite als Schreiber, die ungemessene Strang-Schwelle, die Abfrage die Paare zaehlte; dazu drei widersprechende Sektor-4-Tabellen. Zwei Eintraege am selben Tag geschlossen). Davor 1. September 2026, 19:05 UTC (vier Funde aus den Termin-Turns des Abends). Davor 30. August 2026, 22:38 UTC - **7. September 2026** — **Die Zahl der offenen Funde war um 99 zu niedrig, und der Grund ist die Pflege, nicht das Zaehlen.** Der Kopf nannte **132** (Stand 30.08.), gezaehlt waren es **253**; darunter **22 Eintraege, die selbst als erledigt markiert waren** und trotzdem im Abschnitt *Offen* standen. Sie sind nach *Erledigt* verschoben, kein Wortlaut geaendert — offen bleiben **231**. > **Eine Liste, deren Kopfzahl aelter ist als ihr Inhalt, sagt beim Nachschlagen das Falsche — und zwar nach unten.** Wer den Bestand fuer halb so gross haelt, wie er ist, setzt die Durchsicht anders an. Die Zahl ist billig zu rechnen und stand sieben Tage still. **Der Umzug ist der mechanische Teil einer groesseren Durchsicht** (Vorgabe des Eigentuemers): Was behoben ist, gehoert in die Chronik; was offen und ein Defekt ist, nach `novaberg-bugs.md` mit stabiler Kennung; was eine Erkenntnis ist, in ein Lesson-Dokument. Dieser Schritt hat **nichts klassifiziert** — er hat nur getrennt, was sich selbst schon als erledigt bezeichnet hatte. Die Fortschreibung des Standes, aus der Kopfzeile geloest am 20.08.2026. Der Wortlaut jedes Eintrags ist unveraendert; vorangestellt ist allein sein Datum. - **29. August 2026, 09:01 UTC** — **131 offene Funde, gezaehlt** (145 Fundzeilen, 14 mit `~~`). Zwei neu aus der zweiten Kontrolle der Scheibe 9: die Quellen einer Gedaechtnis-Deckung gehen am latenten Objekt verloren; die Wiederaufnahme schliesst das eigene Thema nicht aus. - **30. August 2026, 08:30 UTC** — **132 offene Funde, gezaehlt** (151 Fundzeilen, 19 mit `~~`). Neu, aus der Schlussfrage: *»Du denkst als Nova«* im GV-Prompt und der fehlende Zeuge ueber den ganzen Verfasser-Prompt standen nur im Konzept und im Handzettel. - **30. August 2026, 12:05 UTC** — **137 offene Funde, gezaehlt** (158 Fundzeilen im Abschnitt *Offen*, 21 mit `~~`). Neu: der Name `valenz` ist an die GV-Achse vergeben. - **30. August 2026, 11:05 UTC** — **136 offene Funde, gezaehlt** (157 Fundzeilen im Abschnitt *Offen*, 21 mit `~~`). Neu: die Suite schreibt echte Zeilen in `shadow_auftrag`. Berichtigt: die Bruecken-Zeile — ihre Zahlen enthielten Testzeilen. - **30. August 2026, 12:50 UTC** — **136 offene Funde, gezaehlt** (156 Fundzeilen im Abschnitt *Offen*, 20 mit `~~`). Neu: nur 4 % der Auftraege tragen die `ausloeser_turn_id`. - **30. August 2026, 10:45 UTC** — **135 offene Funde, gezaehlt** (155 Fundzeilen im Abschnitt *Offen*, 20 mit `~~`). Neu: zwei Suchtreffer mit verschiedenen Werten werden nicht als Widerspruch behandelt. - **30. August 2026, 10:05 UTC** — **134 offene Funde, gezaehlt** (154 Fundzeilen im Abschnitt *Offen*, 20 mit `~~`). Neu: der Anbieter nach dem Startguthaben (Tavily) und Staan als dritte Option samt der 403 von Qwant. - **30. August 2026, 09:02 UTC** — **132 offene Funde, gezaehlt** (152 Fundzeilen im Abschnitt *Offen*, 20 mit `~~`). Neu: der Health-Check kennt den ersten Suchanbieter nicht. Erledigt: die Wahl des Suchanbieters (Serper eingebaut). - **30. August 2026, 08:15 UTC** — **131 offene Funde, gezaehlt** (150 Fundzeilen, 19 mit `~~`). Neu: der Suchanbieter ist noch nicht gewaehlt, die Bauweise steht (Serper-Notiz aus dem Gespraech). - **30. August 2026, 07:40 UTC** — **130 offene Funde, gezaehlt** (149 Fundzeilen, 19 mit `~~`). Erledigt: die drei Wissensbloecke des Verfassers sprechen ueber Person A — Gedaechtnisblock in den Namen des Lesers (Kanal `memory_context_verfasser`), Aufzeichnungs-Bloecke in dritter Person. - **29. August 2026, 23:20 UTC** — **131 offene Funde, gezaehlt** (149 Fundzeilen, 18 mit `~~`). Behandelt: der Thinker sucht englisch — Regelzeile und Pflichtblock verlangen Deutsch; das Labor zeigt keinen Unterschied (0/8 gegen 0/7 englisch), die englischen Begriffe der Kettenmessung waren zu 5 von 7 Folgesuchen, die das Budget abschneidet. - **29. August 2026, 22:58 UTC** — **132 offene Funde, gezaehlt** (149 Fundzeilen, 17 mit `~~`). Erledigt: der `[GEDAECHTNIS]`-Block kennt den Sprecher seiner Eintraege nicht — `speaker_label` in KZG-Zeile, Resonanz und GV-Kontext; ein Teil des Funds (Session-Zusammenfassung) war ueberholt. - **29. August 2026, 22:46 UTC** — **133 offene Funde, gezaehlt** (149 Fundzeilen, 16 mit `~~`). Erledigt: der Thinker verbraucht das Suchbudget — seit der Suchdisziplin eine Suche je Turn, die Sachlage-Treffer zuerst. Neu: der Thinker sucht englisch gegen die deutschsprachige Wikipedia-Volltextsuche und lud eine Doppelstern-Liste nach. - **29. August 2026, 21:55 UTC** — **133 offene Funde, gezaehlt** (148 Fundzeilen, 15 mit `~~`). Neu: Aufzeichnungs-Bloecke und `[GEDAECHTNIS]`-Block sprechen das Modell als den Charakter an — gefunden, als der `[SACHLAGE]`-Block auf Person A/B umgestellt wurde. - **29. August 2026, 21:40 UTC** — **132 offene Funde, gezaehlt** (147 Fundzeilen, 15 mit `~~`). Erledigt: der Rueckfrage-Gegenstand am alten Kurzziel — die Gravitation war richtig, die Form falsch; die Zeile sagt jetzt, wessen Zug es ist. - **29. August 2026, 19:48 UTC** — **133 offene Funde, gezaehlt** (147 Fundzeilen, 14 mit `~~`). Zwei neu aus der Betriebsmessung der Kette ueber 20 Turns: der Thinker sucht 23-mal und sperrt damit die Wikipedia-API fuer die Sachlage-Recherche; der Rueckfrage-Gegenstand nimmt nach einem Themenwechsel das alte Kurzziel. - **29. August 2026, 08:54 UTC** — **129 offene Funde, gezaehlt** (143 Fundzeilen, 14 mit `~~` — die erste Zaehlung dieses Eintrags nahm die Abschnitte *Widerlegt* und *Ohne Gegenstand* mit und kam auf 139; die Zaehlvorschrift meint den Abschnitt *Offen* allein). Erledigt: der Verfasser-Stoff ohne Sprecher — als Scheibe 9 gebaut (Zuschreibung an Person B 0/10 → 10/10). Neu: der `[GEDAECHTNIS]`-Block verwirft `beobachter` beim Rendern, die LZG-Resonanz laedt ihn nicht. - **29. August 2026, 08:32 UTC** — **129 offene Funde, gezaehlt** (142 Fundzeilen, 13 mit `~~`). Zwei Zeilen des Morgens erledigt: der zusammengelegte Doppel-Turn ging im uvicorn-Reload verloren (Bauart des Eingangs, Eigenschaft der Umgebung → Harness), und die Websuche liefert nach Abschalten von Bing und Einschalten der Wikipedia-Volltextsuche 3 von 3 relevante Treffer im Code-Pfad. - **28. August 2026, 23:07 UTC** — **128 offene Funde, gezaehlt** (137 Fundzeilen im Abschnitt *Offen*, 9 mit `~~`). Neu: die Suite schreibt ins Server-Log (und das Log rotierte im Messturn); die Notizen-Leser mit Treffersemantik schreiben `last_touched` beim Lesen, und `fakten` traegt fuer das Paar 0 Zeilen bei einem `find_similar` ohne Aufrufer — beides gefunden beim Zuschnitt der Quellen fuer den Frame-Aufloeser (Scheibe 6). - **23. August 2026, 20:25 UTC** — **26 offene Funde, gezaehlt statt fortgeschrieben.** Die Kopfzeile stand auf 23 und war ueber mehrere Zuege dieses Tages hochgezaehlt worden; ihr Ausgangswert am Morgen war selbst nicht gemessen. Die drei fehlenden Eintraege sind keine neuen Funde, sondern nie mitgezaehlte. - **23. August 2026, 20:10 UTC** — **23 offene Funde.** Der Fund vom Abend ist am selben Tag gemessen und erledigt: Die Thinking-Zeile ist aus allen sieben Overrides entfernt, die Formatzeilen bleiben — die Kontrolle ohne Fessel gibt ihnen recht. - **23. August 2026, 19:35 UTC** — **24 offene Funde**, drei neu aus der Nachpruefung der Prompt-Ebenen: eine Anweisung in allen sieben Overrides, die auf einen abgeschalteten Modus zielt und seit heute erstmals wirkt; `OLLAMA_MODEL` ist nicht zwingend das antwortende Modell; und die Aussage *0 hardcoded Prompts* ist mit 33 gemessenen Literalen widerlegt. - **23. August 2026, 19:10 UTC** — **21 offene Funde**, einer neu: Die Nutzer-Seite der Vektorzeile im Responder faellt still durch, waehrend die Nova-Seite denselben Fall in zwei Logzweige trennt. - **23. August 2026, 18:40 UTC** — **20 offene Funde**, drei neu aus der Nachpruefung des Archiv-Etiketts: drei driftfaehige Dateikopien unter `/files` mit der Kopfzeile des Originals, zwei ununterscheidbare Klammern an der Fundstelle, und eine freigegebene Wurzel mit 1173 Dateien und 0 Indexzeilen. - **23. August 2026, 18:05 UTC** — **17 offene Funde**, einer neu: Der Verzeichnisbaum der Architektur fuehrt unter `tools/dateien/` eine von sieben Dateien. - **23. August 2026, 16:15 UTC** — **16 offene Funde**, zwei neu aus dem Umbau des Waechters: ein Begriff des internen Ablaufs an 11 Stellen im veroeffentlichten Repositorium, und `dateien_index.aktiv` ohne Riegel gegen `grund`. - **23. August 2026, 15:45 UTC** — **14 offene Funde.** Der Fund vom Mittag ist am selben Tag klassifiziert und behoben: Er wurde zu `DATEIINDEX-NEUANLAGE-ERBT-VORGAENGER` und ist mit dem Umbau des Waechters erledigt. - **23. August 2026, 14:20 UTC** — **15 offene Funde**, einer neu: Eine Neuanlage unter altem Pfad erbt `entitaet_ids`, `timeline_id` und `zuletzt_gelernt_hash` ihres Vorgaengers, weil `agent.py` neu und geaendert in einen Topf wirft und der UPSERT die drei Spalten nicht anfasst. - **21. August 2026, 10:48 UTC** — **6 offene Funde**, einer neu aus der Rangdiagnose des Dateienindex: Die Nulllinie 8 von 12 misst zum Teil das Sollurteil statt der Rangfolge. - **21. August 2026, 10:29 UTC** — **5 offene Funde.** Zwei vom Vormittag sind am selben Tag erledigt: die KZG-Schwelle ist gemessen und steht auf 0,72, der widersprechende Docstring ist fort. Zwei sind neu: der NMCP-Dienst `dateien` traegt weiterhin gar keine Schwelle, und der Boden des KZG-Raums koennte von der Schablone im Einbettungstext kommen. - **21. August 2026, 09:42 UTC** — **5 offene Funde**, zwei neu aus der Rewriting-Messung: eine Abrufschwelle, die nicht trennt (KZG und der NMCP-Dienst `dateien` liefern ihre volle Kappung auch auf eine Frage ohne Gegenstand), und ein Docstring, der eine andere Schwelle nennt als der Code darunter. - **20. August 2026, 19:37 UTC** — **3 offene Funde**, alle aus dem Durchgang durch die 70 Kennungen: der Rest eines geschlossenen Defekts (der Kern-Hash deckt 2 von 20 Bestandstagen) und eine Featurelisten-Zeile, deren Belegfeld ihrem eigenen Text widersprach; dazu eine Pruefzahl, die trotz harter Wand gestiegen ist. - **20. August 2026, ~18:30 UTC** — **0 offene Funde** — alle 168 Punkte des Abschnitts *Offen* sind klassifiziert und umgezogen: 70 als Defekt mit Kennung nach `novaberg-bugs.md`, 48 mit ID ins Backlog, 14 als Zustandsaussage in ihr Moduldokument, 10 als Regel des Vorgehens, 5 als Nachtrag an einen bestehenden Eintrag, 21 als erledigt. Die Zeichenbilanz ist bei jedem Schritt aufgegangen. - **20. August 2026, ~17:05 UTC** — **153 offene Funde** — einer geschlossen: Die Kopfzeilen-Kette der vier Register ist in den Koerper geloest (138 Glieder), der Fund von ~16:40 ist damit erledigt und durchgestrichen. - **20. August 2026, ~16:40 UTC** — **154 offene Funde** — einer neu: Die `Stand:`-Kopfzeile ist in vier Registern eine zweite Chronik in einer Zeile geworden, 11.001 bis 34.653 Zeichen, mit unpaarigen Klammern. - **20. August 2026, ~16:00 UTC** — **153 offene Funde** — einer neu, aus dem Abgleich des Verlaufs: Der Gesprächsverlauf liegt im Enricher vollständig vor, bevor eingebettet wird — Query Rewriting braucht keine neue Datenquelle und kein festes Fenster. - **20. August 2026, ~15:30 UTC** — **152 offene Funde** — einer neu: Der Router-Prompt nennt weiter „die Fachabteilung", bewusst stehen geblieben, weil er nicht als Nova spricht. - **20. August 2026, ~14:30 UTC** — **151 offene Funde** — einer neu, aus der zweiten Kontrolle: `fragen` und `draengen` stehen seit heute in beiden Prompts — inhaltlich beim Verfasser, als Tonwort beim Responder; zu entscheiden ist, ob der Responder sie noch braucht. - **20. August 2026, ~14:00 UTC** — **150 offene Funde** — einer neu: Der Verfasser liest die Haltung nicht, obwohl drei ihrer fünf Größen (`umfang`, `fragen`, `draengen`) seine Seite betreffen. - **20. August 2026, ~13:55 UTC** — **149 offene Funde** — keiner neu, aber einer neu bewertet: Die Setext-Unterstreichung im Blockinhalt ist mit dem RST-Erkenner vom Sonderfall zur Regel geworden, weil in reStructuredText jede Überschrift unterstrichen ist. - **20. August 2026, ~13:20 UTC** — **149 offene Funde** — einer neu, aus der zweiten Kontrolle: Bei einer Setext-Überschrift steht ihre Unterstreichung in der ersten Zeile des Blockinhalts; im Bestand kommt der Fall nicht vor. - **20. August 2026, ~12:30 UTC** — **148 offene Funde** — einer geschlossen: Die halbierte Blockkarte ist als `BLOCKKARTE-STILL-HALBIERT` behoben, und die Zahl darin war 5 von **83** statt von 80. - **20. August 2026, ~10:40 UTC** — **149 offene Funde** — zwei neu: Der Suchschlüssel des Gedächtnisses trägt nur den aktuellen Turn, und der Meister hat den Weg entschieden (Query Rewriting); und die eingebettete Zusammenfassung liegt gefüllt im Bestand — 320 von 320 —, wird vom Suchweg der Bibliothek aber nie gelesen. - **20. August 2026, ~09:55 UTC** — **147 offene Funde** — sechs neu: Mit der Freigabe von `/docs` liegen sechs archivierte Konzepte im selben Index wie die geltenden, und getrennt sind sie allein durch den Pfadanteil `archive/`; und die Blockkarte des Dateien-Konzepts zählt 5 Blöcke statt 80, weil ein durchgestrichener Codezaun den Zähler invertiert; und eine enger gewordene Filterregel markiert Zeilen als „verschwunden", deren Datei unverändert vorhanden ist; und zwei aus dem Blick auf die Bibliothek — sie trug in 187 Turns **einmal** bei, und 44 von 46 Trefferzeilen melden einen entarteten Kosinus von exakt 1,000 — beide Einträge sind am selben Tag nachgemessen und in den Zahlen korrigiert. Dazu einer aus der Schlussprüfung: Die Freigabe von `docs/` steht nur in der Aufstellung und überlebt keinen Aufbau von null. - **19. August 2026, ~20:40 UTC** — **141 offene Funde** — nachgezaehlt: 154 Listeneintraege im Abschnitt *Offen*, davon **13** durchgestrichen. **Die Zahl der Durchgestrichenen weicht vom vorigen Stand ab, der 14 nannte** — gezaehlt wurde die Aufzaehlungsmarke unmittelbar gefolgt von `~~`; drei weitere Eintraege tragen `~~` im Fliesstext und sind keine gestrichenen Funde. Wer anders zaehlt, bekommt eine andere Zahl, und deshalb steht die Methode hier. **Zwei aus dem Abgleich des Verlaufs:** der schreibende Speicher ist der leere (1 Notiz, seit 18 Tagen unberuehrt) · der Schreibpfad der Bibliothek ist seit dem Umbau teurer und die Kosten sind ungemessen. **Einer aus dem Stand des Dateien-Verbunds:** zwei Kanaele in `dateien_index` ohne Schreiber, anders als beim dritten nicht als solche markiert. **Fuenf aus dem Umbau der Bibliothek:** der dritte Konsument (nachgemessen und beantwortet) · die Ausschluss-Absicherung bei 0 von 0 · der ruhende Recherche-Pfad · die dichte Kandidatenliste des Rueckwegs · der Vorcheck, der groeber ist als sein Lesepfad. **Dazu einer aus der Schwellenmessung:** `themen_embedding` traegt das Destillat, nicht das Thema. **Vier aus dem Ollama-Update:** die Versionsabfrage, die den Server statt der Datei meldet · der Thinking-Vorgabewert, der einen Aufrufer ohne `think`-Feld den Grossteil seiner Ausgabe kostet · Zeitangaben der Featureliste-Kopfzeile, die CEST als UTC beschriften · die Kanalzeile der Nulllinie, die auf n=2 steht und als Eigenschaft des Betriebs zitiert wurde. - **19. August 2026, ~16:30 UTC** — **127 offene Funde** — nachgezaehlt: 141 Listeneintraege im Abschnitt *Offen*, davon 14 durchgestrichen. **Sieben neu aus Antwort-Spur, Ollama-Untersuchung und dem Rueckwaerts-Durchgang durch den Gespraechsverlauf:** der sequentielle Nachlauf von 8 s vor der Zustellung · ein `repeat_penalty` ohne Herkunft · eine Momentaufnahme, die die eigenen Eingriffe verschwieg · kein MTP in diesem System, auf drei Ebenen geprueft · eine Messzeile, die das Schema statt der Belegung zaehlte · die Typpruefung, die auf die Klasse statt auf die Faehigkeit prueft und dabei den eigenen Gegenstand verschluckte · die vier Dauern des Anbieters, die seit jeher vorliegen und niemand liest. - **19. August 2026, ~13:05 UTC** — **120 offene Funde** — nachgezaehlt: 134 Listeneintraege im Abschnitt *Offen*, davon 14 durchgestrichen. **Sechs Eintraege vom Bau des Bibliotheks-Dienstes**: die Schwelle, die gegen echte Fragen falsch herum sortiert · die Fundstelle, die den Responder nicht ueberlebt · `immer_aktiv` als falsches Merkmal der Rolle *Quelle* · das Silo, dessen Lesefunktion abgeschaltet ist und in keiner Zaehlung vorkommt · eine Warteschleife, die am Namen eines Nachbar-Loggers ansprang · der zweispaltige Paar-Filter auf einem dreispaltigen Schema. - **19. August 2026, ~11:10 UTC** — **115 offene Funde** — **nachgezaehlt, nicht addiert:** 128 Listeneintraege im Abschnitt *Offen*, davon 13 durchgestrichen. **Die Datei hatte an diesem Tag drei Schreiber** — zwei Sitzungen und den Rueckweg-Agenten selbst, der einen Fund waehrend der Arbeit selbsttaetig eintrug; die Zahl darunter stammt aus einer frueheren Erhebung und war beim Lesen bereits ueberholt. Genau das ist der Grund, warum die Vorschrift unten *zaehlen* sagt und nicht *fortschreiben*. **Neun Eintraege vom 19.08.** aus zwei Sprints und ihren Gegenproben: die beantwortete Absicht, die sich widersprechenden Saetze, die Reichweite der Konvention *reine Funktion*, die Schwelle die es schon gab, der Einreihpunkt hinter der Datei, der Rueckstand von 714 auf 25, das Zuordnungsmodell mit der Listenposition, die fehlende Datenbank-Zusicherung, die Frage des Verweises und die bewegte Kandidatenlandschaft; einer geschlossen (**der Wackelzeuge**). - **18. August 2026** — **101 offene Funde** — 97 aus Chat 151, **fuenf neue** aus einer EI-Auswertung eines echten Dialogs und **einer, der während der Sitzung von aussen dazukam**: Der Rueckweg-Agent hat den Wackelzeugen-Fund selbsttaetig eingetragen, waehrend an derselben Datei gearbeitet wurde — **die Datei hat mehr als einen Schreiber, und eine Zahl im Kopf ist ab ihrer Erhebung veraltet.** Der schwerste der drei eigenen: der Kern-Hash, der Aussagen der Figur **über den Nutzer** als ihr eigenes Wesen destilliert — im Produktivsystem an `charakter_hash(nova, meister)` wiedergefunden. Dazu: die drei Perzeptionsfelder ohne Kanon-Riegel, deren Vorgabewert beim Intent der höchste Wert seiner eigenen Tabelle ist, und die zwei Stil-Verfahren, die sich in 71 % der Turns uneinig sind, ohne dass festgelegt wäre, welches recht hat. **Nachgezählt, nicht addiert: 121 Listeneinträge im Abschnitt *Offen*, davon 13 durchgestrichen** — 128 − 13 = 115, nachgezählt am 19.08.2026 zum Sitzungsende. **Die Zahl war an diesem Tag fünfmal eine andere**, weil neben der Sitzung der Rückweg-Agent und eine zweite Hand in dieselbe Datei schrieben — sie gilt für den Moment ihrer Erhebung und für keinen späteren. Wer sie braucht, zählt. **Die Zahl war zwischen zwei Zügen desselben Tages dreimal falsch**, weil der Rueckweg-Agent nebenher schreibt; sie gilt fuer den Moment ihrer Erhebung und fuer keinen spaeteren. Die Vorschrift steht unten. - **18. August 2026** — Chat 151: **101 offene Funde** — 90 vom Vortagsstand plus **11 neue**, darunter **der gefangene Wackelzeuge** samt Ursache und Häufigkeit; drei aus dem Rückweg: die fehlende Idempotenz, die Zweitnutzung des `modus`-Feldes und der Zeitplan, hinter dem der Auftrag nicht messbar ist. - **18. August 2026** — **vier** aus dem Bau des Aufrufers: der Verzeichnisbaum, der zwei laufende Manager nicht kennt, ein deklarierter Ausgang ohne Weg dorthin, das Zeilenfenster ohne Aufrufer, und der Verbund ohne Moduldokument. **Nachgezählt, nicht addiert: 113 Listeneinträge im Abschnitt *Offen*, davon 12 durchgestrichen** — 113 − 12 = 101. Die Vorschrift steht unten. - **18. August 2026** — Chat 150: **90 offene Funde** — 85 vom Vortag plus **sechs neue**, einer behoben: die Fundstelle mit dem absoluten Behälterpfad, und die Zeugenform `assertIn` gegen den ganzen Prompt, die für Blockgrenzen blind ist, drei Register der Lesequellen und Prompt-Blöcke, die ihren Gegenstand nicht kennen, und der AgentGraph, der den vollen Enricher ohne Leser fährt. Dazu am Nachmittag die verstümmelten Stichwörter des Erschließungsmodells und ein Zeuge, der die Aufrufform mitprüft. Dazu **einer durchgestrichen**: die Teilzeichenketten-Zuordnung des Planners ist behoben, bevor der Fall eintrat. **Nachgezählt, nicht addiert: 102 Listeneinträge im Abschnitt *Offen*, davon 12 durchgestrichen** — 102 − 12 = 90. Die Vorschrift steht unten; die Zählung ist in einer Zeile reproduzierbar. - **18.08.2026** — **85 offene Funde**, mechanisch gezählt nach der Vorschrift unten — nachgezählt, nicht addiert: **96 Listeneinträge im Abschnitt *Offen*, davon 11 durchgestrichen**. **Die Zahl 65 vom 16.08. war zu niedrig**, und zwar nicht wegen der seither hinzugekommenen Einträge: Nachgezählt am 18.08. ergibt schon der Bestand vor diesem Tag mehr, als dort stand. Wer die Differenz braucht, zählt selbst — die Vorschrift steht unten, und das Ergebnis ist in einer Zeile reproduzierbar. **Am 18.08.2026 fünf neu** — die Teilzeichenketten-Zuordnung des Planners, die Ja/Nein-Deutung der Torwächter (inzwischen als `ZUSTIMMUNG-GILT-ALS-ABLEHNUNG` mit Kennung geführt), der Diff zwischen veröffentlichtem Bauplan und betriebener Umgebung, und der blinde Fleck der Suite: **0 von 126 Testdateien importieren die Anwendung**. Dazu ein Nachtrag am wackligen Zeugen — wieder namenlos, aber die Bedingung ist neu. - **16. August 2026** — Stand 16. August 2026 mit 65 Funden. **Am 17.08.2026 sind vier Befunde am Charakter-Hash behoben und durchgestrichen**: die Perspektivtrennung des Kerns, die Impuls-Ausnahme der übrigen Profile, die Zeitgewichtung des Adaptiv-Hash und dessen SCAN-Auswahl. Offen bleibt aus dieser Reihe die **gesättigte Salienz**, und sie reicht über den Agenten hinaus. Im Einzelnen: **die Perspektivtrennung des Kern-Hash ist wiederhergestellt** — Gegenstand ist die eigene Seite, und der Träger steht im Material; der Eintrag dazu ist durchgestrichen. **Der schwerste Fund des Vortages betrifft denselben Agenten: Die eigenen Impulse der Figur wurden als Äußerungen des Menschen in sein Profil destilliert** — 95,4 % des gelesenen Materials, behoben am selben Tag. Dabei sind **zwei frühere Einträge dieser Liste als falsch korrigiert** worden; der Korrekturkasten steht bei ihnen. **Zwei weitere der neuen sind noch am selben Tag behoben** (`692a17b`) und stehen durchgestrichen: die Zeitgewichtung, die nur beschriftete, und die Auswahl in SCAN-Reihenfolge. Sechs neu aus der Prüfung des Charakter-Hash gegen KZG und LZG — dazu **die gesättigte Salienz**, die über diesen Agenten hinausreicht: 87 % der `user`- und 99 % der `assistant`-Einträge liegen über 0,90, die Größe rangiert damit nirgends etwas, wo sie gegen eine breiter streuende antritt. Die übrigen: der Kern-Hash, der seit dem 10.08.2026 den Turn-Wortlaut statt des Langzeitgedächtnisses liest, ohne dass §3.1 es sagt; derselbe Text für beide Perspektiven, aus dem eine Anrede an die Figur als Selbstbeschreibung des Menschen zurückkommt; die Zeitgewichtung des Adaptiv-Hash, die nur beschriftet und dabei still verwirft; die 20 KZG-Einträge desselben Profils, die in SCAN-Reihenfolge über drei Wochen streuen statt die jüngsten zu sein; und das Materialgefälle 112 zu 1896 zwischen den beiden Perspektiven desselben Paares. Einer neu aus der Themenanalyse für die Veröffentlichung: die fehlenden Herkunftsmarken an den Beispielen, 9 von 150 Dokumenten. - **10.08.2026** — **64 offene Funde**. Vier neu aus der Prüfung des Charakter-Hash gegen KZG und LZG: der Kern-Hash, der seit dem 10.08.2026 den Turn-Wortlaut statt des Langzeitgedächtnisses liest, ohne dass §3.1 es sagt; derselbe Text für beide Perspektiven, aus dem eine Anrede an die Figur als Selbstbeschreibung des Menschen zurückkommt; die 20 KZG-Einträge des Adaptiv-Hash, die in SCAN-Reihenfolge über drei Wochen streuen statt die jüngsten zu sein; und das Materialgefälle 112 zu 1896 zwischen den beiden Perspektiven desselben Paares. **Die vorige Angabe 45 reproduzierte sich nicht** — dieselbe Zählung ergab vor diesen vier Einträgen **60**; dieselbe Drift, vor der dieser Kopf mehrfach warnt, diesmal über die neun Einträge der Strukturprüfungen und drei aus der Vorsitzung hinaus. Drei neu aus dem Schließen des Planner-Konventions-Punktes: `enricher_prompt` als leere Hülle mit beiden Enden offen — null Deklaranten, null Leser, während die beiden Geschwisterkanäle derselben Generation leben; die Erledigt-Vokabel des Bezeichner-Kriteriums, die *verworfen*, *nie existiert* und *archiviert* nicht kennt und deshalb ein richtiger gewordenes Dokument schlechter zählt; und `AgentInput`, ein Bezeichner, der seit dem 06.05.2026 in einer Konvention steht und **nie existiert hat** — nicht entfallen, nicht umbenannt, sondern ein Entwurfsname, der vier Monate als Bestandsbeschreibung gelesen wurde. - **10.08.2026** — **42 offene Funde**, mechanisch gezählt nach der Vorschrift unten. Neu beim Halten der Magneten-Konvention gegen den Bestand: `entitaet_ids` trägt in 3 von 84 belegten Arrays Dubletten. - **10.08.2026** — **41 offene Funde**, mechanisch gezählt nach der Vorschrift unten. Der Fund vom selben Tag zu `charakter_hash` ist **klassifiziert und umgezogen** — er steht als `CHAR-HASH-PAAR-VERTAUSCHT` in `novaberg-bugs.md`, und die Zeile ist hier entfernt. - **10.08.2026** — **41 offene Funde**, mechanisch gezählt nach der Vorschrift unten. Neu aus der Doku-Vollprüfung: `NEGATIVE_EMOTIONEN` zweimal definiert — abgeleitet acht, handgeschrieben vier —, und die kleinere bedient Riegel 7 der Zustellung. - **10.08.2026** — **40 offene Funde**, mechanisch gezählt nach der Vorschrift unten. Neu aus Chat 143: `initiative` bezeichnet eine Ebene tiefer etwas anderes — die Messung im Zustand, das Bit in den Achsen; und eine Zeile des Haltungsraum-Konzepts, die den Nachzug von Riegel 1 überlebt hatte und erst vom nächsten Auftrag durch dieselbe Datei gefunden wurde. - **10.08.2026** — **38 offene Funde**, mechanisch gezählt nach der Vorschrift unten. Neu aus Chat 142: der AgentGraph, der den eigenen Gedanken weiter auf dem Reiz-Platz bekommt, weil er direkt aufgerufen wird und kein Ereignis hat; der Haltungsstand ohne Zeile im `pipeline_log`; und **zwei Konzepte, die dasselbe Rad zur Zustellzeit lesen und Verschiedenes meinen** — der eine als multiplikativer Faktor mit ausdrücklich „kein Veto", der andere als Riegel. Zwei Einträge sind **behoben**: die fehlende `arousal`-Spalte der Queue und der Modul-Docstring, der sich selbst widersprach. **Die Angabe 24 vom 14.08. war nicht fortgeschrieben** — dieselbe Klasse, vor der dieser Kopf mehrfach warnt. - **14. August 2026** — **24 offene Funde**, mechanisch gezählt als Aufzählungspunkte der Form `- **JJJJ-MM-TT**` im Abschnitt „Offen"; über die ganze Datei ergibt dieselbe Zählung **33**. Neu am 14.08. aus dem Verfasser-Umbau und der Eigenzeit-Messung: die emotionale Gravitation, die auch Novas eigene Gedanken färbt und deshalb vor dem GV-Node die Landschaft mitfärbt; die Zeile `Fragen:` ohne Bedingung, die auf sie zeigt; zwei verschiedene Größen, die beide „Versatz" heißen; die Hypothese, die im Block dreifach steht; der Kopfblock des Urteils, der in 14 von 26 Läufen ausfällt; und zehn Ähnlichkeits-Schwellen, von denen keine nennt, was sie vergleicht. **Die letzten beiden hat die Live-Messung des Umbaus gefunden, nicht der Bau** — und beide sind älter als er: Der Umbau hat sie nur in die Sichtbarkeit gehoben, indem er den Block auf die Impuls-Turns ausdehnte. Zwei Einträge vom selben Tag sind **behoben** — der Auftrag, der viermal auf einen fehlenden Block verwies, und derselbe Auftrag ohne Prüfbedingung und Konstellation. **Der Kopf stand seit der vierten Etappe auf null und ist seither nicht fortgeschrieben worden:** Vor diesem Zug lagen bereits **20** Einträge vom 12. bis 14.08. im Abschnitt, ohne dass die Zahl oben es sagte. - **8. August 2026** — **0 offene Funde**; über die ganze Datei ergab dieselbe Zählung **9**. **Vierte Etappe abgeschlossen, 08.08.2026 — der Abschnitt „Offen" ist leer.** Der letzte Zug nahm die ältesten 31: siebzehn Defekte, neun Stück offene Arbeit, vier Messaussagen und ein Werkzeugdefekt. **Sechs der siebzehn sind derselbe Bauplan** — ein Vorgabewert an einer Stelle, an der ein Ausfall gehört. Zwei der vier Messaussagen wurden von keinem Dokument getragen und stehen jetzt im Rad-Messreihen- und im GV-Strategie-Konzept, statt mit ihrem Eintrag zu verschwinden. - **8. August 2026** — erster Zug: fünf Einträge waren anderswo längst geführt oder behoben, einer ist **widerlegt** und steht mit seiner Gegenmessung im eigenen Abschnitt, einer ist eine Schranke Dritter. **Dabei fiel ein Fehler dieser Liste selbst auf:** Ein Aufzählungspunkt trug **zwei** Funde — einen Fremddefekt und einen zu doppelten Prompt-Formulierungen. Er wurde einmal gezählt und wäre einmal klassifiziert worden; der zweite ist getrennt und steht jetzt als `PROMPT-DOPPELTE-FORMULIERUNG` im Backlog. - **8. August 2026** — einundzwanzig Einträge — acht Defekte, davon **vier derselbe**: Prompt-Blöcke, die etwas über den Nutzer behaupten, was in Wahrheit Novas Zustand ist. Dazu fünf Stück offene Arbeit, drei Defekte der Messwerkzeuge und zwei Messaussagen. **Eine davon wurde nirgends getragen** — dass die Antwortlänge innerhalb derselben Landschaft um mehr als das Zwanzigfache streut, steht jetzt im Haltungsraum-Konzept, statt mit dem Eintrag zu verschwinden. - **8. August 2026** — sechzehn Einträge — drei Defekte an der Grenze zwischen Turn und Oberfläche, einer davon längst behoben; vier Stück offene Arbeit; fünf getragene Messaussagen; und einer, der kein eigener Fund war, sondern **der eingetretene Fall zu einer offenen Entscheidung** — Novas Selbstprofil trug erstmals zwei echte Gegenpol-Paare gleichzeitig voll belegt. Er steht jetzt als Beleg neben der Frage, statt als Beobachtung daneben. - **8. August 2026** — die sechzehn verbliebenen Einträge waren offene Arbeit und stehen als Abschnitt im Backlog. **Vier davon beschreiben denselben Engpass von vier Seiten** — ein serieller Platz, ein Lauf, der ihn über seine Zeitgrenze hält, 230 Aufträge für Agenten, die es nicht gibt, und ein Rückstand von 649 ohne gemessenen Abfluss; wer einen einzeln angeht, misst die Wirkung der anderen drei mit. - **8. August 2026** — acht Einträge waren **Defekte** und haben eine Kennung bekommen, einer war eine getragene Messaussage, einer über `F-AUFGABE-1` bereits übernommen. **Ab hier wird der Fundlisten-Wortlaut in das Register übernommen statt nacherzählt** — er trägt Beleg und Datum bereits; ergänzt werden Kennung, Priorität und die Zeile, an der erkennbar ist, wann der Eintrag geschlossen ist. - **8. August 2026** — fünfter Teil des 08.08.-Blocks: sieben Einträge waren **offene Arbeit** und haben eine ID bekommen — drei Nähte ohne Prüfung, zwei veraltete Zustandsaussagen, zwei Rechnungen ohne Abnehmer. Damit ist der Block vom 08.08. vollständig klassifiziert. Vierter Teil: vier Einträge waren **Defekte** und haben eine ID bekommen — `PERZEPTION-EMOTION-AUSSER-KANON`, `GV-LAENGE-RUNDUNG-ZUR-GERADEN`, `PROMOTION-FENSTER-LAEUFT-AB-STATT-LEER`; der vierte war kein neuer Defekt, sondern die bezifferte Rate zu `RESPONDER-LEERE-ANTWORT-STILL` und steht dort als Nachtrag. **Alle drei neuen sind still:** keiner erzeugt eine Meldung, alle liefern ein Ergebnis, das richtig aussieht. Dritter Teil: zwei Einträge waren **Lessons** — Erkenntnisse, die ihren Wert behalten, nachdem der Defekt weg ist. Der Verlust einer Kalibrier-Persona beim Erproben eines Löschpfads hat eine eigene Datei bekommen, weil er Novaberg-spezifisch ist und erklärt, warum der Korpus fünf Personas trägt. Die zweite — eine fortgeschriebene Bestandszahl driftet — gilt für jedes Projekt und ist deshalb keine Repo-Lesson geworden. Zweiter Teil: sechs Einträge waren Defekte der eigenen **Messwerkzeuge** — ein Rücksetzpfad mit totem Tabellennamen, ein Aufräumschritt, der das Log des gescheiterten Laufs zerstört, eine Auswertung ohne Trägerstreuung, ein Konfigurationswert ohne Wirkung, eine ungelesene Selbstwarnung und eine Zeitdecke, die systematisch die teuersten Items frisst. **Ein Defekt am Messwerkzeug ist teurer als einer im Produkt, weil er sich als Messergebnis tarnt** — das Produkt meldet sich, ein Rig liefert eine Zahl. Sie sind behebbar und gehören trotzdem nicht hierher: Die Rigs liegen außerhalb des Repositoriums, und ein Eintrag ohne Zeiger wäre wertlos. Erster Teil: sechs Einträge waren korrekt gemessene Aussagen ohne Defekt und ohne Aufgabe — die Erregungslage des produktiven Paares, der Radzustand des Basisarms, eine ersetzte Verteilungstabelle, die Langzeitschicht einer frischen Kennung und die Ankerliste der Langzeitsuche. **Vor dem Entfernen wurde je Eintrag geprüft, dass die Aussage anderswo im Bestand getragen wird** — sie stehen in `novaberg-erreichbarkeit_k.md`, `novaberg-kalibrierung_k.md` und `novaberg-graph-rechenkette.md`. Der sechste, die Selbstauskunft eines Urteiler-Modells, war bereits als Regel übernommen. - **8. August 2026** — die **dritte Etappe:** sieben Einträge waren keine Defekte, sondern **ausstehende Entscheidungen** — die dominante Gruppe des Emotionsvektors, die Quelle des Farbtons, die zweiwertige Valenzachse mit ihren drei ungeschriebenen Willkürentscheidungen, `paradox` als Reserve oder Leerstand, die Deutung von „beides stark" auf dem Charakter-Rad, und die Schieflage der Beitragstabelle, die am selben Tag entschieden wurde. **Solange eine Entscheidung aussteht, ist eine Abweichung im Code kein Defekt** — wer sie als Bug einträgt, hat die Entscheidung stillschweigend selbst getroffen. Der Widerspruch zwischen Rad-Prompt und Rad-Geometrie ist dabei in `novaberg-salienz-berechnung_k.md` §5 nachgetragen worden, weil ihn sonst kein Dokument mehr getragen hätte. - **8. August 2026** — die **zweite Etappe:** vierzehn Einträge haben das Repositorium ganz verlassen. Sie beschreiben Fremddefekte, Eigenschaften der Anlage und Schranken Dritter — **nichts davon ist unser Code, und nichts davon ist von uns behebbar.** Ein Eintrag dieser Sorte wird nicht geschlossen, sondern widerlegt: durch eine neue Messung, die zeigt, dass die Schranke gefallen ist. Wer ihn als Aufgabe führt, legt eine an, die nie fertig wird. - **8. August 2026** — die **erste Etappe:** sieben Einträge haben die Liste verlassen — vier behobene Defekte sind als Zeile ins Bug-Register gewandert (`VEKTOR-INTENSITAET-NAMENSMENGE`, `VEKTOR-PLATEAU-OHNE-GRUNDLAGE`, `HALTUNG-NAHT-OHNE-ABBILDUNG`, `CLIENT-EINGABESPERRE-OHNE-RUECKWEG`), einer war dort bereits über `PIX-MIG-7` geführt, und zwei stehen jetzt unter „Widerlegt" samt ihrem noch offenen Rest. - **8. August 2026** — **155 offene Funde** bzw. 161 über die Datei. Drei neu aus der vollständigen Aufzählung des Emotionsvektor-Raums, **zwei davon am selben Tag erledigt**: `spirale` und `eskalation`, die eine Emotion der Gegengruppe als Intensitätsanstieg lesen konnten ✅ · `plateau`, das „kein Verlauf messbar" nicht von einem gemessenen Gleichstand trennte ✅ · und offen die „dominante Gruppe", die in 46,5 % der Bestands-Turns keine Mehrheit ist, sondern die zeitlich letzte Emotion. **Die fortgeschriebene Angabe 158 war keine Zählung dieses Abschnitts, sondern der ganzen Datei** — sechs Punkte derselben Form stehen in „Ohne Gegenstand" und „Umgezogen". Der Kopf hat die Abweichung zweimal als „Differenz von vier" notiert und dabei die eigene Zählvorschrift gegen eine andere Menge gehalten. - **8. August 2026** — **158 offene Funde**, mechanisch gezählt als Aufzählungspunkte der Form `- **JJJJ-MM-TT**` im Abschnitt „Offen". Neu aus der Kanalprüfung des `ConversationState`: `einwandsurteil` als Kanal ohne Leser, und vier Kanäle ohne beidseitigen Vertrag — drei ganz ohne Verkehr, `response` mit vier Schreibern. - **8. August 2026** — neu aus dem Audit der Rechenkette (`novaberg-graph-rechenkette.md`): der Farbton, der Novas Zustand liest und Sätze über den Nutzer schreibt; und eine Cluster-Spalte, die aus einer zweiten Tabelle übersetzt ist, ohne dass eine Prüfung beide zusammenhält. **Die Angabe 151 vom selben Tag reproduziert sich nicht** — dieselbe Zählung ergibt vor diesen zwei Einträgen **147**; die Differenz von vier liegt außerhalb des Abschnitts „Offen", wo sechs Aufzählungspunkte derselben Form stehen. - **8. August 2026** — Chat 132 **151 offene Funde**, mechanisch gezählt als Aufzählungspunkte der Form `- **JJJJ-MM-TT**` im Abschnitt „Offen". Neu aus Chat 132, aus B1 bis B4 des Erreichbarkeits-Konzepts: die Valenzachse, die „positiv" setzt, wo sie nichts findet, in unbekannter Häufigkeit; eine Perzeption, die Emotionen außerhalb des Kanons liefert, eine davon in zwei Schreibweisen; `paradox` als größte Landschaft des Rohraums mit 21,9 % der Sektoren; das produktive Paar zu 80,4 % in hoher Erregung, entgegen der Form, auf die sich das Konzept beruft; die Vektorlänge, die ein Viertel ihrer Nullen an Pythons Rundung zur geraden Zahl verliert; zwei von drei Skip-Auslösern, die Werte nennen, die die Perzeption nie erzeugt; der Basisarm der Validierungsmenge, der zu drei Vierteln ohne destilliertes Charakter-Rad fuhr; eine Verteilungstabelle, die zehn von vierzehn Landschaften führte; und die Angabe 136 vom Vortag, die sich nicht reproduziert — dieselbe Zählung ergibt 142. - **8. August 2026** — Chat 131 (**136 offene Funde** — die Angabe ist nachgezählt widerlegt, siehe den Eintrag vom 08.08.). Neu aus Chat 131: der Verlust einer Kalibrier-Persona beim Erproben eines Löschpfads; die Langzeitschicht, die eine frische Kennung in dreißig Turns nicht erreicht; ein Responder-Kommentar mit der falschen Gedächtnisschicht; die widerlegte Begründung für die drei leeren Profile; das Langzeitgedächtnis als Zufallsprodukt des Promotionsfensters; die Blindtest-Auswertung ohne Trägerstreuung; ein Rücksetzpfad, der auf eine umbenannte Tabelle zeigt; ein Aufräumschritt, der das Log des gescheiterten Laufs zerstört; und die bezifferte Rate der leeren Antwort — ein Turn von 120. - **7. August 2026** — Chat 130 (**127 offene Funde**). Neu aus Chat 130: die LZG-Ankerliste, die bei drei Einträgen gedeckelt und in jedem sechsten Turn leer ist; drei von fünf Charakter-Profilen, die auf dem Korpus der Messreihe leer geblieben sind; eine Quellenangabe in `novaberg-pixie-character-hash.md` §3.3/§3.4, die der Code nicht einlöst; und ein Urteiler-Modell, dessen Selbstauskunft über die eigene Sicherheit in 263 von 263 Fällen dieselbe ist. - **6. August 2026** — Chat 129 (**123 offene Funde**). Neu am 05.08. aus der Untersuchung des Pixie-Stacks: der Auslöser `emotionaler_ausdruck`, der auch bei Freude ein `nachfragen` erzeugt; die Shadow-Queue, die agentenlose Aufträge nicht durch ihre Priorität ruhig hält, sondern durch die Listenreihenfolge; 92 % ausgefallene Heartbeats hinter einem besetzten Slot; zwei Konzepte, die denselben Aufgabennamen in unvereinbaren Rollen führten, ohne voneinander zu wissen; ~~und acht als prüfbar markierte Regeln ohne den Eintrag, den sie erzeugen sollten~~ → am 08.08.2026 aus dieser Liste entfernt, weil der Gegenstand nicht das Produkt ist. Neu am 06.08. aus dem Abstandslauf: eine Vorgabe, die aussieht wie ein Stellrad und nichts stellt; eine Selbstwarnung des Beurteilers, die dreimal ausgegeben und nie ausgewertet wurde; und eine Zeitdecke, die Items kostet, ohne zwischen einem verlorenen Füllturn und einem verlorenen Widerspruchsturn zu unterscheiden. - **6. August 2026** — Chat 128 (**113 offene Funde**). Neu am 04.08. aus dem Bau von Tabelle und Schreibpfad der Bibliothek: **der Engpass am CPU-Modell ist die Warteschlange, nicht das Fenster** — 133 von 135 Sekunden in keiner Rechenphase, mit angehaltenem Pixie 0,05; dazu 29–41 s Ladezeit je Aufruf; der Kontext von **262144 statt 32768** auf dem Hintergrundpfad, den sechs Dokumente falsch führen; die Zwischen-Destillation, die gegen eine achtfach entfernte Grenze komprimiert und an vier von vier Durchläufen scheiterte; der `.py`-Edit, der eine laufende Recherche abbricht; die feste Salienz 0.7 im KZG-Schreibpfad der Recherche; der fehlende Audit-Eintrag des Durchlaufs; die unvollständige Tabellenliste in `novaberg-architecture.md` §10; und `CREATE TABLE IF NOT EXISTS` als stille Grenze zwischen Schemadatei und laufendem Schema. - **3. August 2026** — Chat 126 — **95 offene Funde**, mechanisch gezählt als Aufzählungspunkte der Form `- **JJJJ-MM-TT**` im Abschnitt „Offen". Neu am 03.08. aus der Charakterbildungs-Messreihe: fuenf Eintraege — fremde Biografie, Landschafts-Schlagseite, blockierende Recherche, duenne Magnetfelder am frischen Material, Novas halber Zustandsraum. - **3. August 2026** — am 02.08. aus P10: eine Rollennennung im Synapsen-Konzept und ein Cluster aus dem Vorturn, der zwei Mechanismen zugleich steuert. **Die Angabe 95 vom selben Tag reproduziert sich nicht** — dieselbe Zählung ergibt vor diesen zwei Einträgen 88, und eine dritte Stelle führte parallel 96. Drei Zahlen, eine Datei; genau die Drift, vor der dieser Kopf schon zweimal warnt. - **3. August 2026** — **95 offene Funde**. *Die fortgeschriebene Angabe 82 vom 01.08. reproduziert sich damit nicht* — dieselbe Klasse wie bei der Angabe 59 weiter unten: Eine Zahl, die addiert statt nachgezählt wird, driftet. Neu am 02.08. aus der Vorbereitung der Charakterbildungs-Messreihe: zwei Auftragsarten der Shadow-Queue ohne Agenten; der Rückstand von 649, dessen Abfluss ungemessen ist; die Arbeitsqueues ohne Gegenüber; `charakter_anweisungen` ohne Paar; vier Repo-Dateien mit einer Rolle im Klartext. - **2. August 2026** — **88 offene Funde** — 86 plus zwei aus der Messreihen-Vorbereitung: zwei Auftragsarten der Shadow-Queue ohne Agenten, und der ungemessene Rückstand. - **1. August 2026** — später Abend **82 offene Funde** — 83 minus einer, der noch am selben Tag behoben wurde; 76 plus sieben neue aus Chat 124 — darunter der `llm_lock`, der die GPU schützt und nicht den Turn: der Client hat keinen Rückweg aus der Eingabesperre, wenn die Antwort ausbleibt — die dritte Stufe des Leer-Defekts; ein laufender RechercheAgent blockiert jeden weiteren Pixie-Heartbeat; der Client hat keinen Testlauf, und die Zuordnungsprüfung liegt vollständig in ihm; sowie zwei verschiedene `status`-Werte für dieselbe Bestätigung, beim Zusammenführen vereinheitlicht. - **01.08.2026** — **76 offene Funde**, gezählt am 01.08.2026 als Aufzählungspunkte des Abschnitts „Offen“ — 58 vorgefundene plus achtzehn neue. *Die vorige Angabe 59 reproduziert sich nicht: Dieselbe Zählung ergibt vor den drei neuen Einträgen 58.* Jüngste Einträge: **drei vom 31.07.** aus dem Haltungs-Knoten — eine Sachfrage, die die Landschaft `beichte` bekam; eine Node-Tabelle, die den Verfasser nicht kennt; und ein Graphframework, das eine Sackgasse ohne Meldung kompiliert. - **01.08.2026** — **drei vom 31.07.** aus dem Haltungsraum — eine Beziehungsdynamik, die zwei fast gleiche Anweisungen in denselben Prompt schreibt; ein Rad-Prompt, der gleichzeitig belegte Gegenpole als eigenen Zustand liest, während die Geometrie sie aufhebt; und das Initiative-Rad, das vor derselben Gegenpol-Frage steht wie das Zuwendungs-Rad und dort ungeprüft ist. - **01.08.2026** — **sieben vom 31.07.** aus dem Umbau des Responders — eine Clusterzahl, die zwischen Konzept und Code auseinanderläuft; ein Feld namens laenge, das die Vektorlänge meint; rohe Modellausgabe im Hypothesentext; zwei Blöcke, die einander über dieselbe Beziehung widersprechen; ein Block, der behauptet der Nutzer habe nichts gesagt; und eine Gleitkomma-Kante genau auf einem Grenzwert. - **01.08.2026** — **vier vom 31.07.** aus dem Korpus-Erstlauf und der Neuerhebung der Positions-Kontrolle — ein Golden-File, dessen Aussagekraft am gewählten Bezugsmoment hängt; eine Stichprobengröße, deren Rauschen breiter ist als der Grenzwert, den sie prüft; ein Dezember-Rückfall in der Fremdbibliothek, unerreicht und ungeprüft; und die Feststellung, dass die gesamte Zeitauflösung an einer Tür liegt. - **01.08.2026** — **sechs vom 31.07.** — ein Schema-Feld, das bei abgeschnittener Antwort als erstes fehlt und dann wie „nichts erkannt“ aussieht; eine Zeit-Extraktion, die auch Nicht-Zeitangaben liefert; ein Ausdruck, der um neun Monate danebengreift statt gar nicht zu parsen; eine Panel-Zeile, die sich selbst widerspricht; zwei verwaiste Bilder; und eine Website ohne Versionskontrolle. - **30.07.2026** — gezählt am 30.07.2026 über die Einträge des Abschnitts „Offen". Die vorige Angabe „elf" war nicht nachgezählt. Jüngste Einträge: **drei zu den Charakter-Rädern** — ein gerechneter Wert, der exakt auf dem Spalten-Default landet; eine Streuung, die die Einigkeit dreier Läufe misst und wie eine Verlässlichkeitsangabe aussieht, während die Drift zwischen zwei Erhebungen rund dreißigmal so groß ist; und ein Rad, das im Unterschied zum anderen nur einmal läuft und seine Unsicherheit gar nicht erst erhebt. Bei der Gelegenheit ist der Eintrag vom 29.07. zur leeren Abwendungsseite **widerlegt** worden. - **30.07.2026** — vier zum Recherche-Pfad — fehlender Audit-Eintrag, ununterscheidbarer Suchausfall, ungeprüfte Trefferrelevanz und die Abhängigkeit von Diensten, die automatisierten Verkehr sperren. - **30.07.2026** — **sechs vom 30.07.**, aus der Linter-Einfuehrung und fuenf Zerlegungen: fuenf Codestellen, die eine Form mehrfach hinschreiben statt sie einmal zu benennen; zwei **widerlegte** Befunde der Initiative-Kalibrierung, deren Ursache ein Defekt an der Eingabegrenze war; eine Funktion mit 16 Zweigen, die die Auswahlmethode uebersah; ein Verlustpfad bei abgeschaltetem Pixie; ein stiller Uebersprung samt asymmetrischer Zaehlung; ein defensiver Zweig, der nie erreichbar war. **Aelter und schwer:** der Kalibrier-Korpus besteht zu einem Drittel aus Messturns, und M2 sieht bei langen Texten keinen Themenwechsel