Tag 1: initiale Extraktion aus memoro-native. Tag 2: Reifung zu v1.5.0 (Account-Lifecycle, Guest-Mode + Refresh-Resilience, 2FA, ProfileInfo). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.4 KiB
3.4 KiB
| date | day | view | weekday | commits | review |
|---|---|---|---|---|---|
| 2026-05-12 | 1 | macher | Dienstag | 1 | written |
Dienstag, 2026-05-12 — Tag 1 (Macher-Sicht)
v1.0.0 — initiale Extraktion aus memoro-native. Swift-Package
mit zwei Library-Products: ManaCore (Auth + Transport) und
ManaTokens (Vereins-Designwerte aus mana/docs/THEMING.md).
Stats
1 Commit, +1 151 / −0 LoC, 23 Files. 17× .swift. Top-Dirs:
Sources/ManaCore/Auth (22 %), Sources/ManaTokens/Colors (13 %),
Sources/ManaTokens/Spacing (9 %).
Was im Initial-Commit drin ist
- ManaCore.Auth —
AuthClient(Login + Refresh gegen/api/v1/auth/loginund/api/v1/auth/refresh),KeychainStoragefür Access/Refresh-Token-Persistenz, JWT-Decode- Expiry-Check, 401-Retry-Loop in
Transport.
- Expiry-Check, 401-Retry-Loop in
- ManaCore.Transport — URLSession-Wrapper, protocol-injected für Tests, automatisches Refresh-on-401.
- ManaTokens — Vereins-Farben (
mana,forest, demnächst weitere Themes), Spacing-Skala, Typography-Konstanten. Spiegeltmana/docs/THEMING.md1:1. - Verpackung:
Package.swiftmit Swift 6.0, iOS 18 / macOS 15, Strict Concurrency komplett.
Architektur-Entscheidungen
- Genau zwei Library-Products.
ManaCore+ManaTokens. UI- Komponenten (ManaUI) entstehen in einem separaten Repo (mana-swift-ui, Phase ε). Hier nicht. - Keine externen Dependencies. Nur Foundation, Security, OSLog, Combine. Begründung Compliance + Build-Stabilität. Kein Alamofire, kein Sentry.
- Public API ist
Sendable. Swift-6-Concurrency strikt; jeder Cross-Actor-Type annotiert. - App injiziert ihre Config.
authBaseURL,keychainService,keychainAccessGroupkommen vom Caller. ManaCore hat keine Hardcoded-App-Konstanten außer den mana-auth-Endpoint-Pfaden (/api/v1/auth/login,/api/v1/auth/refresh). - OSLog statt print/Sentry. ManaCore loggt unter Subsystem
ev.mana.core. Apps haben ihr eigenes Subsystem. - Tests gegen reine Logik, nicht echtes Netzwerk. URLSession über Protokoll-Injection mockbar.
- Keine app-spezifischen Annahmen. ManaCore weiß nichts über Memos, Decks, Meals. Wenn das Paket „etwas für Memoro" lernen will, gehört es zurück in memoro-native.
Trade-offs
- Wortwörtliche Extraktion, keine spekulative Verallgemeinerung.
Die
AuthClient-API ist die alte memoro-Variante; falls neue Apps andere Bedürfnisse haben, lieber additiv erweitern als vorab abstrahieren. - +1 151 LoC in einem Commit ist groß, aber sauber: das war ein Move-Commit, kein Feature-Commit. Hätte man auf Auth/ Transport/Tokens splitten können — pragmatisch zusammen, weil alle drei aus demselben Source-Repo kamen.
- Initiale Versions-Politik strikt Semver. Patch-Bugfix, Minor-additiv, Major-breaking. Pflege-Politik: letzte zwei Major-Versionen.
Offene Punkte
mana-swift-ui-Repo existiert noch nicht — UI-Komponenten bleiben pro App, bis Phase ε in einem dritten Repo extrahiert wird (kam morgen, siehemana-swift-uiTag 1).- 2FA-Endpoint-Spezifikation im AuthClient fehlt — Memoro hatte noch kein 2FA. Wenn die UI-Schicht 2FA bekommt, muss ManaCore nachziehen.
- Refresh-Token-Rotation (
mana-authhat dafür einen Endpoint) ist in AuthClient noch nicht. Patch-Bump-Kandidat. - Theme-Variants in ManaTokens noch hartcodiert auf
manaundforest. Die im THEMING.md beschriebenen weiteren Themes (spruce,cardecky, …) folgen.