ef897bfd7e
Independent review of the first fix found a credential-identity takeover: _adopt_nous_key_before_expiry() called the singleton resolver unconditionally, so an agent running on an explicitly supplied (or pool-selected) account-A key near expiry was moved onto the logged-in account-B key from auth.json before the A key had even failed, and the next real SDK request went out as B. That silently changes who is billed. The adoption now reads the `sub` claim of the key in hand and passes it as require_account; _try_refresh_nous_client_credentials refuses any replacement whose `sub` differs (logged at INFO, current key kept). A key with no `sub` is not adopted proactively at all. The reactive 401 path is unchanged, and same-account adoption (the keepalive's or a peer's fresh key) still works. Verified with the reviewer's own live probe (real AIAgent -> real prepare_iteration -> real auth.json transaction -> real OpenAI SDK -> loopback capture): explicit-account case account-A -> account-A, adopted_fresh=False (was A -> B); same-account still adopts; 12 concurrent near-expiry agents still 0 x 401. Tests (2 new): a fresh key for a different account is never adopted; a key without an account claim is left alone without touching the store.