tokenstore: bound OS keyring calls with a timeout
Commit

The keyring-timeout shim deleted in 37de13a6d only ever wrapped the legacy auth.Store; the surviving tokenstore keyringStore called keyring.Get/Set/Delete with no deadline, even on main. The legacy store's dual-write was the only thing that surfaced a hung keyring (via its 5s timeout) during login — with it gone, login/logout/status can block forever on a headless Linux box with no Secret Service daemon, a suppressed Keychain prompt, or a stuck Credential Manager.
Move the timeout down to where the raw keyring calls now live: every keyringStore op runs in a goroutine bounded by ENTIRE_KEYRING_TIMEOUT (default 5s). The inner error — including ErrNotFound — propagates unchanged on the fast path; only the timeout branch wraps, naming the platform's keyring backend and the override env var. The file backend is left untouched: it can't hang on a daemon.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com Entire-Checkpoint: 589410b3edff