Priority: P1
Why
Diagnostics slow-span counts should point at operations that need performance work. Right now long-lived WebSocket subscriptions are counted as slow spans because their duration is the lifetime of the subscription, not the latency of a completed operation.
Diagnostics evidence
From C:\Users\Will\.t3\userdata\logs\server.trace.ndjson* on May 26, 2026:
- Slow-span aggregation includes spans like
ws.rpc.orchestration.subscribeThread, RpcClient.orchestration.subscribeThread, ws.rpc.subscribeVcsStatus, ws.rpc.subscribeServerConfig, and http.server GET with durations around 1,696,000 ms.
- These are stream/subscription lifetimes ending when the client disconnects or refreshes, not necessarily performance regressions.
- The same trace window had 784 spans over 1s and 85 spans over 5s, so subscription lifetimes can hide actionable slow operations.
Acceptance criteria
Priority: P1
Why
Diagnostics slow-span counts should point at operations that need performance work. Right now long-lived WebSocket subscriptions are counted as slow spans because their duration is the lifetime of the subscription, not the latency of a completed operation.
Diagnostics evidence
From
C:\Users\Will\.t3\userdata\logs\server.trace.ndjson*on May 26, 2026:ws.rpc.orchestration.subscribeThread,RpcClient.orchestration.subscribeThread,ws.rpc.subscribeVcsStatus,ws.rpc.subscribeServerConfig, andhttp.server GETwith durations around 1,696,000 ms.Acceptance criteria