e.V.
Devlog · KW 17 · 20.–26. April 2026

Conflict-Detection, endlich sauber

Eine Woche, in der unter der Haube viele Jahre alter Code aufgeräumt wurde: Sync-Konflikt-Erkennung wird zuverlässig, vier Bug-Wurzeln werden geschlossen, gleichzeitig zieht das Companion-Brain in die echte Pipeline ein und 22 Module bekommen ihre i18n-Namespaces.

Worum es geht

Aus Endnutzer-Sicht passierte diese Woche wenig. Der Sync läuft halt richtig, der Companion antwortet halt — beides aber war vorher nicht ganz wahr, und hinter beiden saßen tiefe Strukturprobleme, die Wochen auf eine Lösung warteten. Diese Woche wurden sie eingelöst.

Sync-Field-Meta-Overhaul (F1–F7)

Der Konflikt-Toast (»Es gibt einen Versionskonflikt«) hat in Mana schon fälschlich gefeuert, wenn der Server selbst ein Bootstrap- Singleton schrieb, wenn ein Agent eine Mission ausführte, wenn ein Migrationsskript ein Feld backfilled. Die vier Bug-Wurzeln:

  • F1: __fieldTimestamps / __fieldActors / __lastActor als drei getrennte Schatten-Felder — schwer synchron zu halten. Reduziert auf ein verstecktes Feld __fieldMeta: { field → { at, actor, origin } }.
  • F2: Conflict-Detection feuerte für jede Schreib-Quelle. Jetzt origin-gated: nur origin === 'user' löst den Toast aus. Server-Replays, Agent-Writes, Migrationen, Bootstrap-Inserts gehen still durch.
  • F3: updatedAt war ein synchronisiertes Datenfeld — und damit Quelle für falsche Konflikte. Jetzt aus __fieldMeta abgeleitet, pro Read berechnet via deriveUpdatedAt(local). Für indexed Sortierung gibt es ein non-synced _updatedAtIndex Schatten-Feld, das der Dexie-Hook automatisch stempelt.
  • F4: Singletons (userContext, kontextDoc) wurden vom Client per Race-Bedingung angelegt — zwei Tabs, zwei Singletons, ein Konflikt. Jetzt server-seitig im mana-auth-Bootstrap geschrieben, per origin: 'system'. Der Client behält getOrCreateLocalDoc() nur als Fallback für die seltene Race, in der die erste Pull noch nicht gelandet ist.
  • F5: Der öffentliche userContextStore.ensureDoc() ist weg — niemand außer dem Sync-Loader braucht das.
  • F6: Stable client_id in einer eigenen Dexie-Tabelle (_clientIdentity), localStorage nur als Cache. Ein localStorage- Wipe verliert dem Server keine Identität mehr.
  • F7: Zwei Migration-Helper (repair-silent-twin, legacy-avatar-migration) konnten nach dem Overhaul gelöscht werden.

Aufschrift im Architektur-Doc: apps/web/src/lib/data/DATA_LAYER_AUDIT.md.

Companion-Brain wird real

Der KI-Companion (»Mana« als Default-Agent) hatte bisher Mission- Definitionen — diese Woche bekamen die Missions ihre echte Pipeline. Drei Schritte:

  • task-Tool im Companion-Chat verdrahtet (M3.3) — der Chat kann jetzt Missionen anlegen.
  • Context-Window-Compactor im Mission-Runner (M2.4) — lange Missionen verlieren ihren Anfang nicht mehr.
  • Profile-Bild-Migration (M2.5) — der Companion bekommt ein Avatar, der auch in Cross-Module-Tools sichtbar wird.

Dazu isParallelSafe-Flagging im Tool-Catalog: welche Tools dürfen gleichzeitig laufen, welche müssen seriell. Die Heuristik sitzt in @mana/shared-ai.

i18n-Namespaces für 22 Module

Vor dem Multi-Sprache-Rollout wurden diese Woche die letzten fest-codierten deutschen Strings durch $_()-Calls ersetzt: AI-Workbench, AI-Missions, AI-Agents, Memoro, Photos, Sleep, Mail, Notes, News, Places, Todo, Food, MyDay, Wallpaper, Contacts, Gifts, Dreams. Pro Modul: Namespace-JSONs für DE/EN/ES/FR/IT, dann ListView/DetailView/Forms gegen die Namespaces verdrahtet.

Das ist Vorbereitung: ohne diese Schicht kann das Companion-Brain nicht zuverlässig auf nicht-deutsche Inhalte reagieren.

Comic-Modul: AI-Storyboard

Comic ist ein neueres Modul: aus einem Cross-Module-Text (Kalender + Notes + Tasks) wird ein Storyboard. Diese Woche kam die AI-Anbindung dazu — M4 (AI-Storyboard-Generator) und Mc4 (MCP + AI-Catalog für das Character-System).

Was kommt

Mit dem Sync-Overhaul abgehakt und der i18n-Decke geschlossen ist KW 18 frei für die Repo-Extraktion: Memoro raus aus dem Monorepo, danach das Plattform-Repo aufschlagen.

Veröffentlicht
7. Mai 2026
Repos
mana-monorepo
Tags
syncconflict-detectioncompanion-braini18nmobile-cleanup