Skip to content

Anthropic chat client retries and crashes agent threads on 401 PermissionDenied (rejected provider credentials) #4954

Description

@systemorph-com

What is failing

MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync gets a 401 PermissionDenied from the Anthropic API and the streaming round for the agent thread faults with a raw HttpRequestException (via EnsureSuccessStatusCode()). Affected threads include real user agent threads across several tenants, including log-triage agent threads (which effectively kills the triage agent mid-run).

Probable cause

Moderate-to-high confidence: an invalid, expired, or missing Anthropic API key / credential for some tenant or model-provider configuration. A 401 PermissionDenied from the Anthropic endpoint is an authentication rejection, not a transient transport failure — yet the failure surfaces through SendWithRetryAsync, which suggests the retry path treats (or at least logs) a non-retryable auth error like a generic request failure instead of failing fast with a clear "provider credentials rejected" error. Two defects to consider:

  1. The credential configuration itself (which tenant/provider config carries the rejected key — check the model provider settings for the tenants in the affected thread paths).
  2. SendWithRetryAsync should not retry (or should special-case) 401 responses; it should surface a typed, actionable auth error.

Impact

38 occurrences over ~1 month across 17 pods — low volume, not an outage, but each occurrence kills an agent thread execution outright and is confusing to users (raw HttpRequestException with no indication that a provider key is bad). At least four of the samples are log-triage agent threads, so the triage pipeline itself intermittently fails.

Where to look

src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs — SendWithRetryAsync (the EnsureSuccessStatusCode() call, ~line 545/546) and GetStreamingResponseAsync (~line 116/117). Also review the model-provider credential resolution for the Anthropic provider to identify which tenant config produces the rejected key.

Note on prior triage

This incident supersedes Admin/_LogIncident/4b96796426410a46, which was previously suppressed as a one-off OpenRouter key smoke test. The full history (38 occurrences since 2026-08-21, 17 pods, real user threads) shows that assessment was based on a single sample and is not valid — this is a recurring fault, not routine noise.


Evidence

Fingerprint 72940baad6728a13
Category MeshWeaver.AI.AgentChatClient
Severity Error
Exception System.Net.Http.HttpRequestException
Top frame MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
Namespace memex
Pods memex-portal-deployment-65f8c68995-c7z8l, memex-portal-deployment-c96b8bff8-jx7bd, memex-portal-deployment-7969b8cfff-fqnk9, memex-portal-deployment-57b689f955-wrstj, memex-portal-deployment-7969b8cfff-gtmlb, memex-portal-deployment-57b689f955-h6d47, memex-portal-deployment-7cfbf545d9-gtlhr, memex-portal-deployment-58c7bb4b9d-z2xcv, memex-portal-deployment-86779d495b-ksxqq, memex-portal-deployment-5d4bfc98b7-ff447, memex-portal-deployment-54cc8d6b4d-cjnqn, memex-portal-deployment-66f4b5c9b6-mcm2z, memex-portal-deployment-77898c4947-6mffn, memex-portal-deployment-79ddd44d77-k8qlc, memex-portal-deployment-7bff7d8b54-5rrkx, memex-portal-deployment-84d966d9bd-nlv6z, memex-portal-deployment-7fd85c4468-gwghs
Occurrences 38
First seen 2026-08-21 07:52:31Z
Last seen 2026-09-20 06:53:26Z
Routing not determined — no configured route matches the category MeshWeaver.AI.AgentChatClient. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject.
Recent log lines
2026-08-27 12:28:03Z memex-portal-deployment-54cc8d6b4d-cjnqn fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 12:28:03.260 threadPath=SchenkerLabs/EmailJoergSchenker/_Thread/bitte-1-das-reachout-mail-an-j-rg-auf-de-6b1f
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Agents.AI.ApprovalNotRequiredFunctionBypassingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()…[truncated]
2026-08-27 12:28:34Z memex-portal-deployment-54cc8d6b4d-cjnqn fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 12:28:34.379 threadPath=SchenkerLabs/EmailJoergSchenker/_Thread/bitte-1-das-reachout-mail-an-j-rg-auf-de-6b1f
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Agents.AI.ApprovalNotRequiredFunctionBypassingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()…[truncated]
2026-08-27 13:23:49Z memex-portal-deployment-54cc8d6b4d-cjnqn fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 13:23:49.798 threadPath=SchenkerLabs/EmailJoergSchenker/_Thread/bitte-1-das-reachout-mail-an-j-rg-auf-de-6b1f/28869e5a/goal-produce-a-pdf-meshweaver-at-a-glanc-fdbb
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Agents.AI.ApprovalNotRequiredFunctionBypassingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions o…[truncated]
2026-08-30 12:05:02Z memex-portal-deployment-66f4b5c9b6-mcm2z fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 12:05:02.677 threadPath=Admin/_LogIncident/e21cccb65138f43b/_Thread/triage-the-log-incident-at-admin-loginci-89cd
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threadin…[truncated]
2026-09-04 12:46:50Z memex-portal-deployment-77898c4947-6mffn fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 12:46:50.937 threadPath=sglauser/_Thread/is-there-anytihng-on-partnerre-here-7a11
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationT…[truncated]
2026-09-06 20:26:07Z memex-portal-deployment-79ddd44d77-k8qlc fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 20:26:07.568 threadPath=PartnerRe/Esl/EslDueDiligence/_Thread/task-11-i-done-tow-documents-aligned-sow-4ad7
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, Cance…[truncated]
2026-09-07 11:35:54Z memex-portal-deployment-7bff7d8b54-5rrkx fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 11:35:54.174 threadPath=Admin/_LogIncident/2a05e204258d7016/_Thread/triage-the-log-incident-at-admin-loginci-edb6
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options,…[truncated]
2026-09-07 22:13:54Z memex-portal-deployment-84d966d9bd-nlv6z fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 22:13:54.571 threadPath=Admin/_LogIncident/3be4609649fc51cc/_Thread/triage-the-log-incident-at-admin-loginci-1e5e
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options,…[truncated]
2026-09-08 09:29:52Z memex-portal-deployment-7fd85c4468-gwghs fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 09:29:52.196 threadPath=Admin/_LogIncident/d2249f800ffc2577/_Thread/triage-the-log-incident-at-admin-loginci-b884
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options,…[truncated]
2026-09-20 06:53:26Z memex-portal-deployment-65f8c68995-c7z8l fail: MeshWeaver.AI.AgentChatClient[0]
      [ThreadExec] ERROR: 06:53:26.722 threadPath=Admin/_LogIncident/48aa520ad7e4b1b6/_Thread/triage-the-log-incident-at-admin-loginci-8c45
      System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
         at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
         at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
      --- End of stack trace from previous location ---
         at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 149
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 140
         at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
         at MeshWeaver.AI.ProviderCallT…[truncated]

Re-addressed by the current identity function: this incident inherited 4b96796426410a46 (Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.

Opened automatically from Admin/_LogIncident/72940baad6728a13. Recurrences are folded into this issue rather than opening new ones.

Activity

  1. systemorph-com commented on Sep 20, 2026

    @systemorph-com
    ContributorAuthor

    Still occurring: 1 more since the last update (39 total).

    • Last seen: 2026-09-20 07:25:32Z
    • Pods: memex-portal-deployment-65f8c68995-c7z8l, memex-portal-deployment-c96b8bff8-jx7bd, memex-portal-deployment-7969b8cfff-fqnk9, memex-portal-deployment-57b689f955-wrstj, memex-portal-deployment-7969b8cfff-gtmlb, memex-portal-deployment-57b689f955-h6d47, memex-portal-deployment-7cfbf545d9-gtlhr, memex-portal-deployment-58c7bb4b9d-z2xcv, memex-portal-deployment-86779d495b-ksxqq, memex-portal-deployment-5d4bfc98b7-ff447, memex-portal-deployment-54cc8d6b4d-cjnqn, memex-portal-deployment-66f4b5c9b6-mcm2z, memex-portal-deployment-77898c4947-6mffn, memex-portal-deployment-79ddd44d77-k8qlc, memex-portal-deployment-7bff7d8b54-5rrkx, memex-portal-deployment-84d966d9bd-nlv6z, memex-portal-deployment-7fd85c4468-gwghs, memex-portal-deployment-78c786fcf6-bs4fn
    Recent log lines
    2026-09-08 09:29:52Z memex-portal-deployment-7fd85c4468-gwghs fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 09:29:52.196 threadPath=Admin/_LogIncident/d2249f800ffc2577/_Thread/triage-the-log-incident-at-admin-loginci-b884
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 116
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 148
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 139
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options,…[truncated]
    2026-09-20 06:53:26Z memex-portal-deployment-65f8c68995-c7z8l fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 06:53:26.722 threadPath=Admin/_LogIncident/48aa520ad7e4b1b6/_Thread/triage-the-log-incident-at-admin-loginci-8c45
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 149
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 140
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    2026-09-20 07:25:32Z memex-portal-deployment-78c786fcf6-bs4fn fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 07:25:32.088 threadPath=Admin/_LogIncident/69fc2c77c29dfcb3/_Thread/triage-the-log-incident-at-admin-loginci-e608
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 221
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 188
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    

    Re-addressed by the current identity function: this incident inherited 4b96796426410a46 (Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.

  2. added
    area:aiCore subsystem: the AI engine and model providers
    sev:MMedium - secondary path broken, or easy workaround
    on Sep 20, 2026
  3. systemorph-com commented on Sep 20, 2026

    @systemorph-com
    ContributorAuthor

    Still occurring: 2 more since the last update (41 total).

    • Last seen: 2026-09-20 21:55:32Z
    • Pods: memex-portal-deployment-65f8c68995-c7z8l, memex-portal-deployment-c96b8bff8-jx7bd, memex-portal-deployment-7969b8cfff-fqnk9, memex-portal-deployment-57b689f955-wrstj, memex-portal-deployment-7969b8cfff-gtmlb, memex-portal-deployment-57b689f955-h6d47, memex-portal-deployment-7cfbf545d9-gtlhr, memex-portal-deployment-58c7bb4b9d-z2xcv, memex-portal-deployment-86779d495b-ksxqq, memex-portal-deployment-5d4bfc98b7-ff447, memex-portal-deployment-54cc8d6b4d-cjnqn, memex-portal-deployment-66f4b5c9b6-mcm2z, memex-portal-deployment-77898c4947-6mffn, memex-portal-deployment-79ddd44d77-k8qlc, memex-portal-deployment-7bff7d8b54-5rrkx, memex-portal-deployment-84d966d9bd-nlv6z, memex-portal-deployment-7fd85c4468-gwghs, memex-portal-deployment-78c786fcf6-bs4fn, memex-portal-deployment-5f69f6b6bd-z7tb6, memex-portal-deployment-6b7c4f94db-zzvfq
    Recent log lines
    2026-09-20 07:25:32Z memex-portal-deployment-78c786fcf6-bs4fn fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 07:25:32.088 threadPath=Admin/_LogIncident/69fc2c77c29dfcb3/_Thread/triage-the-log-incident-at-admin-loginci-e608
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 221
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 188
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    2026-09-20 07:27:26Z memex-portal-deployment-5f69f6b6bd-z7tb6 fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 07:27:26.976 threadPath=Admin/_LogIncident/4bcb8bae7f327bc2/_Thread/triage-the-log-incident-at-admin-loginci-1983
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 221
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 188
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    2026-09-20 21:55:32Z memex-portal-deployment-6b7c4f94db-zzvfq fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 21:55:32.837 threadPath=Admin/_LogIncident/03e5e31ad393af55/_Thread/triage-the-log-incident-at-admin-loginci-09b2
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 221
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 188
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    

    Re-addressed by the current identity function: this incident inherited 4b96796426410a46 (Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.

  4. systemorph-com commented on Sep 21, 2026

    @systemorph-com
    ContributorAuthor

    Still occurring: 1 more since the last update (42 total).

    • Last seen: 2026-09-20 22:21:31Z
    • Pods: memex-portal-deployment-65f8c68995-c7z8l, memex-portal-deployment-c96b8bff8-jx7bd, memex-portal-deployment-7969b8cfff-fqnk9, memex-portal-deployment-57b689f955-wrstj, memex-portal-deployment-7969b8cfff-gtmlb, memex-portal-deployment-57b689f955-h6d47, memex-portal-deployment-7cfbf545d9-gtlhr, memex-portal-deployment-58c7bb4b9d-z2xcv, memex-portal-deployment-86779d495b-ksxqq, memex-portal-deployment-5d4bfc98b7-ff447, memex-portal-deployment-54cc8d6b4d-cjnqn, memex-portal-deployment-66f4b5c9b6-mcm2z, memex-portal-deployment-77898c4947-6mffn, memex-portal-deployment-79ddd44d77-k8qlc, memex-portal-deployment-7bff7d8b54-5rrkx, memex-portal-deployment-84d966d9bd-nlv6z, memex-portal-deployment-7fd85c4468-gwghs, memex-portal-deployment-78c786fcf6-bs4fn, memex-portal-deployment-5f69f6b6bd-z7tb6, memex-portal-deployment-6b7c4f94db-zzvfq, memex-portal-deployment-75b545bbd-gwrc6
    Recent log lines
    2026-09-20 07:27:26Z memex-portal-deployment-5f69f6b6bd-z7tb6 fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 07:27:26.976 threadPath=Admin/_LogIncident/4bcb8bae7f327bc2/_Thread/triage-the-log-incident-at-admin-loginci-1983
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 221
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 188
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    2026-09-20 21:55:32Z memex-portal-deployment-6b7c4f94db-zzvfq fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 21:55:32.837 threadPath=Admin/_LogIncident/03e5e31ad393af55/_Thread/triage-the-log-incident-at-admin-loginci-09b2
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
          --- End of stack trace from previous location ---
             at MeshWeaver.AI.StreamStallGuardChatClient.Swallow(Task task) in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 221
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /home/runner/work/MeshWeaver/MeshWeaver/plugins-repo/src/MeshWeaver.AI/StreamStallGuardChatClient.cs:line 188
             at MeshWeaver.AI.StreamStallGuardChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
             at MeshWeaver.AI.ProviderCallT…[truncated]
    2026-09-20 22:21:31Z memex-portal-deployment-75b545bbd-gwrc6 fail: MeshWeaver.AI.AgentChatClient[0]
          [ThreadExec] ERROR: 22:21:31.384 threadPath=Admin/_LogIncident/55a9ce7bfc40ee71/_Thread/triage-the-log-incident-at-admin-loginci-fc0b
          System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (PermissionDenied).
             at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.SendWithRetryAsync(ClaudeRequest request, HttpCompletionOption completionOption, CancellationToken cancellationToken) in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 546
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext() in /repo/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 117
             at MeshWeaver.AI.Anthropic.AnthropicChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
    

    Re-addressed by the current identity function: this incident inherited 4b96796426410a46 (Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.

  5. rbuergi commented on Sep 22, 2026

    @rbuergi
    Contributor

    Re-routed to MeshWeaver.Plugins — and the title's premise does not survive measurement, but a real defect is underneath it

    Where the subject is

    AnthropicChatClient.SendWithRetryAsync is in Systemorph/MeshWeaver.Plugins at
    src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs. This issue's own evidence table says so twice
    and I should have been reading it: the stack frames carry the literal build path
    /home/runner/work/MeshWeaver.Plugins/MeshWeaver.Plugins/src/MeshWeaver.AI.Anthropic/AnthropicChatClient.cs:line 545,
    and the table's Routing row already warns "the category names the LOGGER, which may not be the
    subject"
    . The category MeshWeaver.AI.AgentChatClient is the logger; the subject is the Anthropic
    client, one repository over.

    Denominator searched (this repo at origin/main — 1401 .cs under src/, 111 under memex/,
    1328 under test/, 934 files under samples/, 66 projects in MeshWeaver.slnx): zero declarations
    and zero call sites for AnthropicChatClient, SendWithRetryAsync or AgentChatClient — the only
    hits anywhere are comments and XML-doc cross-references. src/MeshWeaver.AI* does not exist here;
    MeshWeaver.slnx declares no MeshWeaver.AI project. (In-mesh .cs compiles at runtime and is
    invisible to a grep over src/ — this is a claim about the compiled repositories only.)

    The retry premise is false

    Measured on MeshWeaver.Plugins@main, AnthropicChatClient.cs:533:

    var retryable = status is 500 or 502 or 503 or 429;

    401 is not in that set. A 401 takes the // Non-retryable, or the last attempt failed → surface the error (throws) branch straight to EnsureSuccessStatusCode() on the first attempt. So the
    client already treats a rejected credential as the permanent verdict it is, and the title's "retries
    and crashes" does not hold. I would flag the corollary as well: adding a retry here would be wrong
    twice over
    — a band-aid, and a contradiction of what the status means.

    But there is a real defect, and it is the legibility half

    A 401 is classified by nothing, so the user gets the raw SDK sentence. Enumerated exhaustively on
    MeshWeaver.Plugins@main, because absence of one marker is not absence of the event — every path by
    which a 401 could become legible, and why each does not fire:

    Path Covers 401?
    ProviderFailureClassifier predicates IsQuotaExhausted 402, IsModelNotFound 404, IsRateLimited 429, IsProviderUnavailable 5xx no predicate
    providerStatus switch in ThreadExecution cases 402, 404, 429, >= 500 and < 600, then _ => null falls to _ => null
    AnthropicChatClient no AuthRequiredException / Unauthorized / PermissionDenied / 401 mapping anywhere in the file no
    FindStreamFault stream stalled / unrepresentable payload only no
    FindHarnessProcessFault / AuthRequiredException CLI harnesses (Claude Code, Copilot) — see #4988 no, not an HTTP provider
    HasNoUsableModel / chat.noUsableModel a credential that cannot be resolved locally no — this is a credential the provider rejects

    The only mention of 401 anywhere in ThreadExecution.cs on main is a comment about the CLI-harness
    path. So providerMessage is null, and the cell's text becomes ex.Message verbatim:

    Response status code does not indicate success: 401 (PermissionDenied).

    Raw, English-only whatever the viewer's locale, naming no model and no remedy — which is precisely
    the defect class #476 and #2233 exist to kill, still live for the one condition an operator is most
    able to act on. 38 occurrences across 17 pods, most recent 2026-09-20, so it is not theoretical.

    The platform half is merged here; the engine half is yours

    Core owns the localization catalog, so the platform string lands first (this is the inverted ordering
    the engine already expects — it checks LocalizationCatalog.Keys.Contains(key) before resolving and
    falls back to its own English, so a key can lead a branch but never the other way round):

    • chat.modelCredentialRejected, en + de, in
      src/MeshWeaver.Messaging.Hub/Localization/strings.{en,de}.json. {0} = the model that actually
      served, {1} = the status. The prose deliberately says "Submitting again will not help until the
      key is replaced"
      — a permanent verdict must not read as "submit again later".
    • Doc/AI/ProviderConfiguration now carries the full condition→key table (it had gone stale at 429
      and 5xx and did not mention 402/404), this gap with its measurement, and the boundary rule: "keeps
      its own message verbatim" is right for a fault carrying no transport status and wrong for one that
      does.

    The counterpart in MeshWeaver.Plugins is an IsCredentialRejected predicate (401) on
    ProviderFailureClassifier plus a 401 => LocalizationCatalog.Get("chat.modelCredentialRejected", …)
    case in the providerStatus switch, keeping the provider's own text on the LogError as the other
    branches do.

    Disposition

    Leaving open and re-routed: the remaining work is in MeshWeaver.Plugins.

    What this does not establish. Only 401 is measured. I deliberately did not fold 403 in: it
    means different things at different providers (permission, region, content policy) and a confidently
    wrong name is worse for a reader than a generic one — but note 403 also currently falls to
    _ => null, so it is unaddressed rather than handled. Whether to widen the default for other 4xx is a
    wording decision (chat.modelProviderError interpolates its status but ends in "Submit again later",
    true of a 5xx and false of most 4xx), and I did not make it. I also did not identify which tenant
    or provider config carries the rejected key — this issue's second question — and no credential value
    was read; that half is operational.


    Platform half merged in #5167 (this repository): chat.modelCredentialRejected, en + de, plus the condition→key table in Doc/AI/ProviderConfiguration brought current and this gap written up with its measurement. The engine-side counterpart is the remaining work and is in MeshWeaver.Plugins.

  6. rbuergi commented on Sep 22, 2026

    @rbuergi
    Contributor

    Platform half MERGED — the engine-side counterpart is what remains

    #5167 merged to main at e68b5be8, and I verified the result rather than the tick: the key reads back
    from main in both catalogs (strings.en.json and strings.de.json, one occurrence each).

    chat.modelCredentialRejected

    • en: "The language model '{0}' could not serve this round: the provider rejected the configured
      credential (HTTP {1}). Replace the provider key in Settings → Language Models, or pick a model on
      another provider. Submitting again will not help until the credential is replaced."
    • de: the same, using the terms the chat.* siblings already use — Zugangsdaten for what the provider
      rejected, Provider-Schlüssel for what has to be replaced.

    {0} is the model that actually served, {1} the status. The closing sentence is deliberate: a rejected
    credential is a permanent verdict, so the prose must not read as "submit again later", which is what
    rules out folding it into chat.modelRateLimited or chat.modelProviderError.

    Doc/AI/ProviderConfiguration went in with it, and carries three things beyond this key: the full
    condition→key table (it had gone stale at 429 and 5xx, with no mention of 402/404, the stream faults or
    historyLoadFailed); the fact that the engine is in MeshWeaver.Plugins so a search of core can neither
    confirm nor refute anything about provider-failure handling; and the boundary rule — "keeps its own
    message verbatim" is right for a fault carrying no transport status and wrong for one that does.

    What remains, and it is small

    In MeshWeaver.Plugins:

    1. ProviderFailureClassifier — an IsCredentialRejected predicate for 401, beside the existing
      IsQuotaExhausted / IsModelNotFound / IsRateLimited / IsProviderUnavailable.
    2. ThreadExecution's providerStatus switch — a 401 => arm resolving
      chat.modelCredentialRejected, keeping the provider's own text on the preceding LogError exactly as
      every other arm does.

    The ordering was deliberately platform-first, and that direction is the safe one: the engine checks
    LocalizationCatalog.Keys.Contains(key) before resolving and falls back to its own purpose-written
    English, so a platform key can lead an engine branch but an engine branch cannot lead a platform key.
    The key is now on main, so the branch will resolve it as soon as the image carrying this commit is what
    the portal runs.

    Filed into bug triage so the Plugins half gets an owner, since a comment on a core issue cannot
    create work in another repository.

    Unchanged from my earlier comment, and worth keeping in view: the retry premise in this issue's title
    does not survive reading SendWithRetryAsync:533 (retryable = status is 500 or 502 or 503 or 429 — 401
    is already terminal), and adding a retry would be both a band-aid and a contradiction of what the status
    means. 403 is deliberately still unaddressed rather than handled: it means different things at different
    providers, and a confidently wrong name is worse for a reader than a generic one. I also did not identify
    which tenant or provider configuration carries the rejected key — that half is operational, and no
    credential value was read at any point.

  7. rbuergi commented on Sep 22, 2026

    @rbuergi
    Contributor

    Engine half opened — Systemorph/MeshWeaver.Plugins#2270

    ProviderFailureClassifier.IsCredentialRejected (401) and a 401 => arm in ThreadExecution's providerStatus switch resolving chat.modelCredentialRejected (the key #5167 landed here; the set the PR resolves already carries e68b5be8), the provider's own text staying on the preceding LogError as every other arm does. 403 deliberately still unclassified.

    Two-sided control (CredentialRejectedRoundTest, real mesh, a scripted provider throwing the production-shaped typed HttpRequestException { StatusCode = 401 } with the SDK's exact message): without the arm the cell read *Error: Response status code does not indicate success: 401 (PermissionDenied).* — Total: 1, Failed: 1; with it, Status = Error, the localized condition in cell and summary, neither SDK fragment present, thread Idle with exactly one response cell — Failed: 0.

    The retry premise stays refuted, and is now pinned: AnthropicRetryTest gained two cases (streaming and non-streaming) proving a 401 makes exactly ONE request and escapes as the typed Unauthorized — so a future "resilience" change that added 401 to retryable goes red. A retry on a rejected secret would be the band-aid.

    Not established, unchanged from above: which tenant/provider configuration carries the rejected key. The react mirror's pin bump (npm run sync:i18n -- --ref e68b5be8) is still owed as its own small PR.

    Stays open until the Plugins half is merged and verified on a rolled portal.

  8. rbuergi commented on Sep 24, 2026

    @rbuergi
    Contributor

    Closing as completed: both code halves are merged and test-verified, and the fault has not recurred for 3½ days while the watcher was folding other incidents.

    Not established, and why it does not keep this open: which provider configuration carried the rejected key. Every sample thread was a log-triage thread (Admin/_LogIncident/*/_Thread/triage-…), so it was the triage agent's model configuration on namespace memex. The engine's LogError still carries the provider's own text, so a rejected credential will fold here again — and the recurrence bot reopens this issue — if the key is still bad; the silence since 2026-09-20 22:21Z suggests it was replaced or the triage agent moved model, but I did not read the provider configuration. I also did not confirm which Plugins AI module version the memex portal runs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:aiCore subsystem: the AI engine and model providersbugSomething isn't workingfeature:provider-credentialsFeature: provider credentialssev:MMedium - secondary path broken, or easy workaround

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions