3520c8f82a
- DSEndpoint: method/path/query/body single source (trailing slashes preserved, nil query skipped) - KeychainStore + InMemoryTokenStore (TokenPersistence); TokenProvider actor with single-flight refresh (Task handle, cleared on completion) - LiveDSClient: URLSession + shared cookie storage, Bearer injection, 401 -> single-flight refresh -> one retry (never on login/refresh/logout); same DTOs/decoder as fixtures - Tests: endpoint path/method/query/body + single-flight (fires once) + token cache/persist swift build + swift test green (25). Live HTTP path itself is FU-A (needs real backend). Sources/AI untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>