Neue opt-in Policy verhindert Logout durch einen einzelnen transienten
/refresh-Fehler beim Cold-Launch. Default-Verhalten unverändert.
- `RefreshFailurePolicy.immediateWipe` (Default) — wie bisher: jeder
invalidierende Server-Response → keychain.wipe() + .signedOut.
- `RefreshFailurePolicy.softFirst` — erster invalidierender Fehler
im Prozess wird nicht gewiped, Session bleibt. Wipe erst beim
zweiten Fehler oder nach einem zuvor erfolgreichen Refresh im
selben Prozess.
Plus erweiterte Diagnostik in refreshAccessToken(): jeder Attempt
loggt Token-Länge, once-succeeded, failure-count, policy, und bei
Failure HTTP-Status + Body-Excerpt (256 chars). Subsystem ev.mana.core.
Pageta-native ist erster Konsument (opt-in `.softFirst`) wegen
wiederholten TestFlight-Update-Logouts — Hypothese: transienter
Server-Glitch beim ersten Refresh nach Cold-Launch.
89/89 Tests (vorher 85/85), 4 neue für die Policy.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>