Skip to content

release: 1.38.1 — stop asking to sign in again every morning - #47

Closed
writingdeveloper wants to merge 1 commit into
mainfrom
release/1.38.1
Closed

writingdeveloper wants to merge 1 commit into
mainfrom
release/1.38.1

Conversation

@writingdeveloper

Copy link
Copy Markdown
Owner

Summary

  • The usage footer showed Login expired every morning. Claude's access token lives ~8 h and Claude Code renews it only on its next API call, while the 30-day refresh token was still valid — re-signing in was never needed.
  • New usage state refresh-pending: last-good numbers stay as stale with "Awaiting refresh" + hint, no sign-in button; the next poll recovers once Claude Code renews ~/.claude/.credentials.json.
  • expired (with sign-in) remains for a missing/expired refresh token or a server 401.
  • DevDeck still never refreshes the token itself (refresh tokens rotate; running sessions would be logged out).

Test plan

  • Unit tests (1,422) + tsc --noEmit
  • Real credentials file with the clock moved past expiresAt → refresh-pending
  • build, check:docs, qa:maintenance, qa:resilience, qa:session-sync, qa:audit, qa — all green

🤖 Generated with Claude Code

https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY

The usage footer called an expired access token a lost sign-in. Claude's access token lives
about 8 hours and Claude Code renews it only on its next API call, so every idle night left an
expired one in ~/.claude/.credentials.json while the 30-day refresh token was still good. The
footer then showed "Login expired" with a sign-in button, and re-authenticating fixed nothing
the next reply would not have fixed on its own.

- New usage state `refresh-pending`: the access token expired but a refresh token is present
  and unexpired. Last-good numbers stay on screen as stale with "Awaiting refresh" and a hint,
  no sign-in button; the next poll recovers once Claude Code renews the file.
- `expired` (with the sign-in action) is kept for a missing/expired refresh token or a 401.
- DevDeck still never refreshes the token itself: refresh tokens rotate, and running Claude
  Code sessions would be left holding a dead one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
writingdeveloper added a commit that referenced this pull request Oct 20, 2026
The usage footer called an expired access token a lost sign-in. Claude's access token lives
about 8 hours and Claude Code renews it only on its next API call, so every idle night left an
expired one in ~/.claude/.credentials.json while the 30-day refresh token was still good. The
footer then showed "Login expired" with a sign-in button, and re-authenticating fixed nothing
the next reply would not have fixed on its own.

- New usage state `refresh-pending`: the access token expired but a refresh token is present
  and unexpired. Last-good numbers stay on screen as stale with "Awaiting refresh" and a hint,
  no sign-in button; the next poll recovers once Claude Code renews the file.
- `expired` (with the sign-in action) is kept for a missing/expired refresh token or a 401.
- DevDeck still never refreshes the token itself: refresh tokens rotate, and running Claude
  Code sessions would be left holding a dead one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016NLGwiBY5uEivJqERQzcoY
@writingdeveloper

Copy link
Copy Markdown
Owner Author

Landed on main as 86ed195 via local squash merge (keeps the commit author on the noreply address; the GitHub squash used the account's public email). Tagged v1.38.1.

@writingdeveloper
writingdeveloper deleted the release/1.38.1 branch October 20, 2026 18:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant