c1ff8c94e8
The cross-language client e2e matrix failed for dotnet and Java. Both failures were in the harness, not the client code. 1. Per-call toolchain cold-start. The matrix issues ~250 CLI calls per client; it invoked `dotnet run` / `gradle :mxgateway-cli:run` every time, rebuilding and cold-starting the toolchain per call. Build each CLI once up front (`dotnet build`, `gradle :mxgateway-cli:installDist`) and invoke the compiled artifact directly. This alone fixes dotnet. 2. Worker event-channel overflow. The per-tag advise loop advises every discovered tag with no StreamEvents consumer attached, so change events accumulate in the worker event channel (MxGateway:Events:QueueCapacity) until FailFast faults the worker. dotnet's faster loop slipped under the window; the Java CLI's process-per-call JVM cold-start did not. Every -DrainEveryTags advised tags (default 15) the loop connects a short StreamEvents drain; the gateway's per-stream producer empties the channel the instant a subscriber attaches, so a small bounded read suffices. Full 5-client matrix (dotnet, go, rust, python, java) now passes with -VerifyWrite against a live gateway. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>