mana-kotlin-event-sync/devlog/2026-06-04/macher.md
Till JS 27de51e07e devlog: Repo-Historie nachgezogen (spieler+macher)
Erste Devlog-Befüllung; geerdet in den realen Commits, data.json via @mana/devlog-gen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 01:44:27 +02:00

50 lines
2.5 KiB
Markdown

---
date: 2026-06-04
day: 1
view: macher
weekday: Donnerstag
commits: 2
review: auto
---
# Donnerstag, 2026-06-04 — Tag 1 (Macher-Sicht)
Tag eins der Lib: in zwei Commits steht Phase 2 fast komplett. Diese
Library ist der Kotlin-Port von `mana-swift-event-sync` (`ManaEventSync`) —
der event-sourced Daten-Layer, über den User-eigene Decks/Cards/Reviews
E2E-verschlüsselt gegen `sync2.mana.how` laufen, bewusst nicht über REST.
Reine Kotlin/JVM-Lib auf `mana-kotlin-core` (Auth), während der Entwicklung
per `includeBuild("../mana-kotlin-core")` verdrahtet — kein Maven-Publish.
**v0.1 (`fa7f4c6`, +1478) — Bausteine, Teil 1.** Crypto + Envelope + Vault +
Sync-HTTP:
- `MasterKeyCryptoProvider` — AES-GCM-256, byte-kompatibel zu Swift und TS
(`enc:1:<b64-iv>.<b64-(ct‖tag)>`, WebCrypto-Layout). Cross-Impl-Parität
per Golden-Vektor aus dem Node/WebCrypto-Pfad bewiesen — das ist der
nicht-verhandelbare Punkt, weil dasselbe Log von drei Plattformen
geschrieben/gelesen wird.
- `NoOpCryptoProvider` — Passthrough für Anonymous-Modus / Vault unerreichbar,
mixed-log-tolerant.
- `VaultClient` + `createMasterKeyProviderFromVault` — holt den Master-Key
(`/api/v1/me/encryption-vault/{key,init}`); ZK-Modus → wirft, Caller fällt
auf NoOp zurück.
- `EventEnvelope` + `ActorContext` — Wire-Format; `sequenceNumber` toleriert
JSON-String **und** -Zahl (mana-sync Go schreibt `json:",string"`).
- `Ulid` — sortierbare IDs, Port der Swift-Generierung.
- `SyncHttpClient` — `POST /sync/{appId}` (append ≤500) + `GET .../pull?since=N&limit=K`;
`422` → `SchemaOutdated`.
**v0.2.0 (`89d9f37`, +1032/-16) — Engine, Teil 2.** Der `EventSyncEngine`:
App-facing Orchestrierung mit Anonymous-First-Identität, `emit` (lokal +
Outbox + Crypto-Wire), Pull-Loop (decrypt + Projektion + Cursor),
`signIn`-Claim (anon→`sub` re-taggen + re-encrypt + drainen), Poll-Timer,
Soft-Fail, Schema-Outdated-Stop, Crypto-Degraded-Pause, Aggregate-Change-
Listener. Port des Swift `EventSyncEngine`. Dazu das `EventStore`-Interface
+ `InMemoryEventStore` (Event-Log + Outbox + Meta + Retention) und die
Transport-Abstraktionen `SyncTransport`/`SyncWebSocket`.
**Trade-off bewusst gezogen:** Die Engine bleibt pure Kotlin/JVM — der
persistente Room-`EventStore`-Adapter und die Ktor-`SyncWebSocket`-Impl
brauchen das Android-SDK bzw. einen Live-Server und bleiben deshalb (vorerst)
im App-Modul. So bleibt die Lib JVM-testbar; 26 Tests inkl. WebCrypto-Golden-
Vektor laufen ohne Emulator. SOT-Plan:
`mana/docs/playbooks/WORDECK_ANDROID_GREENFIELD.md`.