feat(ai): P1.4 Background-Job für Initial-Indexing + inkrementelle Re-Indexierung #442

Closed
opened 2026-06-06 16:28:53 +02:00 by pm-bot · 1 comment
Collaborator

Phase-1-Sub-Issue zu #122 (Decision Record 2026-06-06).

Ziel

Indexing-Pipeline: alle vorhandenen DataSource-Einträge initial in den Vector-Store schreiben (Background-Job), neue/geänderte Einträge inkrementell on-the-fly nachziehen.

Scope

  • IndexingService:
    • runInitialIndex() — iteriert über alle registrierten DataSources, holt alle Chunks, batched zu 32-64, generiert Embeddings (P1.1), schreibt in VectorStore (P1.2).
    • Triggert via expo-task-manager als Background-Task: Default „bei Ladung + Wifi" (Folge-Effekt 2 aus #438), User-Opt-In für Sofort-Ausführung.
    • Progress-Reporting via Event-Emitter (für UI in P1.5).
  • Inkrementelles Re-Indexing:
    • IDataSource.subscribeToUpdates() (P1.3) triggert pro Event: betroffene Chunks re-embedden + upsert.
    • Inline-Pfad (15-30 ms pro Chunk laut Bench in P1.1) — kein Background-Job nötig für Einzel-Updates.
  • Dedup/Diff: Hash über Text-Chunk gegen vector_index.text_chunk — nur bei Hash-Drift neu embedden (spart Battery).
  • Fehler-Handling: Embedding-Service-Fehler → Job pausiert, retry-Strategie mit exponential backoff.

Akzeptanzkriterien

  • Initial-Indexing-Lauf für ~5k Mails + ~500 Listen-Items + ~200 Notizen abgeschlossen in <8 min auf Test-Device.
  • Background-Default „Ladung + Wifi" funktioniert; User-Opt-In-UX für Sofort-Lauf.
  • Inkrementelles Re-Indexing: Insert/Update/Delete einer Mail spiegelt sich binnen <100 ms im Vec-Index.
  • Battery-Verbrauch dokumentiert (Initial-Lauf misst).
  • Vitest-Suite mit mocked DataSources.

Out-of-Scope

  • Suche (P1.5)
  • Konkrete Such-UX-Optimierung (User-feedback-driven, in P5/P6)
Phase-1-Sub-Issue zu #122 (Decision Record 2026-06-06). ## Ziel Indexing-Pipeline: alle vorhandenen DataSource-Einträge initial in den Vector-Store schreiben (Background-Job), neue/geänderte Einträge inkrementell on-the-fly nachziehen. ## Scope - `IndexingService`: - `runInitialIndex()` — iteriert über alle registrierten DataSources, holt alle Chunks, batched zu 32-64, generiert Embeddings (P1.1), schreibt in VectorStore (P1.2). - Triggert via `expo-task-manager` als Background-Task: Default „bei Ladung + Wifi" (Folge-Effekt 2 aus #438), User-Opt-In für Sofort-Ausführung. - Progress-Reporting via Event-Emitter (für UI in P1.5). - Inkrementelles Re-Indexing: - `IDataSource.subscribeToUpdates()` (P1.3) triggert pro Event: betroffene Chunks re-embedden + upsert. - Inline-Pfad (15-30 ms pro Chunk laut Bench in P1.1) — kein Background-Job nötig für Einzel-Updates. - Dedup/Diff: Hash über Text-Chunk gegen `vector_index.text_chunk` — nur bei Hash-Drift neu embedden (spart Battery). - Fehler-Handling: Embedding-Service-Fehler → Job pausiert, retry-Strategie mit exponential backoff. ## Akzeptanzkriterien - [ ] Initial-Indexing-Lauf für ~5k Mails + ~500 Listen-Items + ~200 Notizen abgeschlossen in <8 min auf Test-Device. - [ ] Background-Default „Ladung + Wifi" funktioniert; User-Opt-In-UX für Sofort-Lauf. - [ ] Inkrementelles Re-Indexing: Insert/Update/Delete einer Mail spiegelt sich binnen <100 ms im Vec-Index. - [ ] Battery-Verbrauch dokumentiert (Initial-Lauf misst). - [ ] Vitest-Suite mit mocked DataSources. ## Out-of-Scope - Suche (P1.5) - Konkrete Such-UX-Optimierung (User-feedback-driven, in P5/P6)
Author
Collaborator

Implementation komplett — integriert in PR #444 (wireup/ai-foundation-phase1). Device-Pass läuft am übergeordneten Epic #122. Issue wird geschlossen.

Implementation komplett — integriert in PR #444 (`wireup/ai-foundation-phase1`). Device-Pass läuft am übergeordneten Epic #122. Issue wird geschlossen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp#442
No description provided.