Repository navigation
fix(resilience): classify Cline 401 as refreshable OAuth (#12594) - #13060
Merged
diegosouzapw merged 2 commits intoSep 11, 2026
Merged
diegosouzapw merged 2 commits into
diegosouzapw merged 2 commits into
Conversation
HouMinXi
force-pushed
the
fix/cline-401-oauth-12594
branch
2 times, most recently
from
September 10, 2026 12:59
1a88074 to
401ea45
Compare
…erence#12594) Cline stale-token bodies say "re-authenticate your Cline account". That phrasing missed OAUTH_INVALID_TOKEN_SIGNALS, so classifyProviderError fell through to UNAUTHORIZED and the connection was marked expired. The cooling panel also hardcoded every cooldown as a 429. Signed-off-by: Minxi Hou <houminxi@gmail.com>
Merge-integrity requires changelog.d entries to start with "- ". The product commit is unchanged. Signed-off-by: Minxi Hou <houminxi@gmail.com>
HouMinXi
force-pushed
the
fix/cline-401-oauth-12594
branch
from
September 11, 2026 08:22
401ea45 to
c831e23
Compare
Contributor
Author
|
CI red on this PR matches current Measured on tip
Unique diff does not touch those files. Contributor-only; not merging. |
diegosouzapw
merged commit Sep 11, 2026
541a648
into
cheaper-inference:release/v3.8.51
8 of 16 checks passed
Githab-capibara
added a commit
to Githab-capibara/OmniRoute
that referenced
this pull request
Sep 17, 2026
…erence#12594) (cheaper-inference#13060) Two real defects in one report, both correctly separated: the missing phrase in `OAUTH_INVALID_TOKEN_SIGNALS` made a recoverable Cline 401 terminal even though `refreshClineToken` already existed, and the cooling panel printing "429 (rate-limit)" for every future cooldown hid what actually happened. --- Validated in one consolidated worktree cut from `release/v3.8.51`, boarded with the other 19 PRs of this batch. Two in-batch conflicts, both additive and resolved by keeping each side: the `ENVIRONMENT.md` table (cheaper-inference#13035 + cheaper-inference#13011) and the `chatHelpers.ts` import block (cheaper-inference#12975 on the tip + cheaper-inference#13017). - `typecheck:core` clean; `check:dashboard-typecheck` OK (206 pre-existing, within baseline); `check:changelog-integrity` OK; `check:docs-counts` migrations ✓ - complexity 2816 / baseline 3218 and cognitive-complexity 1271 / baseline 1437 — both under baseline - 531 of 532 focused assertions green across the batch's 46 test files - `check-file-size` rebaselined for the batch's real growth (annotation `_rebaseline_2026_09_11_mergebatch_v3851_houminxi`, landed on cheaper-inference#13038), attributed per PR The single red is **not this batch**: `tests/unit/combo/quota-weighted-strategy.test.ts` → "A/B isolation: 7 hard-empty + 2 at 0.5% + 1 at 40%, floor=1" asserts an order between two connections of identical weight and flakes on the pure tip too — 2 failures in 4 runs at `origin/release/v3.8.51` with nothing from this batch applied.⚠️ base-red inherited: cheaper-inference#12732 — `Docs Gates`, `Merge integrity`, `No new ESLint warnings`, `Unit Tests fast-path` and `Fast Quality Gates` reproduce on the pure tip (provider count 356 vs the 358 the modules define, SKILL.md drift, and `open-sse/utils/stream.ts` at 3115 > frozen 3098, untouched here). Thanks @HouMinXi — the live evidence on these (X500 logs, `storage.sqlite` state, real `/v1/models` probes, the 36-minute outage write-up) is what let a 20-PR batch be reviewed as a unit.
muhamadgalihsaputra
pushed a commit
to niyatna/NiyatnaRoute
that referenced
this pull request
Sep 27, 2026
…erence#12594) (cheaper-inference#13060) Two real defects in one report, both correctly separated: the missing phrase in `OAUTH_INVALID_TOKEN_SIGNALS` made a recoverable Cline 401 terminal even though `refreshClineToken` already existed, and the cooling panel printing "429 (rate-limit)" for every future cooldown hid what actually happened. --- Validated in one consolidated worktree cut from `release/v3.8.51`, boarded with the other 19 PRs of this batch. Two in-batch conflicts, both additive and resolved by keeping each side: the `ENVIRONMENT.md` table (cheaper-inference#13035 + cheaper-inference#13011) and the `chatHelpers.ts` import block (cheaper-inference#12975 on the tip + cheaper-inference#13017). - `typecheck:core` clean; `check:dashboard-typecheck` OK (206 pre-existing, within baseline); `check:changelog-integrity` OK; `check:docs-counts` migrations ✓ - complexity 2816 / baseline 3218 and cognitive-complexity 1271 / baseline 1437 — both under baseline - 531 of 532 focused assertions green across the batch's 46 test files - `check-file-size` rebaselined for the batch's real growth (annotation `_rebaseline_2026_09_11_mergebatch_v3851_houminxi`, landed on cheaper-inference#13038), attributed per PR The single red is **not this batch**: `tests/unit/combo/quota-weighted-strategy.test.ts` → "A/B isolation: 7 hard-empty + 2 at 0.5% + 1 at 40%, floor=1" asserts an order between two connections of identical weight and flakes on the pure tip too — 2 failures in 4 runs at `origin/release/v3.8.51` with nothing from this batch applied.⚠️ base-red inherited: cheaper-inference#12732 — `Docs Gates`, `Merge integrity`, `No new ESLint warnings`, `Unit Tests fast-path` and `Fast Quality Gates` reproduce on the pure tip (provider count 356 vs the 358 the modules define, SKILL.md drift, and `open-sse/utils/stream.ts` at 3115 > frozen 3098, untouched here). Thanks @HouMinXi — the live evidence on these (X500 logs, `storage.sqlite` state, real `/v1/models` probes, the 36-minute outage write-up) is what let a 20-PR batch be reviewed as a unit.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Cline returns 401 with "re-authenticate your Cline account" when the access token is stale. That phrasing was not in
OAUTH_INVALID_TOKEN_SIGNALS, soclassifyProviderErrortreated it as a genericUNAUTHORIZEDandresolveTerminalConnectionStatusmarked the connectionexpired. A token refresh would have recovered it (refreshClineTokenalready exists). The cooling panel then printed "429 (rate-limit)" for every connection with a future cooldown timestamp, including this auth failure.Reporter: usable ~15 min after re-auth, then the same 401. Diego already traced both defects on the issue.
Changes
"re-authenticate your cline account"toOAUTH_INVALID_TOKEN_SIGNALS. A Cline 401 now classifies asoauth_invalid_token(non-terminal) instead ofexpired.lastErrorwhen present.coolingConnectionsDescriptionupdated to match.Test plan
node --import tsx/esm --test tests/unit/cline-401-oauth-12594.test.ts(4/4)tests/unit/account-fallback-service.test.ts+tests/unit/auth-terminal-status.test.ts(107/107)accountFallback.tsstays at frozen 2467 linesCloses #12594