Changelog
All notable changes to the pgEdge AI DBA Workbench are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[1.0.0-beta1] - 2026-04-21
Added
- Add the
llm.timeout_secondsserver configuration option to control the HTTP client timeout for requests to the configured LLM provider; the default remains 120 seconds. (#60) - Add a guided walkthrough example with pre-seeded demo data and an in-browser Driver.js tour covering the workbench's major features.
Changed
- Default the knowledgebase
database_pathto the pgEdge package install path at/usr/share/pgedge/postgres-mcp-kb/kb.db. (#52)
Fixed
- Remove misleading raw API key options from the
example server configuration files; the server
only accepts API keys through the corresponding
*_filevariants. (#54) - Fix spurious "partition would overlap" errors from the collector on non-UTC hosts when the weekly partition rolled over. (#55)
- Fix foreign key violations during alerter baseline calculation when metric rows outlive their connection; historical metric queries now filter through the connections table. (#56)
- Fix MCP tool invocations failing with TLS
certificate verification errors against servers
that require a custom
sslrootcert,sslcert, orsslkey; the server now forwards these fields on the database connection string. (#57) - Fix reactivated alerts continuing to appear as
acknowledged in the GUI by clearing stale
alert_acknowledgmentsrows when an alert leaves the acknowledged state; the alerts API now also exposes a nullablelast_updatedRFC3339 timestamp and the StatusPanel surfaces it alongside "Triggered" when the two differ. (#64) - Fix the cluster Topology tab "Add server" dropdown
silently excluding servers that had been re-claimed
by an auto-detected Spock cluster; the connections
API now returns the
membership_sourcefield the client filter requires. (#25, #46) - Fix dismissed auto-detected clusters reappearing
after the collector's next auto-detection run;
UpsertAutoDetectedClusterno longer clears thedismissedflag on rediscovery, andGetClusternow filters dismissed rows from single-cluster lookups. (#36) - Fix dismissed auto-detected clusters reappearing in the Server creation dialog's cluster dropdown after alert or connection context was fetched; the connection hierarchy resolver now skips dismissed rows and no longer resurrects them through its upsert fallback. (#36)
- Fix partitions not being dropped at the appropriate time by the collector. (#62)
- Fix the copy-to-clipboard button in the Admin Tokens "Token created" dialog; the button now shows a check mark and "Copied!" tooltip on success and surfaces clipboard failures through the error alert. (#71)
- Fix the StatusPanel "Restore to active" action silently failing on error; the alert now leaves the acknowledged list optimistically, rolls back and surfaces a Snackbar error on API failure, and guards against double-click submissions. (#72)
- Fix servers assigned to a manually created cluster
continuing to appear under a re-created
auto-detected cluster after the next topology
refresh; auto-detected Spock, binary-replication,
and logical-replication grouping now skip
connections with
membership_source = 'manual'. (#74) - Fix
GET /api/v1/connectionsreturning an empty array for scoped API tokens when the token owner's read access came from a wildcard group grant; the scoped connections are now returned as expected, and token scopes continue to restrict but not elevate the owner's privileges. (#83)
Security
- Fix several REST endpoints and MCP tools leaking
unshared connections owned by other users; the
connection detail, database listing, connection
context, cluster topology, alerts, alert
acknowledgement, alert analysis, timeline, and
current-connection endpoints now apply the same
ownership, sharing, group, and token-scope checks
as
GET /api/v1/connections, returning403 Forbiddenfor single-resource requests and filtering list responses to the caller's visible connections. Theget_alert_history,get_metric_baselines, andget_blackoutsMCP tools applied no connection filter for callers with zero explicit grants; all three now restrict results to connections the caller is permitted to see. The OpenAPI specification and the staticdocs/admin-guide/api/openapi.jsonnow document the403 Forbiddenresponse on the affected single-resource endpoints. (#35) - Fix server and cluster visibility leaks through the
cluster list, cluster group, and cluster-membership
REST endpoints;
GET /api/v1/clusters/list,GET /api/v1/clusters/{id},GET /api/v1/clusters/{id}/servers,GET /api/v1/cluster-groups, andGET /api/v1/cluster-groups/{id}now filter clusters, groups, and member servers to the caller's visible connections and return404 Not Foundfor clusters or groups that contain no visible members. (#35) - Fix additional RBAC leaks surfaced by the follow-up
security audit; the overview REST and SSE endpoints
(
GET /api/v1/overviewandGET /api/v1/overview/stream) now verify scope visibility for scoped requests and filterconnection_idslists to the caller's visible set; the blackout list and get endpoints (GET /api/v1/blackoutsandGET /api/v1/blackouts/{id}) hide blackouts whose referenced connection, cluster, or group is not visible to the caller; the alert, probe, and channel override list endpoints (GET /api/v1/alert-overrides/{scope}/{scopeId},GET /api/v1/probe-overrides/{scope}/{scopeId}, andGET /api/v1/channel-overrides/{scope}/{scopeId}) return404 Not Foundwhen the caller cannot see the requested scope; and the MCP connection resolver now checks RBAC before loading credentials and returns a generic "connection not found or not accessible" message for both missing and denied cases. (#35) - Fix remaining RBAC leaks flagged by the third-round
security audit; the
query_metricsandget_alert_rulesMCP tools now checkCanAccessConnectionbefore any datastore read and return a generic "connection not found or not accessible" error for both missing and denied connections, closing the ID/name enumeration that the previous error path exposed. The overview scoped-snapshot path (GET /api/v1/overview?scope_type=cluster|group) now intersects the scope's member connection IDs with the caller's visible set and generates the summary from the intersection through the existing connections- summary path, so two callers with different visibility never share a cache entry; scope denial now returns404 Not Foundto match sibling handlers. The blackout schedule list and get endpoints (GET /api/v1/blackout-schedulesandGET /api/v1/blackout-schedules/{id}) apply the same visibility filter as the blackout endpoints, and the alert override context endpoint (GET /api/v1/alert-overrides/context/{connectionId}/{ruleId}) now gates onscopeVisibleToCallerbefore reading override hierarchy. The MCP connection resolver logs RBAC denials so operators can correlate without widening the caller-visible surface. (#35)
[1.0.0-alpha3] - 2026-04-08
Added
- Add a Docker publish workflow that builds and pushes multi-platform images to GitHub Container Registry on version tags and main branch pushes.
- Add a production Docker Compose configuration using pre-built images with resource limits and log rotation.
- Add a Docker deployment guide to the documentation.
- Add a favicon to the web client.
- Replace the SQLite driver with a pure-Go implementation to support CGO-free builds.
Changed
- Improve blackout status indicators and require confirmation before deleting a blackout. (#34)
- Limit blackout scope options to relevant entries only. (#33)
- Allow servers from auto-detected clusters to be reassigned to manual clusters. (#46)
- Hide alert threshold links for users who lack the required permission. (#40)
- Display errors to users when fetching unassigned servers fails.
Fixed
- Fix the blackout dialog refreshing unnecessarily when underlying components update. (#47)
- Fix missing browser refresh after certain navigation actions and prevent title wrapping. (#45)
- Fix the replication type not carrying through to the edit dialog. (#44)
- Fix multiple potential crashes after a network failure and recovery. (#43)
- Fix a serialization error when updating server details. (#42)
- Fix a crash when clicking an empty cluster. (#39)
- Fix inconsistent alert operator values. (#38)
- Fix auto-detected clusters reappearing after deletion. (#36)
- Fix the is_shared flag for servers not being respected in all cases. (#35)
- Fix connection error alerts ignoring active blackouts. (#32)
- Fix MCP write access to databases. (#29)
- Fix SSL settings being silently dropped when creating or updating a server.
- Fix various issues with the database summary popup.
- Fix various TypeScript type safety issues in the web client.
Security
- Fix MCP memory tools bypassing RBAC checks; all authenticated users could access the datastore without proper authorization.
[1.0.0-alpha2] - 2026-03-04
Fixed
- Fix a crash in the Add Server dialog when no clusters exist in the database.
[1.0.0-alpha1] - 2026-03-02
Initial release.