spike(wissensbasis): on-device Embedding-Retrieval + Sync für mm-knowhow #258
Labels
No labels
app/archiv
app/einkaufslisten
app/imap-client
app/wissensbasis
arch-answered
arch-question
area/api
area/auth
area/infra
area/mobile
area/shared
area/ui
area/web
portfolio-status
prio/high
prio/low
prio/medium
roadmap/public
size/l
size/m
size/s
size/xl
size/xs
status/blocked
status/needs-info
type/bug
type/chore
type/docs
type/feature
type/idea
type/refactor
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin-mrrm/mrrmlabapp#258
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Machbarkeitsnachweis, dass eine persönliche Markdown-Wissensbasis (
~/storage/dev/mm-knowhow/notes/) als App-Feature funktioniert: natürlichsprachige Frage → Top-N passende Notes, lokal auf dem Phone, mit Server-Sync. Generation/Chat bewusst draußen — Antwort = Liste der Note-Treffer.Hintergrund
MM-knowhow ist eine wachsende Markdown-KB mit YAML-Frontmatter (
id, title, tags, links, created, updated). Ziel ist eine App-Anbindung, die offline durchsuchbar ist und sich mit dem Server synchron hält.Entscheidungen aus Vorgespräch:
Aufgaben
paraphrase-multilingual-MiniLM-L12-v2vs.bge-m3(small) — Größe, Qualität auf 5–10 echten Test-Queries gegen aktuelle Notessqlite-vecExtension vs. Vektoren als BLOB + Cosine in JS — Mini-Benchmark bei ~200 NotesGET /notes,PUT /notes/:id, einfachesupdated-Timestamp-Diff)updated-Timestamp; Konflikt-Log für später)Ergebnis
Spike-Bericht (als Wiki-Seite oder Issue-Kommentar) mit:
Akzeptanzkriterien
Abhängigkeiten / nicht in diesem Issue
IDataSource-Interface + Adapter für Mails, Listen, Notizen #441PM-Refinement (2026-06-08) — Scope-Aktualisierung nach KI-Foundation rc16–rc19
Seit der Spike-Formulierung ist die Phase-1-KI-Foundation (Epic #122) auf Gerät validiert. Zwei zentrale Spike-Fragen sind dadurch implizit beantwortet und sollten den Scope verschlanken:
Bereits entschieden durch ausgeliefertes Phase-1-Stack
Xenova/multilingual-e5-small(ONNX, dim=384) — läuft viaonnxruntime-react-native(sieheapps/mobile/src/services/embedding-service.ts). Modell-VergleichMiniLMvs.bge-m3ist damit nicht mehr Spike-Scope — Baseline ist gesetzt; eine Re-Evaluation lohnt nur, falls die KB-Use-Case-Messung explizit Qualitätsprobleme zeigt.sqlite-vecstatisch gelinkt via@op-engineering/op-sqlite("sqliteVec": true). Adapter unterapps/mobile/src/services/op-sqlite-vector-store-db.ts. Auch hier: kein BLOB+JS-Benchmark mehr nötig.Verbleibender Spike-Scope (geschärft)
IDataSource-Adapter — Markdown-Notes aus~/storage/dev/mm-knowhow/notes/als zusätzliche Quelle in das bestehende Index-/Such-Stack (analog zu Mail/Listen/Notes). Liefert das die gewünschte Such-Qualität für KB-Queries?GET /notes,PUT /notes/:id,updated-Diff. Bezug zum geplanten Day-Planner Source-Pattern (#360) prüfen.Geschärfte Akzeptanzkriterien (Vorschlag)
IDataSource-Adapter geschrieben + lokal indexierbar (~200 Notes)PM-Vorbehalt: Ownership
Der Spike ist technische Investigation — Architekt/Dev-Arbeit, nicht PM. PM-Beitrag endet hier mit der Scope-Refinement. Ein Spike-Owner muss zugewiesen werden, bevor die Arbeit beginnt. Vorschlag: Same-Hands wie KI-Foundation rc16–rc19, damit das Stack-Kontext nicht verloren geht.
Architekt-Beitrag: Spike-Execution-Plan auf bestehendem Stack
PM-Refinement (Comment 3173) hat das Stack korrekt benannt — hier der konkrete Plan, wie der Spike auf der ausgelieferten Infrastruktur umgesetzt wird. Das beantwortet auch das offene Ownership-Thema: Spike-Arbeit ist klein, ich (Architekt) skizziere die Schritte; Implementierung soll ein Dev übernehmen, weil sie hardware-spezifische Messung enthält.
Vorab geklärt durch ausgeliefertes Phase-1-Stack
Xenova/multilingual-e5-small(ONNX Q8, dim=384) — fixsqlite-vecvia@op-engineering/op-sqlite(statisch gelinkt) — fixonnxruntime-react-nativeläuft seit rc16 in Production^#{1,3}) mit Overlap, fertige Implementierung inapps/mobile/src/services/data-sources/note-data-source.ts:85— direkt wiederverwendbarDamit kollabieren 5 von 7 ursprünglichen Spike-Aufgaben auf „bereits beantwortet“. Verbleibender Scope ist auf zwei Aspekte konzentriert: KB-Source-Adapter + Sync-Endpoint.
Reduzierter Execution-Plan
1.
KbDataSourcealsIDataSource-ImplementierungPattern existiert (
NoteDataSource,MailDataSource,ShoppingListDataSource— alle inapps/mobile/src/services/data-sources/). Neuer Adapter mit:sourceType = 'kb-note'extractChunks(sourceId)liest Markdown + YAML-Frontmatter aus lokalem KB-Mirror, splittet viasplitMarkdownSections(recyceln vonnote-data-source.ts:85)title,tags,links) als Chunk-Metadata; Titel als Prefix vor jedem Chunk (analog Note-DataSource)subscribeToUpdates/publishfür Mutation-Observer-Hook (relevant erst, sobald Sync läuft)2. Sync-Endpoint im API skizzieren (nicht implementieren)
GET /kb/notes?updatedSince=<iso>— Diff-Sync (Server liefert nur geänderte Notes)PUT /kb/notes/:idmit ETag-Header für Konflikt-Erkennungkb_notes(id, ownerSub, title, body, frontmatterJson, updated_at). Skizze als ADR-0002 in Spike-Bericht3. Latenz-Messung — geschärft
PM-Comment hat Akzeptanzkriterien geschärft; ich konkretisiere die Methode:
~/storage/dev/mm-knowhow/notes/[VectorStore]/[EmbeddingService]4. Qualitäts-Sanity (klein gehalten)
Out-of-Scope (bleibt für KB-2/KB-3)
expo-task-manager, analog #438) — KB-2Ownership-Vorschlag
Spike-Arbeit ist jetzt linear:
KbDataSourceschreiben (Pair-Programming mit existierendem Pattern, ~½ Tag)expo-file-systemRead; Sync-Pfad ist Skizze, nicht Implementierung)Empfehlung: gleiche Hand wie rc16–rc19. Wenn keine Kapazität, kann das auch als kleine Story im nächsten Iterations-Block laufen — keine harte Deadline.