mana-swift-core/CLAUDE.md
Till JS df6f67ee45 v1.0.0 — initiale Extraktion aus memoro-native
ManaCore + ManaTokens als Swift-Package für alle nativen
mana-e.V.-Apps. Phase α aus mana/docs/MANA_SWIFT.md durch.

ManaCore:
- AuthClient gegen mana-auth (Login, Refresh, Status-Maschine)
- AuthenticatedTransport (URLSession + 401-Retry)
- ManaAppConfig-Protocol für App-injizierbare Konfig
- KeychainStore mit optionaler Shared-Access-Group
- JWT-Parser für lokale Expiry-Prüfung
- AuthError, CoreLog (interne OSLog-Logger)

ManaTokens:
- 12 Vereins-Tokens als dynamic Light/Dark Colors
- 5 Brand-Literale (mana-yellow, spectrum-orange, ...)
- Spacing, Radius, Typography aus mana/docs/THEMING.md

Tests: 12 Unit-Tests grün via swift test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 19:13:31 +02:00

107 lines
4.4 KiB
Markdown
Raw 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.

# CLAUDE.md — mana-swift-core
Guidance für Claude Code in diesem Repo.
> **Übergeordneter Plan:** `../mana/docs/MANA_SWIFT.md` ist die SOT für
> die ganze native-App-Plattform. Dieses CLAUDE.md ist die Repo-lokale
> Konventionen-Doku.
## Was dieses Repo ist
Swift-Package-Plattform für alle nativen mana-e.V.-Apps. Enthält genau
zwei Library-Products:
- **ManaCore** — Auth (mana-auth-Login, JWT-Refresh, Keychain),
Transport (URLSession-Wrapper mit 401-Retry).
- **ManaTokens** — Verein-Designwerte. Spiegelt `mana/docs/THEMING.md`.
Wird konsumiert von `memoro-native`, geplant `cards-native`,
`nutriphi-native` und weiteren.
## Status
**v1.0.0 — initiale Extraktion aus memoro-native (2026-05-12).**
Phase α aus `mana/docs/MANA_SWIFT.md` — wortwörtliche Verschiebung
von `Core/Auth`, `Core/API/Transport`, plus `ManaTokens` neu aus
`mana/docs/THEMING.md`. Keine spekulativen Verallgemeinerungen.
## Architektonische Invarianten
Nicht ohne explizite Diskussion antasten:
1. **Genau zwei Library-Products.** ManaCore + ManaTokens. Ein
`ManaUI`-Komponenten-Package entsteht später in einem **eigenen**
Repo, nicht hier (`mana/docs/MANA_SWIFT.md` Phase ε).
2. **Keine externen Dependencies.** ManaCore darf nur Foundation,
Security, OSLog, Combine importieren. Kein Alamofire, kein Sentry,
kein nichts. Compliance (`mana/docs/COMPLIANCE.md`) + Build-Stabilität.
3. **Public API ist `Sendable`.** Jeder Cross-Actor-Type. Swift-6-
Concurrency-Korrektheit.
4. **Keine app-spezifischen Annahmen.** ManaCore weiß nichts über
Memos, Decks, Meals. PRs, die "irgendwas für Memoro" hinzufügen
wollen, gehören in memoro-native, nicht hier.
5. **mana-auth-Wissen ist erlaubt.** Endpoint-Pfade `/api/v1/auth/login`,
`/api/v1/auth/refresh`, Wire-Format mit `accessToken`/`refreshToken`.
Das ist Verein-Plattform-Konstante, nicht App-Detail.
6. **OSLog statt print/Sentry.** ManaCore loggt intern unter Subsystem
`ev.mana.core`. Apps haben ihr eigenes Subsystem.
7. **App injiziert ihre Config.** ManaCore hardcoded *nichts* (außer
die mana-auth-Endpoint-Pfade als Konstante). `authBaseURL`,
`keychainService`, `keychainAccessGroup` kommen vom App-Caller.
8. **Tests gegen reine Logik.** JWT-Decode, Token-Expiry, Keychain-
Key-Mapping. URLSession-Calls werden über Protokoll-Injection
getestet, nicht über echtes Netzwerk.
## Versionierung
- **Semver strikt.** Patch = Bugfix ohne API-Änderung. Minor = neue
API additiv. Major = breaking.
- **Git-Tag nach jedem Sinn-Abschnitt** auf `main`. Nicht jeden Commit.
- **CHANGELOG.md pflicht.** Was hat sich geändert, müssen Apps was anpassen.
- **Pflege-Politik:** Letzte zwei Major-Versionen werden mit Patches
bedient. Ältere nicht.
## Konventionen
- **Swift 6.0**, Strict Concurrency komplett
- **iOS 18 / macOS 15** Minimum (gleiche Targets wie memoro-native)
- **SwiftFormat** mit `.swiftformat` (4-space, 120-col, sorted imports)
- **SwiftLint** mit `.swiftlint.yml`
- **Doc-Comments** pflicht auf jedem `public`-Symbol (`///`)
- **Lokalisierung:** Public-API-Strings auf Deutsch (Verein-Konvention),
Code-Identifier auf Englisch
## Lokal entwickeln
```bash
swift build # baut beide Targets
swift test # Unit-Tests
swift package generate-xcodeproj # optional, für Xcode
```
Für die Integration in eine App (memoro-native, cards-native):
- Dev-Cycle: in `project.yml` der App `path: ../mana-swift-core` setzen
- Release: `from: 1.0.0` mit Git-Tag
## Wenn eine neue Funktion dazukommt
1. Frage: gehört das wirklich in ManaCore/ManaTokens, oder ist es
App-spezifisch? Wenn unsicher: in die App, später extrahieren.
2. Public API mit Doc-Comments.
3. Unit-Tests gegen die State-Machine, nicht gegen echtes Netzwerk.
4. CHANGELOG.md ergänzen.
5. Bei Breaking-Change: Major-Bump-Plan in `mana/docs/MANA_SWIFT.md`
notieren, alle aktiven Apps informieren.
## Wichtige Cross-Repo-Doks
- `mana/docs/MANA_SWIFT.md` — Plattform-SOT für native Apps
- `mana/docs/MANA_AUTH_FEDERATION.md` — Auth-Protokoll
- `mana/docs/THEMING.md` — Token-SOT, spiegelt sich in ManaTokens
- `mana/docs/COMPLIANCE.md` — Telemetrie/Crash-Reporter-Regeln
- `mana/services/mana-auth/CLAUDE.md` — Server-Konventionen, §
"Native-App-Koordination" beschreibt die Refresh-Token-Invariante
- `memoro-native/CLAUDE.md` — erste Konsumenten-App, Konventionen
hier sind aus deren PLAN.md gewachsen