What's Changed
- Updates release workflow to build native packages and push to repos by @maqeel75 in #298
- package cells: native arm64 runners to avoid QEMU ldconfig segfault by @maqeel75 in #299
- Update binary_install.md by @paul-pgedge in #310
- chore(deps): bump softprops/action-gh-release from 3.0.0 to 3.0.1 by @dependabot[bot] in #305
- chore(deps): bump actions/cache from 5.0.5 to 6.0.0 by @dependabot[bot] in #306
- chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 by @dependabot[bot] in #307
- ci(walkthrough): fix smoke test failing on empty LLM key by @dpage in #311
- Remove runtime pgedge-ai-kb dependency by @maqeel75 in #316
- Adds ubuntu resolute in platforms list by @maqeel75 in #338
- Fix metrics API returning empty response on NaN/Inf samples by @susan-pgedge in #339
- Fix blank object dashboards: add latest-row metrics query mode by @susan-pgedge in #340
- Fix flaky E2E failure from collector schema-migration poll race by @susan-pgedge in #341
- chore(deps): bump docker/build-push-action from 7.2.0 to 7.3.0 by @dependabot[bot] in #333
- chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #334
- Fix blank Activity Charts: add per-second rate and dead-tuple-ratio metrics by @susan-pgedge in #342
- docs(examples): document supported embedding providers in server sample by @susan-pgedge in #312
- Reorganise admin guide into Managing Users and Permissions by @susan-pgedge in #300
- chore(deps): bump actions/setup-go from 6.4.0 to 6.5.0 by @dependabot[bot] in #320
- chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 by @dependabot[bot] in #321
- chore(deps): bump actions/cache from 6.0.0 to 6.1.0 by @dependabot[bot] in #322
- fix(embedding): store embeddings as halfvec(4000) for all providers by @dpage in #295
- Migrate all LLM interface code to pgedge-go-llm-lib v0.1.0 (Phases B-E) by @dpage in #297
- fix(chat): stop emitting pg_stat_bgwriter.buffers_backend on PG17+ by @dpage in #314
- docs(config): update knowledgebase database_path for pgedge-ai-kb by @dpage in #315
- fix(client): show group-inherited admin privileges on the Users tab by @dpage in #317
- feat(cli): add -group-description flag for creating groups by @dpage in #318
- chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #358
- chore(deps): bump docker/login-action from 4.2.0 to 4.4.0 by @dependabot[bot] in #357
- chore(deps): bump docker/metadata-action from 6.1.0 to 6.2.0 by @dependabot[bot] in #356
- chore(deps): bump actions/setup-node from 6.4.0 to 7.0.0 by @dependabot[bot] in #355
- chore(deps): bump docker/setup-buildx-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #354
- Fix missing Table Size and Index Size on object dashboards by @susan-pgedge in #343
- Fix Estate dashboard panels getting stuck on "No data" after a transient failure by @susan-pgedge in #344
- fix(rbac): preserve specific connection grants when granting All Connections by @dpage in #319
- Fix latest-row metrics query returning stale historical data by @susan-pgedge in #352
- Fix Index Scan Activity chart always showing no data by @susan-pgedge in #353
- Fix blank Database Summaries chart for databases with no history yet by @susan-pgedge in #361
- Fix cache hit ratio graph not rendering for flat time series by @susan-pgedge in #359
- Fix ghost database cards persisting after a database is dropped by @susan-pgedge in #363
- feat(cli): surface group admin permissions and members in the CLI by @dpage in #324
- fix(cluster-groups): populate and persist description and share flag by @dpage in #325
- chore(collector): harden shutdown diagnostics, timeouts and compose (#308) by @dpage in #326
- fix(client): resolve connection names in admin privilege chips by @dpage in #327
- fix(client): clarify token scope "All" label as owner-scoped by @dpage in #328
- fix(server): reject blank connection password on update by @dpage in #332
- fix(client): normalise tool schemas to the library's wire contract by @moizpgedge in #372
- fix(chat): teach Ellie to restart Workbench components, not pgwatch by @dpage in #330
- chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 by @dependabot[bot] in #374
- chore(deps): bump docker/login-action from 4.4.0 to 4.5.2 by @dependabot[bot] in #375
- chore(deps): bump actions/setup-go from 6.5.0 to 7.0.0 by @dependabot[bot] in #376
- chore(deps): bump softprops/action-gh-release from 3.0.1 to 3.0.2 by @dependabot[bot] in #377
- docs: add SECURITY.md by @AntTheLimey in #431
- chore(deps): bump softprops/action-gh-release from 3.0.2 to 3.0.3 by @dependabot[bot] in #434
- chore(deps): bump docker/setup-qemu-action from 4.2.0 to 4.3.0 by @dependabot[bot] in #436
- chore(deps): bump docker/setup-buildx-action from 4.2.0 to 4.3.0 by @dependabot[bot] in #432
- chore(deps): bump docker/login-action from 4.5.2 to 4.6.0 by @dependabot[bot] in #392
- Add regression tests documenting alerter defects by @dpage in #410
- Stop metric_staleness alerts firing and clearing in a loop by @dpage in #412
- chore: give sub-agents Skill access and fix stale KB listings by @dpage in #415
- Remove the C1 audit tests that #405 superseded by @dpage in #443
- deps: bump pymdown-extensions to 11.0.2 by @katsugtgz in #426
- fix(metrics): build the bucket series in FROM, not the select list by @vyruss in #433
- Replace blackout status icon with FrontHandSharp by @susan-pgedge in #393
- fix(server): widen memory embedding test fixture to halfvec(4000) by @dpage in #382
- Remove dead code identified by reachability analysis by @dpage in #395
- Fix five built-in alert rules that could never fire by @dpage in #418
- docs(config): document monitored-database user privileges by @dpage in #380
- ci: run Postgres services on pgvector images so vector-gated tests actually execute by @dpage in #383
- Remove dead code that needed test edits rather than deletions by @dpage in #397
- Hide the Workbench's own datastore queries from Top Queries by @dpage in #390
- feat(dashboard): paginate Top Queries and filter it by database by @dpage in #379
- Clean up Claude Code configuration and enforce the coverage floor by @dpage in #444
- Stop test and coverage targets killing developer processes by @dpage in #446
- Split the connections chart into a gauge and a counter by @dpage in #417
- Repoint handler tests at the WithSecurity constructors by @dpage in #396
- fix(server): use Gemini embeddings in knowledgebase search by @dpage in #378
- Stop the AuthHandler login rate limiter on shutdown by @dpage in #398
- Time partition retention from its last run, not from process start by @dpage in #442
- Add custom time-range selection for graphs and the event timeline by @dpage in #388
- Guard against non-explainable statements in the Query Plan panel by @dpage in #385
- Fix two dashboard charts that plotted the wrong data by @dpage in #416
- feat(dashboard): add connection monitoring grouped by user, client, and database by @dpage in #391
- fix(llm): honour configured max_tokens on AI analysis paths by @dpage in #411
- Removes bullseye from supported platform list by @maqeel75 in #452
- Distinguish an explicitly passed flag from its default value by @dpage in #419
- Move to Go 1.26.8 and clear reachable dependency vulnerabilities by @dpage in #394
- Plot rates and per-interval deltas instead of raw counters by @dpage in #449
- feat(dashboard): surface additional query metrics in the drill-down by @dpage in #386
- Compute cache hit ratios from per-interval deltas by @dpage in #450
- Standardise deferred pgx Rollback() calls on a non-cancelable context by @dpage in #420
- Untrack the committed collector binaries (#447) by @dpage in #463
- Give the AdminTokenScopes test file a load-tolerant timeout by @dpage in #460
- Echo Gemini thought signatures back on Ask Ellie tool calls by @dpage in #456
- Centralise LLM chat request construction in the client by @dpage in #451
- Detect a missing collector config file through the wrapped error (#421) by @dpage in #461
- Fix rate derivation defects in the metrics query layer by @dpage in #457
- Count deadlocks and temp files per hour in the alerter, enforce required_extension, retire table_bloat_ratio by @dpage in #455
- Roll back the StoreMetrics transaction on the INSERT failure path by @dpage in #487
- Format and staticcheck-clean pkg/, and gate it in CI by @dpage in #488
- Plot one real filesystem in the Disk Space chart and KPI tile by @dpage in #496
- Detect pg_stat_statements columns through the search path by @dpage in #464
- Attribute a client address to a query in the drill-down (#384) by @dpage in #468
- Report the queried time window from the metrics query endpoint by @dpage in #494
- Key the feature-detection cache per database, and stop the silence by @dpage in #493
- Stagger past-due probes at startup and cap probe concurrency by @dpage in #495
- Collect and chart an estimated available memory figure by @dpage in #492
- Stop treating missing metric data as a resolved alert condition (#407) by @dpage in #462
- Remove the embedding model allow-list by @dpage in #491
- Prefer time-aware baselines and scope anomaly detection by database by @dpage in #489
- Add Telegram as an alert notification channel (#475) by @dpage in #476
- Add OIDC login with group mapping (#261, phases 0 and 1) by @dpage in #474
- Aggregate top queries over the selected time window (#387) by @dpage in #481
- Add an audit log for RBAC operations by @dpage in #470
- Move the alerter's default Gemini reasoning model to gemini-3.6-flash by @dpage in #507
- Fix the client typecheck errors and gate tsc in CI by @dpage in #510
- Fix empty sparkline canvas in Database Summaries by @dpage in #511
- Hold a staleness alert open when its probe goes unavailable (#465) by @dpage in #509
- Slim CLAUDE.md and move its reasoning next to the code by @dpage in #516
- Difference transaction counters per database in the performance summary by @dpage in #515
- Add Top Queries to the Database Dashboard by @dpage in #514
- Keep the account lockout default when the config file omits the key by @dpage in #518
- Follow the time selector in the summary panels (#387) by @dpage in #517
- Correct the alerter metric and alert rule documentation by @dpage in #513
- Replace the stale collector migration list with a pointer to the code by @dpage in #523
- Scope the CREATE TABLE convention to notification_channels by @dpage in #527
- Close alerts on a server that is no longer monitored by @dpage in #533
- Stop webhook URLs leaking into logs and notification history by @dpage in #536
- Surface the authentication source of every account by @dpage in #537
- Cap the length of connection_ids and batch the client's requests by @dpage in #531
- Key the RBAC audit log's hash chain with the server secret by @dpage in #529
- Correct how the schema tests pick a database in the collector guide by @dpage in #526
- Alert when a probe stops being available (#512) by @dpage in #534
- Pass the audit key in the tests that predate it by @dpage in #545
- Make every built-in tool switch actually take effect by @dpage in #524
- Bump docker/setup-qemu-action from 4.3.0 to 4.4.0 by @dependabot[bot] in #541
- Bump docker/setup-buildx-action from 4.3.0 to 4.4.1 by @dependabot[bot] in #542
- Bump docker/build-push-action from 7.3.0 to 7.4.0 by @dependabot[bot] in #543
- Fix a missing connection description breaking the connection list by @dpage in #546
- Update retired and outdated default LLM models by @dpage in #550
- Report database-summaries query failures instead of an empty success by @dpage in #547
- Leave system schemas out of the table and index leaderboards by @dpage in #548
- Cap open collector connections per monitored server by @dpage in #549
- Honour an explicit llm.temperature of 0 by @dpage in #552
- Bump soupsieve to 2.10 and click to 8.3.3 by @katsugtgz in #557
- Resolve top-queries statement database from its dbid by @dpage in #554
- Escape alert text for Slack and Mattermost markup by @dpage in #586
- Require a superuser to change superuser status; return store refusals as 400 by @dpage in #553
- Skip paid Tier 2/3 anomaly calls when the alert would be discarded by @dpage in #570
- Make OIDC login states single-use and rate-limit the start endpoint by @dpage in #555
- Make the RBAC checker fail closed without an auth store by @dpage in #560
- Treat a nil RBAC checker as deny everywhere by @dpage in #564
- Make SetConnectionSharingLookup a no-op on a nil checker by @dpage in #573
- Alerter: don't create anomaly candidates that could never raise an alert by @dpage in #578
- Refuse OIDC behind a proxy with no trusted_proxies unless opted out by @dpage in #562
- Skip re-evaluating acknowledged alerts whose inputs are unchanged by @dpage in #580
- Stop connection-scoped tools revealing connections the caller cannot see by @dpage in #574
- Stop collector tests leaking pools and databases by @dpage in #558
- Alerter: stop anomaly candidates accumulating after a reload that disables Tier 2 and Tier 3 by @dpage in #583
- Raise a system alert when a failing provider degrades anomaly detection by @dpage in #584
- Count only client backends in pg_stat_activity anomaly baselines by @dpage in #569
- Catch audit log head deletion and check schema definitions by @dpage in #556
- Give connection deletes their own budget; raise pool_max_conns default to 20 by @dpage in #559
- Alerter: count an unparseable Tier 3 or re-evaluation verdict as a provider failure by @dpage in #597
- Apply the datastore password read from -db-password-file by @dpage in #598
- Classify EXPLAIN by the statement it explains, and escape the database override by @dpage in #538
- Alerter: exclude max_connections and inactive_count from anomaly baselines by @dpage in #579
- Bind an API token's scope to its owner, superusers included by @dpage in #528
- Check a user's superuser status inside the update and delete transactions by @dpage in #604
- Make connection access and visibility agree on wildcard grants by @dpage in #606
- Alerter: raise the provider health alert on a steady failure rate by @dpage in #603
- Alerter: use the max_connections in force for the latest utilisation sample by @dpage in #602
- Audit log: coalesce and cap failure events by @dpage in #563
- Collector: stop reporting Spock as missing on quiet clusters by @dpage in #613
- Decline -delete-user unless the confirmation is an explicit yes by @dpage in #609
- Validate Ellie's generated SQL before offering it as runnable by @dpage in #535
- Bump urllib3 to 2.8.0 and idna to 3.15 in requirements.txt by @katsugtgz in #601
- Add a replication slot health panel to the server dashboard by @dpage in #600
- Apply the OIDC login policy on configuration reload by @dpage in #599
- Clear anomaly alerts once their metric recovers by @dpage in #618
- Require sustained samples to raise and clear threshold alerts by @dpage in #620
- Batch alerter retention deletes and index anomaly candidate references by @dpage in #621
- Retune default alert rules that fire on healthy servers by @dpage in #622
- Check a token owner's superuser status inside the transaction by @dpage in #610
- Fix the replay_lag_seconds alert metric query by @dpage in #636
- Fix flaky TestPoolManager_CapHoldsUnderConcurrency by @dpage in #630
- Alerter: send re-evaluation requests with a clear/keep system prompt by @dpage in #632
- Baseline four more metrics for anomaly detection by @dpage in #637
- Count deadlocks and temp files baselines within each hour by @dpage in #641
- Report slow_query_count once per server by @dpage in #642
- Flush coalesced RBAC denials on shutdown and at cleanup by @dpage in #634
- Scroll to the start of a long Ellie reply by @dpage in #631
- Detect a truncated audit tail with sqlite_sequence rewritten by @dpage in #565
- Audit blackout, override and cluster-group refusals by @dpage in #633
- Fix list_probes hiding probes and listing partitions by @dpage in #653
- Bump actions/download-artifact from 8.0.1 to 8.0.2 by @dependabot[bot] in #657
- Bump actions/upload-artifact from 7.0.1 to 7.0.2 by @dependabot[bot] in #656
- Bump actions/setup-node from 7.0.0 to 7.1.0 by @dependabot[bot] in #655
- Stop anomaly detection flagging trivial values by @dpage in #619
- Alerter: optional decision model for Tier 3 classification by @dpage in #654
- Make query_datastore structured and scoped to visible connections by @dpage in #638
- Cap the client address in the failed-request audit key by @dpage in #665
- Fix Ask Ellie tool calls failing with OpenAI by @dpage in #689
- Quote untrusted text in the alerter's LLM prompts by @dpage in #684
- Check connection visibility on the probe-config read routes by @dpage in #660
- Confine token creation and widening to the caller's own tokens by @dpage in #661
- Treat SELECTs that call side-effecting functions as writes by @dpage in #659
- Hide cluster groups the caller cannot see from update and delete by @dpage in #666
- Add a Run button to SQL blocks in Ellie's chat replies by @dpage in #624
- Store pg_hba.conf lines PostgreSQL cannot parse, and mask HBA secrets by @dpage in #685
- Redact passwords in collected settings and statement text by @dpage in #658
- Raise the server test timeout to 20 minutes by @dpage in #713
- Wait for in-flight requests before the shutdown audit flush by @dpage in #664
- Reset monitored-database sessions when a pooled connection is released by @dpage in #715
- Make query_database read-only and drop its connection-string path by @dpage in #692
- Mask credentials in the latest metrics endpoints by @dpage in #671
- Mask connection_error in list_connections and the cluster topology by @dpage in #697
- Redact the arguments of collected shell-command settings by @dpage in #693
- Admit API tokens on connection handlers and delete connections in the background by @dpage in #688
- Make a missing and a hidden connection cost the same to refuse by @dpage in #699
- Audit connection-access refusals on the read and action routes by @dpage in #701
- Audit refusals for missing admin permissions by @dpage in #667
- Answer hidden override scopes and alerts as missing on write by @dpage in #687
- Audit connection-access and system-memory refusals by @dpage in #703
- Check connection visibility on the cluster relationship routes by @dpage in #702
- Check visibility of what cluster writes point at by @dpage in #700
- Apply one visibility rule to empty cluster groups by @dpage in #717
- Hide connections a manager cannot see from update and delete by @dpage in #720
- Raise the server coverage ratchet to 91.8 by @dpage in #725
- Audit MCP tool and connection access refusals by @dpage in #721
- Wait for the sleeper's query_id in the activity probe test by @dpage in #727
- List a server's databases when one is dropped mid-query by @dpage in #729
- Lex statement text as stored in query_datastore by @dpage in #730
- Require store_system_memory to pin, unpin or delete a system memory by @dpage in #722
- Drop a moved connection's relationships in its old cluster by @dpage in #718
- Refuse cluster and group override writes over hidden members by @dpage in #731
- Generate Tier 3 reasoning on demand for decision-model anomaly alerts by @dpage in #733
- Redact supplied secrets on both sides of format-character deletion by @dpage in #736
- Install the repo client certificate before configuring the pgEdge repos by @maqeel75 in #734
- Fix shadow-view probe tests under -count>1 by @dpage in #737
- Drop a connection's old relationships when auto-detection moves it by @dpage in #738
- Follow the reloaded group_map in federated group protections by @dpage in #739
- Check member visibility on cluster and group blackouts by @dpage in #740
- Require every connection for estate-wide configuration writes by @dpage in #746
- Audit the privilege changes a federated login makes by @dpage in #745
- Configure reasoning effort, prompt caching and extra request fields by @dpage in #750
- Apply custom LLM headers from the server configuration file by @dpage in #756
- End federated sessions and tokens when the identity provider stops vouching by @dpage in #749
- Bump docker/login-action from 4.6.0 to 4.7.0 by @dependabot[bot] in #752
- Bump actions/setup-python from 7.0.0 to 7.1.0 by @dependabot[bot] in #753
- Audit federated provisioning, linking and unlinking by @dpage in #751
- Add column sorting and a text filter to Top Queries by @dpage in #760
- Give the connection-scope token tests a load-tolerant timeout by @dpage in #780
- Stop the shutdown tests racing an abandoned closer by @dpage in #781
- Share the scratch-database test helper across server packages by @dpage in #782
- Add a baseline comparison view to the server dashboard by @dpage in #761
- Bound the anomaly comparison's inner scan above by @dpage in #783
- Drop trust in the compromised eMudhra CAs (CVE-2026-111943) by @dpage in #747
- Upgrade the client image CA bundle to drop the distrusted eMudhra root by @maqeel75 in #787
- Refuse a package upgrade whose server config the new server rejects by @dpage in #785
- Document upgrading from 1.0.0 to 2.0.0 by @dpage in #786
- Fix Codacy security findings in Go dependencies and code by @dpage in #797
- Keep the Users list when a row action is refused by @dpage in #793
- Move the Go service images to Alpine and refresh client packages by @dpage in #798
- Fix the shutdown-drain overview stream test flake by @paul-pgedge in #799
- Store the metrics tables in pgEdge ColdFront when configured by @paul-pgedge in #789
- Run the server's metrics queries on pgEdge ColdFront by @paul-pgedge in #790
- Run the alerter's metrics queries on pgEdge ColdFront by @paul-pgedge in #791
- Document storing metrics in pgEdge ColdFront by @paul-pgedge in #792
- Pin the E2E jobs to the Ubuntu 24.04 runner by @dpage in #828
- Keep chart tick labels distinct and tooltip values precise by @dpage in #818
- Describe the query drill-down tiles as they actually ship by @dpage in #816
- Show "All databases" in the Top Queries database filter by @dpage in #813
- Tell the LLM features which database they inspect by @dpage in #819
- Include alert activity in the AI Overview recent events by @dpage in #812
- Round fractional byte values on the WAL Bytes tile by @dpage in #815
- Label every server in the Comparative Metrics bar charts by @dpage in #821
- Offer Cluster blackout scope for auto-detected clusters by @dpage in #823
- Rate-limit AI Overview generations per user by @dpage in #826
- Colour Vacuum Status dead ratio by the ratio and hide system tables by @dpage in #824
- Update pgedge-go-llm-lib to v1.0.0 by @dpage in #829
- Stop the AI Overview card waiting forever on its skeleton by @dpage in #820
- Make probe configuration changes reach monitored servers by @dpage in #817
- Report Top queries per statement and database by @dpage in #825
- Show the latest server info on the status panel card by @dpage in #814
- Bump docker/login-action from 4.7.0 to 4.8.0 by @dependabot[bot] in #830
- Bump softprops/action-gh-release from 3.0.3 to 3.0.4 by @dependabot[bot] in #831
- Release 2.0.0-beta1 by @dpage in #832
New Contributors
- @paul-pgedge made their first contribution in #310
- @moizpgedge made their first contribution in #372
- @katsugtgz made their first contribution in #426
- @vyruss made their first contribution in #433
Full Changelog: v1.0.0...v2.0.0-beta1