9.2 KiB
| title | version | status | date | product_family | document_role | parent_document |
|---|---|---|---|---|---|---|
| Kanshō – Memory-Speicher, Sync und Offline | 0.1 | Arbeitsstand | 2026-08-19 | Jinkendo | Technical Chapter / Memory Storage / Sync / Offline | technische_zielarchitektur.md |
Kanshō – Memory-Speicher, Sync und Offline
Kanonisches Home für Gedächtnisschichten und Offline, sobald der Fachstand sie trägt. Die Schichtenbeschreibungen unten spiegeln den heutigen Fach-Arbeitsstand (memory_and_context.md) und sind nicht als finales Speichermodell zu implementieren. Offline-Ausprägung bleibt offen.
1. Schichten
| Schicht | Lebensdauer (fachlich) | Technische Konsequenz |
|---|---|---|
| Working Context | Minuten bis Stunden | lokal, hohe Schreibfrequenz, an die aktive Session/Conversation gebunden |
| Thread Memory | Tage bis Monate+ | persistiert, quellengebunden, darf nicht die Originalnachrichten ersetzen |
| Episodic / langfristig | Jahre | Handoff nach mindnet/Obsidian; Kanshō behält Provenance-Referenzen |
Ein LLM-Kontextfenster ist kein Speicher. Context Builder wählt Ausschnitte; das Gateway minimiert sie erneut vor Egress.
2. Primärquelle und Re-Grounding
Status: fachliche Invariante (Re-Grounding / Originalquelle). Kein SQL-Schema, keine Drift-Formel in v0.1.
- Vollständige Dialoge bzw. eine verlässliche Originalrepräsentation bleiben erhalten.
- Summaries dürfen laufend fortgeschrieben werden, auch mitten im Dialog, nicht nur am Session-Ende.
- Drift-Erkennung und Re-Grounding arbeiten lokal auf Originalquellen. Für externe Inferenz wird danach ein neuer minimierter External Model Context erzeugt. Privacy Guardrails werden dabei nicht umgangen.
Keine unbegrenzte Kette Summary → Summary ohne Rückgriff auf die Quelle.
Konkrete Drift-Metrik, Granularität und Update-Algorithmen: offen.
3a. Strukturelle Vorsorge (Verträge, kein SQL)
Status: entschieden als Vorsorge. Felder, Enums und Tabellennamen bleiben offen. Festgezogen wird, welche Objektarten und Beziehungen das Langzeitdialog- und Erinnerungssystem tragen müssen. Herkunft: memory_and_context.md, dialogue_model.md, resurfacing_and_saturation.md, context_fidelity_and_regrounding.md, self_model_and_lived_experience.md, reflection_outputs.md, reflection_spaces.md.
Ein späteres Schema füllt diese Verträge. Es darf sie nicht kollabieren (z. B. Thread in der Session aufgehen lassen, Summary als Primärquelle, Handoff als Kanshō-Todo).
Objektarten
| Art | Fachliche Rolle | Darf nicht |
|---|---|---|
| Conversation | Geordnete Originalrepräsentation (Layer 0). Stabile Message-IDs, Reihenfolge, Zeit. | Durch Summary ersetzt oder nur im LLM-Fenster existieren |
| Session | Eine Nutzungssitzung / Interaktionszyklus inkl. Checkpoint am Ende | Thread mitabschließen |
| Thread | Reflexionsfaden über Sitzungen hinweg; Zustand und Wiedervorlage am Faden, nicht an der Session | Geschlossene State-Machine vortäuschen; jeder Nebenfaden muss sichtbar sein |
| Thread-Kandidat | Intern markierter möglicher Faden | Automatisch eigener Chat oder bestätigtes Wissen |
| Working Context | Kurzlebiger Arbeitsstand der aktiven Conversation | Langzeitgedächtnis; Egress ohne Gateway |
| Thread Memory | Quellengebundene Verdichtung eines Fadens (Layer 1, versioniert) | Original ersetzen; still als Erkenntnis schreiben |
| Reflection Space | Lebendiger Kontext über Conversations/Threads | Bloßer Ordner; interne Feinstruktur 1:1 in der UX |
| Reflection Intent | Absicht dieser Interaktion, orthogonal zum Space | Mit Space identisch sein |
| Derived record | Summary, Hypothese, Emotionseinordnung, Pattern, Kandidat | Ohne Provenance, ohne Zeit, ohne „abgeleitet“-Kennzeichnung |
| Handoff | Journal / Reflection Memory / Knowledge Delta / Action Candidate | Kanshō-Aufgabenliste; mindnet-Graphkopie |
| External ref | Nullable Verweis mindnet / Obsidian | Besitz des Langzeitgraphen oder des Archivs |
| Re-grounding event | Wann, warum, aus welchen Quellen neu abgeleitet wurde | Nur Debug-Log ohne Quellenbindung |
| Identity mapping | Klasse A, lokal | In Summaries, Prompt-Archiv, mindnet-Handoff |
Point-in-Time Self / Lived Experience ist keine eigene frühe Tabelle, sondern die Konsequenz: Original + zeitgebundene Ableitungen, die frühere Versionen nicht überschreiben.
Beziehungen, die das Modell skalieren
profile_idan jeder personenbezogenen Struktur.- Session 1:n Conversations (oder 1:1, später festlegbar) – ohne 1:1 mit Thread.
- Conversation n:m Threads (ein Gespräch, mehrere Fäden; ein Faden über mehrere Gespräche).
- Thread n:1 oder n:m Spaces (Zuordnung darf vorläufig/unsicher sein).
- Jede Ableitung:
source_ids[]auf Messages/Conversations,as_of,confidence/uncertainty,kind. - Sichtbarkeit getrennt von Existenz: intern vs. nutzersichtbar (Space-Regel: KI strukturiert, Nutzer verwaltet nicht die Feinstruktur).
- Handoffs referenzieren Kanshō-Quellen; sie sind nicht der Dialogspeicher.
- Message-IDs idempotent (späteres Offline, Sync-Hypothese).
Schichtenzuordnung
| Layer | Hier |
|---|---|
| 0 | Conversation/Messages, Session, Thread-Identität und Anker (Wiedervorlage), Space-Identität, Mapping |
| 1 | Working-Context-Snapshot, aktuelle Thread-Memory-Version, Space-„aktueller Stand“, später Relevanz/Saturation als registrierte Leser |
| 2a | Context Builder wählt Layer-1- und Quell-Ausschnitte; Gateway minimiert erneut |
| 2b | Fortsetzungsvorschlag, Space-Ansicht, Aufklappen zur Quelle – keine zweite Verdichtungsformel |
Kontinuitätsarbeit ist ein laufender Schreibpfad auf Layer 0/1, auslösbar mitten im Dialog und am Session-Checkpoint. Sie ist unabhängig vom sichtbaren Abschluss und unabhängig davon, ob ein Handoff entsteht.
Bewusst nicht schließen
- Thread-Zustandsliste (
Open/Anchored/Dormant/Resolvedsind Hinweise, kein Enum-Vertrag). - Drift-Formel, Saturation-Score, Entry-IA (Contextual Continuation).
- Self-Model-Felder, Episodic-Schema in Kanshō (Handoff-Ziel mindnet/Obsidian).
- SQL, Sync-Engine, Offline-Store.
Erweiterbarkeit
Neue fachliche Arten (z. B. weiteres Derived-kind, weiterer Handoff-Typ, feinere Space-Sicht) kommen als registrierter Typ plus Provenance, nicht als Sonderpfad in der Conversation-Tabelle und nicht als Prompt-Text im Code. Retrieval in den Langzeitgraphen bleibt Adapter + External ref, kein zweites mindnet in Kanshō.
Session-Ende ist ein Checkpoint, kein Zwang zu Journal/Memory/Delta/Action. Technisch heißt das: Persistenzpfade für Original und interne Kontinuität existieren unabhängig von Handoff-Tabellen oder sichtbaren Abschluss-Screens.
4. Offline
Anforderung: entschieden. Ausprägung: offen.
Leitplanken, die jede spätere Lösung erfüllen muss:
- Dialoge müssen lokal zwischenspeicherbar sein (fachliche Anforderung).
- Konfliktbehandlung und Sync sind zu definieren, bevor Multi-Gerät produktiv personenbezogene Dialoge führt.
- KI-Funktionen dürfen online bleiben; Fail Closed gilt für unsichere Provider, nicht als Ausrede, lokale Eingaben zu verwerfen.
- App-Shell-Cache (PWA) ist nicht dasselbe wie Dialog-Offline.
- Verschlüsselung at rest auf dem Gerät: offen, siehe
security.md.
Lokale kleine Modelle: fachlich offen, nicht als Voraussetzung des Rahmens.
5. Sync-Hypothese
Status: Hypothese
Ein Gerät schreibt in eine lokale Queue, das Backend ist Source of Truth nach erfolgreichem Sync. Idempotente Message-IDs verhindern Duplikate. Konflikte an Originalnachrichten sind selten (ein Nutzer, ein aktiver Dialog); Konflikte an Summaries werden durch Neuberechnung aus der Quelle gelöst, nicht durch Merge von Verdichtungen.
Diese Hypothese ist zu verwerfen oder zu bestätigen, sobald Geräte- und Offline-Szenarien in Phase G4 entschieden sind.
6. Entscheidungsstand
| Thema | Stand | Status |
|---|---|---|
| Mehrere Memory-Schichten | heutiger Fachstand | nicht als Schema einfrieren |
| Original vor Summary / Re-Grounding | fachliche Invariante | bindend, sobald Memory gebaut wird |
| Objektarten und Lebenszyklus-Trennung | Verträge in §3a | entschieden als Vorsorge, kein SQL |
| mindnet nicht Working Memory | wahrscheinlich | bevorzugte Richtung |
| Offline-Fähigkeit | erforderlich | entschieden (fachlich), Ausprägung offen |
| Sync/Konflikte/lokale DB | – | offen |
| Drift-Berechnung | fachlich nötig | bevorzugte Richtung, Technik offen |
6.1 Implementierungsstand (Rahmen-Schnitt)
Status: Code vorhanden, Heuristiken nicht.
Layer-0-Tabellen usage_sessions (nicht Auth-sessions), conversations, messages, Thread-/Space-Identität, derived_records (append-only, Kind-Registry), Handoff-/Ref-/Re-Grounding-/Mapping-Hüllen. Continuity-Checkpoint ohne LLM. Admin trennt Original und Derived. Die Dialogseite speichert nur Originaltext.
Nicht enthalten: Entry-IA, Fadenerkennung, Thread-Enum, Summaries über das Gateway.
7. Offene Fragen
- IndexedDB vs. SQLite-WASM vs. nur Service-Worker-Queue?
- Wird Audio nach Transkription gelöscht oder als Medium behalten? →
voice_and_media.md - Wie greift Re-Grounding bei teilweise gesyncten Sessions?
8. Querverweise
data_architecture.md,frontend_pwa_shell.md,privacy_gateway.md- Fachlich:
memory_and_context.md,resurfacing_and_saturation.md