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

3.4 KiB
Raw Blame History

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.AuthAuthClient (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.