2025-10-06 18:33:42 +02:00
# mindnet – Knowledge Design
**Version:** 1.4.0 (aktualisiert 2025-10-06)
2025-09-09 11:56:54 +02:00
2025-10-06 18:33:42 +02:00
## 1. Gesamtziel und Systemverständnis
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**mindnet** ist ein lokales Wissensnetzwerk, das alle meine Notizen, Projekte, Gedanken, Erfahrungen und Pläne als Markdown-Dateien speichert, automatisch importiert, semantisch in **Chunks** zerlegt und als **Graph-Struktur in Qdrant** ablegt.
Es ist die Grundlage für ein agentenfähiges, lokal betriebenes LLM-System, das meine Daten verknüpft, abfragt und erweitert.
2025-09-09 11:56:54 +02:00
2025-10-06 18:33:42 +02:00
**Zentrale Ziele**
- Vollständige Repräsentation persönlichen Wissens in strukturierter, maschinenlesbarer Form
- Reproduzierbare Verarbeitung: Import → Chunking → Embedding → Edges → Graph
- Verlustfreie Roundtrip-Fähigkeit (Import ⇄ Export)
- Erweiterbarkeit für Agenten, RAG-Retriever und semantische Suche
2025-09-09 11:56:54 +02:00
2025-10-06 18:33:42 +02:00
**Prinzipien**
- **Deterministisch:** IDs, Hashes und Edges wiederholbar
- **Portabel:** Markdown + YAML
- **Robust:** fehlertoleranter Parser
- **Idempotent:** keine Duplikate bei Re-Import
- **Erweiterbar:** neue Typen und Edge-Arten ohne Migration
2025-09-09 11:56:54 +02:00
2025-09-09 12:22:26 +02:00
---
2025-09-09 11:56:54 +02:00
2025-09-09 12:22:26 +02:00
## 2. YAML-Frontmatter-Schema
2025-09-09 11:56:54 +02:00
2025-10-06 18:33:42 +02:00
| Feld | Typ | Beschreibung |
|-------|-----|--------------|
| `title` | string | Menschlich lesbarer Titel |
| `id` | string | Eindeutige Note-ID (Slug) |
| `type` | enum | `concept` , `thought` , `experience` , `task` , `project` , `journal` , `person` , `meeting` , `milestone` |
| `status` | enum | `draft` , `active` , `done` , `archived` |
| `created` | date | ISO-Datum |
| `updated` | date | Letzte Änderung |
| `area` | string | Themen- oder Lebensbereich |
| `project` | string | Zugehöriges Projekt |
| `tags` | list | Strukturierte Tags (`area/…`, `topic/…` ) |
| `depends_on` | list | IDs anderer Notizen |
| `assigned_to` | list | Beteiligte Personen |
| `embedding_exclude` | bool | Falls `true` , keine Embeddings |
| `hash_mode` | enum | Hash-Modus beim Import (`body`, `frontmatter` , `full` ) |
| `priority` | enum/int | 1– 5 oder `low` / `med` / `high` |
| `effort_min` , `due` | int/date | Aufwand / Termin |
| `aliases` | list | Alternative IDs |
| `lang` | string | ISO-Sprachcode |
| `source` | string | Herkunft / Referenzquelle |
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Pflichtfelder:** `title` , `id` , `type` , `status` , `created`
**Optionale Felder:** alle übrigen
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 3. Dateinamen und Ordner
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
- Format: `YYYY-MM-DD_title.md` oder `slug.md`
- Strukturierte Ordner:
- `10_thoughts/` , `20_concepts/` , `30_projects/` , `40_experiences/` , …
- Alle Pfade relativ; Unterstriche statt Leerzeichen
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 4. Link- und Edge-Design
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Verlinkungen**
- Wikilinks: `[[note-id]]` oder `[[Titel|note-id]]`
- Automatische Edges aus Text und Frontmatter
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Edge-Typen in Qdrant**
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
| Typ | Bedeutung | Quelle | Scope |
|------|------------|--------|--------|
| `belongs_to` | Chunk → Note | intern | chunk |
| `prev` / `next` | Reihenfolge | intern | chunk |
| `references` | explizite Wikilinks | Text | chunk |
| `backlink` | Gegenkante zu `references` | abgeleitet | note |
| `depends_on` | YAML-Abhängigkeiten | YAML | note |
| `assigned_to` | YAML-Zuweisung | YAML | note |
| `unresolved` | Ziel fehlt (Stub) | abgeleitet | chunk |
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Edge-Schlüssel**
- `source_id` , `target_id` , `kind` , `scope` , `note_id`
- Dedup-Schlüssel: Kombination aus `(kind, source_id, target_id, scope)`
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 5. Chunking-Modell
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Chunk-Datenstruktur**
| Feld | Beschreibung |
|-------|---------------|
| `note_id` | Zugehörige Note |
| `chunk_index` | Laufende Nummer |
| `text` | Originalabschnitt |
| `window` | Text + Overlap links/rechts |
| `overlap_left` | Länge des linken Overlaps |
| `overlap_right` | Länge des rechten Overlaps |
| `embedding` | 384-dimensionaler Vektor |
| `tokens` | Tokenanzahl (optional) |
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Chunking-Regeln (aus `chunking_strategy.md` )**
- Trennung nach Absätzen, Überschriften, Listen, Tabellen
- Token-Zielgröße 350– 500 (max 600)
- Overlap: 30– 40 % für semantische Kohärenz
- Overlap wird in `window` integriert, sodass `text ≠ window`
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 6. Hash-Strategie und Änderungsverfolgung
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Zweck:** Nur bei realer Inhaltsänderung re-indexieren
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
| Umgebungsvariable | Beschreibung |
|--------------------|--------------|
| `MINDNET_HASH_COMPARE` | Vergleichsquelle (`Body`, `Full` , `Frontmatter` ) |
| `MINDNET_HASH_SOURCE` | Rohtext vs. geparst (`raw` / `parsed` ) |
| `MINDNET_HASH_NORMALIZE` | Normalisierung (`canonical` / `none` ) |
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Basismodi**
- `body` → Nur Textkörper
- `frontmatter` → Nur Metadaten
- `full` → Kombination
- Hash = SHA-256(canonicalized_input)
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
Bei Änderung: Re-Import, neue Embeddings, Edges werden aktualisiert.
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 7. Qdrant-Speicherstruktur
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
| Collection | Inhalt | Primärfelder | Embedding |
|-------------|---------|---------------|------------|
| `mindnet_notes` | Notes mit Fulltext & Hash | `note_id` | optional |
| `mindnet_chunks` | Chunks mit Text, Window, Embedding | `chunk_id` , `note_id` | 384 d |
| `mindnet_edges` | Graphkanten | `edge_id` , `source_id` , `target_id` | — |
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Upsert-Strategie**
- Idempotente UUIDv5-IDs
- Keine Duplikate durch deterministische Signaturen
- `purge-before-upsert` zur Bereinigung
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Indizes**
- notes: `note_id` , `hash_signature`
- chunks: `note_id` , `chunk_index`
- edges: `(kind, source_id, target_id, scope)`
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 8. Fehler-Toleranz und Parser-Robustheit
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
- UTF-8 mit Fallback: ersetzt ungültige Bytes (`errors="replace"`)
- Ignoriert Nullbytes, BOM, exotische Zeilenenden
- Erkennt defekte oder leere YAML-Header und überspringt sie
- Logt Problemfälle (`read_markdown failed`, `make_note_payload returned non-dict` )
- Bei Fehlern: Import → warn → continue
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 9. Tests & Validierung
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Integrationstests**
- Roundtrip: Import → Export → Compare (`compare_vaults.py`)
- Chunk-Integrität: `verify_chunks_integrity.py`
- Hash-Audit: `hash_reporter.py`
- Window-Vergleich: `check_chunks_window_vs_text.py`
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Erwartete Ergebnisse**
- Alle Notes werden erkannt
- `window ≠ text` bei > 60 % der Chunks
- Roundtrip-Vergleich liefert „OK“
- Edge-Anzahl entspricht Modell (belongs_to = #Chunks , next/prev ≈ #Chunks – 1)
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 10. Export & Roundtrip-Verhalten
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
- `export_markdown.py` erzeugt identische Markdown-Dateien
- Schreibt YAML + Body in korrekter Reihenfolge
- Roundtrip-Prüfung (`compare_vaults.py`) validiert:
- vollständigen Body
- unveränderte Hash-Signatur
- gleiche Chunkzahl
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 11. Graph-Schicht und WP-04-Integration
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
- Qdrant fungiert als Graph-Backend
- `graph/service.py` (WP-04): stellt API für Mehrhop-Abfragen bereit
- Unterstützt:
- `expand(note_id, hops=2)`
- `resolve_unresolved()`
- `neighbors(kind=…)`
- Grundlage für spätere **Retriever-Funktionen** (LLM / Agenten)
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 12. Agenten- und LLM-Integration
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Retriever-Pipeline**
1. Suche top-k Chunks (cosine distance)
2. Erweiterung um Edges (`references`, `backlinks` )
3. Kontext-Assembling via `window` -Text
4. Prompt-Generierung
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**Agent-Use-Cases**
- Automatisches Tagging (`type`, `status` )
- Vorschläge für neue Edges
- Auflösen von `unresolved` -Referenzen
- Auto-Import externer Quellen (MediaWiki, PDFs, Webseiten)
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 13. Erweiterbarkeit
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
- Neue Edge-Typen: `inspired_by` , `relates_to` , `contradicts`
- Neue Note-Typen: `decision` , `resource` , `recommendation`
- Embedding-Engines austauschbar (MiniLM → LaBSE → E5)
- Versionierte Chunking-Strategien (`chunk_config.py`)
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 14. Qualitätssicherung und Best Practices
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
- Validierung vor Upsert
- Keine Leer-Chunks
- Vollständige Metadaten in Notes
- Tests in `tests/` automatisch ausführbar (`run_e2e_roundtrip.sh`)
- Ergebnis: „Roundtrip OK“ und `verify_chunks_integrity` = OK
2025-09-09 12:29:55 +02:00
---
2025-10-06 18:33:42 +02:00
## 15. Änderungsverlauf
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**v1.4.0 (2025-10-06)**
- Neu: `window` vs `text` Feld in `mindnet_chunks`
- Neu: Hash-Modi (`body`, `frontmatter` , `full` ) mit Env-Steuerung
- Neu: Baseline-Modus für Vergleich
- Parser → fehlertolerant (UTF-8 replace)
- Roundtrip-Test vollständig integriert
- Graph-Service und Mehrhop-Abfragen (WP-04-Vorbereitung)
- `purge-before-upsert` und `--note-scope-refs` Parameter ergänzt
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**v1.3.0 (2025-09-09)**
- Hash-Normalisierung und Edge-Scope
- Roundtrip-Tests, Agenten-Integration
2025-09-09 12:29:55 +02:00
2025-10-06 18:33:42 +02:00
**v1.2.0 (2025-09-02)**
- Grundstruktur des Knowledge-Designs
2025-09-09 12:29:55 +02:00
---