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>
2.5 KiB
| date | day | view | weekday | commits | review |
|---|---|---|---|---|---|
| 2026-06-04 | 1 | macher | Donnerstag | 2 | 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;sequenceNumbertoleriert JSON-String und -Zahl (mana-sync Go schreibtjson:",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-AbstraktionenSyncTransport/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.