mana-swift-core/devlog/2026-05-12/macher.md
Till JS 957a80251e devlog: 2 Tage geschrieben (v1.0.0 → v1.5.0)
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>
2026-05-15 22:21:46 +02:00

83 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-05-12
day: 1
view: macher
weekday: Dienstag
commits: 1
review: 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/login` und `/api/v1/auth/refresh`),
`KeychainStorage` für Access/Refresh-Token-Persistenz, JWT-Decode
+ Expiry-Check, 401-Retry-Loop in `Transport`.
- **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. Spiegelt
`mana/docs/THEMING.md` 1:1.
- **Verpackung**: `Package.swift` mit 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`,
`keychainAccessGroup` kommen 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, siehe `mana-swift-ui` Tag 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-auth` hat dafür einen Endpoint)
ist in AuthClient noch nicht. Patch-Bump-Kandidat.
- **Theme-Variants** in ManaTokens noch hartcodiert auf `mana` und
`forest`. Die im THEMING.md beschriebenen weiteren Themes
(`spruce`, `cardecky`, …) folgen.