You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Nine PostgreSQL collectors are readable only from the Windows Viewer — the MCP and web surfaces cannot see them #2629
Found while exercising every read tool against the self-hosted rig.
The gap
Nine PostgreSQL collectors have a WPF Viewer panel and nothing else. No MCP tool, no web read endpoint:
collector
rows on the rig right now
reachable from
pg_kernel_stats
253
Viewer only
pg_column_stats
240
Viewer only
pg_predicate_stats
240
Viewer only
pg_buffer_usage
189
Viewer only
pg_index_bloat
160
Viewer only
pg_extension_availability
100
Viewer only
pg_wait_sampling
63
Viewer only
pg_lock_stats
0 (idle rig)
Viewer only
pg_write_stats
1
Viewer only
Thirteen get_pg_* reads are served. These nine are not among them, and the web POSTGRES_TABS registry carries the same thirteen.
Why it matters more than a missing endpoint
The Viewer is Windows-only WPF. Every one of these is collected on a Linux or macOS host and then unreadable from that host — and unreadable by an agent anywhere, which is the surface this product is differentiated on. We are paying the collection cost on every cycle and shipping the answer to one GUI.
It is sharpest for pg_wait_sampling. #2625 just shipped a message that tells a stock-PostgreSQL operator, correctly, that pg_wait_stats is Aurora-only and pg_wait_sampling answers the same question. It points at a panel the MCP cannot read. On a non-Aurora target "why is this slow" now has an answer that is only visible if you are sitting at a Windows machine.
pg_index_bloat is the same shape: #2617 and #2622 were both spent getting it to return rows, and it returned 160 of them measuring 89.6% average leaf density — into a table nothing but the Viewer queries.
Suggested order
By what question each one closes, not by table size:
Each needs its store reader, its MCP tool, its web dispatch entry, its POSTGRES_TABS entry, the ServerPageTabsTests read-to-collector map, and the MCP inventory ratchet — the registration set is known and mechanical.
The guard this needs
A test asserting every PostgreSQL collector that has a Viewer panel also has a served read. Nine of them drifted in one at a time, each individually reasonable, and nothing was watching the aggregate. Whatever lands first should bring that guard with it, or the tenth will do the same thing.
Two down in #2631 — get_pg_wait_sampling and get_pg_kernel_stats are now served by the MCP and the web dashboard.
Seven remain: pg_buffer_usage, pg_column_stats, pg_extension_availability, pg_index_bloat, pg_lock_stats, pg_plan_capture_readiness, pg_predicate_stats, pg_replication_stats, pg_write_stats — nine names, of which pg_plan_capture_readiness is the legitimate case the ratchet tolerates (one row of configuration state is a panel, not a question anyone asks an agent).
The guard asked for is in: ThePostgresCollectorsWithNoServedRead_OnlyEverShrink asserts the count only goes down AND requires lowering the constant when it does, so ground won cannot be quietly given back.
Building the first read also surfaced #2630 immediately — pg_wait_sampling was 100% ClientRead. Worth expecting more of that: these tables have never been read by anything that reports what it found.
Closed by #2632. Every PostgreSQL collector except pg_plan_capture_readiness now has an MCP tool and a web panel — the ratchet went nine → one, and that one is the case it was built to tolerate.
Two defects surfaced on the way, both from actually running the reads rather than reviewing them:
And a third caught by an existing guard: four panels landed on the SQL Server registry's io and activity tabs, because both registries use those ids and my insertion anchored on the first match. EveryPostgresRead_IsReachableFromThePostgresRegistry_AndFromNoOtherTab named all four. Invisible on inspection — the code reads correctly and only the registry is wrong.
Activity
erikdarlingdata commentedon Aug 26, 2026
Two down in #2631 —
get_pg_wait_samplingandget_pg_kernel_statsare now served by the MCP and the web dashboard.Seven remain:
pg_buffer_usage,pg_column_stats,pg_extension_availability,pg_index_bloat,pg_lock_stats,pg_plan_capture_readiness,pg_predicate_stats,pg_replication_stats,pg_write_stats— nine names, of whichpg_plan_capture_readinessis the legitimate case the ratchet tolerates (one row of configuration state is a panel, not a question anyone asks an agent).The guard asked for is in:
ThePostgresCollectorsWithNoServedRead_OnlyEverShrinkasserts the count only goes down AND requires lowering the constant when it does, so ground won cannot be quietly given back.Building the first read also surfaced #2630 immediately —
pg_wait_samplingwas 100%ClientRead. Worth expecting more of that: these tables have never been read by anything that reports what it found.erikdarlingdata commentedon Aug 26, 2026
Closed by #2632. Every PostgreSQL collector except
pg_plan_capture_readinessnow has an MCP tool and a web panel — the ratchet went nine → one, and that one is the case it was built to tolerate.Two defects surfaced on the way, both from actually running the reads rather than reviewing them:
ClientRead.get_pg_extensionsreportedinstalled: 10at a 50-row limit for a server with 13. Those totals are now withheld whentruncatedis true. Same shape as A per-database collector that fails in SOME databases reports SUCCESS with no note #2623's partial-failure note — a number is only as wide as what it counted.And a third caught by an existing guard: four panels landed on the SQL Server registry's
ioandactivitytabs, because both registries use those ids and my insertion anchored on the first match.EveryPostgresRead_IsReachableFromThePostgresRegistry_AndFromNoOtherTabnamed all four. Invisible on inspection — the code reads correctly and only the registry is wrong.Account for every Aurora-only SQL surface in the tree