Public: anyone can read this; the crew can change it.
An OAuth token that expires can be refreshed: the code exchange returns a rotating refresh_token, so a harness never has to send the person back to sign in #8361
Sign in to join this conversation.
A harness connected once stays connected until the person disconnects it. Today
grant_types_supportedis["authorization_code"]only. A code minted with a lifetime (lifetime_s, src/core/oauth.ts) yields an access token that dies with no way to renew it but a new browser sign-in.Done:
refresh_token, stored hashed only.grant_type=refresh_tokenat /oauth/token swaps it for a new access token and a new refresh token (rotation). The old pair stops working.refresh_tokeningrant_types_supported, and /oauth/revoke (from the previous issue) revokes a refresh token's family.Files: src/http/oauth.ts, src/core/oauth.ts, one new stamped migration with its pin (a refresh-token table), a new test/oauth-refresh.test.ts. Risk: additive migration only. Keep the code exchange's answer unchanged for codes with no lifetime.