Repository navigation
fix: name the cause and next step in provider-not-configured, credential-pool and compaction failures (#4329) - #4544
Open
code-yeongyu wants to merge 7 commits into
Open
code-yeongyu wants to merge 7 commits into
code-yeongyu wants to merge 7 commits into
Conversation
- agent_end.failure reports the local provider-not-configured sentinel as auth with a connect step instead of unknown; the sentinel itself is unchanged. - credential-pool refusals show local due-back time and a wait or sign-in step; the 'No credential slots available' prefix and typed retryAt are unchanged. - compaction_end failures give a cause class and step before the raw cause, keeping the existing leads. - texts that reach RPC/desktop clients no longer name TUI-only /login, /model or /compact; the TUI adds its commands to provider_required.
code-yeongyu
marked this pull request as ready for review
October 27, 2026 17:35
…4329) - Revert the item-4 slash-command rewording to main text: it removed the working /login <provider> step for TUI users; a typed client action is a follow-up design. - Overflow recovery picks its step from pi-ai's retryable classifier: a transient provider error says to resend instead of starting a new session (typed CompactionFailureStep, table-tested). - _terminalFailureText's doc comment sits on its method again.
The local-time due-back text dropped the ISO instant that goal providerRetryAt (and turn-end liveness through it) scans from the failed turn's errorMessage, so a blocked pool no longer woke the goal at its unblock time. Show local time followed by the ISO instant in both the coding-agent pool refusal and AllSlotsBlockedError, and pin every refusal shape through both parsers against the typed retryAt.
This branch has not been deployed
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.
Part of #4329
Part of an error-guidance audit tracked internally
Summary
Three of the remaining failure texts from #4329 now name the cause class and one next step that works on every surface (TUI, RPC, desktop). No string that code matches on was changed.
Provider is not configured.
agent_end.failureused to report the local auth-miss sentinel asunknownwith a resend step, which cannot help because no request was sent. It now reportsauth, with a reason naming the provider and an action to connect it (sign in or add an API key) or choose another model.httpStatusandcodeare absent.PROVIDER_NOT_CONFIGURED_PREFIXandproviderNotConfiguredMessageare unchanged (packages/coding-agent/src/core/provider-failure.tsnotConfiguredFailure).No credential slots available. The due-back time is now local time with its zone, followed by the ISO instant in parentheses (the goal's
providerRetryAtwake and turn-end liveness scan the text for it), then one step: wait until that time, or sign in again / add a new key when no slot comes back on its own (account_disabled, empty pool). TheNo credential slots availableprefix and the typedCredentialFailoverError.retryAtare unchanged (credential-pool/failover.tsnoSlotsMessage).AllSlotsBlockedErrorfollows the same rule;soonestUnblockAtis unchanged.Compaction failed / Auto-compaction failed / Context overflow recovery failed.
core/compaction-failure-text.tsbuilds everycompaction_end.errorMessagefailure from the existing lead, a cause class with one step, andCause: <raw>. The step is a typedCompactionFailureStepchosen bycompactionFailureStep:describeProviderFailureForUser.isRetryableErrorMessage) says to send the message again; any other overflow-recovery failure says to start a new session or switch to a larger-context model.No step names a slash command.
Item 4 (TUI-only slash commands in texts that also reach RPC/desktop) moved to a follow-up. Neutral wording would drop the working
/login <provider>step for TUI users. The right fix is a typed action field that each client renders, which is a separate design.Matched strings verified unchanged
Provider is not configured:No credential slots availableAll credential slots are blocked untilCompaction failed:Auto-compaction failed:Context overflow recovery failed:Nothing to compactOVERFLOW_RECOVERY_EXHAUSTED_MESSAGEThe resolver, credential classifier, overflow, retry and usage-account modules have no diff. One verdict changes on purpose: a compaction failure that wraps an account usage limit now names
retry.fallbackChains, soisQuotaExhaustionMessageclassifies it as quota (non-retryable) instead of retryable.Tests
Tests pin machine values only: typed
categoryandretryAt, the absence ofhttpStatus/code, thecompactionFailureSteptable, the leads, the raw-cause suffix, the overflow-retry signal, and that no compaction step names a slash command.