f19eb3b821
Pursued the server-side SQL angle for the gRPC event zero-rows. Built a read-only SOCKS5-relay + Microsoft.Data.SqlClient probe (gitignored, artifacts/.../sqlschema/) and dumped the live Runtime event schema. Findings: - No per-connection / per-client / per-session column exists anywhere in the event store. The only scoping-like columns on Events/EventHistory/snapshots are event content (Source_* origin, User_* acker, Provider_NodeName, SourceServer replication). - The rich Events view is not a relational table — it is served live by the Historian engine via the INSQL OLE DB provider (linked servers INSQL/INSQLD; encrypted remote view). The SQL EventHistory base table holds only 168 rows / 1 tag. - Decisive: for the SAME -90d..now window the gRPC StartEventQuery diagnostic returned 0 rows, the Events view via INSQL returns 71,332 events (most recent Alarm.Set firing seconds before the probe). Same engine, same window — INSQL serves the data, gRPC withholds it from our connection. So there is nothing in the data to scope by: the zero-row gate is the gRPC RetrievalService's per-connection in-process execution state, not data scoping or transport (the same class of wall as DeleteTagExtendedProperties). Combined with the transport disproof, three independent angles are now exhausted — client payload (byte-identical), transport (HTTP/2 == gRPC-Web), and data store (global, unscoped). gRPC event-row retrieval stands documented as auth-solved / retrieval-server-gated; ReadEventsAsync over gRPC keeps the no-row throw and event reads use WCF. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B6mcaT2PjRFKcogzp9UkfC