docs/novaberg-fundliste.md
Rama master · réplica de lectura del repositorio original.
# 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 `(?<!\w)…(?!\w)` (Z. 332), und der Unterstrich ist dort ein Wortzeichen: In `ja oder _nein_` und `ja oder __nein__` zählt nur `ja`, das Feld gilt als gelesen (`vorhanden=True`) statt als `mehrdeutig`; ebenso bei `BEWERTUNG` und `QUELLE`. Still — das Urteil gilt als gefällt, obwohl das Feld keine Wahl trifft. Nachgestellt am Code-Tree `3806695` (committet als `a6e46c2`); in den 22 protokollierten Ausfällen seit dem 21.10.2026 0-mal. Wie oft das Modell so auszeichnet, ist nicht gezählt — gelesene Urteile tragen keine Rohantwort im Log. → **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** — **Ein Feld des Kopfblocks, dessen Wert auf der Folgezeile weitergeht, wird als seine erste Zeile gelesen.**~~ `server/graph/einwand.py::_kopf_deuten` liest den Kopfblock zeilenweise (Z. 391), eine Folgezeile ohne Feldnamen fällt weg: Aus `EINWAND: ja oder` mit der Folgezeile `nein — …` wird `ja`, gelesen statt `mehrdeutig`. Die Vorlage des Prompts bricht `EINWAND` selbst um (`kopf_anweisung`, Z. 136–137). Bestand, vom Bau unberührt; nachgestellt am Code-Tree `3806695` (committet als `a6e46c2`); in den 22 protokollierten Ausfällen seit dem 21.10.2026 0-mal. → **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** — **Ein doppeltes Feld im Kopfblock des Verfassers: Die letzte Zeile gewinnt, still.**~~ `server/graph/einwand.py::_kopf_deuten` schreibt jedes Feld in ein Wörterbuch (Z. 394); steht `EINWAND` zweimal mit verschiedenen Werten, gilt die zweite Zeile, ohne Meldung. Bestand; 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** — **Ein zweiter Wert der Menge als gewöhnliches Wort der Erläuterung macht ein Feld des Kopfblocks zum Ausfall `mehrdeutig`.**~~ `server/graph/einwand.py::_aufzaehlung_lesen` zählt jeden Wert als ganzes Wort, gleich wo im Feld: die Modalpartikel in `nein — das ist ja bekannt`, eine verneinte Nennung wie `trifft_zu — nicht abweichend` oder `fakt, keine Haltung` kosten das Urteil, obwohl das erste Wort eine Wahl ist. Laut — die Ausfallzeile nennt `mehrdeutig:<FELD>`. 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(<feld>, "")` 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(<feld>, "") 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 = <Platzhalter>` 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 <Name>`, 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 `<Schlüssel> (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 `- **<Ziffer>` 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 schalte