ProductSupport#34: document and cover the broken HTTP-transport control channel - #7
Open
jeremydmiller wants to merge 1 commit into
Open
ProductSupport#34: document and cover the broken HTTP-transport control channel#7jeremydmiller wants to merge 1 commit into
jeremydmiller wants to merge 1 commit into
Conversation
…ol channel This sample's battery only ever exercised telemetry (service → console). The control direction (console → service) has never worked on the pinned Wolverine, and nothing here noticed — which is how a reporter followed this sample closely and hit a wall. The console's comment was actively misleading. It said the named HttpClient for a service's control URL is "created on demand from the service's reported control URI". Nothing creates it. WolverineHttpTransportClient uses the outbound URI purely as an IHttpClientFactory client NAME and posts to that client's BaseAddress; CreateClient returns a default client with a null BaseAddress for an unknown name, so the send throws "An invalid request URI was provided…". The console cannot pre-register the client either — it only learns a service's control URL at runtime from that service's own registration. Fixed upstream in wolverine#3681 (GH-3690). Here: the comment and README now say what actually happens and what to delete after the bump, and there is a test that would have caught it. The test asserts on the console's own logs rather than driving an operator command, because operator commands travel CritterWatch's SignalR hub and this harness has no SignalR client — but it still pins the defect, since the console pushes to a registered service unprompted and a broken send shows up with no operator action at all. It is [Fact(Skip)] because it legitimately fails on the pinned WolverineFx 6.23.1. Un-skip with the bump; both the README and the skip reason say so. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6rL8dGQMMh9xNYtP9R9jP
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.
Companion to wolverine#3681, which fixes the underlying defect.
ProductSupport#34 came from someone following
WebService.Httpclosely. Telemetry (service → console) worked; every console → service command failed withAn invalid request URI was provided…. They were right, and the sample was wrong in two ways.The comment was actively misleading.
CritterWatchConsole/Program.cssaid the namedHttpClientfor a service's control URL is "created on demand from the service's reported control URI". Nothing creates it.WolverineHttpTransportClientuses the outbound URI purely as anIHttpClientFactoryclient name and posts to that client'sBaseAddress;CreateClienthands back a default client with a nullBaseAddressfor an unknown name. The console cannot pre-register one either — it only learns a service's control URL at runtime from that service's own registration.Nothing tested it. The battery covered console liveness, the OrderService's own endpoints, and registration — all telemetry-direction. The control direction had no coverage at all, which is why a permanently-broken path shipped as a reference sample.
Changes
AddWolverineHttp()will register them).console_control_channel_sends_without_transport_errors.The test asserts on the console's own logs rather than driving an operator command: operator commands travel CritterWatch's SignalR hub and this harness has no SignalR client. That is weaker than a true end-to-end command, and I would rather say so than dress it up — but it does pin this defect, because the console pushes to a registered service unprompted, so a broken send surfaces as
BufferedSendingAgentfailures with no operator action at all. That is precisely how the reporter found it.It is skipped, on purpose
[Fact(Skip = …)], because it legitimately fails on the pinned WolverineFx 6.23.1 — the control channel really is broken there. Un-skipping is part of the Wolverine bump; the README and the skip reason both say so.🤖 Generated with Claude Code
https://claude.ai/code/session_01U6rL8dGQMMh9xNYtP9R9jP