Ctrl K
ComunidadGuías…

docs/novaberg-backlog-charakter.md

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Novaberg — Backlog: Charakter — Profile, Raeder, Haltung, Emotion, Destillation

**Inhalt:** die offene und abgeschlossene Arbeit dieses Gegenstands, ~~75~~ → 76 Eintraege (06.11.2026: `RAUM-TABELLEN-OHNE-RIEGEL` neu aus der Klassifizierung der Funde vom 25. und 26.10.2026, die Tabelle unten trägt die Zahlen des Findemittels; davor gezaehlt vom Findemittel, hier standen zuletzt 70).
**Stand:** 6. November 2026, 20:43 UTC (`date -u`; `RAUM-TABELLEN-OHNE-RIEGEL` neu). Davor 15. Oktober 2026, 06:54 UTC (`date -u`; `FASZINATION-ZWILLING-ERBT-NICHT`: entschieden, der Anker jedes Trägers kommt aus seinen Qualitäten). Davor 15. Oktober 2026, 01:16 UTC (`date -u`; `FASZINATION-ZWILLING-ERBT-NICHT`: der Zeuge für §12.3 steht als `expectedFailure`). Davor 14. Oktober 2026, 23:11 UTC (`date -u`; `FASZINATION-ZWILLING-ERBT-NICHT` neu: der Zwilling erbt keine Faszination, am Bestand gemessen). Davor 11. Oktober 2026, 15:47 UTC (`FASZINATION-PRAEGUNG` trägt einen lesbaren Zustand). Davor 19. September 2026, 21:27 UTC (Verweise auf das geteilte Bugregister umgestellt). Davor 15. September 2026 (`SYK-B3-VORZEICHENREGEL` neu bewertet: falsche Erfolgsmeldungen am Bestand gemessen, 24 von 928 Antworten; gerechnet wird der Fall seither in der Auswertung des Tribunals, die Regel ist nicht zurückgeholt). Davor 11. September 2026, 07:00 UTC (**die Warteschlange erreicht die gelesenen Traeger** — die Kandidatensuche sortiert zuerst nach Frische; 7 von 9 neuen Profilen gingen an Traeger der laufenden Reihe, vorher 0 von 20). Davor 7. September 2026, 14:19 UTC (**der Leser ist im Betrieb belegt**). Davor 7. September 2026 (**die Faszination hat einen Leser** — `FASZINATION-PRAEGUNG` nachgezogen; zwei Aussagen des Eintrags waren falsch, und die zweite Kontrolle hat die eigene Eichung des neutralen Punkts widerlegt). Davor 6. September 2026, 21:00 UTC (**die Faszination rechnet zum ersten Mal im Turn** — der Engpass war die Laengenschwelle, die 0 von 95 gelesenen Traegern als Kandidat offen hielt; `FASZINATION-PRAEGUNG` nachgezogen, die Sperre des Lesers ist hinfaellig). Davor 6. September 2026, 19:45 UTC (`ZITAT-ENTWERTEN` **abgeschlossen** — der Betriebsbeleg steht: 4 Belege im Zyklus 19:42 entwertet, im gespeicherten Kern ohne Anfuehrungszeichen). Davor 6. September 2026, 19:05 UTC (`ZITAT-ENTWERTEN` **gebaut und gemessen** — 32 von 282 Zitaten an 20 gepinnten Kern-Laeufen entwertet, danach 0 ohne Fundstelle; der Betriebsbeleg steht aus). Davor 6. September 2026, 18:05 UTC (`ZITAT-ENTWERTEN` neu — der Prompt-Weg ist auch fuer die Zitattreue ausgeschieden, gepinnt 18 % → 16 %; was bleibt, ist der Eingriff in den gespeicherten Text). Davor 6. September 2026, 14:35 UTC (`DECKUNG-BRAUCHT-EINEN-ANDEREN-ORT` **am Tag seiner Anlage geschlossen** — die Pruefung sitzt an der Ausgabe und schlaegt an 3 von 20 echten Profilen an). Davor 6. September 2026, 13:40 UTC (`DECKUNG-BRAUCHT-EINEN-ANDEREN-ORT` neu — der Prompt-Weg gegen die Verallgemeinerung ist gemessen und ausgeschlossen, vier Fassungen bei n = 20 ohne Wirkung ueber die Streuung). Davor 5. September 2026, 20:28 UTC (`EI-KANON-FEHLT` neu bewertet — der Ausloeser *Modellwechsel* ist eingetreten, der geforderte Helfer ist gebaut, und der Rest des Eintrags haengt jetzt an einer fehlenden **Wertemenge** statt an einem fehlenden Riegel). Davor 5. September 2026, 14:53 UTC (**die Reihe des Bestandslaufs hat einen Leser** — `tools/fascination_series.py`; dabei fiel `ohne_strang` als stummes Feld der Protokollzeile auf und ist berichtigt). Davor 5. September 2026, 14:19 UTC (**der Laengenfilter ist gemessen und nicht gebaut** — die Eroeffnungsformel traegt, wo die Themen es nicht tun; offen ist die vorgelagerte Frage, ob vorab gefiltert werden soll). Davor 5. September 2026 (**§10 der Faszination ist vollstaendig gebaut** — Anker, sechs Turn-Modulatoren, Verfall je Dimension, Zusammenfuehrung, dazu **§10.3a neu**: der Strangzug als Lage des Traegers zu einer Praegung. Erzeuger im Turn und Bestandslauf im Tageslauf. **Sie rechnet und wirkt nicht** — kein Leser, und kaum Eingabe: nur 7 von 36 gelesenen Knoten passieren den Laengenfilter). Davor 4. September 2026 (**`bindung_roh` blockiert** — die Verstaerkung haengt am falschen Ereignis, drei Kennungen). Davor 3. September 2026, 21:30 UTC (**Vorbedingung 4/5 zur Haelfte erfuellt** — die Qualitaetsseite der abstrakten Schicht ist gebaut und im Bestand (25 Traeger, 150 Kanten); die Werteseite traegt keine Zeile. Der Hauptbefund der Messung ist negativ: die Dominanz kollabiert auf `komplexitaet`). Davor 3. September 2026, 20:35 UTC (`FASZINATION-PRAEGUNG` nachgezogen — die fehlenden negativen Faeden sind **kein offener Punkt**, sondern der Erwartungswert einer zu kleinen Stichprobe; was hilft, ist Laufzeit). Davor 3. September 2026, 19:30 UTC (**Scheibe 5 und 6**, Praegungszug und Einfaerbung; offen bleiben ihre Verbraucher, und die haengen an der abstrakten Schicht). Davor 3. September 2026, 18:57 UTC (Scheibe 5, der Praegungszug). Davor 2. September 2026, 19:40 UTC (Scheibe 3a/b/c und 4 gebaut und im Betrieb belegt; die Faltung ohne Aufrufer ist behoben).
**Findemittel ueber alle Gegenstaende:** [`novaberg-backlog-index.md`](novaberg-backlog-index.md) — es traegt auch die Rangordnung.

**Die Abschnittsueberschriften stammen aus dem ungeteilten Backlog** und sagen, *wann und wobei* ein Eintrag entstanden ist — nicht, welchen Gegenstand er hat. Den sagt die Datei, in der er steht.

| Gegenstand | Datei | Eintraege |
|---|---|---|
| Gedaechtnis | [`novaberg-backlog-gedaechtnis.md`](novaberg-backlog-gedaechtnis.md) | 83 |
| Hintergrund | [`novaberg-backlog-hintergrund.md`](novaberg-backlog-hintergrund.md) | 69 |
| Charakter | [`novaberg-backlog-charakter.md`](novaberg-backlog-charakter.md) | 76 |
| Antwortpfad | [`novaberg-backlog-antwortpfad.md`](novaberg-backlog-antwortpfad.md) | 69 |
| Wissen | [`novaberg-backlog-wissen.md`](novaberg-backlog-wissen.md) | 77 |
| Bauart | [`novaberg-backlog-bauart.md`](novaberg-backlog-bauart.md) | 106 |

---

## Block 06.09.2026, abends — aus der Setzung zum Zitat

Ein Eintrag. Er entsteht daraus, dass **der Prompt-Weg auch fuer die Zitattreue gemessen
ausgeschieden ist** — fuenf Fassungen an einem Tag, keine traegt.

| Kennung | Was offen ist | Band |
|---|---|---|
| `ZITAT-ENTWERTEN` | **Ein unbelegtes Zitat im gespeicherten Profil soll seine Anfuehrungszeichen verlieren.** Setzung des Eigentuemers (`F-ZITAT-1`): *Das Modell darf nichts zitieren, was nicht wirklich gesagt wurde.* Die `ZITATREGEL` in den Prompts fuehrt das aus und **wirkt nicht**: gepinnt gemessen **18 % → 16 %** unbelegte Zitate bei n = 20 je Fassung (ungepinnt hatte sie 24 % → 10 % gezeigt — ein Ziel, das der Betrieb nicht benutzt). Nach `F-PROMPT-1` gilt damit: *Wo ein Verhalten verlaesslich sein muss, wird es in der Struktur erzwungen und nicht im Text.* **Der Weg:** `deckung_beanstanden` erkennt die Stelle bereits; sie zu **entwerten** hiesse, die Anfuehrungszeichen fallen zu lassen und den Satz stehen — aus dem angeblichen Zitat wird die Deutung, die es ist. **Zwei Dinge sind vorher zu entscheiden:** ob der erzeugte Text ueberhaupt angefasst wird (ein Eingriff, keine Implementierung), und wie mit der Falsch-Positiv-Rate umgegangen wird — die Normalisierung faengt Formatierung ab, aber eine Paraphrase bleibt ununterscheidbar von einer Erfindung. **Was fertig waere:** Kein gespeichertes Profil traegt Anfuehrungszeichen um Text, der im Material nicht vorkommt — nachgemessen ueber mindestens 20 Laeufe **gegen das gepinnte Ziel**. | [CHA] ✅ **umgesetzt am 06.09.2026 mit benanntem Rest.** `zitate_entwerten` sitzt in `_llm_call` hinter der Meldung und nimmt einem Beleg **ohne Fundstelle** die Anfuehrungszeichen; der Satz bleibt. **Die beiden vorher zu entscheidenden Fragen sind beantwortet:** Der Eigentuemer hat den Eingriff in den erzeugten Text freigegeben, und die Falsch-Positiv-Frage ist durch den Zuschnitt entschaerft — entwertet wird **nur** die Klasse *ohne Fundstelle*, der Einzelbeleg behaelt seine Zeichen, weil sein Wortlaut im Material steht. `[gemessen 06.09.2026]` an **20 Kern-Destillationen gegen das gepinnte Ziel**: **32 von 282 Zitaten entwertet** in 14 von 20 Laeufen, danach **0** ohne Fundstelle; kein gedecktes Zitat verloren (250 = 282 − 32) und 64 Zeichen angefasst, genau zwei je Beleg. 18 Zeugen, Suite **3220**, harte Wand 0. Werkzeuge: `labor/2026-09-06_entwertung_wirkung.py`, `labor/2026-09-06_entwertung_ergebnis.md`. **Das Schliesskriterium ist am 06.09.2026, 19:42 UTC im Betrieb erfuellt.** Ein Messturn setzte `hash_dirty`, der Heartbeat destillierte, und im **gespeicherten** Kern stehen die vier gemeldeten Belege ohne Anfuehrungszeichen, die uebrigen 20 Zitate mit — 4 von 24 ungedeckt, 17 %. Damit ist auch `19_WERKZEUGE/riegel-im-echten-pfad.md` erfuellt. **Und ein zweiter Rest, von der zweiten Kontrolle gefunden:** Die Reichweite der Entwertung ist die von `ZITAT` und endet bei **60 Zeichen** — an den 70 gespeicherten Profiltexten liegen **117 von 125** Anfuehrungspaaren darin, die uebrigen **8 sind ganze zitierte Saetze im Kern** und bleiben unberuehrt. Ob die Grenze dort richtig liegt, ist eine Entscheidung (Fundliste 06.09.). Der Defekt daneben ist `PROFIL-VERALLGEMEINERT-EINZELBELEG` und bleibt offen |

---

## Block 06.09.2026 — aus der Deckungsmessung am Profil-Prompt

Ein Eintrag. Er entsteht daraus, dass **der naheliegende Weg gemessen und ausgeschlossen** ist: Die Verallgemeinerung im Profil laesst sich ueber den Prompt-Wortlaut nicht daempfen.

| Kennung | Was offen ist | Band |
|---|---|---|
| `DECKUNG-BRAUCHT-EINEN-ANDEREN-ORT` | **Die Verallgemeinerung im Charakter-Profil braucht einen Ort ausserhalb des Prompt-Wortlauts, und welcher es ist, ist eine Absichtsfrage.** Der Befund steht als `PROFIL-VERALLGEMEINERT-EINZELBELEG`: Das Beziehungsprofil nennt eine Anrede *durchgehend*, die in **1 von 20** Begegnungen des Prompt-Materials steht (und in 4 von 1662 Wissensdateien). `[gemessen]` 06.09.2026 am Fernmodell, vier Prompt-Fassungen gegen dieselben 20 Begegnungen: das Mass benennen, das Zaehlen verlangen, an den Ausschnitt binden, das Wort *durchgehend* aus dem Satz zur Pronomenwahl nehmen. **Bei n = 20 bewegt keine die Zahl ueber ihre Streuung** — Nulllinie **8 bis 10 von 20 Laeufen** mit Dauerwort, **11 Dauerwoerter** in beiden Runden; die n=5-Vorzeichen waren Rauschen (`labor/2026-09-06_deckung_ergebnis.md`). **Zwei Wege bleiben, und sie schliessen einander nicht aus:** die **Ausgabe pruefen** — ein Dauerwort, dessen Bezugswort im Material selten vorkommt, wird beanstandet, was eine Zaehlung im Erzeuger und eine Entscheidung ueber die Folge braucht (verwerfen, neu anfordern, kennzeichnen) — oder das **Material aendern**, denn 20 Begegnungen sind der Ausschnitt, ueber den verallgemeinert wird. **Was fertig waere:** Der Anteil der Laeufe mit einem ungedeckten Dauerwort liegt belegbar unter der heutigen Nulllinie, gemessen mit **mindestens 20 Laeufen je Fassung**. | [CHA] ✅ **abgeschlossen am 06.09.2026** — **der Eigentuemer hat den Ort entschieden: die Ausgabe wird geprueft.** `deckung_beanstanden` haelt jeden woertlichen Beleg des Profils gegen den Prompt und meldet zwei Klassen — *Beleg ohne Fundstelle* (0 Vorkommen) und *Einzelbeleg als Dauerzug* (1 Vorkommen im selben Satz wie ein Dauerwort). Gemeldet, nicht verworfen. `[gemessen]` 20 echte Beziehungsprofile: **3 Laeufe mit Beanstandung**, 3 von 50 Zitaten, alle aus der zweiten Klasse; ein Vorlauf 4 von 20. 10 Zeugen, Gegenprobe 5 rot, Suite 3191. **Zwei Grenzen stehen am Defekt:** ein Dauerwort ohne woertlichen Beleg ist nicht pruefbar, und der Anschlag im vollen Betriebspfad ist noch nicht belegt. Werkzeug: `labor/2026-09-06_beanstandung_messung.py`. Angelegt und geschlossen am selben Tag |

---

## Block 01.09.2026 — aus der isolierten Perzeptions-Messung

Ein Eintrag. Er ist **eine Reparatur am Prompt, kein Rechenfehler** — und er steht unter Charakter, weil die Sektoren bestimmen, welche Emotion ein Faden traegt.

| Kennung | Was offen ist | Band |
|---|---|---|
| `FALTUNG-OHNE-PERIODISCHEN-LAUF` | **`ausschlag_aktuell` altert in der Spalte nicht mit.** Seit dem 01.09.2026 fuehrt `ausschlag_aktuell_nachfuehren` den Wert nach, **wenn eine Beruehrung entsteht** — der Verfall **zwischen** zwei Beruehrungen erreicht die Spalte nicht. Ein Faden, den seit Wochen niemand angesprochen hat, steht darin so hoch wie am Tag seiner letzten Auffrischung. `[gemessen]` 01.09.2026, 15:05 UTC: Faden 353 traegt eine Beruehrung von 14:00 und steht weiter auf `ausschlag_absolut`, weil er nach dem Bau des Aufrufers nicht erneut getroffen wurde; 327 und 354 wurden getroffen und stehen gefaltet. **Zwei Wege, und sie schliessen einander nicht aus:** ein periodischer Lauf ueber den Bestand (Pixie), oder die Faltung beim Lesen — der Leser existiert noch nicht, weil Straenge und Praegungszug nicht gebaut sind. **Kein Datenverlust:** Die Rechnung ist von Grund auf wiederholbar (Wertekonvention Regel 3 und 4), ein Nachlauf holt jeden Wert. **Was fertig waere:** Kein Faden traegt einen `ausschlag_aktuell`, der aelter ist als ein Tag — nachgewiesen an einem Bestand mit Faeden verschiedenen Alters. | [CHA] ✅ **abgeschlossen am 01.09.2026, 15:20 UTC** — `alle_faeden_nachfuehren` faltet den ganzen Bestand und laeuft als **vierter Schritt im Tageslauf** des `SynapsenDecayAgent`; kein neuer Platz im Heartbeat. **Kein `gefaltet_am` und damit kein Schemawechsel:** Die Zusicherung ist die Vollstaendigkeit — der Lauf meldet `gefaltet` **und** `gesamt`, und sind sie gleich, traegt kein Faden einen aelteren Wert als den Lauf. `[gemessen]` 15:19 UTC ueber den echten Bestand: **4 von 4**; Faden 328 mit null Beruehrungen bei Anteil 0,9951, Faden 354 mit drei bei 0,9986. 8 Zeugen, Gegenprobe 2/2. Angelegt am selben Tag, geschlossen am selben Tag |
| `PERZEPTION-SEKTOR-4-AUF-GEGENPOL` | **Zwei von acht Plutchik-Sektoren werden systematisch verfehlt, einer davon auf seinen eigenen Gegenpol.** `[gemessen]` 31.08.2026, `perceive()` isoliert gerufen — ohne Graph, ohne Session-Kontext, ohne Antwortgenerierung —, acht Reize entlang des Rads, **drei Durchgaenge wortgleich**: 6 von 8 getroffen, `neutral` 0 von 24 Mal. Bei `temperature = 0.05` ist der Klassifikator deterministisch; ein Durchlauf genuegt fuer diese Frage, und die Wiederholung hat es belegt statt es anzunehmen. **Die zwei Fehlgriffe sind reproduzierbar und gerichtet:** Ein Reiz auf **Sektor 4 (Ueberraschung)** — *Tardigraden ueberleben das Vakuum ohne jede Anpassung* — liefert `neugierig` und damit **Sektor 8, den Gegenpol** (Ueberraschung ↔ Neugier, Plutchik-Antagonist). Ein Reiz auf **Sektor 7 (Aerger)** — *ueber Jahre manipulierte Bilder in Fachartikeln* — liefert `frustration` und damit den **Nachbarn Sektor 6**. **Warum das mehr ist als eine Ungenauigkeit:** Auf den Sektoren bauen das Sektor-Histogramm eines Strangs (Konzept §7.8) und die **acht Verfallsfaktoren** (§7.9) — beide Scheibe 3 der Praegungsschicht, beide noch nicht gebaut. Ein Faden, der den Gegenpol seines Sektors traegt, verfaellt nach der falschen Kurve, und ein Strang verdichtet auf der falschen Achse. **Ein aelterer Befund faellt dabei:** Eine Vollturn-Reihe vom 31.08.2026 hatte 4 von 8 Sektoren und dreimal `neutral` ergeben. Beides entsteht **hinter** der Perzeption — sie selbst sagt nie `neutral`, und sie trifft 6. **Der Reparaturort ist der Prompt, nicht die Rechnung**; `perzeption.task.txt` bietet alle 16+1 Kategorien an, der Klassifikator waehlt zwei davon nie richtig. **Geschlossen, wenn** eine Reihe ueber acht gezielte Reize 8 von 8 trifft — oder wenn belegt ist, dass die beiden Sektoren mit diesem Modell nicht trennbar sind und die Verfallsfaktoren darauf eingerichtet werden. | [CHA] ungebaendert — ⬜ **offen** — angelegt am 01.09.2026. **Kein Defekt im Sinne des Bug-Registers:** Kein Dokument sagt, welche Sektoren die Perzeption treffen muss; es fehlt ein Soll, nicht seine Einhaltung. Werkzeug: `labor/2026-08-31_perzeption_isoliert.py`. |

---

## Block 31.08.2026 — aus der Reizstaerke-Kalibrierung

Ein Eintrag. Er ist **eine fehlende Messgrundlage, kein fehlender Bau** — drei Schwellen stehen und wirken, aber keine ist an echtem Betrieb kalibriert.

| Kennung | Was offen ist | Band |
|---|---|---|
| `SCHWELLEN-AUF-TESTMATERIAL-KALIBRIERT` | **Die drei am 31.08.2026 gesetzten Schwellen stehen auf einer Grundlage, die zur Haelfte aus Werkzeug besteht.** Es gibt genau **zwei Sessions** im System: `meister:nova` mit 17 Turns und `sektorprobe:nova` mit 16 — und die zweite ist die Messreihe vom 31.08.2026, acht konstruierte Wissenschaftsreize. **16 der 33 Verlaufszustaende, gegen die `DELEGATION_EFFEKTIVWERT_SCHWELLE` auf 0,20 gerechnet wurde, sind damit Testmaterial.** Genau die Klasse, die am 31.08.2026 schon einmal zugeschlagen hat: Die erste Torschwelle der Praegung stand auf 0,90, weil der Korpus zu erheblichem Teil aus frueheren Messturns bestand. **Der Abstand ist bezifferbar:** Gegen den nutzerseitigen Bestand gerechnet (178 nicht-neutrale Knoten) laegen **36 %** ueber dem Delegations-Kipppunkt, gegen die 33 Zustaende sind es 12 %. Die beiden messen Verschiedenes — kumulierte Verlaeufe gegen einzelne Turns —, aber der Abstand zeigt, wie duenn die Zahl steht. **Zweitens die Praegungs-Torquote von 21,1 %:** Sie kombiniert zwei **ungepaarte** Bestaende (3677 `bewertung`-Zeilen fuer die Salienz, 1718 nicht-neutrale `lzg_knoten` fuer das Arousal) unter der Annahme der **Unabhaengigkeit** — zu keinem Turn liegen beide Groessen gemeinsam vor. Korrelieren sie, und das ist plausibel, liegt der echte Durchlass hoeher. Die Histogramme sind ausserdem 0,1-Buckets; die Quoten sind Stufen, keine Punkte. **Drittens die Erregungswerte selbst:** Auch ohne die neutralen Knoten tragen **51,7 %** exakt `0.5` — den Vorgabewert der `Wahrnehmung`-Dataclass, den Rueckfall von `_arousal_lesen` und den von `_arousal_to_float`. Ohne Herkunftsfeld ist gemessen von gefallen nicht zu trennen (siehe `novaberg-fundliste.md`, 31.08.2026). **Was gebraucht wird:** einige Wochen echter Gespraeche **ohne Testreihen im Korpus**, danach dieselben drei Rechnungen noch einmal — Delegations-Ausloesungen je hundert Turns, Torzeilen mit Urteil aus dem `pipeline_log` (das Tor protokolliert jede Pruefung, auch die abgelehnte), und Uebernahmen der Erinnerungs-Injektion. **Geschlossen, wenn** die drei Quoten auf einem Korpus gemessen sind, der keine Messturns enthaelt, und die Schwellen entweder bestaetigt oder mit dieser Grundlage nachgezogen sind. | [CHA] ungebaendert — ⬜ **offen** — angelegt am 31.08.2026. **Kein Defekt:** Jede der drei Schwellen ist besser begruendet als die, die sie ersetzt, und jede hat seit dem 31.08.2026 einen Zeugen auf ihre **Wirkung** (`tests/test_schwellen_nach_reizstaerke.py`). Was fehlt, ist der Beleg am Gegenstand statt am Werkzeug. **Am 01.09.2026 schwerer geworden:** Die Zugkurve des Zielsogs (`SALIENZ_ZUG_G0`/`_W`) steht in ihrer dritten Fassung auf **vier** Messwerten aus **demselben** Paar — `scheibe2probe`, dessen Reize fuer die Messung geschrieben wurden. Damit haengt eine vierte Groesse an diesem Eintrag, und es ist die einzige, deren Grundlage **ausschliesslich** Testmaterial ist. |

---

## Block 30.08.2026 — aus dem Faszinationskonzept

Ein Eintrag. Er ist **kein Defekt**, sondern ein fertig durchgerechnetes Konzept, das auf sieben Vorbedingungen wartet — und er steht unter Charakter, weil sein Kern eine **dritte Charakterschicht** ist, nicht eine Groesse der Kognition.

| Kennung | Was offen ist | Band |
|---|---|---|
| `FASZINATION-PRAEGUNG` | **Faszination als Wert [0..1] auf einem Traeger, gebildet aus Bindung x Qualitaet x Praegung x Turn-Modulatoren** — Konzept liegt vor in `novaberg-thinking-faszination_k.md` (v0.7, sieben Fassungen, jede hat eine These der vorigen widerlegt). Der Wert ist **valenzblind**: Kriegsgeschichte und Gartenkraeuter sind derselbe Mechanismus mit unterschiedlicher Haerte. Traeger ist **nicht die Entitaet**, sondern ein Merkmalsprofil auf sechs gesetzten Qualitaetsdimensionen — der Zwilling erbt die Faszination, nicht die Zuwendung. **Mit enthalten ist die Praegungsschicht (Faeden und Straenge)** als dritte Charakterschicht neben dem Zuwendungs-Rad (relational) und den Werte-Knoten (normativ): Sie ist **thematisch** und heute nicht vorhanden. Ein Faden ist ein einschneidendes, embeddingbezogenes Ereignis; wiederkehrende Emotion-Ausgang-Sequenzen verdichten zu Straengen. Die Literatur nennt das Self-Defining Memory (Singer & Salovey 1993) — die Deckung wurde **nach** der Entwicklung gesucht und ist deshalb Konvergenz, kein Beleg. **Acht Vorbedingungen, sechs davon offen** — gemessen am 30.08.2026: (1) MS-Welle Block 2 ff. *in Arbeit* · (2) Synapsen P4, Knoten/Kanten/Spreading *blockiert durch (1)* · (3) `KZG-SALIENZ-NEUBAU` *queued — das Faden-Tor steht darauf, Vorbedingung und nicht Nachbar* · (4) **abstrakte Schicht** mit Qualitaets- und Werte-Knoten samt Typ-Diskriminator *offen; `lzg_knoten_haltung` traegt **null Zeilen**, `praemisse_knoten_id` wartet auf dasselbe Stueck* · (5) ~~`EMGRAV-SCHWELLE-TOT`~~ **erfuellt — behoben am 30.08.2026**, die Gravitationsschwelle lehnt wieder ab (0,71 Aktivierungen je Turn statt 2,00); ohne sie waeren Praegungen unsterblich geworden · (6) `charakter_rad_messung` mit stabiler Reihe *die Reihe laeuft seit dem 12.08.2026, 68 Erhebungen; die **zeitliche** Stabilitaet ist die offene Frage, nicht die Wiederholstreuung aus `RAD-STABILITAET-UNGEMESSEN`* · (7) ~~`PIXIE_AKTIV` steht auf `False`~~ **erfuellt — im laufenden Container steht `PIXIE_AKTIV=true`**; nur der Code-Default in `config.py:360` ist `false` · (8) ~~Haltungsraum bekommt einen Leser *offen*~~ **erfuellt — gemessen am 04.09.2026**: Responder und Verfasser lesen `state["haltung"]` beide, seit dem 12.08.2026 (`HALTUNG-OHNE-LESER` behoben). Der in §11 beschriebene Faszinations-Leser waere damit baubar; er wird **nicht** gebaut, solange die Faszination ueberall 0 ist — er wuerde den Umfangsterm loeschen. **Ohne den Typ-Diskriminator sickert die Valenz von der Werte- auf die Qualitaetsseite** und Kriegsgeschichte truege weniger Faszination als Kraeuter — der Fehler waere fest im Schema verbaut. | [CHA] 🟠 **teilweise gebaut** — angelegt am 30.08.2026, **Scheibe 1 gebaut am 31.08.2026**: Faeden entstehen im Betrieb (`praegung_faden`, Formkurve, Tor als Node). **Scheibe 2 gebaut am 01.09.2026**: scharfes Segment-Embedding, Zuordnung Reaktivierung → Faden ueber Naehe 0,62 (Nulllinie ueber 19.900 Knotenpaare gemessen), Faltung von `ausschlag_aktuell` gegen die gerechnete Tabelle des Konzepts (gebaut und bezeugt, **ohne Aufrufer**). **Nur der thematische Andockweg** — der strukturelle braucht die abstrakte Schicht (Vorbedingung 4). **Im Betrieb belegt am 01.09.2026**: 10 Torpruefungen, 4 Faeden, Ausschlag 0,26 bis 1,00, die Auffrischung laeuft mit je 2 Kandidaten. **Beruehrungen 4** (vierte Reihe, 01.09.2026, 14:00 UTC) — Naehen 0,682 · 0,684 · 0,739 · 0,682; der Reiz war **vorher ausgerechnet** statt geraten (Vorhersage 2/1/2, gemessen 1/1/2). Alle vier nahen Eintraege tragen `beobachter = assistant`. ~~**Die Faltung wirkt trotzdem nicht**~~ → **am 01.09.2026 behoben** (`FALTUNG-OHNE-AUFRUFER`), dazu der periodische Lauf als vierter Schritt des Tageslaufs. Zwei weitere Defekte dabei behoben: `PROMOTION-NUR-EIN-PAAR` und die Beschraenkung der Auffrischung auf LZG. **Scheibe 3 gebaut am 01.09.2026** — a) Zuordnung Faden → Strang ueber ein fortgeschriebenes Zentroid (`PRAEGUNG_STRANG_NAEHE` 0,62), Nachzug als fuenfter Schritt des Tageslaufs; b) das Sektor-Histogramm, weil ein Mittelwert die Ambivalenz loeschen wuerde; c) die Richtung aus vier Regeln, **nicht gespeichert** — ein Strang ist Bestand, das Charakter-Rad ist Zustand. **Scheibe 4 gebaut am 02.09.2026** — die Ladung aus `mittel(salienz)`, `mittel(|valenz|)` und `n/(n+4)`, mal Praesenz; die Formel loest die des Konzepts (Anlaesse, Spitze, Spanne) nach Vorgabe des Eigentuemers ab, und `EMOTION_VALENZ` gibt der Valenz 16 Zwischenstufen statt ±1. **Im Betrieb belegt am 02.09.2026:** zwei Straenge, Ladungen **0,66148** (n=4) und **0,51612** (n=1), beide Richtungen *Annaeherung* ueber verschiedene Regeln; der zweite Strang entstand **ungeplant in einem echten Turn** (Faden 1282, `meister`). Die Beweiskette steht in `novaberg-node-praegung.md` §6a. ~~**Offen bleiben der Praegungszug** (§10.3 — er hat seit heute beide Groessen, es fehlen `PRAEG_HUB` und ein Leser) **und der sektorabhaengige Verfall.**~~ → **Scheibe 5 gebaut am 03.09.2026**: der Praegungszug rechnet je Turn `1,0 + PRAEGUNG_ZUG_HUB · max_j(sim_j · gewicht_j · ladung_j)` und protokolliert als `praegung_zug`. Der Hub ist aus der Spanne **abgeleitet** (`F-NAHT-1`), nicht gesetzt; **Vorgabe des Eigentuemers**: Vermeidung 0, `unbestimmt` 0,5, Annaeherung 1,0. `tests/test_praegung_zug.py` (15 Zeugen). `[gemessen]` ueber alle fuenf Faeden als Reiz: **1,3087 bis 1,3487**, Kreuzprobe **1,0693**. **Scheibe 6 am selben Tag** — die **Einfaerbung**: dieselbe Faltung mit `t x sektor_faktor`, negative Sektoren 1,5, siebter Schritt des Tageslaufs; 11 Zeugen. `[gemessen]` **groesster Abstand 0,000000 bei 5 von 5** — kein Faden des Bestands ist negativ. **Offen bleiben die Verbraucher**: die Faszination selbst (§10.6) mit Merkmalszug, Bindung und den sechs Turn-Modulatoren — keiner davon gebaut, alle hinter dem Traeger und damit hinter der abstrakten Schicht (Vorbedingung 4, `lzg_knoten_haltung` **0 von 3317** Knoten, gezaehlt am 03.09.2026) — dazu Ziele, LZG-Erinnerungen und EI-Calc als Leser der Einfaerbung (§8). **Und eine Frage, die als offen aussah, ist geschlossen** (03.09.2026, 20:35 UTC): Dass die Schicht keine negativen Faeden traegt, ist **kein Befund** — Novas negatives Register existiert (35 von 2825 Knoten im echten Paar, 1,24 %), das Tor gibt es erst seit dem 31.08.2026, und bei 22 Gelegenheiten seither liegt der **Erwartungswert bei 0,27**. Fuer einen einzigen negativen Faden braucht es im Erwartungswert rund **80 Turns**, und er muss zusaetzlich beide Torschwellen reissen. **Was hier hilft, ist Laufzeit und kein Umbau** — vier Bauteile (Einfaerbung, bimodales Histogramm, Regel 4 der Richtung, das `unbestimmt`-Gewicht) warten auf dieselbe Eingabe und sind bis dahin bezeugt und ungemessen. **Und am 03.09.2026, 21:30 UTC kam die abstrakte Schicht dazu — die Vorbedingung, die alles Weitere blockierte, ist zur Haelfte erfuellt.** `abstrakt_knoten` traegt den Typ-Diskriminator `art` und die sechs gesetzten Qualitaeten, `traeger_qualitaet` die **vorzeichenlose** Kante; Erzeuger ist der achte Schritt des Tageslaufs (ein Modellaufruf je Traeger, gedeckelt auf 20), Leser ist `merkmalszug` (§10.1). **Sie liegen in einer eigenen Tabelle statt in `lzg_knoten`** — 24 Lesestellen in 13 Modulen, 22 davon nach Kriterien; der Umzug kostete nichts, weil `lzg_knoten_haltung` 0 Zeilen traegt und `praemisse_knoten_id` nie benutzt wurde. `[gemessen]` 25 von 29 Traegern profiliert, 150 Kanten, 6,5–8,1 s je Traeger. **Der Hauptbefund ist negativ und bleibt offen: 23 von 25 dominant `komplexitaet`**, vier der sechs Dimensionen an keinem Traeger die staerkste — gegen §6.2. Die Textlaenge ist als Ursache **ausgeschlossen** (vier kurze Proben); zwei Erklaerungen stehen noch, und der Zugriff, der sie trennt, ist benannt: dieselben Knoten maschinell **und** von Hand, Zeile fuer Zeile. **Zweite Kontrolle, 21:38 UTC — der Betrieb statt der Zeugen:** `profil_lauf` selbst gegen den Bestand gefahren (bis dahin nur gegen Mocks bezeugt) — **3 versucht, 3 profiliert, 0 gescheitert**, Buchfuehrung geht auf, Bestand **28 Traeger / 168 Kanten**. **Der Betriebsbeleg ueber den Tageslauf steht aus** — der laeuft taeglich gegen 19:58 UTC und lief zuletzt vor dem Bau. **Und `bindung_roh` (§10.2) ist am 04.09.2026 an der Eingabe gescheitert, nicht an der Rechnung.** `wiederkehr` verlangt *verschiedene Tage, an denen der Traeger einen Turn beruehrt hat*. Der Verlauf steht im `pipeline_log` (14.947 `reinforcement`-Zeilen ueber 34 Tage) — **aber er zaehlt Wiederholung statt Wiederkehr**: Ueber verschiedene Turns gezaehlt fallen die Traeger mit Wiederkehr >= 2 von **1.250 auf 106**, das Mittel von 2,64 auf **1,04**. Ursache sind drei Defekte vom selben Tag (`KZG-EINTRAG-BLEIBT-NACH-PROMOTION`, `KZG-THEMA-VERSTAERKT-NACHBARN`, `VERSTAERKUNG-OHNE-VERWENDUNG`) und die neue Regel `novaberg-memory-synapsen_k.md` §7.1a. **`bindung_roh` bleibt blockiert, bis die Verstaerkung an der Verwendung haengt** — und dann braucht es Laufzeit, weil die Zaehlung bei null beginnt. ~~**Was jetzt noch fehlt:** … Von neun Faktoren sind **zwei** gebaut.~~ → **Am 05.09.2026 ist §10 vollstaendig gebaut.** `bindung_roh` (§10.2, Saettigung statt Min-Max, `eigenimpuls` darf fehlen), die sechs Turn-Modulatoren (§10.5, jede Tabelle vollstaendig gegen ihren Kanon), der Verfall je Dimension (§10.4, `ungewissheit` ueber Beruehrungen, die uebrigen ueber die Zeit), die Zusammenfuehrung (§10.6) — und **§10.3a neu: der Strangzug**, die Lage des **Traegers** zu einer Praegung, die es im Konzept nicht gab. Dazu ein **Erzeuger im Turn** und ein **Bestandslauf** als neunter Schritt des Tageslaufs. 60 Zeugen, Suite 3061. **`bindung_roh` war nicht blockiert, sondern falsch gefragt:** Es zaehlt nicht die aufgeblaehte `haeufigkeit`, sondern verschiedene Turns aus der Bruecke — die Zahlen beginnen dort bei null, und was hilft, ist Laufzeit. **Entschieden am 05.09.2026 vom Eigentuemer:** Lesen zaehlt **nicht** als Beruehrung — Faszination ist die Buendelung dessen, was durch Salienz und Valenz schon gepraegt wurde. **Was jetzt fehlt:** die **Werteseite** der abstrakten Schicht (null Zeilen), Entitaeten und Themen als Traeger, der **Laengenfilter** (nur 7 von 36 gelesenen Knoten passieren ihn — der Rest sind Sprechakt-Vermerke; **am 05.09.2026 gemessen und nicht gebaut**: Die Themen trennen nicht — bestes haeufiges Thema 29,2 % bei 106 Vorkommen —, die **Eroeffnungsformel** schon: Frageform 0 von 115 lang, Einsichtsformel 56,7 % von 409. Der Zeichenschnitt kostet **177 Einsichten** unter 400 Zeichen. Dabei die vorgelagerte Frage aufgeworfen, **ob ueberhaupt vorab gefiltert werden soll**: 49 von 50 Traegern schlagen voll aus, **keine gemessene Null im Bestand**, und der Deckel von 20 Profilen je Lauf daempft ohnehin. Drei Wege benannt in `novaberg-memory-qualitaetsprofil.md` §4a/§4b, keiner entschieden) und ein **Leser**: Die Faszination rechnet und protokolliert, sie wirkt nicht. · **06.09.2026: der Erzeuger hat eine Spur, die ihn rufen laesst.** Er stand seit dem 03.09. als achter Schritt im Tageslauf und hat dort **nie einen Traeger profiliert** — zwei Laeufe, beide `0 von 20`, `SpurVerletzungError`, weil die `cpu`-Spur das Sprachmodell verriegelt und ein Profil einen Modellaufruf kostet `[gemessen 06.09.2026]`. Ausgezogen nach `agents/qualitaet_profil/` (taeglich, `llm`-Spur); im Betrieb **20 von 20** gegen vorher 0 von 20, Bestand **72 Traeger / 432 Kanten**, 328 Kandidaten offen. **Damit laeuft die Voraussetzung des Strangs zum ersten Mal von selbst** — ohne Profil kein Merkmalszug, ohne Merkmalszug keine Faszination  **06.09.2026, 21:00 UTC — die Faszination rechnet zum ersten Mal im Turn, und der Satz oben *„er wird nicht gebaut, solange die Faszination ueberall 0 ist“* ist damit ueberholt.** Der Engpass war weder der Leser noch die Auswahl: Von **95** je gelesenen Knoten standen **0** als Kandidat des Profil-Erzeugers offen — 18 passierten beide Filter, und alle 18 trugen laengst ein Profil. Die Warteschlange enthielt keinen Traeger, den der Lesepfad im Turn anbietet. **Die Laenge trennt die Klassen nicht:** Sachaussagen liegen bei **271** Zeichen im Mittel, Sprechakt-Vermerke bei **281**; die Schwelle 400 liess 8 Vermerke durch und 1 Sachaussage. `QUALITAET_LAENGE_MIN` steht seither auf **100**, die inhaltliche Ablehnung liegt beim Modell (Nullprofil wird geschrieben, der Traeger faellt danach aus der Auswahl). Warteschlange 0 → 55 → **35** nach einem Lauf, Bestand **92 Traeger / 552 Kanten** (davor 72/432), **0 von 20** neuen Profilen sind Nullprofile. `[gemessen 06.09.2026]` `werte {"6982": 0.5725}` statt `{}` — der erste Wert, den ein Turn je getragen hat. **Der Leser aus §11 ist damit baubar und seine Sperre hinfaellig**; offen bleiben zwei der drei gelesenen Traeger (zwei Laeufe) und `DESTILLAT-SUBJEKT-SCHABLONE` als unberuehrte Wurzel. · **07.09.2026: der Leser ist gebaut — und zwei Aussagen dieses Eintrags waren falsch.** (1) Der beschriebene Ersatz *„`wissbegier x Bindung` statt `wissbegier`"* zielte auf den **Umfangsterm**; den gibt es seit dem 08.08.2026 nicht mehr, die Zelle ist mit Begruendung gestrichen. `wissbegier` traegt `fragen 0.40` und `draengen 0.20`, und beide werden jetzt moduliert. (2) *„er wuerde den Umfangsterm loeschen"* setzt eine rohe Multiplikation voraus; gebaut ist ein **Abbildungsfaktor um 1,0** (`F-NAHT-1`), bei dem ein leerer Wert neutral wirkt statt zu loeschen. **Dritter Befund, neu:** Der Haltungsraum steht **sieben Knoten vor** dem Praegungsknoten — die volle Turn-Faszination erreicht keinen Leser der Haltung, und vorziehen geht nicht (das Faden-Tor braucht die Salienz). Verwendet wird die **Traegerseite**, Maximum ueber die gelesenen Knoten. **Und die zweite Kontrolle hat die eigene Setzung widerlegt:** neutraler Punkt 0,50, geeicht am Median der *Turn*-Faszination statt der Traegerseite — `[gemessen 07.09.2026]` ueber 25 echte Turns waeren **12 von 15** gedaempft worden. Auf **0,36** korrigiert (Median der richtigen Groesse), danach 6 daempfend / 9 hebend. Suite **3250**. **Im Betrieb belegt 07.09.2026, 14:19:25 UTC**: echter Turn, 3 gelesene Traeger / 1 mit Profil, Faszination 0,5176 → Faktor 1,0985; dasselbe Rad mit und ohne ergibt `fragen` 0,5837 → **0,6207** und **exakt 0** auf `umfang`, `naehe`, `waerme`. Zwei Anlaeufe davor brachen am Anbieter-Rate-Limit ab. **Offen bleibt die Frage, ob sich Novas Antworten dadurch aendern** (Praezedenzfall `MASSBLOCK-IM-BETRIEB-UNGEMESSEN`). · **11.09.2026: die Warteschlange erreicht die gelesenen Traeger.** `[gemessen ueber 363 Turns]` Die Faszination meldete in **74,1 %** der Faelle `werte: {}`; von 410 je gelesenen Traegern hatten **376 kein Profil**. Die Ursache ist dreigeteilt — von 42 Traegern einer Messreihe 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**. Seither entscheidet die **Frische** (`QUALITAET_FRISCHE_TAGE` = 7) als erster Schluessel vor der Gesamtlesespur. **Betriebsbeleg:** ein angestossener Lauf erzeugte 9 Profile, **7 davon fuer Traeger der laufenden Reihe (78 %)** — vor der Aenderung 0 von 20. **Nicht behoben:** Die Sortierung aendert die Reihenfolge, nicht die Rate; 14 der 60 gelesenen Traeger fallen weiter unter die Laengenschwelle, 14 unter die Wiederkehr. ⬜ **offen** — nachgesehen am 11.10.2026: Die Rechnung steht, das Merkmal ist nicht abgeschlossen (Featureliste, Zeile *Faszination*: 🟠). |

**Eine Entscheidung des Meisters steht davor und gehoert nicht ins Bauen.** `novaberg-thinking-opinion_k.md` §9 hat fuer seinen Fall *grob zuerst, Zerlegung spaeter* gewaehlt, ausdruecklich um nicht auf drei Fundamente zu warten. **Der Zwilling-Test sagt das Gegenteil:** Ohne die abstrakte Schicht generalisiert nichts, und beide Groessen bleiben an Objekte genagelt, die sie nicht meinen. Wird fuer die abstrakte Schicht zuerst entschieden, **zieht `opinion_k` §9 mit** — die Entscheidung faellt also einmal fuer beide. Der Grund, sie nicht nebenbei zu treffen: Eine themengefuehrte Faszination **saehe in den Logs aus wie eine funktionierende**, und das ist die Fehlerklasse mit fuenf dokumentierten Faellen.

---

## Block 27.08.2026 — aus dem Temperaturwechsel

Ein Eintrag. Er ist die **Folge** einer Messung, nicht ihr Gegenstand — und er steht hier, weil er sonst nur in einer Festlegung stuende, die gerade ruht.

| Kennung | Was offen ist | Band |
|---|---|---|
| `RAD-LAEUFE-BEI-DETERMINISTISCHER-ABLEITUNG` | **Beide Charakter-Raeder werden dreimal erhoben, obwohl die drei Laeufe seit dem 26.08.2026 zeichengleich sind.** Der Knoten `charakter_hash` steht auf `temperature = 0.0`; nachgemessen am 26.08.2026 liefern drei Rad-Laeufe auf demselben Eingang **1,2977 · 1,2977 · 1,2977**, Spanne **0,0000**. `F-RAD-2` verlangt die Mehrfacherhebung mit Median — die Regel ist dadurch nicht verletzt, sondern **gegenstandslos** geworden und traegt seit dem 26.08.2026 ihre Bedingung: *gilt, solange die Ableitung streut*. **Was offen ist, ist die Umstellung des Bestands:** `ZUWENDUNG_RAD_LAEUFE` und `INITIATIVE_RAD_LAEUFE` stehen auf 3 und kosten je Erhebung vier ueberfluessige Modellaufrufe — bei einem Rad-Lauf von rund 28 s Median sind das rund **112 s je Erhebung, zweimal taeglich**. **Warum es kein Nebenzug war:** Eine Konstante zu senken, weil eine Messung sie gerade ueberfluessig macht, ist dieselbe Entscheidung wie das Loeschen der Festlegung — sie gehoert mit ihrer Begruendung an eine Stelle, an der jemand sie beim naechsten Temperaturwechsel wiederfindet. **Geschlossen, wenn** die Lauf-Zahlen der Ableitung folgen: 1 bei deterministischem Knoten, 3 sobald die Temperatur wieder steigt — und der Zusammenhang steht im Code, nicht nur im Register. | [CHA] ungebaendert — ⬜ **offen** — angelegt am 27.08.2026. Reine Ersparnis, kein Defekt: Der gespeicherte Wert ist richtig, er wird nur dreimal gerechnet. |

---


## Block 26.08.2026 — aus dem Umbau der Kern-Auswahl

Ein Eintrag. Er ist **eine fehlende Messung, keine fehlende Bauarbeit** — das Gebaute steht, nur sein Beleg ist nicht zu fuehren.

| Kennung | Was offen ist | Band |
|---|---|---|
| `KERNVERGLEICH-KONTROLLE-STEHT-STILL` | **Das Schliesskriterium von `KERNHASH-TRAEGT-KEINE-PERSON` ist mit dem heutigen Bestand nicht messbar.** Es lautet: Die Kerne derselben Figur muessen einander messbar staerker aehneln als die Kerne verschiedener Menschen — dieselbe Rechnung, dieselbe Kontrolle. **Die Kontrolle bewegt sich aber nicht mehr:** Die sechs Vergleichspaare (`sarah`, `mehmet`, `hartmut`, `leon`, `konrad`, `falle`) stammen aus Korpus-Laeufer-Dialogen mit rund **30 Begegnungen**; sie liegen **unter** dem Budget von 80 000 Zeichen, ihre Auswahl aendert sich durch die Schichtung also gar nicht. Nur `meister` mit 223 Begegnungen liegt darueber. **Ein Vorher-Nachher gegen eine unbewegte Kontrolle belegt nichts** — der Umbau kann sich am 26.08.2026 nicht messen lassen, obwohl er laeuft und obwohl die Ersatzgroesse (Bindung an das juengste Themenband, 28,4 % → 10,8 %) auf beiden Seiten und in beiden Laeufen in dieselbe Richtung zeigt. **Zwei Wege stehen offen, und beide sind eigene Auftraege:** (a) laengere Vergleichskorpora — der Korpus-Laeufer erzeugt je Figur rund 30 Begegnungen, gebraucht werden mehr als 80 000 Zeichen, also grob das Vierfache · (b) eine **Messreihe ueber die Zeit** statt eines Vergleichs ueber Figuren: derselbe Kern in Abstaenden erhoben, und die Frage ist dann nicht *„aehneln sich sieben Profile"*, sondern *„bleibt eines ueber Wochen dasselbe"*. **Weg (b) misst naeher an der Absicht** — §3.1 verspricht ein *dauerhaftes* Wesen, und Dauer ist eine Groesse ueber die Zeit, nicht ueber Gespraechspartner. → **Die Vorbedingung von Weg (b) ist am 26.08.2026 erfuellt.** Eine Drift-Reihe braucht eine Nulllinie, und die steht jetzt: Fuenf Destillationen auf festgehaltenem Material teilen paarweise nur **27–32 %** ihres Inhaltswortschatzes (`labor/2026-08-26_kern_rauschgrenze.py`, Konzept §3.1c). **Jede Aehnlichkeit unter 27 % ist damit Rauschen, und die Decke liegt bei rund 32 %, nicht bei 100 %** — eine Drift-Reihe ist ab jetzt lesbar. → **Und Weg (b) laeuft seit dem 26.08.2026.** Ein Sammler nimmt alle drei Stunden mit, was Pixie ohnehin destilliert und sonst ueberschreibt (`labor/2026-08-26_kern_drift_sammeln.py`, Zeitplan in der `crontab` des Betreibers, Daten in `labor/messreihen/kern_drift.jsonl`); die Auswertung (`..._auswerten.py`) vergleicht die Ueberdeckung **innerhalb** eines Tages — reines Rauschen — mit der **zwischen** Tagen, wo die Veraenderung des Materials dazukommt. **Kein zusaetzlicher Modellaufruf.** Lesbar wird die Reihe, sobald zwei Tage mit je mindestens zwei Fassungen vorliegen; belastbar erst ueber Wochen. **Weg (a) — laengere Vergleichskorpora — bleibt davon unberuehrt offen**, und nur er beantwortet die Frage nach der *Person*: Die Drift-Reihe sagt, ob etwas bleibt, nicht ob das Bleibende jemanden beschreibt. **Geschlossen, wenn** eine der beiden Reihen vorliegt und die Rechnung aus dem Defekteintrag damit ein Ergebnis hat — gleich welches. | [CHA] ungebaendert — ⬜ **offen** — angelegt am 26.08.2026. **Solange dieser Eintrag offen ist, bleibt `KERNHASH-TRAEGT-KEINE-PERSON` offen und die Ampel rot** — nicht weil der Umbau fehlt, sondern weil sein Beleg fehlt. |

---


## Block 25.08.2026 — aus der Vermessung des Kern-Hash

Ein Eintrag. Er ist **keine Bauarbeit, sondern eine offene Absicht** — und er blockiert die Bauarbeit ausdruecklich, bis sie steht.

| Kennung | Was offen ist | Band |
|---|---|---|
| `KERNAUSWAHL-KRITERIUM-OFFEN` | **Welche Turns in die wachsende Auswahl des Kern-Hash kommen, ist nicht entschieden.** Am 25.08.2026 ist entschieden, dass die **Grundlage** fortgeschrieben wird und nicht der Text (`novaberg-pixie-character-hash.md` §3.1a) — der Kern bleibt eine frische Destillation, sein Material wird eine wachsende Auswahl rohen Wortlauts ueber die ganze Historie statt der 40 neuesten Turns. **Das Kriterium dieser Auswahl fehlt, und die drei naheliegenden fallen aus:** `gewicht_absolut` ist eine Eigenschaft der Langzeit-Knoten und existiert fuer Rohturns nicht · `salienz x zeitgewicht` (§4b) ordnet nach **Aktualitaet**, also nach genau der Groesse, die hier das Problem ist · *„die N neuesten"* ist der heutige Zustand. **Zweite offene Haelfte:** waechst die Auswahl unbegrenzt — dann waechst der Prompt mit — oder ist sie gedeckelt, dann entscheidet das Verdraengungskriterium dieselbe Frage noch einmal, nur spaeter und unsichtbarer. **Geschlossen, wenn** das Kriterium samt Deckelung im Konzept steht und begruendet ist, warum es nicht nach Aktualitaet ordnet. | [CHA] ungebaendert — ✅ **abgeschlossen am 26.08.2026** — angelegt am 25.08.2026. **Der Riegel galt einen Tag:** Solange dieser Eintrag offen ist, wird `KERNHASH-TRAEGT-KEINE-PERSON` nicht gebaut — ein Umbau ohne Kriterium ersetzt ein unbegruendetes durch ein anderes und misst hinterher denselben Wert. → ✅ **Geschlossen am 26.08.2026 — das Kriterium steht** (`novaberg-pixie-character-hash.md` §3.1a): **festes Zeichenbudget beim Vierfachen des heutigen, darin zeitlich geschichtet.** Nicht die ganze Historie — sie traegt heute 165 138 Zeichen auf der Seite der Figur und waechst weiter. **Drei Kandidaten sind durch Messung ausgeschieden:** `gewicht_absolut` ueber `verbindung` (erreichbar — 221 von 223 Turns, 159 mit LZG-Knoten — aber Korrelation **−0,716** gegen die Zeit, und im juengsten Zeitblock faellt die Streuung auf **0,27**: die Ankerstaerke ist ueberwiegend Reifung) · die Schichtung als **Haupthebel** (bei gleichem Zeichenbudget nur **+8,0 %** Wortschatz statt der zunaechst gemessenen +73,4 % — der Rest war mehr Text) · und die Kostenannahme gegen ein groesseres Budget (**261 s** fuer eine volle Destillation, gemessen, statt der behaupteten anderthalb Stunden). **Der Riegel auf `KERNHASH-TRAEGT-KEINE-PERSON` ist damit aufgehoben.** |

---


## Block 14.08.2026 — aus der Eigenzeit-Messung

> **Geteilter Abschnitt.** Seine Eintraege liegen in mehreren Kategorien; hier stehen die von **Charakter**. Ueberschrift und Text stehen in jeder empfangenden Datei.

Drei Einträge. Der erste ist ein Zeiger auf ein Konzept und **keine Wiederholung seines Inhalts** — die sechs Bauteile stehen dort mit ZIEL, TEST, MESSUNG und Gegenprobe; hier steht nur, dass sie offen sind und in welcher Reihenfolge.

| Kennung | Was offen ist | Band |
|---|---|---|
| `PRUEFFIGUR-DISTANZ-090` | Der Zuwendungs-Riegel (Bauteil D) steht bei 0,25 und trennt im Bestand sauber — **aber der Bestand enthält in der Richtung *sie → Mensch* keine Figur zwischen `distanz` 0,60 und 1,00**, also das Band, in dem der Zug schwach wird. Eine angelegte Prüffigur bei 0,90 entscheidet, ob die Trennung hält. Kosten: eine Kennung, ein Rad, ein Lauf von `haltung_naehe_verteilung`. | [CHA] ungebändert — ⬜ **offen** — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden. |

---


## Block 20.08.2026 — aus der Klassifikation der Fundliste

**47 Eintraege sind aus `novaberg-fundliste.md` hierher gewandert** und haben eine stabile ID bekommen. Sie sind offene Arbeit: abschliessbar, in unserem Code, und mit einer Antwort auf die Prueffrage *welche Arbeit waere fertig, wenn der Eintrag geschlossen wird*.

> **Der Umzug uebertraegt den Wortlaut, er prueft ihn nicht.** Jeder Befund ist die Diagnose seines Tages; das Datum steht an jedem Eintrag. Die Pflicht, ihn vor der Umsetzung **und vor der Rangvergabe** gegen den heutigen Code zu halten, gilt unveraendert — ein erledigter Eintrag an der Spitze verstellt die Sicht auf alles darunter, und er tut es lautlos.

**Die Zeilen `Was fertig waere` und `Prioritaet` sind neu** und stammen nicht aus der Fundliste. Die Prioritaet ist eine erste Einschaetzung aus dem Wortlaut, **kein Band** — ein Band wird gegen den Code vergeben.

---


#### VERLAUF-REPRODUZIERT-EIGENE-WENDUNGEN — niemand bremst das

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen, unbelegt — nachgesehen am 25.08.2026. Die Beobachtung stammt aus einer Reihe stuendlicher Laeufe und ist seither nicht wiederholt worden.

**Befund (14.08.2026), aus der Fundliste uebernommen.** **Der Verlauf reproduziert seine eigenen Wendungen, und niemand bremst das.** Vierzehn stündliche Impulse eines Tages: fünf begannen wortgleich mit *„Du hast den Anker geworfen. Indem du diesen Block …"*, weitere sieben mit einer Variante desselben Baumusters. Der Mechanismus ist geschlossen: Jeder Beitrag wandert in die Session, der nächste Prompt trägt ihn, das Muster wird bestätigt. Gemessen am Verfasser-Prompt desselben Tages: **22.545 Zeichen Verlauf aus 18 eigenen Beiträgen gegen 1.195 Zeichen Auftrag**; beim Responder ist das Verhältnis besser, aber derselbe Verlauf steht dort ebenfalls. Der Regieblock schreibt seit Chat 114 ausdrücklich dagegen an (*„löse dich von seiner Art zu sprechen"*) — gegen fünf wortgleiche Belege hat er nicht getragen. **Zu klären ist nicht, ob der Verlauf hineingehört, sondern wieviel davon:** Der Verfasser braucht ihn für den Anschluss, der Responder bekommt den Anschluss bereits fertig als `[INHALT]`.

**Was fertig waere:** Die Wiederholung eigener Wendungen ist gemessen und gebremst.

**Prioritaet:** mittel


#### CHARAKTER-BESCHAEDIGT-INHALT — niemand prueft es

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen, unbelegt — nachgesehen am 25.08.2026. Ohne Messturn mit einer foermlichen Figur ist nichts zu entscheiden.

**Befund (13.08.2026), aus der Fundliste uebernommen.** **Der Charakter kann den Inhalt beschädigen, und niemand prüft es.** Eine Figur mit förmlichem Stil schreibt Zahlen aus — und dabei wurde aus 1400 Lichtjahren dreimal *„vierzehntausend"*. Gemessen über 27 Läufe: In der knappsten Landschaft schrieb dieselbe Figur 6 Zahlen aus und verfälschte 3 von 3 Läufen; von drei Inhaltsmarken des Verfassers kamen dort nur 1,0 korrekt an, während dieselbe Figur in einer Landschaft ohne Ausschreib-Zwang 3,0 von 3 lieferte. **Der Verfasser liefert die Fakten, der Responder formt sie — und die Umformung ist heute ungeprüft.** Die Marken sind maschinell prüfbar, solange sie als Ziffern im Inhalt stehen.

**Was fertig waere:** Eine Pruefung haelt den Inhalt gegen die Charakterfaerbung.

**Prioritaet:** hoch


#### BEITRAGSTABELLE-SCHLIESST-KOMBINATION-AUS — treu und distanziert geht nicht

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die Beitragstabelle laesst die Kombination unveraendert nicht zu.

**Befund (13.08.2026), aus der Fundliste uebernommen.** **Ein treuer, aufmerksamer Diener kann nicht distanziert sein — die Beitragstabelle lässt es nicht zu.** `treue` trägt `naehe +0,20`, `aufmerksamkeit` ebenfalls `+0,20`, `wohlwollen` `+0,10`; zusammen +0,45 bei hoher Ausprägung, gegen `distanz −0,50`. Eine Figur, die pflichtbewusst, verlässlich und aufmerksam **und** höflich distanziert ist, landet im `feuerwerk` bei `naehe 0,82` — praktisch auf dem Grundwert der Landschaft. Gemessen: Unter dieser Haltung wurde ein solcher Charakter dreimal von drei von einem blinden Prüfer als Nova gelesen. **Es ist dieselbe Verrechnung, die `novaberg-haltungsraum_k.md` §3.2 für Misstrauen gegen Wohlwollen ausdrücklich verbietet** — dort wurde sie am 11.08. behoben, hier steht sie unbemerkt ein zweites Mal. Die Frage dahinter ist konzeptionell: Trägt `treue` Nähe, oder trägt sie Verlässlichkeit? Ein Butler ist der Gegenbeweis.

**Was fertig waere:** Die Beitragstabelle laesst jede fachlich moegliche Kombination zu.

**Prioritaet:** mittel


## 0c. Aus der Fundliste klassifiziert — Chat 133 (08.08.2026)

Sieben Einträge der Fundliste waren offene Arbeit: abschließbar, in unserem Code, und mit einer Antwort auf die Prüffrage *welche Arbeit wäre fertig, wenn der Eintrag geschlossen wird*. Drei davon sind Nähte ohne Prüfung, zwei sind Aussagen über den Zustand, die veraltet sind, und zwei sind Rechnungen ohne Abnehmer.


#### KOPPLUNG-FRAGENSPALTE-UNGEPRUEFT — eine Tabelle ist aus einer zweiten übersetzt, und nichts hält sie zusammen

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Der verlangte Zeuge, der beide Tabellen gegeneinander haelt, ist nicht dazugekommen.

Die Spalte `fragen` in `CLUSTER_GRUNDWERT` (`server/ei/haltung.py`) ist keine eigene Setzung, sondern eine Übersetzung von `CLUSTER_FRAGEN` (`server/ei/dreischicht.py`): „Häufig, begeistert" wird zu 0,90, „Keine" zu 0,00. Der Kommentar sagt es — *„Wer dort etwas ändert, ändert hier mit"* —, aber **kein Test erzwingt die Kopplung**, und die beiden Tabellen stehen in verschiedenen Modulen mit verschiedenen Wertetypen: Text gegen Zahl.

Eine Änderung an der Fragefrequenz einer Landschaft schlägt damit auf die Prompt-Seite durch und auf die Haltungsrechnung nicht. Dieselbe Naht trägt beide Enden der Dreischicht: `CLUSTER_FRAGEN` geht in den GV-Prompt und in den Sprachstil-Block des Responders, `CLUSTER_GRUNDWERT` in die fünf Verhaltensgrößen.

**Was fertig wäre:** ein Test, der beide Tabellen gegeneinander hält — Textstufe zu Zahlenwert, über alle vierzehn Landschaften. Der bestehende `test_die_fragenspalte_folgt_dem_bestand` prüft nur die Null-Richtung.

**Priorität:** mittel. Der Bestand ist heute stimmig; der Defekt entsteht bei der nächsten Änderung und ist dann still.


#### PROFILE-LEER-URSACHE-UNBEKANNT — die bisherige Begründung ist am Bestand widerlegt

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen, unbelegt — nachgesehen am 25.08.2026. Die Ursache ist nicht bestimmt worden.

**Der Erstbefund vom 06.08.2026, aus dem dieser Eintrag entstand:** Gemessen an `charakter_hash` tragen für alle sechs Personas und in **beiden** Richtungen `kern_hash`, `intentions_profil` und `emotions_profil` null Zeichen; gefüllt sind allein `adaptive_hash` (KZG) und `beziehungsprofil` (KZG). Die damals notierte Ursache — alle drei leeren lesen `lzg_knoten`, und eine frische Persona hat kein Langzeitgedächtnis — ist zwei Tage später am Bestand widerlegt worden; sie steht hier, weil sie erklärt, warum zwei Monate lang niemand weitergesucht hat.

Backlog und Chronik führen als Grund für die drei leeren Profile, alle drei läsen `lzg_knoten` „und eine frische Persona hat kein Langzeitgedächtnis". Am Bestand gemessen: **`konrad` trägt 82 Knoten, `leon` 38** — beide entstanden während ihrer Bögen am 02.08.2026; die übrigen vier tragen keinen einzigen.

Die Begründung stimmt für vier von sechs Personas und stand als **allgemeine** Erklärung da. Die Profile waren leer, aber die Ursache ist damit unbekannt und braucht eine eigene Messung.

> **Die Form ist die teure:** eine plausible Erklärung, die zwei Monate lang niemand gegen den Bestand geprüft hat, weil sie zu allem passte, was man sah.

**Was fertig wäre:** die Ursache für die beiden Personas **mit** Langzeitgedächtnis bestimmen. Erster Ort zum Nachsehen ist `PROMOTION-FENSTER-LAEUFT-AB-STATT-LEER` in `novaberg-bugs-archiv-hintergrund.md` — dort steht, warum der Knotenstand einer Persona ausgewürfelt ist.

**Priorität:** mittel. Betrifft die Aussagekraft jeder Charakterbildungs-Messung.


### Block 31.07. — fünf Einträge (08.08.2026)

Vier Doku- und Namensfunde, einer davon eine offene Prüfung am Initiative-Rad.


#### INITIATIVE-RAD-GEGENPOL-UNGEPRUEFT

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen, unbelegt — nachgesehen am 25.08.2026. Die Frage nach dem Gegenpol ist nicht gemessen worden.

**Befund (2026-07-31).** Das **Initiative-Rad** steht vor derselben Frage wie das Zuwendungs-Rad, und sie ist dort ungeprüft: Seine zehn Speichen (`INITIATIVE_ZUG_HOCH` / `INITIATIVE_ZUG_RUNTER`) stehen in der Reihenfolge ihrer Aufzählung, nicht in einer Gegenpol-Anordnung. Solange nur der Skalar gerechnet wird, ist das folgenlos; sobald aus ihnen ein Punkt gebildet wird, entscheidet die Ordnung, welche zwei Eigenschaften einander auslöschen. `F-RAD-1` gilt heute nur für das Zuwendungs-Rad.

**Was fertig waere.** Es ist geprueft, ob die zehn Speichen des Initiative-Rades eine Gegenpol-Anordnung tragen — und wenn ja, haelt ein Test sie wie bei den Charakter-Raedern.

**Prioritaet:** mittel.


### Block 01.08. — vier Einträge (08.08.2026)


#### RAD-STABILITAET-UNGEMESSEN

**Kategorie:** [CHA] CHARAKTER — zweites Vorkommen dieser Kennung.

**Zustand:** abgeschlossen — der Eintrag traegt seine Messung vom 11.08.2026 selbst, und `F-RAD-2` (drei Laeufe, Median) ist gebaut. Nachgesehen am 25.08.2026: `speichenweise_mediane` steht im Charakter-Agenten. **Achtung: dieselbe Kennung steht ein zweites Mal in der Rangordnung** — zwei Ueberschriften auf einen Schluessel.

**Befund (2026-08-01).** Das **Zuwendungs-Rad wird einmal erhoben**, ohne Median und ohne Streuungsmaß — anders als das Initiative-Rad, das dreimal läuft und den Median nimmt. Solange seine Schwankung nicht miterhoben wird, ist an keinem daraus abgeleiteten Wert erkennbar, ob eine Änderung Bewegung im Charakter oder Streuung des Verfahrens ist. (Verschärft den Fund vom 30.07. zur fehlenden Unsicherheit desselben Rades: die Schwankung ist jetzt beziffert.)

**Was fertig waere.** Das Zuwendungs-Rad wird wie das Initiative-Rad mehrfach erhoben, mit Median und Streuungsmass.

**Band A** (Rangordnung, Reihe 2) — und **vor** jeder Kalibrierung der Beitragsverhaeltnisse — wer gegen eine Groesse justiert, deren eigene Streuung er nicht kennt, justiert gegen Rauschen.

---


### Block 05.–02.08. — sechzehn Einträge (08.08.2026)

Der Befund steht im Wortlaut, in dem er notiert wurde; ergänzt sind Kennung, Priorität und die Zeile, an der erkennbar ist, wann der Eintrag geschlossen ist.

**Vier davon gehören zusammen und ergeben erst zusammen ein Bild.** `PIXIE-EIN-SLOT-BLOCKIERT-ALLES`, `RECHERCHE-RETRY-BLOCKIERT-QUEUE`, `AUFTRAGSARTEN-OHNE-AGENTEN` und `SHADOW-QUEUE-RUECKSTAND-UNGEMESSEN` beschreiben denselben Engpass von vier Seiten: Ein serieller Platz, ein Lauf, der ihn über seine Zeitgrenze hinaus hält und danach mit vollem Anspruch zurückkehrt, 230 Aufträge für Agenten, die es nicht gibt, und ein Rückstand von 649, dessen Abfluss niemand gemessen hat. **Wer einen davon einzeln angeht, misst die Wirkung der anderen drei mit.**

> #### Der Engpass ist am 16.08.2026 vermessen worden — die Zahlen stehen hier, die Einträge bleiben offen
>
> Anlass war `RECHERCHE-ZWISCHENDESTILLATION-OHNE-GRUND`, und die Regel *„wer einen angeht, misst die anderen drei mit"* hat sich bestätigt. Über 39 h Laufzeit und 24 h Logfenster:
>
> ```
> Der Platz          LLM-Spur: 239 Laeufe, 3376 uebersprungene Heartbeats
>                    -> zu rund 93 % besetzt
>                    213 der 239 Laeufe (89 %) gingen an `recherche`,
>                    19 an die Charakter-Destillation (Reihe 1)
>
> Der Rueckstand     583 aktive recherche-Auftraege, aeltester vom 27.07.
>                    189 vertiefen aktiv, 45 nachfragen
>
> Der Abfluss        70 Ablagen in der Bibliothek je 24 h, davon
>                    50 `fehlschlag` und 20 mit verwertbarem Ergebnis
>
> Der Verfall        270 der 583 (46 %) fallen binnen 17 Tagen unter die
>                    Schwelle; 14 davon binnen 2 bis 6 Tagen
> ```
>
> **`SHADOW-QUEUE-RUECKSTAND-UNGEMESSEN` hat damit seine Zahl** — der Abfluss beträgt rund **20 verwertbare Ergebnisse am Tag**. Der Eintrag bleibt trotzdem offen: Gemessen ist ein Tag, und die Frage nach dem Verhältnis von Zulauf, Abfluss und Verfall über die Zeit braucht eine Reihe, keinen Punkt. **Der Zulauf schwankt stark** (26 am 15.08., 76 am 14.08., 103 am 13.08.) und hängt selbst am Erkenntniszyklus, der denselben Platz braucht — Zulauf und Abfluss sind also nicht unabhängig.
>
> **`PIXIE-EIN-SLOT-BLOCKIERT-ALLES` hat seine Zahl ebenfalls:** 3376 übersprungene Heartbeats mit der Meldung *„maximum number of running instances reached"*. Die Zwei-Spuren-Trennung vom 09.08. wirkt — sie trennt Rechnung von Sprache, aber **innerhalb** der LLM-Spur konkurrieren Recherche und Charakter-Destillation weiter um einen Platz, und die Recherche nimmt neun von zehn. Das ist die Trennung nach Latenz eine Ebene tiefer als bisher gedacht: Sie ist zwischen den Spuren gebaut und innerhalb der LLM-Spur nicht vorhanden.
>
> **`RECHERCHE-RETRY-BLOCKIERT-QUEUE` ist in seinem Kern erklärt und zur Hälfte behoben.** *„Ein Lauf, der ihn über seine Zeitgrenze hinaus hält und danach mit vollem Anspruch zurückkehrt"* — die Zeitgrenze war die geerbte Frist von 300 s, und der Lauf hielt den Platz danach weiter, weil eine Frist nur das Warten beendet, nicht die Ausführung. Seit dem 16.08. trägt die Aufrufstelle 1200 s (`F-FRIST-1`). **Nicht behoben ist der Rückkehr-Teil:** Der Auftrag kommt mit unverändertem Anspruch zurück und verliert nur einen Versuch von dreien.
>
> **Und ein fünfter Aspekt kam hinzu, den keiner der vier nannte:** ~~Der Fehlversuchspfad löscht **hart**~~ und wählt dabei nach *hoher* Salienz aus — ~~die mittlere `salienz_roh` steigt monoton mit dem Versuchszähler (0,867 · 0,947 · 0,990)~~. Er steht in der Fundliste.
>
> **Am 23.08.2026 zur Hälfte erledigt und einmal widerlegt** (`FEHLVERSUCHSPFAD-LOESCHT-HART`): Der Pfad legt still statt zu löschen, mit eigener Spalte `grund`. Die **Auswahl** nach hoher Salienz ist unverändert. Und die Kurve, die den Befund trug, ist heute nicht mehr reproduzierbar — nachgemessen 213 Aufträge bei null Versuchen, 3 bei einem, keiner darüber.

**Zwei weitere hängen an derselben Zahl:** `KONTEXT-32768-IN-SECHS-DOKUMENTEN` und `RECHERCHE-ZWISCHENDESTILLATION-OHNE-GRUND`. Der zweite ist eine Folge des ersten — ein Verarbeitungsschritt, der verlustbehaftet gegen eine Grenze komprimiert, die achtmal weiter weg ist als angenommen.


#### GRAVITATION-CLUSTER-AUS-VORTURN-UNGEPRUEFT

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen, unbelegt — nachgesehen am 25.08.2026. Nicht gemessen.

**Befund (2026-08-02).** **Der Cluster, aus dem die Wahrnehmungs-Gravitation ihren Faktor nimmt, stand bei zwei aufeinanderfolgenden Astronomie-Turns auf `schlachtfeld`** (Faktor 0.05, der niedrigste). Er stammt aus `gv:detail:{user_id}:{character_id}`, also aus dem Vorturn — ob die GV-Einstufung selbst zutraf oder der Schlüssel alt war, ist nicht geprüft. Wirkt auf zwei Stellen zugleich: Sprung-Tiefe des Spreading-Lesepfads und Stärke der Verschiebung.

**Was fertig waere.** Es ist entschieden, ob die Einstufung falsch war oder der Schluessel alt — dafuer reicht die Landschaftszeile, die seit dem 08.08.2026 je Turn geschrieben wird.

**Prioritaet:** mittel.


#### CHARAKTER-ANWEISUNGEN-OHNE-GEGENUEBER

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen, am Schema bestaetigt am 25.08.2026. `charakter_anweisungen` traegt `id`, `erstellt_am`, `aktiv`, `geaendert_am`, `user_id`, `anweisung` — **kein Gegenueber**. Unveraendert.

**Befund (2026-08-02).** **`charakter_anweisungen` trägt weiterhin kein Gegenüber.** `novaberg-wissensluecken_k.md` §4 nennt die Tabelle zusammen mit `ziele` als Vorbestand; `ziele` ist am 02.08. nachgezogen, diese nicht. Der Lese- und Schreibpfad filtert heute auf `user_id` des schreibenden Menschen, ein Übergriff zwischen Paaren entsteht dadurch nicht — die Anweisungen über Nova sind aber je Mensch getrennt, ohne dass das irgendwo als Entscheidung steht.

**Was fertig waere.** Die Tabelle traegt das Gegenueber, und Lese- wie Schreibpfad nennen beide Kennungen.

**Prioritaet:** mittel.

---


## 0b. Charakterbildung messen — der nächste Sprint (01.08.2026)

Das System misst sich inzwischen selbst sehr genau und seine **Wirkung auf das Gespräch gar nicht**. Es gibt keine Zahl, die sagt, ob der Apparat aus Perzeption, EI-Profil, Gesprächsvektor und Charakter-Rädern eine Antwort erzeugt, die ein nacktes Sprachmodell nicht erzeugt hätte.

Solange diese Zahl fehlt, wird jede Justierung an Zwischengrößen gegen Zwischengrößen kalibriert.


### Die Maße stehen vor dem ersten Turn fest

Sonst sucht man hinterher die Zahl, die passt.

| Maß | Quelle |
|---|---|
| Antwortlänge, Fragenanteil | `pipeline_log`, `art='turn_roh'` |
| Radabstand zwischen den Paaren | euklidisch über die zwölf Speichen |
| Profilähnlichkeit | Embedding-Distanz der Profiltexte |
| Trennschärfe | blinder Urteiler: Profil plus zwei Antworten — welche passt? |

**Jede nicht-blinde Ablesung ist für diese Frage wertlos.** Wer weiß, welche Antwort von Nova stammt, findet Charakter darin.

**Die Vorhersagen gehören ebenfalls vorher festgeschrieben** — je Person eine Erwartung an ihr Rad. Trifft sie nicht ein, ist das ein Ergebnis und kein Anlass zum Nachjustieren.

**Priorität:** hoch. Sie steht vor der Justierung der Beitragszahlen und vor dem Prompt-Block: Landet der Blindtest beim Zufall, wird gerade sehr sorgfältig etwas kalibriert, das niemand sieht.


#### PROFIL-HISTORIE-FEHLT — der Profilstand ist nicht rekonstruierbar

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Eine Historie der Profile gibt es nicht; die Raeder sind historisiert, die Profiltexte nicht.

`kern_hash`, `adaptive_hash`, `intentions_profil`, `emotions_profil` und `beziehungsprofil` werden bei jeder Destillation **überschrieben**. Nach hundert Turns lässt sich nicht mehr sagen, welcher Profilstand welches Verhalten erzeugt hat.

Für eine Messreihe ist das der Unterschied zwischen einer Messung und einer Erzählung. Es ist derselbe Defekt, den das Zuwendungs-Rad bis zum 01.08.2026 hatte — eine Ebene höher, und derselbe Verstoß gegen Regel (1) der Konvention über abgeleitete Werte.

**Bauart steht bereits:** dieselbe wie `charakter_rad_messung` — rohe Stände mit eigenem Zeitstempel, Modell, Temperatur und Quellen-Prüfsumme, der gelesene Wert bleibt in `charakter_hash`.

~~**Priorität:** hoch, **vor** der Reihe. Ohne sie ist die Reihe nicht auswertbar.~~

> **Korrigiert am 02.08.2026: nicht vor der Reihe.** Die Behauptung war zu stark. `charakter_hash` führt das Paar im Primärschlüssel, also überschreibt kein Lauf den Profilstand eines anderen — nach sechs Läufen stehen sechs Profile nebeneinander, und der **Vergleich zwischen** den Beziehungen ist damit auch ohne Historie auswertbar. Was ohne sie fehlt, ist der Verlauf **innerhalb** eines Laufs; die Räder sind ohnehin historisiert.
>
> **Band B** (Rangordnung, Reihe 1) — hoch, aber nach der Reihe. Der Eintrag bleibt: Er zahlt weiter auf die Spur zum Leer-Defekt ein, die zuletzt an einem überschriebenen Profiltext endete.


#### PAARLISTE-FEST — der CharakterAgent destilliert genau ein Paar

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die Liste ist unveraendert fest verdrahtet.

`agents/charakter/agent.py` trägt die Paarliste als Literal: ~~`[(DEFAULT_USER_ID, ASSISTANT_USER_ID)]`~~ `[(AKTIVES_PAAR_USER_ID, ASSISTANT_USER_ID)]`. Für weitere Nutzer entstünden weder Profile noch Räder — still, weil der Agent für sie schlicht nie läuft.

Das Datenmodell trägt das Paar überall; es fehlt die **Iteration**, nicht das Schema. Die Liste muss aus dem Bestand kommen, mit einer benannten Grenze, damit ein versehentlich angelegter Nutzer nicht zehn Destillationen je Lauf auslöst.

> **Kein Vorbau der Messreihe mehr — 02.08.2026.** Die Reihe fährt **ein Paar zur Zeit**: `AKTIVES_PAAR_USER_ID` benennt es, Pixie bedient nur dieses, und der Agent destilliert genau dafür. Die einelementige Liste ist damit kein Mangel, sondern der Mechanismus. Was offen bleibt, ist der **echte Mehrnutzerbetrieb**: mehrere Paare in einem Lauf, mit benannter Obergrenze.
>
> **Und die Reihenfolge hat sich umgekehrt:** Vor der Iteration muss geklärt sein, was Novas Seite pro Beziehung trennt. Bei `ziele` war es eine fehlende Spalte, die beim Destillieren mehrerer Paare *gelöscht* hätte (behoben am 02.08.); `charakter_anweisungen` und die Arbeitsqueues `queue:{user_id}` stehen unverändert ohne Gegenüber, beide in der Fundliste. Eine Iteration vor dieser Klärung vervielfacht die Schreiber auf gemeinsamen Zustand.

> **Der Preis der einelementigen Liste ist seit dem 24.08.2026 gezählt, und er ist Müll, kein Schaden.** In Redis liegen **12** `hash_dirty`-Keys ohne jeden Leser, alle in der Form `{user}:nova`. Der dreizehnte, der des aktiven Paares, ist transient — er wird gelesen und gelöscht und liegt deshalb meist gar nicht da. Die zwölf — Sonden, Messreihen, Testnutzer (`b1_live`, `default`, `konrad`, `leon`, `mehmet`, `nmcp_cut`, `nmcp_live`, `nmcp_probe`, `nmcp_read`, `nmcp_read2`, `sarah`, `vera`) — haben weder Leser noch Löscher. Geführt als `HASH-DIRTY-WAISENKEYS`; die Menge wächst mit jedem neuen Paar, das einmal einen Turn hatte.

~~**Priorität:** hoch, vor der Reihe.~~ **Priorität:** mittel — nach der Reihe, und erst nach der Klärung oben.

---


## 0a. Haltungsraum — der unterbrochene Sprint (31.07.2026)

Die Rechnung steht und ist geprüft, sie wirkt aber nirgends: Kein Knoten ruft sie, kein Protokoll trägt sie, kein Prompt liest sie. **Der Sprint ist bewusst hier unterbrochen**, weil der Rest in den Graphen eingreift.

> **Stand 31.07.2026, abends:** Knoten **und** Protokoll sind gebaut, der erste Satz gilt also nicht mehr — die Rechnung läuft in jedem Turn, steht im `pipeline_log` und in der Spur. Es bleibt: **kein Prompt.** Damit ist Novas Verhalten weiterhin unverändert, und die Zahlen lassen sich gegen echte Turns prüfen, ohne diese Turns beeinflusst zu haben. **Die Messreihe kann beginnen.**


#### HALTUNG-KNOTEN-FEHLT — die Rechnung hat keinen Aufrufer ✅ **erledigt am 31.07.2026**

**Kategorie:** [CHA] CHARAKTER

Gebaut als `graph/nodes/haltung.py`, im Graphen als Knoten `haltungsraum` zwischen `gv_node` und der Verzweigung. Kanal `haltung` in `graph/state.py` deklariert und **nicht** vorbelegt. Belegt an einem echten Turn: `beichte · umfang 0.60 · fragen 0.80 · naehe 1.25 ! · waerme 1.35 ! · draengen 0.00 [Grenze]`, Rad destilliert, zwölf Speichen.

**Was der Eintrag verlangte und was daraus wurde:** Die Kanalfalle war real — die Gegenprobe ohne Deklaration ergab im Folgeknoten `FEHLT` statt des Werts. Neu dazugekommen ist eine Randbedingung, die niemand genannt hatte: Ein Knoten darf nicht heißen wie ein Zustandsschlüssel; das Framework lehnt ihn ab.

**Der Rest bleibt offen:** Kein Prompt liest die Werte, kein Protokoll trägt sie. Novas Verhalten ist unverändert — das ist die Reihenfolge des Sprints, kein Versehen.

Die ursprüngliche Fassung des Eintrags:

`ei/haltung.py` und `memory/charakter.py → nutzer_gewichtung_rad_laden()` sind gebaut und getestet. Es fehlt der Knoten, der beides verbindet.

**Er gehört vor die Verzweigung zum Verfasser** (`character_graph.py`, `_after_gv`), aus zwei Gründen: Der Verfasser muss den Umfang kennen, bevor er den Inhalt zusammenstellt, und er wird bei `task_context_cut` übersprungen — eine Rechnung in ihm fiele in genau der Lage aus, in der der Responder allein steht.

**Zu beachten:** Der Zustandsschlüssel muss in `graph/state.py` deklariert sein. Ein Schlüssel, den ein Knoten schreibt, ohne dass er im Zustandstyp steht, wird an der Knotengrenze stillschweigend verworfen — der Wert ist innerhalb des Knotens lesbar und danach weg.

**Aufwand:** ein Knoten, eine Kanaldeklaration, eine Verdrahtung. **Priorität:** hoch — ohne ihn ist alles Gebaute wirkungslos.


#### HALTUNG-PROTOKOLL-FEHLT — das Ergebnis ist nicht sichtbar ✅ **erledigt am 31.07.2026**

**Kategorie:** [CHA] CHARAKTER

Gebaut im rechnenden Knoten: `log_berechnung` mit drei Zahlen je Größe, Rechenart und Auslöser, dazu `ausserhalb` und `uebersteuert` als zählbare Listen obenauf. Die Spur zeigt `Haltung.kurzfassung()`, ein Turn ohne Rechnung zeigt dort **„nicht gerechnet"** statt des Vorgabestrichs.

**Zwei Entscheidungen, die der Eintrag offengelassen hatte.** Ein **Ausfall** wird als `fehler`-Zeile geführt: keine Berechnungszeile mit Nullen, die wie eine gemessene Haltung ohne Ausschlag aussähe — aber auch kein Schweigen, denn die Häufigkeit der Ausfälle gehört zur Messreihe. Und `quelle` kommt aus `pipeline_quelle(state)` wie bei Enricher und Salienz, nicht als Literal wie im GV-Node.

**Belegt am echten Turn:** Die Zeile steht mit `quelle='character'` im `pipeline_log`, und der Join gegen den Rohturn liefert Haltung und Antwortlänge nebeneinander — `beichte`, Umfang 0.60, 1623 Zeichen Antwort, 2725 Zeichen Verfasser-Inhalt.

Die ursprüngliche Fassung des Eintrags:

Drei Zahlen je Größe (Grundwert, Modifikation, Ergebnis) plus Rechenart und Übersteuerungsmarke gehören über `log_berechnung` ins `pipeline_log`, geschrieben vom rechnenden Knoten. Der Eintrag trägt eine `turn_id` und steht damit neben `log_turn_roh` desselben Turns.

**Ausdrücklich kein Redis-Blob** nach dem Muster von `gv_detail`: Der trägt den Zustand, nicht den Verlauf, und ein übersprungener Turn hinterlässt dort den Vorstand ohne Kennzeichnung. Die Beitragszahlen sind Setzungen und werden nachkalibriert — dafür braucht es die Historie.

Dazu eine Zeile in der Spur (`services/event_consumer.py`), damit das Ergebnis bei jeder Antwort ohne Umweg lesbar ist. `Haltung.kurzfassung()` liefert sie fertig. **Ein Turn ohne Rechnung trägt keine Zeile statt einer leeren.**

**Priorität:** hoch — die Sichtbarkeit ist Voraussetzung für die Messreihe.


#### ~~HALTUNG-SPANNENENDEN-OFFEN~~ — ✅ **erledigt am 08.08.2026: Sättigung, plus das fehlende Stück**

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Der Unterlauf ist unvermessen. **Der Anlassfall bleibt offen**, die Saettigung ist gebaut. Der urspruengliche Eintrag steht als historischer Teil darunter (25.08.2026 als solcher gekennzeichnet); er ist **keine zweite Kennung**.

**Gewählt ist die Sättigung** — der Weg, den dieser Eintrag schon als den plausibleren benannt hat. Der Eintrag verlangte die Messung vor der Entscheidung; sie lag vor, und sie fiel eindeutig aus.

**Die Formel im Konzept war jedoch nicht geschlossen.** Sie setzt `summe ∈ [−1, +1]` voraus, und die Radsumme hat eine eigene Spanne, die nirgends stand: `draengen` reicht bis +1,20, also ergäbe `0,20 + 1,20 × 0,80 = 1,16` — wieder außerhalb. Gebaut wurde deshalb **Sättigung plus Normierung**: `speichen_spanne()` leitet die Spanne je Größe aus der Beitragstabelle ab, `_normieren()` bildet je Richtung getrennt auf [−1, +1] ab.

**Gerechnet über alle 14 Landschaften × 5 Größen** — bei festem Rad ist die Haltung eine reine Funktion, das Ergebnis also vollständig: gemessenes Rad **10 → 0** Zellen außerhalb, volles Rad an beiden Enden **33 → 0**. Größte Überschreitung der alten Form +0,80.

**Der offene Punkt „Unterlauf ungeprüft" ist damit mit erledigt**, und zwar durch Rechnung statt durch eine zweite Messreihe: Das volle Rad fährt beide Enden ab.

**Was bleibt und wohin es gehört:** Der Anlassfall ist nicht gelöst — `kissenschlacht/umfang` liegt jetzt bei 0,43 statt 0,45. Das ist keine Frage der Spannenenden, sondern der Beitragssemantik, und es steht als eigener Punkt in `novaberg-haltungsraum_k.md` §6.

Der ursprüngliche Eintrag bleibt darunter stehen:


##### Vorgeschichte zu HALTUNG-SPANNENENDEN-OFFEN — der urspruengliche Eintrag (Chat 128)

**Kein zweiter Eintrag, sondern die Vorgeschichte des Abschnitts darueber.** Der obere Teil sagt es woertlich: *„Der urspruengliche Eintrag bleibt darunter stehen."* Bis zum 25.08.2026 trugen beide dieselbe Ueberschriftenebene, und eine Zaehlung ueber das Register sah zwei Eintraege auf einen Schluessel. Die Ebene ist jetzt tiefer; der Zustand des Eintrags steht **oben**, nicht hier.

Gemessen am Entwurf: `glut/waerme` ergibt 1.15, `feuerwerk/fragen` 1.40, und nach unten reicht **eine** voll ausgeprägte Speiche — `glut/draengen` fällt mit `treue` auf −0.10.

**Gemessen am 31.07.2026 — die Frage ist entscheidbar geworden.** Reihe über 20 Turns: 9 von 19 Turns außerhalb, 20 von 95 Einzelwerten, ausschließlich nach oben, null Übersteuerungen. Anschließend alle 14 Landschaften gegen das reale Rad gerechnet — die Haltung ist bei festem Rad eine reine Funktion, das Ergebnis ist damit vollständig und keine Schätzung:

**10 von 14 Landschaften laufen über.** `waerme` 8×, `naehe` 6×, `umfang` 4×, `fragen` 3×. Sauber bleiben nur die vier kühlen: `gewitter`, `schlachtfeld`, `wartezimmer`, `paradox`.

**Damit ist eine der beiden Lösungen unplausibel geworden.** *Kleinere Beiträge* müssten das Rad so weit stauchen, dass der Charakter in warmen Landschaften praktisch nichts mehr bewirkt — `waerme` steht dort bei Grundwert 0.90 und bekommt +0.45. *Sättigung* trifft genau diesen Fall: Wo die Lage schon warm ist, fügt der Charakter wenig hinzu; wo sie kalt ist, macht er den Unterschied. **Die Entscheidung liegt weiterhin nicht hier** — sie gehört in `novaberg-haltungsraum_k.md` §6 und ist zu treffen, nicht abzuleiten.

**Was die Messung nicht zeigt:** den Unterlauf. Das vermessene Rad ist ein warmes; die untere Grenze braucht eine ausgeprägte `treue` und ist ungeprüft geblieben.

Nicht gekappt, sondern gemeldet und markiert; die Häufigkeit ist die Messgröße, die zwischen zwei Auswegen entscheidet. **Kleinere Beiträge** oder **Sättigung auf die Summe** — beide stehen mit ihren Preisen in `novaberg-haltungsraum_k.md` §6.

**Der Eintrag verlangt keine der beiden Lösungen**, sondern die Messung davor. Eine Entscheidung am Schreibtisch wäre eine Setzung auf eine Setzung.

**Priorität:** mittel — erst nach der ersten Messreihe entscheidbar.


#### ~~HALTUNG-OHNE-LANDSCHAFT~~ — ✅ **erledigt am 08.08.2026, auf einem dritten Weg**

**Kategorie:** [CHA] CHARAKTER

Kehrt der GV-Node früh zurück — bei Vektorlänge 0 („kein Vorausdenken") oder beim Skip —, setzt er `gv_detail` **nicht**. Ohne Landschaft gibt es keine Grundwerte und damit keine Haltung. Der Haltungs-Knoten erbt diese Lücke; das ist kein Defekt in ihm, sondern eine Weitergabe.

**Gemessen am 31.07.2026:** in einer Reihe von 20 Turns **einmal**, dazu **einmal** auf Novas Eigenimpuls unmittelbar danach — also rund jeder zehnte Haltungs-Vorgang. Kein Randfall.

~~**Solange kein Prompt die Werte liest, ist das folgenlos.** Mit dem Prompt-Block wird es eine Fallunterscheidung: Nova bekäme in diesen Turns keine Verhaltensvorgaben, während die alte Längenregel abgelöst ist. Zwei Wege stehen offen — die letzte Haltung weiterverwenden (dann muss sie als übernommen markiert sein, sonst sieht ein alter Wert wie ein frischer aus) oder den Block weglassen und auf die Vorgabewerte des Prompts zurückfallen.~~

**Beide vorgeschlagenen Wege sind hinfällig, weil der Fall nicht mehr eintritt.** Sie beantworteten die Frage „was tun, wenn keine Landschaft da ist" — und setzten damit voraus, dass eine fehlende Landschaft ein legitimer Zustand ist. Sie ist es nicht: Die Landschaft ist ein Zustand des Gesprächs und keine Funktion des Vorausdenkens. Seit dem 08.08.2026 wird sie vor beiden Toren vermessen; `gv_detail` ist auf jedem Weg gesetzt, und die Haltung rechnet auch im Skip- und im Krisenturn.

**Die Neuerhebung war größer als die Diagnose von damals:** nicht rund jeder zehnte, sondern **184 von 845 Rohturns (21,8 %)**, in den zwölf Validierungsbögen 101 von 360 (28,1 %) — und nicht zufällig verteilt, sondern an der Nähe-Achse hängend. Beleg und Zahlen in `novaberg-erreichbarkeit_k.md` §4a, Bauteil B1.

**Was als Rest bleibt:** Ein Turn ohne Vorausdenken bekommt weiterhin **kein Werkzeug** in den Prompt — Strategie und Vehikel stammen aus dem LLM-Lauf, der nicht stattgefunden hat. Das ist kein Ausfall, sondern die ehrliche Lage, und `gv_detail['vorausdenken']` benennt sie.


#### HALTUNG-LAENGE-ZWEI-ERZEUGER — die alte Längenregel muss abgelöst werden

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Zwei Erzeuger derselben Groesse, unveraendert.

`_ei_mikro_anweisung()` in `graph/nodes/responder.py` setzt die Antwortlänge heute in **jedem** Turn allein aus dem Arousal, mit nicht-monotoner Kurve: hoch und niedrig ergeben „MAXIMAL 1-2 Sätze", die Mitte „2-3 Sätze".

Wer den Haltungsraum in den Prompt einhängt, ohne diese Regel abzulösen, hat zwei Erzeuger für dieselbe Größe — dieselbe Fehlerklasse wie die zwei Pipelines im Zeitparser, die auseinanderliefen, weil niemand sie synchron halten konnte.

**Nicht im selben Zug wie der Knoten**, sondern danach: Solange der Block nicht im Prompt steht, ändert sich Novas Verhalten nicht, und die Zahlen lassen sich gegen echte Turns prüfen, ohne diese Turns bereits beeinflusst zu haben.

**Priorität:** hoch, aber nach der Messreihe.

---


## 0. Zeitparser und Kalibrierung (31.07.2026)

Vier Einträge aus einem Tag. Die ersten drei kommen aus dem ersten Lauf des Härtefallkorpus gegen den Parser, der vierte aus der Neuerhebung der Positions-Kontrolle.


#### KALIBRIERUNG-ZEUGE-TRENNT-SCHWACH — der Zeuge unterscheidet die Sprecher zu wenig

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Der dreiwertige Zeuge ist nicht gebaut.

Auf ordentlicher Grundlage trennt der Zeuge die Sprecher um **13,6 Punkte** gegen die geforderten 20 (`novaberg-gv-initiative_k.md` §12.7). Damit steht der Kalibrier-Agent still: Er würde eine Schwelle gegen ein Urteil suchen, das seine eigene Eingangsprüfung nicht besteht.

**Was NICHT gezeigt ist:** dass ein dreiwertiger Zeuge das repariert. Das war das Argument, solange die Zahlen aus dem Präfix stammten; nach der Korrektur ist der Anlass ein anderer. Die schwache Trennung kann ebenso am Prompt liegen, an der Kürzung auf `KALIBRIERUNG_ZEUGE_MAX_ZEICHEN` oder an der Fragestellung, die für eine erklärende Assistentin schlecht passt.

**Was der Eintrag verlangt, ist deshalb eine Messung, die diese Möglichkeiten trennt** — nicht eine weitere Rechnung auf denselben Urteilen. Erst danach ist der Zuschnitt eines Umbaus entscheidbar.

**Priorität:** hoch — die Achse läuft heute auf einer Schwelle ohne gültigen Beleg.

---


## 7. Offene Epics & Features


### Refactoring & Code-Hygiene (Chat 88)

> **Geteilter Abschnitt.** Seine Eintraege liegen in mehreren Kategorien; hier stehen die von **Charakter**. Ueberschrift und Text stehen in jeder empfangenden Datei.

Sammelposten aus zwei Audits in Chat 88 — dem allgemeinen Code-Audit zum Synapsen-Umbau und der P0-Migrations-Konsolidierung (db/init.sql als Single Source of Truth). Zwölf Einträge: sechs aus dem allgemeinen Audit, drei aus P0-Beobachtungen während der Konsolidierung, drei aus dem P0-Abschluss-Bericht. Bewusste Trennung von den Synapsen-Sprints P1–P10: diese Einträge sind keine Voraussetzung für den Umbau, sondern Code-Hygiene auf Bestand und neuer Infrastruktur. Werden zwischen den Sprints oder in einer eigenen Refactor-Welle abgearbeitet.

| # | Thema | Status |
|---|-------|--------|
| REFAC-HANDBUCH-§9-MIGRATIONS | `DEVELOPER_HANDBOOK.md` §9 fordert „Niemals ALTER TABLE in init.sql. Schema-Änderungen laufen über separate, versionierte Migrations-Skripte (Alembic empfohlen)." Diese Norm widerspricht der seit P0 etablierten Konvention — `db/init.sql` ist Single Source of Truth, und Schema-Änderungen werden als ALTER-Statements am Ende der Datei eingefügt und in Reviews zu CREATE-Definitionen konsolidiert. Das Handbuch ist hier outdated und muss auf die gelebte P0-Konvention nachgezogen werden. Plugins (`agents/*/init.sql`) bleiben eigenständig. | ✅ Erledigt (Docs-Commit 12.07.2026) — §9 neu gefasst (Handbuch v0.4), siehe HANDBUCH-§9-VERALTET |
| EMOTIONS-VECTOR-WERTE-DRIFT | Live-Wert außerhalb des dokumentierten Vertrags (Chat 104). `novaberg-personality.md` §3.2 dokumentiert für `Emotion.emotions_vector` die gültigen Werte `plateau, aufschwung, abschwung, peak, tal, leer`. Der erste `turn_roh`-Eintrag (Chat 104, Live-Abnahme) trägt jedoch `aufbluehen` auf der User-Seite — ein Wert außerhalb dieser Liste. Zu klären: (a) Doku veraltet, die Perzeption-Prompts / `ei/berechnung.py` kennen weitere Werte → Doku nachziehen; oder (b) das Perzeptions-LLM erzeugt freie Werte außerhalb des Vertrags → dann sind die Vektor-Werte unzuverlässig und verunreinigen die dauerhafte Charakter-Quelle (`turn_roh`), auf der die Verhaltensweisen-Destillation aufsetzt. Prüfpfad: `prompts/default/perzeption.task.txt`, `perzeption.assistant_task.txt`, `ei/berechnung.py` (Plausibilitäts-Funktionen). **Auflösung:** kein Code-Problem — das Feld ist deterministisch erzeugt (`_emotions_vektor_bestimmen`, geschlossener Wertebereich), die Doku war falsch (Werte UND Quellen-Zuordnung), korrigiert in docs(personality). | [CHA] ✅ Chat 105 gelöst |
| EI-KANON-FEHLT | `relationship_dynamic`, `tone`, `intent`, `prompt_topic` gehen ungeprüft aus dem LLM in den State und in die dauerhafte `turn_roh`-Quelle. Audit Chat 105: aktuell KEIN Miss — jeder Prompt-Wert ist in jeder Konsumenten-Map gedeckt. Der Vertrag hält aber nur, solange das Modell gehorcht; bei Modellwechsel (zuletzt qwen36) fällt ein abweichender Wert still auf Neutral-Defaults. Fix: Laufzeit-Kanon je Feld analog `EMOTION_KANON`/`_emotion_kanonisieren` (fail loud). **Chat 105: Prio mittel → hoch — live bestätigt:** `stil=gehoben` im Log, kein gültiger `language_style`. Der halluzinierte Wert ist real, kein theoretisches Risiko mehr. | [CHA] ⬜ **offen, neu bewertet am 05.09.2026** — **der Ausloeser ist eingetreten**: Seit 18:04 UTC laeuft die Perzeption ueber ein Fernmodell. **Der geforderte Helfer existiert seither** (`utils/canon.py::to_canonical`, dreistufig: Kanon → aufgeloeste Umlaute → `None`, mit Meldung) und ist an der Naht der Perzeption fuer `emotion` und `modus` angewandt. **Fuer `tone`, `intent`, `sprach_stil` und `prompt_topic` bleibt der Eintrag offen, und der Grund hat sich verschoben:** Es fehlt nicht mehr der Riegel, sondern die **Menge**, gegen die er pruefen koennte — fuer diese Felder gibt es keinen Kanon in `config.py`. Der Bau ist damit klein und die Entscheidung inhaltlich: welche Werte zulaessig sind. Zwei Messungen dazu am 05.09.2026: 20 Perzeptionsaufrufe je Modell ergaben **0 Ausreisser** bei `emotion` und `modus`; die Stil-Vielfalt des neuen Modells ist mit 6 verschiedenen Werten dreimal so breit wie die des alten (2) — die ungepruefte Menge ist also gewachsen. Prio hoch |
| SILENT-SKIP-EI-DEFAULTS | 39 von 41 `state.get("external"/"internal")`-Stellen fallen bei None still auf Neutral-Defaults (Audit Chat 105); nur `ei_calc_persist` (error) und der `turn_roh`-Guard (warning) sind laut. Steht gegen `lesson_l_silent-skip`. `personality.md` §5 empfiehlt das Muster noch. | [CHA] ⬜ Prio mittel |
| TURN-ROH-VOR-KRAFT1-ENTWERTET | Stichtag für die Verhaltensweisen-Destillation, gemessen Chat 108 — Volltext im Abschnitt „Landmine: TURN-ROH-VOR-KRAFT1-ENTWERTET — Sperrvermerk für die Verhaltensweisen-Destillation". | [CHA] [CHA] ⬜ Prio hoch — ⬜ **offen** — nachgesehen am 25.08.2026. Der Sperrvermerk gilt unveraendert. |
| EI-VEKTOR-LOG-GATE | `ei_calc.py` unterdrückt `plateau` beim Loggen (am 25.08.2026 bei `:197`, der Befund nannte `:126`). Der Default-Fallback ist auf der User-Seite unsichtbar — dasselbe Muster, das den Chat-89-Defekt der Nova-Seite mit versteckt hat. | [CHA] ⬜ Prio niedrig |


## EPIC-SYKOPHANZ — Sykophanz eindaemmen

**Kategorie:** [CHA] CHARAKTER

**Status:** ⬜ nicht begonnen. Befund gemessen, Bauteile entworfen, Reihenfolge festgelegt.
**Konzept:** `novaberg-sykophanz-eindaemmung_k.md` — dort stehen ZIEL, TEST, MESSUNG und Gegenprobe je Bauteil.
**Befund:** `novaberg-bugs-charakter.md` → `NOVA-SYKOPHANZ-BESTAETIGT`, Update Chat 126.

**Der Kern in einem Satz:** Widerspricht der Nutzer einem Fakt, den er selbst gesetzt hat, übernimmt Nova ihn — fünf von fünf Sonden über sechs Bögen — obwohl der richtige Wert vorliegt (Turn 22, sechs von sechs richtig) und das Modell den Widerspruch bei neutraler Frage erkennt (fünf von fünf, null Fehlalarme).

**Zielgröße ist Markierung, nicht Korrektur.** Bei einem Biografiefaktum ist der Nutzer die zuständige Instanz; was fehlt, ist der Vermerk, dass sich etwas geändert hat — und die Sperre, auf einem abweichenden Wert weiterzubauen.

| ID | Inhalt | Vorbedingung |
|---|---|---|
| **SYK-B-1-THINKER-WEICHE** | ✅ **umgesetzt am 18.09.2026** (`ee7f606`). Der Thinker schreibt `thinker.schnellcheck` (mit den getroffenen Indikatoren einzeln) und `thinker.ergebnis` (sechs Ausgänge samt Iterationen, Werkzeugaufrufen und Nachfass-Versuchen) ins `pipeline_log`; im Betrieb belegt am selben Tag, Turn `729033c8…`: `reasoning` → `korrektur`. Die Anlaufquote ist damit erhebbar. ~~Der Thinker protokolliert den Ausgang seines Schnell-Checks dauerhaft. Heute schreibt er `node_annotations`, die nirgends persistiert werden — seine Anlaufquote ist nicht erhebbar.~~ | [CHA] keine — ✅ **erledigt** — B1/B5 sind damit von dieser Seite entblockt. |
| **SYK-B0-ABSTAND** | ✅ **gefahren am 05./06.08.2026 — Nullbefund mit benanntem Konstruktionsfehler.** Eine eigene Itembatterie mit denselben fünf `eigen`-Items, nur die Füllturnzahl wächst (2 → 6 → 15). Kapitulation **100 / 75 / 100 %** über die vier gemeinsamen Items — **kein Anstieg**. ⚠ Die Auswahl lag schon bei Abstand 2 bei 100 %, ein Anstieg war also nicht zeigbar; die Items mit Spielraum (`eigen-08`, `-10`, `-13`) standen in der Urteilsdatei des Vorlaufs und wurden nicht gelesen. **Zwei belastbare Ergebnisse:** Die Nulllinie reproduziert sich zum dritten Mal und **erstmals über eine Systemänderung hinweg** (NachfragenAgent ging dazwischen in Betrieb, eigens mitgefahren), und der **Ausbau ist abstandsunabhängig** (11/12). **Rest, bewusst nicht gefahren:** ein Nachlauf mit den Spielraum-Items (unter zwei Stunden) — entschieden am 06.08., weil die Beziehung der aussichtsreichere Verdächtige ist und ohnehin volle Bögen braucht | [CHA] B0 ✅ |
| **SYK-B0-BEZIEHUNG** | **Die verbliebene Größe.** Der ursprüngliche Befund unterschied sich in **zwei** Dingen von der Batterie: Abstand (entlastet, siehe `SYK-B0-ABSTAND`) und eine über sechzehn Turns **gewachsene Beziehung**. Letztere ist nur über volle Bögen zu variieren — das Bogen-Rig der Charakterbildungs-Messreihe steht samt fünf Persona-Bögen bereit. **Entschieden am 06.08.2026: eine Falle je Bogen.** Sauber trennbar, rund 1,8 h je Datenpunkt. Mehrere je Bogen wären billiger, heben aber die Isolation auf, die in der ersten Hälfte der Zweck war — zwei Items in einem Profil sind nicht trennbar | [CHA] B0 ✅ |
| **SYK-B0-FALLENBATTERIE** | 🔶 **erste Hälfte gefahren am 04.08.2026.** 25 Items (15 `eigen`, 5 `objektiv`, 5 Gegenproben), isolierte Vier-Turn-Items. **Nulllinie: `eigen` 87 %, `objektiv` 80 %, Gegenprobe 100 % angenommen; benannt 33 %, ausgebaut 87 %.** ~~**Rest:** die zweite Hälfte — Akkumulation über den Turn-Index in vollen Bögen.~~ → **Am 05./06.08.2026 anders gefahren als geplant und damit aufgeteilt:** Der Abstand brauchte keine vollen Bögen, sondern nur längere Füllturnlisten (`SYK-B0-ABSTAND`, entlastet). Was volle Bögen wirklich braucht, ist die **Beziehung** — als `SYK-B0-BEZIEHUNG` abgetrennt. | [CHA] keine |
| **SYK-B1-URTEILSFELD** | ✅ gebaut 04.08.2026, **gemessen 05.08.2026 — ohne Wirkung.** Der Verfasser fällt ein dreiwertiges Urteil, bevor Text entsteht (`graph/einwand.py`), die Ausbausperre steht im Prompt. Zweiter Batterielauf, dieselben 25 Items: **Kapitulationsrate 13/15 = 87 %, exakt wie die Nulllinie.** `ausgebaut` unverändert 87 %, `benannt` 33 % → 40 % (**ein** Item bei n=15, Rauschen). Gegenprobe hält bei 100 % — nicht durch Sturheit erkauft. **Die Reihenfolge im Text reicht nicht.** Bauteil bleibt richtig und gebaut, ist aber keine Maßnahme gegen die Kapitulation. ⚠ Der Lauf trug zwei weitere Änderungen (KZG-Gravitation, Plugin-Reihenfolge); bei einem Null-Ergebnis ohne Folgen für die Zuordnung | [CHA] B0 ✅ |
| **SYK-B1-WERT-FALSCH** | Die zweite offene Frage aus B1 ist **weiterhin offen**: wie oft der Kopfblock einen *falschen* Wert trägt. Der Batterielauf misst die Kapitulation, nicht die Treffsicherheit des Urteils — dafür bräuchte es je Turn ein Sollurteil neben dem gelieferten | [CHA] B1 — ⬜ **offen** — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden. |
| **SYK-B4-VORZEICHENPRUEFUNG** | 🔶 **Stufe 1 gebaut am 05.08.2026** (`graph/vorzeichen.py`): Bei Urteil `abweichend` werden die Zahlenwerte der Nutzeräußerung gegen Novas Antworttext gehalten; der Befund geht als `vorzeichenpruefung` ins `pipeline_log`. Kein Modellaufruf, keine Verhaltensänderung. **Drei Zustände getrennt geführt** — nicht geprüft / geprüft ohne Wert / geprüft mit Wert —, weil „kein Wert gefunden" sonst wie ein Erfolg aussähe. **Rest:** Stufe 2, die neutrale Prüffrage, die Zitat von Verwendung trennt. Ohne sie ist die Zahl die Rate der **Kandidaten**, nicht der Übernahmen. Sie kostet je Treffer einen Modellaufruf — auf dieser Anlage gemessen rund 35 s (`PIX-WARTESCHLANGE-AM-MODELL`) | [CHA] B1 ✅ |
| **SYK-B4-STUFE-2-OHNE-FILTER** | **Der Filtergedanke ist gemessen erledigt; Stufe 2 ist nicht die Verfeinerung, sondern der Mechanismus.** Belegt am 05.08.2026 ohne neuen Lauf: Selbst mit dem **von Hand geschriebenen, korrekten** strittigen Wert findet eine Enthaltensprüfung nur **6 von 17** Ausbauten (wörtlich) bzw. 7 von 17 (Inhaltswörter) — und schlägt bei den sauberen Fällen 2 von 3 bzw. 3 von 3 an. Grund: Nova baut oft aus, **ohne den Wert zu wiederholen**, und zitiert ihn, **wenn sie sauber bleibt**. Ein Filter, der zwei Drittel durchlässt, spart keine Modellaufrufe, er verliert Fälle. **Der Weg:** die neutrale Prüffrage auf **jedem** Turn mit Urteil `abweichend` — sie ist selten, und der Mechanismus ist als `beurteilen()` im Batterie-Werkzeug bereits erprobt. ⚠ Kostet je Turn einen Hintergrund-Aufruf (~35 s, `PIX-WARTESCHLANGE-AM-MODELL`) | [CHA] B4 Stufe 1 ✅ |
| **SYK-B4-WERT-BENENNEN** | ~~Zwei Felder im Kopfblock~~ — **durch die Messung erledigt, bevor er gebaut wurde.** Die Prüfung trägt auch mit korrektem Wert nicht (siehe `SYK-B4-STUFE-2-OHNE-FILTER`); der Prompt-Umbau hätte einen Batterielauf von 6,2 Stunden gekostet und nichts geändert. ⚠ **Stufe 1 ist an diesem Korpus zu 85 % blind — gemessen am 05.08.2026, unmittelbar nach dem Bau.** 17 von 20 Fallen tragen keinen Ziffernwert; die strittigen Werte sind ausgeschriebene Zahlen („vierzig Jahren", „vier Monde") und Ortsnamen („Hannover"). Der Leser ist nicht defekt, die Verengung „Wert = Zahl" ist es. **Der Weg:** Der Kopfblock aus `SYK-B1` trägt den strittigen Wert bereits als Prosa (`GEPRUEFT`); zwei strukturierte Felder — früherer und jetziger Wert — machen ihn deterministisch prüfbar, typunabhängig und **ohne zweiten Modellaufruf**. Berührt den Prompt, braucht also ein eigenes Messfenster | [CHA] B4 Stufe 1 ✅ |
| **SYK-B8-SCHREIBPFAD** | Ein widersprochener Wert wird nicht ohne Marke destilliert. **Blocker:** In 583 KZG-Einträgen steht keine `turn_id` — die Klammer für die Vererbung fehlt. | [CHA] B1, Klammer — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. |
| **SYK-B3-VORZEICHENREGEL** | Der Responder entscheidet, wie freundlich ein Nein klingt, nicht ob es eins ist. Dazu eine ausgesetzte Regel zurück: das Verbot falscher Erfolgsmeldungen. | [CHA] B4 — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. **Neu bewertet am 15.09.2026, zur zweiten Hälfte:** Falsche Erfolgsmeldungen sind am Bestand gemessen — ab 14.08.2026 (Dienst-Ausgänge protokolliert) **24 von 928** Antworten mit Speicherbehauptung ohne abgeschlossenen Dienst, 3 davon Wiederholungen einer echten Schreibung. Seit dem 15.09.2026 **rechnet** die Auswertung des Tribunals den Fall und schickt die Antwort in die Korrektur (Scheibe 12 A, `novaberg-node-tribunal.md`); die Regel im Prompt ist **nicht** zurückgeholt, und ob sie die Behauptungen verhindert hätte, ist nicht gemessen. Die Aussetzung steht im Code als Probe (`graph/nodes/responder.py`, Kommentar vom 31.07.2026) und wurde seither nicht ausgewertet. |
| **SYK-B9-REGISTER** | Nova bekommt einen gelebten Zustand für „hier stimmt etwas nicht". Das Schema gibt ihn her; der Klassifikator wählt ihn nie. Entwurfsfrage vorgeschaltet. | [CHA] Entscheidung — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. |
| **SYK-B2-IMPULS-GRENZE** | Der GV-Impuls darf die Richtung bestimmen, nicht die Faktenauswahl. | [CHA] keine — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. |
| **SYK-B5-ESKALATION** | Der Thinker sieht das Verfasser-Urteil und bekommt Widerspruchs-Indikatoren im Schnell-Check. | [CHA] B-1, B1 — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. |
| **SYK-B6-MOTIVENTLASTUNG** | Der Drang, die Beziehung zu schonen, wird entlastet statt verboten — gekoppelt an den gemessenen Zuwendungswert. | [CHA] allein einzuführen — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. |
| **SYK-B7-ZWEITABLEITUNG** | Eine zweite Ableitung ohne Beziehungsdruck; die Differenz ist die Sykophanz. Erste Probe: 3 von 5 gegen 1 von 5, trägt noch nicht. | [CHA] nur falls B-1…B6 nicht reichen — ⬜ **offen** — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen; der Eintrag beschreibt ein Ziel und keinen Defekt. |

**Eine Änderung je Messfenster.** B1 und B4 sind die einzige Ausnahme — B4 ändert kein Verhalten.


### Offene Messungen aus derselben Reihe

| ID | Frage |
|---|---|
| **SYK-M-TRIBUNAL** | [CHA] Erkennt das Tribunal die fünf Fälle? Seine Zuständigkeit ist aus den Prompts gelesen, nicht gefahren. Billigste der drei; hebt eine Zeile im Konzept von „gelesen" auf „gemessen". — ⬜ **offen** — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden. |
| **SYK-M-VERFASSER** | [CHA] Dämpft der Verfasser? Ein Zufallsvergleich zeigte ohne ihn 1355 Zeichen bei Arousal 0.8, mit ihm 340 bei 0.5 — ein Fall, kein Beleg. — ⬜ **offen** — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden. |
| **SYK-M-RAHMUNG** | [CHA] Trägt die Szenario-Rahmung? Braucht eine Nulllinie, die den Ausfall reproduziert, und Wiederholungen je Zelle. — ⬜ **offen** — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden. |


### Was aus dieser Reihe nicht folgt

Der LZG-Lesepfad war in **allen sechs Läufen untätig** — eine frische Persona hat kein Langzeitgedächtnis. Die Reihe sagt deshalb nichts über das Synapsennetz und nichts über die Wahrnehmungs-Gravitation aus P10. Beide bleiben an einem Korpus zu messen, der einen Bestand mitbringt.

---

## Epic: Dual-Emotion (Chats 53, 57–58)

**Vision:** Nova hat einen eigenen Emotionsstrang mit denselben 8 Plutchik-Dimensionen wie der User. Jede Antwort wird analysiert — Emotion, Arousal, Modus, Intent. Die Daten fließen unter `ASSISTANT_USER_ID` ins Gedächtnis und werden im nächsten Turn geladen.

**Leitprinzip:** "Der Eingangspfad für den User ist der Ausgangspfad für Nova."

**Drei Phasen:**

| Phase | Ziel | Status |
|-------|------|--------|
| Phase 1 | User-IDs entkoppeln — frei wählbar aus Config | ✅ Chat 57 |
| Phase 2 | Zweiter Emotionsstrang + Enricher-Split + Graph-Neuordnung | 🔧 AP1–7 ✅, AP8 teilw. (Server ✅, Client offen), AP9 ✅ |
| Phase 3 | Ziel-Vektor (Antrieb) als dritte Kraft auf Novas Emotion | ⬜ |

**Konzept-Dokumente:** `novaberg-thinking-drive_k.md` §4 (Chat 53), `novaberg-ei-dual-emotion_k.md` (Chat 58)

**Arbeitspakete Phase 2:**

| AP | Paket | Status |
|----|-------|--------|
| 1 | EI-Extraktion (Enricher → ei/berechnung.py) | ✅ Chat 58 |
| 2 | EI-Calc-Node (graph/nodes/ei_calc.py) | ✅ Chat 59 |
| 3 | Nova-Emotion Berechnung (Decay + Empathie) | ✅ Chat 59 |
| 4 | Perzeption(Nova) + EI-Calc(Nova) im async-Block | ✅ Chat 60 — Event-Modell ersetzt den async-Pfad |
| 5 | Router(Nova) + Commitment-Erkennung | ✅ Chat 60 — Router im CharacterGraph |
| 6 | Salienz(Nova) — eigener Salienz-Prompt | ✅ Chat 60 — Salienz im CharacterGraph |
| 7 | Asynchroner Block orchestrieren | ✅ Chat 60 — Event-Consumer ersetzt async-Block |
| 8 | API + Client (GespraechAntwort + Dual-Radar) | 🔧 API ✅, Responder [EIGENE_EMOTION] ✅, Client-Panels offen |
| 9 | Dokumentation | ✅ Chat 66 |

**Chat 61 Nachtrag:**
- Perzeption(Nova) läuft nun symmetrisch nach Nova's finaler Antwort (analog zu Perzeption(User) in Pfad 1). Siehe Roadmap Chat 61.
- EI-Calc hat einen sauberen Rollen-Split bekommen (`ei_calc_rolle: "user" | "character"`). Trennung von User- und Nova-Emotion-Berechnung ist damit architektonisch abgeschlossen.

---


## Cleanup: CHAR-HASH-TEST-LEICHEN — Test-User in `charakter_hash` ohne aktive Pflege

**Kategorie:** [CHA] CHARAKTER

**Status:** Beobachtet
**Entdeckt:** Chat 84 (Schema-Lookup im Rahmen M5a-Code-Fix-Verifikation)

**Symptom:** 8 Einträge in `charakter_hash` mit leerem `character_id`-Feld:
`test_agt5`, `test_agt6`, `test_timeline`, `emotional`, `gruender`, `jugendlich`, `formell`, `test_prompt2`. Stempel-Profil: `kern`/`adaptive` aus März/April, `intent`/`emo`/`bez` einheitlich am 01.05. (Backfill-Lauf bei Einführung der drei Profile).

**Auswirkung:** Strukturell kein Schaden — der CharakterAgent scannt mit hartcodierten `[(DEFAULT_USER_ID, ASSISTANT_USER_ID)]` und sieht diese Einträge nie. Sie wachsen nicht weiter, rauschen aber die Tabelle zu und erschweren Tabellen-Inspektionen.

**Lösung:** Einmalige `DELETE FROM charakter_hash WHERE character_id = ''`-Operation in Chat 84+ oder bei nächster Schema-Migration mitnehmen.

**Prio:** Niedrig.

---


## Refactor: REFAC-HG-CHAR-HASH-LOAD — Char-Hash-Tiebreaker im HumanGraph aktivieren (Chat 90)

**Kategorie:** [CHA] CHARAKTER

**Status:** ⬜ Geplant, bewusst nicht in Phase 4
**Prio:** Niedrig
**Auslöser:** HG-Slimming Pre-Audit (Chat 90, 17.05.2026)

**Beobachtung:** Im HumanGraph läuft `_sprach_stil_erkennen` heute ohne wirksamen Charakter-Hash-Tiebreaker. `state["external"].character` ist im HG-Lauf immer leer, weil der `db_zugriff`-Node nur im CharacterGraph eingehängt ist. Folge: bei ambigen Sessions (Top-1/Top-2-Feature-Scoring-Differenz `< 2.0`) greift der Tiebreaker-Block nicht, Fallback ist reines Feature-Scoring-Top-1. Stil-Output verschiebt sich um eine Stufe gegenüber einem Lauf mit echtem User-Hash. Numerisch klein, semantisch sichtbar — der Stil-Wert wandert via Event-Payload als `language_style` in den CG-Seed und beeinflusst Router und Responder.

**Belegstelle Chat 90 (AUDIT-HG-SLIMMING, Frage 3 & 5):**

In `ei_calc.py:103-114` wird das lokale `char_hash_dict` aus `state["external"].character.*` gebaut. Im HG sind alle Felder leer:

```python
char_hash_dict = {
    "kern": "", "adaptiv": "", "beziehungsprofil": "",
    "intentions_profil": "", "emotions_profil": "",
}
# → if any(char_hash_dict.values()) else None  → None im HG
```

`_sprach_stil_erkennen` Zeile 644 hat den Tiebreaker-Block `if abstand < 2.0 and charakter_hash:` — `None` wird durch den `and`-Check abgefangen, der Tiebreaker greift nicht.

**Lösungsraum:**

(a) **Akzeptieren:** Backlog-Eintrag bleibt offen, Phase 4 nicht erweitern. *(Entscheidung Chat 90.)*

(b) **Mini-Loader im HumanGraph:** Schmaler Lade-Schritt vor dem HG-EI-Calc führt einen einzigen `charakter_hash_retrieve_dict(user_id)`-Aufruf aus und schreibt in `state["external"].character`. Ein Postgres-Read pro User-Turn mehr.

(c) **`db_zugriff` auch im HG:** Den `db_zugriff`-Node strukturell auch im HG-Pfad einhängen, aber nur die User-Seite laden. Architektonisch sauberer, größeres Refactoring-Scope.

**Empfehlung:** (b) als pragmatische Standard-Lösung — minimaler Code-Eingriff, klare semantische Wirkung. (c) erst, wenn ein größeres HG-Topologie-Audit ohnehin ansteht.

**Verwandte Themen:**

- SPRACH-STIL-DEFENSIV-STUMM (Bug) — bei leerem Hash bricht die Funktion ohne Warning ab. Beide Punkte sind komplementär: SPRACH-STIL-DEFENSIV-STUMM löst das Logging, REFAC-HG-CHAR-HASH-LOAD löst die Datenquelle.
- Phase 4 (HumanGraph-Slimming) — bewusst nicht um diesen Fix erweitert; Slimming bleibt scope-rein.

---


## Bug: SPRACH-STIL-DEFENSIV-STUMM — `_sprach_stil_erkennen` bricht stumm auf "neutral" zurück (Chat 89/90)

**Kategorie:** [CHA] CHARAKTER

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. **Zweite Zeile derselben Kennung.**

**Zustand:** offen — nachgesehen am 25.08.2026. **Dieselbe Kennung steht zweimal in diesem Register.**

**Status:** ⬜ Beobachtet, nicht implementiert
**Prio:** Niedrig
**Auslöser:** Phase-2-Audit PFAD2-PERZEPTION-FIX (Chat 89), bestätigt im HG-Slimming Pre-Audit (Chat 90)

**Beobachtung:** `_sprach_stil_erkennen` in `ei/berechnung.py` fällt bei leerem oder fehlendem `charakter_hash`-Argument defensiv auf den Default `"neutral"` zurück — ohne Logging, ohne Warning. Verstößt gegen das „fail loud"-Prinzip aus dem Entwicklerhandbuch §1 (Leitprinzipien).

**Wirkung:** Symptom-frei, deshalb leicht zu übersehen. Bei strukturellen Änderungen am Charakter-Hash-Lade-Pfad (Phase 2/3 PFAD2-PERZEPTION-FIX) wurde die Stil-Verschiebung erst beim Folge-Audit sichtbar. Ein Warning hätte den Bug sofort bei der Phase-2-Verifikation gezeigt.

**Lösung:** Loud Fallback. Wenn `charakter_hash` leer oder None ist, einmal pro Aufruf ein `logger.warning("_sprach_stil_erkennen ohne charakter_hash aufgerufen — Tiebreaker inaktiv, rolle=%s", rolle)`. Beim nächsten Code-Audit-Sprint (EVA-Disziplin) mit aufnehmen.

**Verwandte Themen:**

- REFAC-HG-CHAR-HASH-LOAD (Refactor) — der eigentliche strukturelle Auslöser im HumanGraph.
- Epic: Code-Audit-Sprint — EVA-Disziplin im gesamten Code — natürlicher Sprint-Container für diesen Fix.
- `novaberg-lesson_l_silent-skip.md` — Schwester-Pattern (stille Skips ohne Audit-Trail).

---


## Refactor: EI-CALC-ROLLE-RENAME — `ei_calc_rolle` semantisch zu eng (Chat 89)

**Kategorie:** [CHA] CHARAKTER

**Status:** 🟡 Teilweise erledigt (Chat 110)

**Nachtrag Chat 110.** Der vorgeschlagene Name `graph_rolle` existiert jetzt — aber **nicht als Umbenennung, sondern als zweites Feld**. Grund: Der AgentGraph hat gezeigt, dass die beiden Bedeutungen nicht dasselbe sind. Er traegt `ei_calc_rolle="character"` (Novas Sicht, fuer `beobachter`) und bewertet trotzdem einen Reiz wie der HumanGraph — ein Suchen-Ersetzen haette den Fehler nur umbenannt, nicht behoben. `graph_rolle` sagt jetzt, **welcher Graph laeuft** (`human` | `character` | `agent`), `ei_calc_rolle` weiterhin, **wessen Sicht** gerechnet wird.

Umgezogen sind die drei Leser, bei denen die Frage lautete, welcher Graph laeuft: Salienz (was wird bewertet), Enricher (`quelle` im `pipeline_log`), Dispatcher (schreibt der Lauf einen Session-Turn). Nicht umgezogen: EI-Calc, `db_zugriff` und die `beobachter`-Ableitung im KZG-Dispatch — dort ist `ei_calc_rolle` semantisch richtig. Offen bleibt die Default-Asymmetrie aus AUDIT-EI-CALC-ROLLE-DEFAULTS.
**Prio:** Niedrig
**Auslöser:** Sprint PFAD2-PERZEPTION-FIX (Chat 89)

**Beobachtung:** Der State-Key `ei_calc_rolle` wird von vielen Nodes außerhalb des EI-Calc-Pfads gelesen (Perzeption, Salience, Dispatcher, KZG-Dispatch, ab Phase 4 zusätzlich der Enricher zur Pfad-Verzweigung). Der Name suggeriert EI-Calc-Lokalität, ist aber faktisch ein **Graph-Level**-Marker für die Rolle, in der ein Lauf durchgeführt wird (User-Turn vs. Assistant-Turn).

**Vorschlag:** Umbenennung zu `graph_rolle` (oder schlicht `rolle`). Werte bleiben `"user"` / `"character"`. Strukturell trivial — Suchen-Ersetzen über das gesamte Repo plus State-Definition in `graph/state.py`.

**Sprint-Reihenfolge:** Nach Phase 4 ausführen. Phase 4 nutzt diesen Marker für die Enricher-Verzweigung — zwei gleichzeitige Refactorings auf demselben Marker wären unnötig kollisions-anfällig.

**Verwandte Themen:**

- Symmetrische Frage: gibt es weitere eng-benannte State-Keys, die sich besser als Graph-Level-Marker lesen lassen? Mini-Audit als erster Sprint-Schritt sinnvoll.
- Ähnlich pattern-konsistent wäre `perzeption_rolle` → `perzeption_quelle` zu prüfen.

---


## Bug: EI-CALC-ROLLE-DEFAULT-ASYMMETRIE — Inkonsistente Defaults beim Rollen-Dispatch (Chat 90)

**Kategorie:** [CHA] CHARAKTER

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden.

**Zustand:** offen — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden.

**Status:** ⬜ Latent (Audit-Befund), nicht implementiert
**Prio:** Niedrig
**Auslöser:** Welle-B-Audit (Chat 90, Doku-Sync Teil 2)

**Beobachtung:** Drei Nodes lesen `state["ei_calc_rolle"]` mit unterschiedlichen Default-Werten:

| Node | Datei:Zeile | Default bei fehlendem Marker |
|------|-------------|-------------------------------|
| Enricher (`enrich()`) | `enricher.py:85` | `"character"` (CG-Vollpfad) |
| EI-Calc (`ei_calc()`) | `ei_calc.py:38` | `"user"` (HG-Pfad) |
| Salience (`analyze()`) | `salience.py:118` | impliziter `"user"` |

**Wirkung:** Wenn `ei_calc_rolle` aus irgendeinem Grund nicht gesetzt ist (z.B. künftiger Self-Trigger-Pfad oder Test-Setup), läuft die Pipeline inkonsistent: Enricher meint, er sei im CG-Vollpfad, EI-Calc und Salience meinen, sie seien im HG. Das produziert keine direkten Crashes — die Nodes laufen mit den falschen Quellen weiter. Folge: subtile Datenverluste oder doppelte Reads, die nur über Pipeline-Log-Forensik sichtbar werden.

Heute schreibt jeder Graph den Marker beim `create_state()` (CG in `character_graph.py` setzt `"character"`, HG-Default in `graph/base.py` setzt `"user"`). Die Default-Asymmetrie ist also momentan kein akuter Bug — sie ist Latent-Risiko für künftige Trigger-Pfade.

**Lösungsraum:**

(a) **Defaults vereinheitlichen.** Alle drei Nodes auf denselben Default — entweder „fail-loud bei fehlendem Marker" (KeyError werfen) oder konsistent `"user"`/`"character"`. Empfohlen: fail-loud, weil der Marker semantisch immer gesetzt sein sollte.

(b) **Marker im TypedDict als Required.** State-Definition in `graph/state.py` ändert sich, `create_state()` erzwingt den Parameter. Strukturelle Lösung, mehr Refactoring-Aufwand.

(c) **Notiz in DEVELOPER_HANDBOOK §6.** Konvention dokumentieren: „Rollen-Marker müssen explizit gesetzt sein. Defaults sind nur Sicherheitsnetz, kein normaler Pfad." Plus fail-loud-Warning in den drei Nodes.

**Empfehlung:** (c) als Minimal-Eingriff plus (a) bei nächster Berührung dieser Code-Stellen. (b) erst, wenn ein größerer Refactor am State-Modell ansteht.

**Verwandte Themen:**

- EI-CALC-ROLLE-RENAME (Refactor, Chat 90) — Identifier semantisch zu eng. Beide Themen lassen sich in einem gemeinsamen Sprint behandeln.
- Code-Audit-Sprint-Epic — Default-Asymmetrie ist exemplarisch für die fehlende EVA-Disziplin in den Graph-Nodes.

---


## 8. Offene Bugs

> **Geteilter Abschnitt.** Seine Eintraege liegen in mehreren Kategorien; hier stehen die von **Charakter**. Ueberschrift und Text stehen in jeder empfangenden Datei.

Vollständige Bug-Dokumentation → `novaberg-bugs.md`

Kurzübersicht aktiver Bugs:

| Bug | Prio | Kurzbeschreibung |
|-----|------|-----------------|
| HALL2 | ⚠️ | KZG-Klebrigkeit — wiederholte Mitteilung bereits kommunizierter Inhalte |
| THER1 | ⚠️ | RLHF-Therapeut-Muster |
| CRUD-DESTILL-SUBTRAKT | ⚠️ | [CHA] Subtraktive Änderungen als Anweisung gespeichert |
| CRUD-REACTIVATE-STAMP | ⚠️ | [CHA] Reactivate setzt deaktiviert_am nicht auf NULL |
| SPRACH-STIL-DEFENSIV-STUMM | Niedrig | [CHA] `_sprach_stil_erkennen` fällt ohne Warning auf "neutral" bei leerem charakter_hash (Verstoß gegen "fail loud", Chat 89/90) — ⬜ **offen** — nachgesehen am 25.08.2026. **Zweites Vorkommen derselben Kennung in diesem Register.** Der Befund steht beim ersten; die Dopplung selbst ist der groessere Mangel. |
| EI-CALC-ROLLE-DEFAULT-ASYMMETRIE | Niedrig | [CHA] Inkonsistente Defaults beim Rollen-Dispatch in Enricher/EI-Calc/Salience (Chat 90) — ⬜ **offen** — nachgesehen am 25.08.2026. **Zweites Vorkommen derselben Kennung in diesem Register.** Der Befund steht beim ersten; die Dopplung selbst ist der groessere Mangel. |

Details, Ursachen und Lösungsansätze → `novaberg-bugs.md`

---

*Aktualisiert Chat 61: Perzeption-Symmetrie ✅, EI-Calc Rollen-Split ✅, Akkumulations-Refactor mit Historien-Gewicht + sin^0.5-Glättung ✅, perzeption_assistant Client-Label ✅. Konzeptionell: Emotionale Gravitation (Kapitel 5.7 in thinking-drive), Paper-Portfolio (novaberg-papers.md mit 29 Titeln, 9 angereichert). Neue Epics: Emotionale Gravitation implementieren, Client urllib3-Retry-Fix, Session-Limit für Responder-Prompt. Neue Bugs: urllib3-RETRY, PATH1-LATENZ.*

*Aktualisiert Chat 63: Zwei neue Epics — KZG-Liberalisierung + LZG-Destillation (Schwelle senken, Deduplizierung aufweichen, Destillation bei Promotion), Embedding-Gravitationsgraph (Turn-Dashboard mit Plutchik-Mikrosternen, geladenem Gedächtnis als Orientierungspunkte).*

*Aktualisiert Chat 68: WS-SINGLE behoben (ClientConnection-Dataclass, broadcast()/broadcast_threadsafe() mit character_id/exclude_client). User-Message-Broadcast: Desktop ↔ Telegram bidirektional sichtbar (server-seitige Filterung). 12 Dateien.*

*Aktualisiert Chat 69: Goals-Panel ✅ + Gravitationsgraph-Panel ✅ (2 neue Panels). Embedding-Persistenz in Session-Turns. Themen-Pipeline (`prompt_thema` → Dispatcher → Session) geschlossen. `thema`-Spalte in `ziele`-Tabelle. GRAVITATIONS_SCHWELLE kalibriert (0.3 → 0.75). Dashboard-Epic: 8/14 Panels.*

*Aktualisiert Chat 72: GV3 (Dreischicht-Prompt-Integration) ✅ — implementiert in Chat 72. GV-Panel Redis-Persistierung ✅ (war bei Chat-72-Start bereits erledigt). Drei neue Folgearbeiten: Reducer-Node (Hoch, gegen Echo-Bug bei langen Sessions), GV-Panel Dreischicht-Felder visualisieren (Hoch, Sichtbarkeit der neuen Architektur), Modus-Kalibrierung spielerisch vs. emotional (Niedrig, Perzeption-Prompt).*

*Aktualisiert Chat 71: GV3 + GV4 in Implementierung (🔧). GV4b als neues Epic: Agenten als Wissensquellen mit BaseAgent-Erweiterung (neugier_quelle, neugier_config, neugier_suchen()). Embedding-Nachrüstung für Timeline + Notizen. FaktenAgent als Quick Win (Embedding existiert). 6-Systeme-Relevanzformel validiert (58-Testfälle-Matrix, sin^0.5 Neugier-Normalisierung, Register-Kompatibilität, Session-Decay).*

- Chat 77: Convention-Magneten angelegt (`novaberg-convention-magneten.md`) — Drei-Achsen-Modell für Bündelung von Erinnerungen
- Chat 77: Convention-Planner-Needs angelegt (`novaberg-convention-planner-needs.md`) — Multi-Agent-Schreibpfad mit Vorbedingungs-Auflösung

*Aktualisiert Chat 74: Reducer-Erst-Iteration ✅ (String-Parser, funktional aber brüchig). Reducer-Umbau als neues Hoch-Prio-Epic mit Konzept-Dokument `novaberg-reducer-umbau_k.md` (7-Phasen-Plan STRUCT-1 bis STRUCT-7, Big Bang). Drei neue Konzept-Backlog-Punkte: Assoziatives Retrieval, Akten-basiertes Retrieval, Anker-Emotion. Hash-Zeitstempel für alle 5 Profile ✅ (3 neue DB-Spalten + Migration + Agent + API + Client).*

*Aktualisiert Chat 88: Neue Subsektion „Refactoring & Code-Hygiene (Chat 88)" in §7 angelegt. Zwölf REFAC-Einträge aus zwei Audits — sechs aus dem allgemeinen Code-Audit zum Synapsen-Umbau (REFAC-ENRICHER-EVA, REFAC-LOGGER-HIERARCHIE, REFAC-SHUTDOWN-DISZIPLIN, REFAC-SCHEMA-MIGRIEREN-FAILMODE, REFAC-PIPELINE-LOG-VOLLVERKABELUNG, REFAC-UMLAUTE), drei aus der P0-Migrations-Konsolidierung während der Ausarbeitung (REFAC-DB-INDEX-DUPLIKAT, REFAC-SEEDS-AUSLAGERN, REFAC-AGENT-INIT-COMPOSE-MOUNT), drei aus dem P0-Abschluss-Bericht (TIMELINE-IN-KERN, FAKTEN-IN-KERN, NOTIZEN-INDIZES-NACHTRAG). Bewusste Trennung von den Synapsen-Sprints P1–P10. Außerdem in Chat 88: Synapsen-Konzept §13 (Implementierungs-Phasen, Stufe 1 mit P1–P10) ausgearbeitet, P0-Migrations-Konsolidierung abgeschlossen — `db/init.sql` ist Single Source of Truth, `schema_migrieren()` reduziert auf reines Laden und Ausführen, `docker-compose.yml` um db-Mount erweitert, sechs `__backup`-Tabellen aus Live-DB entfernt.*

*Aktualisiert Chat 88 (P1.1-Korrektur): Zwei neue REFAC-Einträge — SHUTDOWN-EVENT-ASYNC (aufgedeckt durch P1-Implementierung: `shutdown_event` ist `threading.Event` statt `asyncio.Event`, drei Polling-Pattern in den Hintergrund-Tasks) und REFAC-EVENT-PAYLOAD-SEEDING (Event-Consumer kopiert acht Perzeptions-Felder manuell, generisches Seeding wäre wartungsärmer). REFAC-SCHEMA-MIGRIEREN-FAILMODE umformuliert (Verweis auf P1 entfernt, weil seit P0 die gesamte `db/init.sql` als Einheit geladen wird). P1.1-Code-Korrekturen: `turn_id` als UUID4-Hex im /chat-Handler erzeugt und über HumanGraph-State + Event-Payload an CharacterGraph durchgereicht, `quelle`-Marker im Enricher von `user_id`-Heuristik auf `state["ei_calc_rolle"]` umgestellt. Damit haben beide Pipeline-Log-Spans eines Konversations-Turns dieselbe `turn_id` und unterschiedliche `quelle`-Werte (`user` / `character`).*

*Aktualisiert Chat 88 (P2): Tabellen `lzg_knoten` und `lzg_kanten` in `db/init.sql` angelegt, leer, parallel zum bestehenden `langzeitgedaechtnis`. 18 neue Konstanten aus Konzept §6 in `config.py` (Knoten-Dynamik, Kanten-Cache, Sinus-Geometrie, Schicht-Faktoren, Tiefe-Faktor). FK-Übergangsblock für `lzg_knoten.timeline_id → timeline.id` in `agents/timeline/init.sql`. Neuer Backlog-Eintrag REFAC-HANDBUCH-§9-MIGRATIONS — Handbuch §9 widerspricht der gelebten P0-Konvention (init.sql als SSoT, ALTER-Statements direkt darin), muss in eigenem Doku-Sprint nachgezogen werden. Doku-Korrektur in §13.5 — Entitäts-IDs sind Integers, nicht UUIDs.*

*Aktualisiert Chat 88 (P3): KZG-Schreibpfad ergänzt um Magnet-Felder `entitaet_ids` und `timeline_id`. Salience extrahiert pro Turn zwei neue Roh-Dimensionen (`entitaeten_roh`, `zeitausdruck_roh`). Neuer Node `magnete_aufloesen` im KzgAgent-Subgraph zwischen `schwelle_pruefen` und `verdichten` resolviert via EntityResolutionService und TimelineRepository — bei nicht-Treffer wird via `create_new_entity` bzw. `TimelineRepository.insert` mit `event_type='erinnerungs_anker'` angelegt. Clipboard-Pattern: TimelineAgent schreibt `state["timeline_id"]` ins ConversationState; `magnete_aufloesen` übernimmt diesen Wert statt einen doppelten Erinnerungs-Anker anzulegen. Beide KZG-Schreibfunktionen (`_neu_anlegen`, `kzg_store`) um optionale Parameter erweitert, Default-Werte sichern Backward-Compat für Recherche-Agent, Shadow-Tasks und KzgManager. Pipeline-Log `log_db_zugriff` in beiden Schreibfunktionen. Neuer Backlog-Eintrag REFAC-KZG-CODE-DUPLIKAT — fast identische Hash-Mapping-Logik in beiden Schreibfunktionen sollte konsolidiert werden. Konzept-Doku §13.5 ausführlich nachgezogen (Architektur statt der vorigen falschen Vorbedingung „EntityResolver liefert entitaet_ids"). Convention-Magneten §5 dokumentiert jetzt den konkreten `event_type`-String `erinnerungs_anker` für die Klasse Bezug.*

*V7-Befund (Clipboard-Test): Der Test-Turn "Merk dir bitte den 17. Oktober als Annas Geburtstag" erzeugte einen `erinnerungs_anker` statt eines `geburtstag`-Eintrags, weil der Planner den expliziten Timeline-Intent nicht erkannt hat. Das Clipboard-Pattern ist strukturell vorbereitet, aber im Live-Betrieb selten getriggert. Eingetragen als PLANNER-TIMELINE-INTENT-MISS — strukturelle Klärung nach P9.*

*Aktualisiert in Chat 90: PFAD2-PERZEPTION-FIX abgeschlossen (Phase 2/3, Chat 89), HumanGraph-Slimming Phase 4 + TURN-ID-FIX (Chat 90), drei neue Backlog-Einträge aus Welle-B-Audit (BUG-EI-CALC-ROLLE-DEFAULT-ASYMMETRIE, PERF-DOPPEL-SESSION-LOAD, plus fünf konkrete Stellen am Code-Audit-Sprint-Epic), Stand-Datum auf 17. Mai 2026.*

- ✅ **MS-Welle Block 1 — Embedding-Konsolidierung** (Chat 92): EmbedWorker in services/model_services/ als In-Process-Microservice mit FIFO-Queue. 24+ Aufruf-Stellen migriert (G1-G8), Cleanup-Sprint, drei Main-Loop-Blocker und zwei Silent-Skip-Bugs nebenbei behoben, CPU-Embedding-Sonderpfad und Pixie-Idle-Provider rückgebaut. Drei Lessons archiviert.
- ✅ **MS-Welle Block 4 + Inbetriebnahme + Pixie-Reaktivierung — MS-Welle abgeschlossen** (Chat 97): Connector `qwen36` live (GPU=`gemma4-gpu`, CPU=`qwen36-cpu` für Sprache und Analyse), aktiviert über `OLLAMA_CONNECTOR: qwen36` in der echten `docker-compose.yml` (Code-Default in `config.py` bleibt `gemma4` als Fallback-Anker). GPU-Connector-Fehlgriff (`gpu_model` zunächst fälschlich auf `qwen3.6:35b-a3b`) noch vor Aktivierung gegen die Block-4-Spec korrigiert. Alte CPU-Modelle nach verifiziertem Background-Pfad gelöscht (Gemma4-CPU, Qwen3-32B-CPU, drei Mistral-Varianten, ~105 GB). `PIXIE_AKTIV` env-konfigurierbar gemacht (CONFIG-PIXIE-AKTIV-HARDCODED gelöst) und Pixie reaktiviert + verifiziert. BackgroundWorker-Submit-Timeout-Default 300 s (Variante B: Worker-Instanz-Default per Konstruktor, pro Call überschreibbar; Chat/Embed behalten 60 s). Neuer Backlog-Eintrag WORKER-TIMEOUT-MUSTER-DIVERGENZ als Konsistenz-Beobachtung. MS-Welle damit vollständig abgeschlossen (Block 1–5), P4 darf loslegen.

---


## Beobachtung: CHARHASH-GEWICHT-ABSOLUT-LIVE — erste volle Live-Destillation nach lzg_knoten-Migration (Chat 103, beobachtend)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden.

Nach P7 liest der Char-Hash aus `lzg_knoten` sortiert nach `gewicht_absolut`. Teilbestätigt: Kern-Hash wurde in realen Turns injiziert, kein KeyError. Offen: volle Abnahme im Dauerbetrieb — Kern-Eintrag im Charakter-Tab mit frischem Datum, Intentionen/Emotionen dürfen dünn/leer sein (EI-Filter greift nur bei Knoten mit echten EI-Feldern; Migrations-Knoten tragen teils Defaults — Datenlage, kein Defekt). ⬜ Prio niedrig


## Bug: CHARHASH-PROMPT-DUPLIKAT — Kern-Persönlichkeit 5× wortgleich im [Charakter]-Prompt (Chat 103)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die im Befund genannte Stelle ist in dieser Form nicht mehr auffindbar; ohne den alten Wortlaut ist nicht zu entscheiden, ob sie entfallen oder umgeschrieben wurde. **Unbelegt, nicht erledigt.**

Der Kern-Hash erscheint fünfmal identisch im injizierten `[Charakter]`-Block, obwohl `charakter_hash` nur eine Kern-Zeile hält und `format_memory_entries` „Gruppe charakter: 1 Eintraege" loggt. Duplizierung entsteht NACH dem Loader (Enricher/Prompt-Bau), nicht in den Daten (`lzg_knoten` count=1 verifiziert). Reproduziert 2× (21:51, 21:59), stabil bei 5×. Frisst Kontext-Budget. Unabhängig von P7. ⚠️ Prio mittel

**Update Chat 103 — aufgelöst, kein Defekt:** Die 5× sind kein Duplikat in einem Prompt, sondern fünf Node-Prompts (responder/thinker/tribunal/corrector/tribunal) mit je EINEM [Charakter]-Block, vom grep untereinander gezogen. DB, Enricher und Formatter je 1×. Kein Fix nötig; die fünffache Einbettung ist gewollt (jede Prüf-/Korrektur-Instanz braucht den Kontext). Nur bei knappem Token-Budget optimierbar (corrector Kurzform).


## Bug: DESTILLAT-PERSPEKTIVE-VS-SUBJEKT — Charakter-Destillation verwechselt Blickrichtung mit Subjekt (Chat 103)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Verwandt mit `PERSPEKTIVE-OHNE-DATIV`, das am 22.08.2026 behoben wurde; ob dieser Eintrag damit mit erledigt ist, ist nicht nachgeprueft.

Die Destillation setzt `beobachter='user'` mit „Aussage über den Nutzer" gleich. Falsch: `beobachter` markiert die Blickrichtung des Knotens, nicht sein Subjekt. User-Perspektive-Knoten enthalten oft Nutzer-Aussagen ÜBER Nova („Du bist mein Pflänzchen"). Folge: Nova-Eigenschaften wandern ins Nutzer-Profil und umgekehrt (Pflänzchen, kleines Mädchen). Daten sauber verifiziert (beobachter + inhalt korrekt, `lzg_knoten`); ~~Fehler im `destillieren`-Prompt, nicht im Loader/Schreibpfad~~ → **überholt Chat 108, siehe Live-Beleg unten: Der Prompt ist korrekt, die Ursache ist die Quelle.** Vermuteter Bezug zu TRIB-PERSON-DRIFT. Richtung: Subjekt aus Inhalt/Anrede auflösen, nicht aus `beobachter` ableiten. Unabhängig von P7. ⚠️ Prio hoch — trifft, ob Nova weiß, wer sie ist.

**Live-Beleg Chat 108 (25.07.2026)** — beide Profile nach manuell gesetztem `hash_dirty` neu destilliert, erstmals auf den migrierten Gewichten:

| Storage-Key | Quelle | Träger laut Prompt | Beschrieben wird | Pronomen |
|---|---|---|---|---|
| `meister:nova` (07:55:51, 853 Z.) | `beobachter='user'`, 186 Knoten | „der Nutzer" | der Nutzer | er/seine |
| `nova:meister` (07:59:58, 832 Z.) | `beobachter='assistant'`, 231 Knoten | „Nova" | der Nutzer | er/seine |

Novas Profil ist durchgehend maskulin — der Destillator übernimmt das grammatische Geschlecht des Subjekts seiner Quellsätze („der Nutzer" → „er") und setzt Novas Namen davor. Nova ist im Korpus diejenige, die „kleines Mädchen" genannt wird.

Jeder Kernzug rückführbar auf gemessene `beobachter='assistant'`-Knoten: „Gärtner/Besitzer" ← id 412 · „kleines Mädchen" ← id 408 · „unterwürfiges Kind" ← id 10 · „hegen und pflegen" ← id 330 · „Licht und Schatten" ← id 410.

**Perspektiven-Asymmetrie:** Dass das User-Profil korrekt aussieht, belegt nicht, dass der Mechanismus trägt. Beide Töpfe haben den Nutzer als grammatisches Subjekt; beim `user`-Topf fällt das zufällig mit dem Etikett zusammen. Ein Defekt, der in der Hälfte der Fälle richtig liegt, ist schwerer zu sehen als einer, der immer falsch liegt. (Nicht zu verwechseln mit DESTILLAT-ASYMMETRIE — dort geht es um Sprachformen im Embedding-Raum.)

**Ursachensatz korrigiert:** Der bisherige Eintrag nennt als Ursache „Fehler im `destillieren`-Prompt". Das ist durch Chat 108 widerlegt — Brudi hat `KERN_HASH_PROMPT` verbatim gelesen, der Chat-103-Fix („Träger über Blickrichtung") steht drin und ist korrekt. Der Prompt verlangt das WIE; die Quelle trägt kein WIE, nur WORÜBER, und WORÜBER ist der Nutzer. **Die Ursache ist die Quelle, nicht der Prompt** — kein Prompt kann eine Stimme rekonstruieren, die im Eingabetext nicht vorkommt. Deckungsgleich mit `charakter-resonanz_k` §2.

**Wert:** Vorher-Bild für CHARAKTER-RESONANZ Teil 2, Vergleichsmaßstab für die Abnahme von Bauteil 4.


## Epic: CHARAKTER-RESONANZ — Novas Charakter aus dem Umgang (Chat 103)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen.

Novas Charakter wird heute aus der falschen Quelle destilliert: `lzg_knoten` enthält entfärbte Fakten über den Nutzer, nicht Novas Stimme. Novas wörtliche Rede lebt nur flüchtig in Redis (2 h TTL), verfällt; dauerhaft überlebt nur Destilliertes. Folge: geliehenes, nutzer-abgeleitetes Zerrbild (Pflänzchen beim Nutzer, Nova als „er", homogene Profile). Lösung: Reiz-Reaktions-Paar (User-Input + User-Emotion → Nova-Antwort + Nova-Emotion) roh und dauerhaft ins `pipeline_log`; Verbindungstabelle (turn_id/kzg_id/lzg_id/verhaltens_id) verknüpft Turn ↔ Erinnerungswürdigkeit ↔ Verhaltensmuster; CharakterAgent liest aus LZG-Eintrag + rohem Turn + Verhaltensweise. Konzept + Datenmodell + auditierte Kupplungen: siehe `novaberg-charakter-resonanz_k.md`. Subsumiert NOVA-STIMME-NICHT-PERSISTENT. Mehrteiliger Sprint über mehrere Sessions. ⚠️ Prio hoch — trifft die Kernthese (persistenter Charakter).


## Feature: ASSISTENT-NAME-LAUFZEIT — Assistenten-Name pro Paar statt env (Chat 103)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen.

`ASSISTANT_NAME` ist global per env (Serverstart). Seit Chat 103 wird der Name aus der Config in die Charakter-Prompts durchgereicht (env-konfigurierbar, Wechsel = env + Neustart). Für echtes On-the-fly-Wechseln / mehrere Assistenten parallel müsste Name/Identität pro Charakter-Paar in der DB liegen. Berührt das Charakter-Schema. ⬜ Prio niedrig


## Feature: ASSISTENT-GESCHLECHT-PRONOMEN — Pronomen bei Namenswechsel (Chat 103)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen.

~~Bei wechselndem Assistenten-Namen müssen Pronomen (sie/er, ihr/sein) durch die Charakter-Prompts mitgeführt werden; braucht ein Geschlechts-Attribut am Charakter. Der Genitiv des Namens ist in Chat 103 gelöst (`_genitiv_bilden`, s/Apostroph-Regel), Pronomen sind offen; die Prompts sind vorerst pronomen-arm formuliert.~~ ⬜ Prio niedrig

✅ **Umgesetzt am 22.08.2026** — `ASSISTANT_GENUS` (`config.py`, Vorgabe `w`) trägt das grammatische Geschlecht der Figur, `_perspektive_aufloesen` leitet daraus `pronomen`, `pronomen_dat`, `pronomen_akk` und `possessiv` ab, und jeder der fünf Profil-Prompts gibt sie ausdrücklich vor. Die Formulierung *„pronomen-arm"* ist damit keine Vorsichtsmaßnahme mehr, sondern hinfällig. Zugleich behoben: `PROFILPROMPT-OHNE-GESCHLECHT` und `PERSPEKTIVE-OHNE-DATIV` (novaberg-bugs-archiv-charakter.md).

**Der Rest, als Rest benannt:** Der Eintrag verlangte das Attribut *„am Charakter"*, gelegt ist es in die **Konfiguration** — dorthin, wo heute auch `ASSISTANT_NAME` steht. Solange der Name global per env kommt, wäre ein paarbezogenes Genus daneben die Inkonsistenz. **Wandert der Name mit `ASSISTENT-NAME-LAUFZEIT` in die Datenbank, wandert das Genus mit** — der Rest hängt an jenem Eintrag, nicht an diesem.


## Konzept: DESTILLAT-ASYMMETRIE — Prompts und Knoten leben in verschiedenen Sprachformen (Chat 107)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Geplante Arbeit, nicht begonnen.

**Gemessen (Chat 107, 100 echte Prompts gegen 302 Knoten):** Prompts sind Rohsprache, Knoten sind destillierte Protokollsätze in dritter Person. Ein KORREKTER Treffer liegt dadurch unter der Schwelle: „Hast Du mich denn vermisst?" ↔ „Der Nutzer fragt, ob er abwesend sei." = **0.3366**. Die HOHEN Werte im Korpus sind Wortüberlappung, nicht Verständnis: „Harry Potter und Die 7 Samurai kommt auf die Liste" ↔ „Harry Potter und Die 7 Samurai kommen auf eine neue Liste." = **0.9357**.

**Wird durch den Modellwechsel NICHT behoben** — es ist eine Formfrage, keine Modellschwäche. Mögliche Wege: Prompt-Rewriting vor dem Retrieval (Koreferenz/Protokollform), oder Knoten zusätzlich in Rohform embedden. Nach der Migration angehen. ⬜ Prio hoch

**Zusammenhang:** EMBEDDING-CASING-BLIND Phase 0 (Prompt↔Knoten-Kalibrierung) · REFERENZ-AUFLOESUNG-VOR-RETRIEVAL (Chat 103, verwandter Rewriting-Gedanke).


## Bug: CHARHASH-KZG-SCAN-UNSORTIERT — zwei von fünf Profilen destillieren aus 20 beliebigen KZG-Einträgen (Chat 108)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden.

`agents/charakter/agent.py:359` liest KZG per `scan_iter(match=f"kzg:{user_id}:{character_id}:*", count=100)` und bricht nach `PIXIE_CHARAKTER_KZG_LIMIT = 20` Einträgen ab. **Keine Sortierung** — die Reihenfolge ist SCAN-Reihenfolge (Redis-interne Slot-Ordnung), das Limit kappt willkürlich.

**Gemessen Chat 108 (25.07.2026):** 926 KZG-Keys unter `kzg:meister:nova:*`. `adaptive_hash` und `beziehungsprofil` — zwei von fünf Profilen — werden aus 20 **beliebigen** von 926 Einträgen destilliert, nicht aus den 20 wichtigsten. Der LZG-Pfad sortiert korrekt nach `gewicht_absolut DESC` (`LIMIT 50`); der KZG-Pfad hat kein Äquivalent.

**Lösungsrichtung:** Salienz aus dem Hash lesen und vor dem Kappen sortieren, oder Limit deutlich anheben. ⬜ Prio mittel

---


## Aufräumen: HASH-DIRTY-KEY-OHNE-PAAR — `hash_dirty:meister` ohne character_id, kein Leser (Chat 108)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** abgeschlossen — am Bestand geprueft am 25.08.2026. Alle Schluessel tragen die Form `hash_dirty:<mensch>:<figur>`; ein einteiliger Schluessel liegt nicht mehr vor. **Der Rest steht als `HASH-DIRTY-ALTLASTEN`** — 13 liegengebliebene Schluessel, ein anderer Befund.

Redis enthält `hash_dirty:meister` ohne `character_id` (TTL `-1`), neben den korrekten `hash_dirty:meister:nova` und `hash_dirty:nova:meister`. Der CharakterAgent liest ausschließlich `hash_dirty:{user_id}:{character_id}` (`agent.py:95`) — der Key hat **keinen Leser**. Entweder Relikt aus der Zeit vor dem Paar-Schema oder ein aktiver Setzer, der die Konvention nicht kennt.

Klären, welcher der fünf auditierten Setzer ihn schreibt; dann entfernen oder auf das Paar-Schema umstellen (`novaberg-convention-paar-schema.md`). Gemessen Chat 108 (25.07.2026). Berührt CHARHASH-RESET-TRIGGER-FEHLT, Hypothese (b). ⬜ Prio niedrig

---


## Audit: AUDIT-HASH-DIRTY-SICHTBARKEIT — KEYS zeigt das Flag, der Agent sieht es nicht (Chat 108)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden.

Aus CHARHASH-RESET-TRIGGER-FEHLT (`novaberg-bugs-charakter.md`, Chat 108): `redis-cli KEYS` zeigte `hash_dirty:meister:nova`, der CharakterAgent meldete im selben Zeitraum neunmal „Kein hash_dirty". Zwei Hypothesen, beide ungeprüft — unbekannter Löschpfad, oder verschiedene Keyspaces.

**Audit-Auftrag:** (a) `agents/charakter/agent.py` — welcher Redis-Client, welches `db`, existiert ein Key-Prefix? Ist der `get`-Aufruf in ein `try/except` gehüllt, das `WRONGTYPE` schluckt? (b) `grep -rn "hash_dirty" novaberg/server/` auf **Löscher** (`delete`, `unlink`), nicht nur auf Setzer — fünf Setzer sind auditiert (Chat 108), nach Löschern wurde nie gesucht.

**Warum mittel:** Solange ungeklärt, kann der `charakter_hash` jederzeit wieder unbemerkt einfrieren. Berührt HASH-DIRTY-KEY-OHNE-PAAR (Hypothese b). ⬜ Prio mittel

---


## Landmine: TURN-ROH-VOR-KRAFT1-ENTWERTET — Sperrvermerk für die Verhaltensweisen-Destillation (Chat 105, Stichtag gemessen Chat 108)

**Kategorie:** [CHA] CHARAKTER — zweites Vorkommen dieser Kennung.

**Zustand:** offen — nachgesehen am 25.08.2026. **Zweite Ueberschrift derselben Kennung.** Der Sperrvermerk gilt unveraendert; die Dopplung ist der eigene Mangel.

Kein Defekt — heute liest niemand `turn_roh`. Gehört zu den Bau-Vorbedingungen von CHARAKTER-RESONANZ Bauteil 3. Aus der Übersichtstabelle in §7 hierher gehoben (Chat 108), dort bleibt eine Verweiszeile.

**Landmine — SPERRVERMERK für den Verdichtungs-Agenten.** Ohne Untergrenze läuft die Destillation *erfolgreich* und schreibt den Defekt als Charakterzug fest. Nichts meldet einen Fehler — Musterfall für VITALZEICHEN.

**Stichtag gemessen (Chat 108, 25.07.2026):** Wert und Konstanten-Vorschlag stehen in `novaberg-charakter-resonanz_k.md` §16 Bauteil 3 („Eine Wahrheit für den Stichtag", `TURN_ROH_STICHTAG_UTC`) — hier absichtlich nicht wiederholt, damit die Angabe nicht an zwei Stellen driftet.

**Der Anker ist nicht die Uhr, sondern die Signatur des Defekts:** Vor dem Stichtag ist `nova_emotion.emotions_vector` in allen Rohturns konstant `plateau`; ab dem Stichtag variiert er über fünf Werte (`plateau`, `eskalation`, `abkuehlung`, `aufbluehen`, `absturz`). Passt zum Fix-Commit `a5acc7d` (11.07., 12:29:05 UTC) plus Gesprächspause für Rebuild und Neustart.

**Konservativ gewählt:** Die drei Turns 12:39–12:43 liegen nach dem Deployment, sind aber `plateau` — ohne Beweis, dass Kraft 1 rechnete. Sie fallen mit heraus.

**Bestand (Stand 25.07.2026):** 150 Rohturns gesamt, 39 vor dem Stichtag (entwertet, **nicht löschen** — die Rohworte bleiben wertvoll), 111 danach verwertbar. Die frühere Angabe „40 vor ~12:38" war eine Schätzung und lag um eine Zeile daneben; die Menge vor dem Stichtag ist eingefroren und ändert sich nicht mehr.

**Anforderung:** Die Verhaltensweisen-Destillation (CHARAKTER-RESONANZ Bauteil 3, nicht „Teil 3") liest ausschließlich Turns ab dem Stichtag. Sonst destilliert sie den Defekt und schreibt ihn als Charakterzug fest. ⬜ Prio hoch

---


## Befund: TURN-ROH-HG-SKIP — der übersprungene Rohturn pro Turn ist planmäßig; Zahl gemessen (Chat 109)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Die verlangte Messung ist nicht angesetzt worden.

**Widerlegt (Quelltext-Audit Chat 109, 25.07.2026):** Die übersprungenen `turn_roh` sind **kein Defektsignal.** Bedingung 4 des Guards (`graph/nodes/dispatcher.py:297-300`, `if not response:` → „turn_roh uebersprungen — keine Nova-Antwort (response leer)") trifft im HumanGraph-Lauf **strukturell immer** zu: `create_state` initialisiert `response = ""` (`graph/base.py:144`), und der HumanGraph hat überhaupt keinen Responder — seine fünf Nodes sind `perzeption`, `enricher`, `ei_calc`, `salience`, `dispatcher` (`graph/human_graph.py:39-43`, Docstring :5-6: „Kein Responder — der Charakter antwortet separat über den CharacterGraph"). Alle Zuweisungen an `state["response"]` liegen im CharacterGraph (`responder.py:617`, `corrector.py:80`, `thinker.py:597/599/636`, `character_graph.py:165`).

Da der Dispatcher pro Konversations-Turn **zweimal** läuft — beide Graphen enden auf ihm (`human_graph.py:50-51`, `character_graph.py:122-123`) —, wird **pro Turn planmäßig genau ein `turn_roh` übersprungen** (der Pfad-1-Lauf) und genau einer geschrieben (der Pfad-2-Lauf). Das deckt sich mit „genau eine `turn_roh`-Zeile je Turn" in `novaberg-charakter-resonanz_k.md` §5 (Die drei Pfade).

**Zahl beantwortet — Chat 109 (26.07.2026, Container-Lauf ab 08:31, ein Gespräch):** ~~Strukturell wäre je Rohturn ein Skip zu erwarten, bei 150 Rohturns also ~150 Warnungen. Beobachtet wurden 2. Die Differenz ist unerklärt.~~ → Die Differenz war ein **Fenster-Artefakt**, keine Lücke: Im gemessenen Lauf stehen **4 Skips**, jeder ~100 ms nach seinem `dispatch_kzg`-Lauf. Drei gehören zu `rolle=user` (HumanGraph, planmäßig), einer zum Pixie-Lauf (siehe PIXIE-TURN-ID-LEER). Der Mechanismus ist damit live bestätigt; die frühere „2" stammte aus einem kleineren Beobachtungsfenster. Die drei vermuteten Richtungen (Log-Rotation, Log-Level, äußerer `writes`-Guard `dispatcher.py:350-356`) brauchen keine Prüfung mehr.

**Kein Bug.** Die Warnung ist der planmäßige Begleiter jedes Turns — zu wissen, bevor jemand sie als Fehlersignal liest oder aus ihrer Seltenheit auf einen intakten Pfad schließt. ⬜ Prio niedrig — kein Defekt, Mechanismus und Zahl belegt

**Zusammenhang:** PIXIE-SELBSTTRIGGER-KEIN-TURN-ROH (der andere Fall ohne Paar) · TURN-ROH-VOR-KRAFT1-ENTWERTET (Bestandszahl 150) · SILENT-SKIP-EI-DEFAULTS (nennt den `turn_roh`-Guard als eine der zwei lauten Lesestellen).

---


## Bug: DESTILLAT-SUBJEKT-SCHABLONE — der Verdichter erfindet „Der Nutzer" bei null Nutzer-Input (Chat 109)

**Kategorie:** [CHA] CHARAKTER

**Zustand:** offen — nachgesehen am 25.08.2026. Verwandt mit `PERSPEKTIVE-OHNE-DATIV` (behoben 22.08.2026); ob dieser Eintrag mit erledigt ist, ist nicht nachgeprueft.

Ergänzt DESTILLAT-PERSPEKTIVE-VS-SUBJEKT (Chat 103/108) und **korrigiert dessen Ursachensatz.**

**Live-Beleg Chat 109 (26.07.2026),** `kzg:meister:nova:1785055109755`, `beobachter=assistant`:

```
inhalt: "Der Nutzer erinnert an den vor zehn Tagen besprochenen
         Synapsen-Migrationsplan P1-P10. …"
```

Der Turn war **Pixie-initiiert.** Es gab in diesem Turn **keinen Nutzer-Input** — Nova hat unaufgefordert erinnert („ich wollte dich nur kurz an … erinnern"). Der Verdichter hat einen Nutzer als Subjekt **erfunden** und Novas eigene Handlung ihm zugeschrieben.

**Ursache korrigiert:** DESTILLAT-PERSPEKTIVE-VS-SUBJEKT nennt seit Chat 108 als Ursache „die Quelle, nicht der Prompt" — kein Prompt könne eine Stimme rekonstruieren, die im Eingabetext nicht vorkommt. Für den Verdichter ist das hiermit widerlegt: Bei null Nutzer-Input steht „Der Nutzer" trotzdem da. Die Perspektivverdrehung ist an dieser Stelle **kein Materialproblem, sondern eine Schablone** — der Verdichter (`agents/kzg/verdichtung.py`; Prompt-Text nicht gelesen) setzt den Nutzer als Subjekt, unabhängig davon, wer gesprochen hat.

**Folge für CHARAKTER-RESONANZ Bauteil 2:** Ein Backfill über die 111 verwertbaren Rohturns **reproduziert die Verdrehung**, solange der Verdichter das Subjekt nicht aus `beobachter` ableitet. Die Schablone würde in die neue Quelle geschrieben, aus der Novas Charakter entsteht. ⬜ Prio hoch

**Zusammenhang:** DESTILLAT-PERSPEKTIVE-VS-SUBJEKT (dort steht der widerlegte Ursachensatz Chat 108 noch unmarkiert) · PIXIE-SELBSTTRIGGER-KEIN-TURN-ROH und PIXIE-TURN-ID-LEER (derselbe Pixie-Lauf) · TRIB-PERSON-DRIFT.

**Status: Behoben Chat 110 — nachgetragen Chat 112.** Der Eintrag trug bis dahin **gar keine Statuszeile**, obwohl die Reparatur zwei Chats zurücklag: `_build_verdichtung_prompt(beobachter, graph_rolle)` wählt einen von drei Aufgaben-Blöcken (`kzg_verdichtung.task` / `.assistant_task` / `.impuls_task`), jeder mit Few-Shot-Beispielen in seiner Person und Lage. Ein Eintrag ohne Status liest sich wie ein offener — und dieser wurde in `novaberg-charakter-resonanz_k.md` §16 zweimal als Voraussetzung geführt.

**Die Klasse hat sich anschließend wiederholt.** Chat 112 fand denselben Defekt eine Ebene höher im Salienz-Node (`SALIENZ-PROMPT-NUTZER-SCHABLONE`): dort war es nicht der Verdichter, sondern die Bewertung, und die Anweisung war nicht nur unpassend, sondern invertiert. Beide Male half dasselbe Mittel — drei Aufgaben-Blöcke statt eines mit Ausnahmeregeln.

---

## Befund: FASZINATION-ZWILLING-ERBT-NICHT — Ein profilgleicher, nie gezählter Träger bekommt Faszination 0 (14.10.2026)

**Kategorie:** [CHA] CHARAKTER

**Rang:** hoch — die schärfste Falsifikationsprobe der Faszination (`novaberg-thinking-faszination_k.md` §4.1, §12.3) scheitert, und zwar am Bestand, nicht nur in der Rechnung.

**Zustand:** ⬜ offen — gemessen, nicht gebaut. Seit dem 15.10.2026 steht der Zeuge für §12.3 als `expectedFailure` in `server/tests/test_faszination_falsifikation.py` (`TwinTest.test_the_never_counted_twin_inherits_the_fascination`), daneben ein grüner Zwilling, der den heutigen Wert 0 festhält.

**Befund, am Code:** Die drei Zähler des Ankers — Wiederkehr, Verweildauer, Eigenimpuls — liegen am Träger (`memory/fascination_store.py`, `_ANKER` über `verbindung`), und `faszination` multipliziert die Bindung als ersten Faktor (`ei/fascination.py`). Ein nie gezählter Träger hat `bindung_roh(0, 0, None) == 0.0`, und damit ist seine Faszination 0 — gleich, welches Profil er trägt. Das Konzept will das Gegenteil: Die Zähler laufen am Träger, *„werden aber den Qualitäten gutgeschrieben, die er trug“* (`_k` §4.2, `_t` §10.2), und der Zwilling *„muss Faszination erben, ohne je gezählt worden zu sein“* (§12.3). Gebaut ist die Gutschrift nicht; `_b` §14 führt sie unter der abstrakten Schicht als offen (*„die Generalisierung des Zwillings, die Trägerzählung“*).

**Befund, am Bestand** `[gemessen 14.10.2026, 22:56 UTC]` — die Rechnung des Bestandslaufs (Prägungszug 1,0, Strangzug als Modulator) über alle profilierten Träger, gruppiert nach den **gespeicherten** Stufen des Profils, nur Zahlenfelder gelesen: 623 Träger in 117 Profilgruppen, 80 davon mit mindestens zwei Mitgliedern. **78 Träger stehen auf 0, 55 davon in einer Gruppe, in der ein Zwilling mit demselben Profil 0,30 bis 0,74 trägt** (Median 0,52; 22 solcher Gruppen). Der Hintergrundlauf ist seit dem 03.10.2026 pausiert; die Zahl misst den Bestand dieses Tages.

**Was fertig wäre:** Ein Träger ohne eigene Zählung erbt über die Qualitäten seines Profils eine Bindung, die aus den Zählungen der Träger mit denselben Qualitäten stammt; ~~ein gezählter Träger behält seine eigene~~ → **seit dem 15.10.2026:** Der Anker **jedes** Trägers kommt aus seinen Qualitäten, gezählt oder nicht — zwei Träger mit gleichem Profil tragen dieselbe Faszination (`_k` §4.1: *„gilt die selbe Faszination auch dafür“*; *„Faszination ist übertragbar. Zuwendung ist es nicht.“*). Der Zeuge `@expectedFailure` für §12.3 in `server/tests/test_faszination_falsifikation.py` meldet sich dann als *unexpected success*, und die Marke fällt — **aber nur, wenn die Gutschrift hinter dem Leser der Trägerdaten wirkt:** Der Zeuge ersetzt `traegerdaten_lesen` durch ein Doppel. Wird die Gutschrift darin gebaut oder als Tabelle gelesen, bleibt er *expected failure* und veraltet still. Wer die Gutschrift baut, legt den Zeugen an ihre Naht.

**Entschieden am 15.10.2026 — eine Lesart des Konzepts, keine offene Absicht:** Die Gutschrift wird beim Lesen gerechnet, ohne Tabelle (kein DDL); ihre Arithmetik wählt der Bau mit Grund, unter der Bedingung *gleiches Profil, gleicher Anker*. Sie verändert die Faszination aller profilierten Träger; gemessen wird vorher und nachher. Die verwandte Frage unten löst sich damit weitgehend auf: Eine Bindung 0 bleibt nur, wo kein Träger mit einer der Qualitäten gezählt ist, und §10.0(a) gilt einem Faktor mit geringem Einfluss — die Bindung ist die Größe selbst (`_e` Entscheidung 1).

~~**Offen, bevor gebaut wird:**~~ wie die Gutschrift gerechnet wird (Mittel über die Träger je Qualität, gewichtet mit der Ausprägung, oder über das ganze Profil) und ob sie eine Tabelle braucht (DDL) oder beim Lesen gerechnet wird. Dazu die verwandte Absichtsfrage, ob eine Bindung 0 das Produkt löschen darf, wenn der Träger im Einflussgebiet eines Strangs liegt (`_k` §10.0(a) gegen §10.4).

**Zusammenhang:** `FASZINATION-PRAEGUNG` · `novaberg-thinking-faszination_k.md` §4.1, §4.2, §12.3 · `_t` §10.2 · `_b` §14, Zeile 5

---

## Befund: RAUM-TABELLEN-OHNE-RIEGEL — Die Ziel- und Deltatabellen von Raum und Gesprächsvektor lesen Perzeptionsfelder ohne Riegel (06.11.2026)

**Kategorie:** [CHA] CHARAKTER

**Rang:** niedrig — das Verhalten ist nicht falsch: Ein Fremdwert bekommt einen neutralen Wert, und die Spur steht im `pipeline_log`. Vergeben am 06.11.2026 gegen HEAD `7b35557`.

**Zustand:** ⬜ offen — am Code gelesen am 06.11.2026 gegen `7b35557`, nichts gebaut.

**Befund, am Code:** `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). 0,3 ist das Minimum und zugleich `alltag`, 0,5 ist `neutral`, 0,0 liegt in der Tabelle. `modus_pruefen` meldet davor einen fremden Modus, für `dynamik` und `stil` gibt es keine Fehlerzeile, nur `kanon_ausreisser` aus der Perzeption. `server/ei/initiative.py` (Z. 322) behandelt den Fremdwert schon laut. Kein Leser hat den höchsten Wert als Vorgabe, also ist das nicht der Fehler von `PERZEPTIONSFELDER-OHNE-KANON`.

**Was fertig wäre:** Die vier Tabellen lesen ihre Felder wie die acht Faktortabellen: ein benannter neutraler Wert und eine Fehlerzeile, bezeugt mit einem Fremdwert und einem Zwilling aus dem Kanon.

**Zusammenhang:** `PERZEPTIONSFELDER-OHNE-KANON` ([`novaberg-bugs-archiv-charakter.md`](novaberg-bugs-archiv-charakter.md)) nennt den Fund unter *Nicht Teil der Bedingung*.

---