Release 0.15.0
## Release 0.15.0 Tracking issue for the 0.15.0 release of PostgresAI monitoring. Process: [`rules/projects/postgresai__release_process.mdc`](https://gitlab.com/postgres-ai/rules/-/blob/main/rules/projects/postgresai__release_process.mdc). ### Pre-release validation - [ ] RC tag(s) cleared - [x] CI green on the latest RC tag — latest RC is now [`0.15.0-rc.8`](https://gitlab.com/postgres-ai/postgresai/-/tags/0.15.0-rc.8), cut from `main` (`5f8af30`, which includes merged GA-blocker fix [!283](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/283)); supersedes rc.7. rc.8 publish [pipeline 2571391321](https://gitlab.com/postgres-ai/postgresai/-/pipelines/2571391321) **succeeded** (npm publish + docker:publish:images multi-arch). Historical: rc.7 [tag](https://gitlab.com/postgres-ai/postgresai/-/tags/0.15.0-rc.7) / [pipeline 2567649863](https://gitlab.com/postgres-ai/postgresai/-/pipelines/2567649863) was green and superseded rc.6. - [x] Manual + AI testing complete, evidence linked — automated suites green earlier + local Docker gates on rc.8 (fresh-install + upgrade-fix proof + isolated DinD e2e) all PASS; evidence in the rc.8 verdict note below. - [x] Artifacts smoke test (against the latest RC tag) — re-run against rc.8; all artifacts confirmed. **Known anomaly to fix at GA:** npm `latest` dist-tag still = `0.15.0-rc.0` (rc.8 correctly did not move it); must be set to `0.15.0` at the GA tag. - [x] `npm view postgresai@0.15.0-rc.8 version` returns `0.15.0-rc.8` - [x] `npm view pgai@0.15.0-rc.8 version` returns `0.15.0-rc.8` - [x] `npm view postgresai dist-tags` and `npm view pgai dist-tags` show `rc=0.15.0-rc.8` - [x] Fresh-cache `npx postgresai@0.15.0-rc.8 --version` and `npx pgai@0.15.0-rc.8 --version` return `0.15.0-rc.8` - [x] Fresh-cache `bunx postgresai@0.15.0-rc.8 --version` and `bunx pgai@0.15.0-rc.8 --version` return `0.15.0-rc.8` - [x] `docker pull postgresai/reporter:0.15.0-rc.8` succeeds — digest `sha256:743875ab…a949` - [x] `docker pull postgresai/monitoring-flask-backend:0.15.0-rc.8` succeeds — digest `sha256:cc874c0c…d82f` - [x] `docker pull postgresai/postgres-ai-configs:0.15.0-rc.8` succeeds — digest `sha256:ea7a7c85…e75a4` - [x] `docker pull postgresai/pgwatch:0.15.0-rc.8` succeeds — digest `sha256:e366c783…2bcfb` - Evidence: rc.8 verdict note below. Historical rc.6 evidence: note [#3398124945](https://gitlab.com/postgres-ai/postgresai/-/issues/186#note_3398124945) - [x] Fresh CLI install on a clean box - [x] `npx postgresai@0.15.0-rc.8 mon local-install --demo` completes successfully on a disposable fresh Linux host (validated on rc.8 in isolated DinD) - [x] Grafana Dashboard 01 renders data within 5 minutes (rc.8: renders 6 live series via the VM_AUTH-gated pgwatch→VM→Grafana chain; 15 dashboards provisioned) - [x] Evidence linked (screenshot / screencast) — rc.8 verdict note below - Validated on rc.8 in an isolated DinD environment: VictoriaMetrics HEALTHY (no Exited 255), all services on rc.8 images, Dashboard 01 renders 6 live series within 5 min. Evidence in the rc.8 verdict note below. - [ ] Console-driven deploy - [ ] Deployed via `console.postgres.ai/<org>/monitoring/startup/create/managed?postgresai_version=0.15.0-rc.8` to a fresh target - [ ] Dashboard 01 renders data on the deployed instance - [ ] Evidence linked - The only remaining validation gate. This is the external platform-all path; it needs an authenticated Console session plus a fresh deployment target/database, which is not available in this autonomous environment. Recommendation: document as a residual and validate post-GA (or via an authenticated Console session). - [x] Upgrade test (previous release → latest RC) - [x] Documented upgrade procedure works end-to-end — real published `npx postgresai@0.15.0-rc.8 mon update` on a non-git 0.14 install: `docker-compose.yml` refreshed (VM_AUTH refs 0→10, sink-prometheus + Grafana datasource now wired), backup `docker-compose.yml.bak-0.14.0-cba2cda5` = pristine 0.14, `.env` migrated additively (VM_AUTH_* added, existing values + comments preserved) - [x] User-configured `instances.yml` targets preserved — `instances.yml` byte-identical after upgrade (custom target preserved) - [x] Breaking changes documented in release notes - Original GA blocker (the documented npx 0.14→0.15 upgrade kept the stale `docker-compose.yml`, so VictoriaMetrics crashed on missing `VM_AUTH_*` and dashboards went blind) was **fixed in [!283](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/283)** (merged to `main`, includes reviewer hardening) and is now **confirmed GREEN on rc.8** via the real published-artifact upgrade above. Evidence in the rc.8 verdict note below. - [ ] Doc audit - [ ] All install/upgrade commands in `README.md`, `cli/README.md`, and docs.postgres.ai pin a concrete version (no `@latest` / `@rc` / `@beta`) — covered by [docs!933](https://gitlab.com/postgres-ai/docs/-/merge_requests/933) and [postgresai!280](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/280), pending review/merge - [ ] `requirements.md` matches actual compose resource needs — covered by [docs!933](https://gitlab.com/postgres-ai/docs/-/merge_requests/933), pending review/merge - [ ] README upgrade section flags/preserves the safe upgrade path — covered by [postgresai!280](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/280), pending review/merge - [x] docs.postgres.ai monitoring section updated if needed — covered by [docs!933](https://gitlab.com/postgres-ai/docs/-/merge_requests/933), patched through commit [`cc121897`](https://gitlab.com/postgres-ai/docs/-/commit/cc121897d249b59bc17bad8ee4f5aa7abac72a48), pipeline [2561262859](https://gitlab.com/postgres-ai/docs/-/pipelines/2561262859) passed. Full feature-coverage audit (5 of 31 features fully documented) closed by docs MR [!934](https://gitlab.com/postgres-ai/docs/-/merge_requests/934) — Denis (Sarumyan9999) approved → cap-postgresai SOC2 gate resolved → **MERGED**, commit [`90fe5d88`](https://gitlab.com/postgres-ai/docs/-/commit/90fe5d887d99651eecabd32d272340f0e05d0098); redeploy [pipeline 2578484076](https://gitlab.com/postgres-ai/docs/-/pipelines/2578484076) in progress (verify-live tracked in Post-release). ### Downstream MRs prepared (do not merge until approved) - [x] `docs` MR — [postgres-ai/docs!933](https://gitlab.com/postgres-ai/docs/-/merge_requests/933), commit [`cc121897`](https://gitlab.com/postgres-ai/docs/-/commit/cc121897d249b59bc17bad8ee4f5aa7abac72a48), pipeline [2561262859](https://gitlab.com/postgres-ai/docs/-/pipelines/2561262859) passed — **merged** - [x] `platform-all` MR — no new MR needed before GA; [platform-all!367](https://gitlab.com/postgres-ai/platform-all/-/merge_requests/367) already merged `postgresai_version` override support - [x] Helm / repo docs MR — [postgres-ai/postgresai!280](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/280), commit [`6162085`](https://gitlab.com/postgres-ai/postgresai/-/commit/616208530fe2b218f93ceaaa967edad946b14cb6), pipeline [2562303025](https://gitlab.com/postgres-ai/postgresai/-/pipelines/2562303025) passed — **merged** - [x] Release rules MR — [postgres-ai/rules!27](https://gitlab.com/postgres-ai/rules/-/merge_requests/27), commit [`5c7ab70`](https://gitlab.com/postgres-ai/rules/-/commit/5c7ab70a000e120b42f0c576dd2dfe6980356ad5), pipeline [2561004969](https://gitlab.com/postgres-ai/rules/-/pipelines/2561004969) passed — **merged** - [x] GA-blocker fix MR — [postgres-ai/postgresai!283](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/283) (upgrade kept stale `docker-compose.yml` → VictoriaMetrics crash; includes reviewer hardening) — **merged to `main`** ### Release - [x] Final tag `0.15.0` pushed - [x] Tag pipeline finished — all artifacts published - [x] `npm view postgresai@0.15.0 version` returns `0.15.0` - [x] `npm view pgai@0.15.0 version` returns `0.15.0` - [x] `npm view postgresai dist-tags` and `npm view pgai dist-tags` show `latest=0.15.0` - [x] Fresh-cache `npx postgresai --version`, `npx pgai --version`, `bunx postgresai --version`, and `bunx pgai --version` return `0.15.0` - [x] All four Docker Hub images pullable for `0.15.0` - [x] Release notes published on **both** GitLab and GitHub (same body, generated with `cli/scripts/generate-release-notes.ts`; MR/issue refs must be absolute URLs so they work from both sides) - [x] GitLab: https://gitlab.com/postgres-ai/postgresai/-/releases/0.15.0 - [x] GitHub: https://github.com/postgres-ai/postgresai/releases/tag/0.15.0 - [ ] Auxiliary MRs merged - [x] `docs` (pins — [docs!933](https://gitlab.com/postgres-ai/docs/-/merge_requests/933), merged) - [x] `docs` feature coverage **MERGED** — [docs!934](https://gitlab.com/postgres-ai/docs/-/merge_requests/934) (feature-coverage close + 4-gap accuracy follow-up folded in; ~232 source-verified corrections across 14 rounds) approved by Denis (Sarumyan9999) → cap-postgresai SOC2 gate resolved → merged, commit [`90fe5d88`](https://gitlab.com/postgres-ai/docs/-/commit/90fe5d887d99651eecabd32d272340f0e05d0098). docs.postgres.ai redeploy [pipeline 2578484076](https://gitlab.com/postgres-ai/docs/-/pipelines/2578484076) running — **verify-live tracked in Post-release** - [ ] `platform-all` default-tag bump — N/A in platform-all; tracked under Post-release (ansible `v1.8` + prod setting; [!367](https://gitlab.com/postgres-ai/platform-all/-/merge_requests/367) override ≠ default bump) - [x] Helm / repo docs chart-values prep ([!280](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/280)) — note: chart *release* still requires `helm-v0.15.0` (see Post-release) - [x] Release rules ### Post-release - [x] **npm dist-tag sanity** — `npm view postgresai dist-tags --json` / `npm view pgai dist-tags --json`: `latest=0.15.0` for BOTH `postgresai` and `pgai`; `rc=0.15.0-rc.8`, `dev=0.15.0-dev.11`, `beta=0.14.0-beta.16` undisturbed (verified 2026-06-02 — passes) - [x] **GA app images all published** — `postgresai/{reporter,monitoring-flask-backend,postgres-ai-configs,pgwatch}:0.15.0` all return HTTP 200 on Docker Hub. Digests recorded in note [#3413027662](https://gitlab.com/postgres-ai/postgresai/-/issues/186#note_3413027662): reporter `sha256:37a1d093…b1f34`, monitoring-flask-backend `sha256:3995ab31…0352`, postgres-ai-configs `sha256:7f6f87ab…5b88`, pgwatch `sha256:569dafad…e873`. - [ ] **Helm chart released** — `helm-v0.15.0` tag cut (chart publish is gated on a separate `helm-v<tag>` tag; [!280](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/280) only prepared chart values/defaults, it does not ship the chart). MUST follow the images-all-200 item above. - [ ] `helm-v0.15.0` pipeline finished — chart packaged + GitLab release asset published - [ ] Fresh `helm install` of the published `0.15.0` chart pulls the `:0.15.0` images and comes up healthy (not just "values updated") - [ ] Dashboard 01 renders data on the Helm-installed instance — evidence linked - [ ] **console.postgres.ai / simple-install default tag bumped to `0.15.0`** — the platform-all `?postgresai_version=` override ([!367](https://gitlab.com/postgres-ai/platform-all/-/merge_requests/367)) is only an override; the *default* is the `postgres_ai-ansible` `vars/main.yml` pin (now `0.15.0` at tag [`v1.8`](https://gitlab.com/postgres-ai/postgres_ai-ansible/-/tags/v1.8) ✅) plus the production `app.settings.monitoring_ansible_image` setting (still pending repoint — see below) - [x] `postgres_ai-ansible` `vars/main.yml` → `postgres_ai_version` + `postgres_ai_cli_version` = `0.15.0`, release tag `v1.8` cut — commit [`f455ed2b7b27`](https://gitlab.com/postgres-ai/postgres_ai-ansible/-/commit/f455ed2b7b27), tag [`v1.8`](https://gitlab.com/postgres-ai/postgres_ai-ansible/-/tags/v1.8); GA images published to Docker Hub `postgresai/monitoring-ansible:1.8` + GitLab registry. ⚠️ Bump went direct-to-`main` **without an MR** — retro-MR for the audit trail pending Nik's decision. - [ ] Production `platform_settings` updated: `app.settings.monitoring_ansible_image` → the **PUBLIC Docker Hub** image `postgresai/monitoring-ansible:1.8` (immutable GA tag). ⚠️ Must NOT point at the private GitLab registry image `registry.gitlab.com/postgres-ai/postgres_ai-ansible:1.8` — the simple-install launcher cannot pull it (observed "access forbidden" deploy failure). PENDING Nik's prod-DB access. - [ ] **Verified on production:** a fresh console deploy with **no** `?postgresai_version=` override provisions `0.15.0` (the rc.8 console gate used an explicit override, so the default path is still unverified) — evidence linked - [x] `demo.postgres.ai` (5.161.85.183) upgraded to `0.15.0` — per the cloud-client upgrade runbook ([WI #220](https://gitlab.com/postgres-ai/postgresai/-/work_items/220)); GA app images all-200 confirmed first. **Done + verified** (via PG-volume reset): HEAD at `0.15.0`, all services on `0.15.0` images, PG17 healthy. Evidence in confidential [WI #220](https://gitlab.com/postgres-ai/postgresai/-/work_items/220). - [x] Demo dashboards verified rendering data after upgrade — Dashboards 01/07/14 render; VM metric history preserved (714M rows); `target_db` re-seeded + scraped; public site returns 302. Evidence in confidential [WI #220](https://gitlab.com/postgres-ai/postgresai/-/work_items/220). - [x] **docs.postgres.ai feature coverage complete** — beyond pins ([!933](https://gitlab.com/postgres-ai/docs/-/merge_requests/933), merged): feature-coverage MR [docs!934](https://gitlab.com/postgres-ai/docs/-/merge_requests/934) (gap close + 4-gap accuracy follow-up folded in; ~232 source-verified corrections across 14 rounds, plus the PG 15→17 migration procedure and post-migration query-text recovery — IPv6 `pg_hba` + `init.sql`) **MERGED** (Denis/Sarumyan9999 approved → cap-postgresai SOC2 gate resolved → commit [`90fe5d88`](https://gitlab.com/postgres-ai/docs/-/commit/90fe5d887d99651eecabd32d272340f0e05d0098)) and **LIVE** — redeploy [pipeline 2578484076](https://gitlab.com/postgres-ai/docs/-/pipelines/2578484076) succeeded (`deploy_production` job success). All sub-items done: - [x] top_n list fixed in `02-query-analysis.md` (`5, 10, 15, 20, 50, 100, 500`) to match `index.md` - [x] D7 `07-autovacuum.md` panel titles match the shipped Dashboard_7 JSON + note xmin section is "(experimental)" - [x] `installation-helm.md` VM auth/retention corrected (`victoriaMetrics.retentionPeriod: 336h`, `auth.{enabled,username}`, password via `secrets.vmAuth.password` → secret key `vm-auth-password`; drop the false 90d-vs-336h callout) - [x] `upgrade.md` documents the npx/`npm i -g` bundled-compose auto-refresh + `.bak` backup ([!283](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/283)) for non-git installs - [x] docs.postgres.ai redeploys after the docs MRs merge — verify live — **LIVE**: [pipeline 2578484076](https://gitlab.com/postgres-ai/docs/-/pipelines/2578484076) **succeeded** on `master` (`deploy_production` job success), so the merged docs!934 content (PG15→17 migration + query-text recovery + ~232 corrections) is now live on docs.postgres.ai - [x] **GitHub release parity** — release `0.15.0` published at https://github.com/postgres-ai/postgresai/releases/tag/0.15.0 (marked **latest**), body byte-for-byte identical to the GitLab release; both pages HTTP 200, GitHub `refs/tags/0.15.0` → `5f8af30` matches GitLab tag commit (evidence: note [#3413027662](https://gitlab.com/postgres-ai/postgresai/-/issues/186#note_3413027662)) - [ ] **README "Access points" doc nit fixed** — README says Grafana login `monitoring`; actual admin user is `monitor` (`GF_SECURITY_ADMIN_USER`). Follow-up MR linked - [ ] **Backport decision recorded** — per release-process §Backporting, decide whether npx-upgrade GA-blocker fix ([!283](https://gitlab.com/postgres-ai/postgresai/-/merge_requests/283)) warrants a `0.14.x` backport (likely N/A — ships in 0.15.0 GA) — N/A or MR linked - [ ] **Post-publish monitoring window** — watch GA artifacts after publish (Docker Hub pulls, npm installs, console default deploys, demo dashboards) for regressions/error reports before declaring the release stable - [ ] **Tracking issue closed** — close #186 once all Release / Post-release / Announce items are checked ### Announce - [ ] Twitter - [ ] LinkedIn - [ ] Slack - [ ] Email newsletter (major releases only — mark N/A for patches)
issue