a3a2d2f1cf
Two hot-path fixes for DAV sync clients, which poll continuously: 1. App-password Basic Auth cache TTL 30s → 300s. Every cache miss costs a full Argon2id verification (~50-100ms CPU) plus two DB queries; at 30s a continuously-syncing client re-paid that every 30s. 5 min cuts it ~10x. Safe because revoke() already invalidates the user's cached entries immediately; expiry/deactivation are only re-checked on a miss, so they now have a <=5 min grace window (comparable to a JWT access-token lifetime) — documented on the constant. 2. WebDAV lock store: replace the tokio::spawn + sleep scheduled per acquire/refresh with Moka's per-entry Expiry policy. Office clients refresh locks constantly, leaving thousands of orphaned sleeping timers pinned in the runtime that were never cancelled. by_path now carries the exact per-lock TTL via LockExpiry (no background tasks); by_token keeps a 24h backstop and resolves through by_path, so a lingering reverse-index entry can never resurrect an expired lock. Adds unit tests for the expiry policy and acquire/refresh/release (the module had none). https://claude.ai/code/session_0193Hff42gaA962wThxMGSd1