Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
…CVE-2026-103484) Default image controlplanecorporation/patroni-postgres:0.7 -> 0.8 (spilo-17 4.0-p3, PGDG pgvector 0.8.0 -> 0.8.7). pg-ha.validateImage refuses patroni-postgres tags 0.1-0.7, mirrored by a wizard rule on image. README upgrade note; briefing updated. appVersion stays "17" (it tracks the PostgreSQL major, not the image tag). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
…every Patroni member The startup gate waited for every member to answer :8008 before starting HAProxy, and the proxy workload had no readiness probe. A chart upgrade redeploys the proxy while Patroni is rolling, so the new proxies were counted ready and the old ones retired while the new ones sat in the gate: writes were refused for ~75-130 s although the leader never moved (measured on all three Patroni charts in 5376 testing). - HAProxy re-resolves server names at runtime (resolvers mesh, copied from pgedge 3.0.0), so a placeholder address from the mesh DNS heals itself; that was the gate's only reason to exist. - The start script waits at most 60s for ANY member's Patroni API, then starts regardless. - readinessProbe on /healthz :8404 (a leader is routable), so an upgrade keeps the old proxy replicas serving until a new one can reach the primary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
…nts to what testing measured The replica names are per-replica mesh addresses that exist from workload creation (measured 2026-10-26), so no placeholder address was observed; runtime DNS stays as a safety net. The resolvers comment moves out of the heredoc so it is no longer written into haproxy.cfg and the start log. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
…measured Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
/healthz fails whenever no leader is routable. In a failover by a hung leader (test 2026-10-26, timescaledb-highly-available) readiness stayed false for ~60 s and the platform then stopped both proxy replicas, ~9 s after the new leader was already UP, doubling the outage (155 s vs 70 s). The upgrade overlap only needs HAProxy listening, which /stats :8405 shows (as pgedge). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
…adiness probe Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
…tats readiness, measured Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
…gvector upgrade note, no dead README reference From the console wizard round (2026-10-26): - root rule: workload names are limited to 49 characters; the longest suffix is -postgres-ha-backup (logical backups), so release names are capped at 30/31/37 by what the values create. A 34-character release failed mid-install. - upgrade note (from < 2.8.1): the pgvector fix applies on the restart; \dx shows the old version until ALTER EXTENSION vector UPDATE (verified on the round's cluster). - the credentials help pointed at README rotation steps that do not exist. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 26, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
Template e2e tests
|
| Scenario | Check | Result |
|---|---|---|
| install 1.4.1 | install + every workload ready | pass |
| install 1.4.1 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb10-maria spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb10-maria spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb10-maria spec.defaultOptions.autoscaling.target: stored 95, chart omits it |
| install 1.4.1 | write-read | pass |
| install 1.4.1 | root-login | pass |
| install 1.4.1 | rejects-bad-password | pass |
| install 1.4.1 | data-survives-upgrade | pass |
| install 1.4.1 | no-op upgrade ×2 (no churn) | pass |
| install 1.4.1 | uninstall removes everything | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | install 1.3.2 (starting point) | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | root-login | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb10u132-maria spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb10u132-maria spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb10u132-maria spec.defaultOptions.autoscaling.target: stored 95, chart omits it |
| upgrade 1.3.2 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | root-login | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | root-login | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-maria-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | workload/e2eikn7ewb10u100-maria spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2e |
| upgrade 1.0.0 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | root-login | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-maria-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 6/6): MISSING (rows for 1.0.0: 0) WARNING: option --ssl-verify-server-cert |
| upgrade 1.0.0 → 1.4.1 (new values) | uninstall removes everything | pass |
⚠️ mongodb/1.4.1 — 23/27 passed, 4 warnings (6.8 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.4.1 | install + every workload ready | pass |
| install 1.4.1 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb11-mongo spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb11-mongo spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb11-mongo spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb11-mongo spec.defaultOptions.timeoutSeconds: stored 5, chart omits it |
| install 1.4.1 | write-read | pass |
| install 1.4.1 | rejects-bad-password | pass |
| install 1.4.1 | data-survives-upgrade | pass |
| install 1.4.1 | no-op upgrade ×2 (no churn) | pass |
| install 1.4.1 | uninstall removes everything | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | install 1.3.2 (starting point) | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb11u132-mongo spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb11u132-mongo spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb11u132-mongo spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb11u132-mongo spec.defaultOptions.timeoutSeconds: stored 5, char |
| upgrade 1.3.2 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-mongo-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | workload/e2eikn7ewb11u100-mongo spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2e |
| upgrade 1.0.0 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-mongo-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 6/6): MISSING (documents for 1.0.0: 0) |
| upgrade 1.0.0 → 1.4.1 (new values) | uninstall removes everything | pass |
⚠️ mysql/1.5.2 — 31/32 passed, 1 warning (7.3 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.5.2 | install + every workload ready | pass |
| install 1.5.2 | rendered == stored (Console Drift tab) | pass |
| install 1.5.2 | write-read | pass |
| install 1.5.2 | root-login | pass |
| install 1.5.2 | rejects-bad-password | pass |
| install 1.5.2 | data-survives-upgrade | pass |
| install 1.5.2 | no-op upgrade ×2 (no churn) | pass |
| install 1.5.2 | uninstall removes everything | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | install 1.4.0 (starting point) | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | write-read | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | root-login | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | rejects-bad-password | pass |
| upgrade 1.4.0 → 1.5.2 (new values) [before, on 1.4.0] | data-survives-upgrade | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | upgrade to 1.5.2 + every workload ready | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | rendered == stored (Console Drift tab) | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | write-read | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | root-login | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | rejects-bad-password | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | data-survives-upgrade | pass |
| upgrade 1.4.0 → 1.5.2 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | root-login | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.5.2 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | upgrade to 1.5.2 + every workload ready | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | rendered == stored (Console Drift tab) | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | root-login | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.5.2 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-mysql-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 6/6): MISSING (rows for 1.0.0: 0) |
| upgrade 1.0.0 → 1.5.2 (new values) | uninstall removes everything | pass |
⚠️ pgvector/1.0.0 — 7/8 passed, 1 warning (1.7 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.0.0 | install + every workload ready | pass |
| install 1.0.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb13-pgvector spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb13-pgvector spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb13-pgvector spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb13-pgvector spec.defaultOptions.timeoutSeconds: stored 5, chart om |
| install 1.0.0 | write-read | pass |
| install 1.0.0 | extension-works | pass |
| install 1.0.0 | rejects-bad-password | pass |
| install 1.0.0 | data-survives-upgrade | pass |
| install 1.0.0 | no-op upgrade ×2 (no churn) | pass |
| install 1.0.0 | uninstall removes everything | pass |
⚠️ postgis/1.4.1 — 28/32 passed, 4 warnings (4.9 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.4.1 | install + every workload ready | pass |
| install 1.4.1 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb14-postgis spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb14-postgis spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb14-postgis spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb14-postgis spec.defaultOptions.timeoutSeconds: stored 5, chart omits |
| install 1.4.1 | write-read | pass |
| install 1.4.1 | extension-works | pass |
| install 1.4.1 | rejects-bad-password | pass |
| install 1.4.1 | data-survives-upgrade | pass |
| install 1.4.1 | no-op upgrade ×2 (no churn) | pass |
| install 1.4.1 | uninstall removes everything | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | install 1.3.2 (starting point) | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | extension-works | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) [before, on 1.3.2] | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb14u132-postgis spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb14u132-postgis spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb14u132-postgis spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb14u132-postgis spec.defaultOptions.timeoutSeconds: stored |
| upgrade 1.3.2 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | extension-works | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | data-survives-upgrade | pass |
| upgrade 1.3.2 → 1.4.1 (new values) | uninstall removes everything | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | install 1.0.0 (starting point) | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | extension-works | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) [before, on 1.0.0] | data-survives-upgrade | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | upgrade to 1.4.1 + every workload ready | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rendered == stored (Console Drift tab) | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-postgis-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | workload/e2eikn7ewb14u100-postgis spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload |
| upgrade 1.0.0 → 1.4.1 (new values) | write-read | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | extension-works | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | rejects-bad-password | pass |
| upgrade 1.0.0 → 1.4.1 (new values) | data-survives-upgrade | warn — known issue: 1.2.0 renamed the workload and volume set ({release} → {release}-postgis-vs), so upgrading from 1.1.x or older starts on a new, empty volume and the data written on 1.0.0 is gone. Left as is by maintainer ruling 2026-10-26; the README says not to upgrade in place. | stdout did not match /^PERSISTED$/ (attempt 3/3): MISSING (rows for 1.0.0: 0) |
| upgrade 1.0.0 → 1.4.1 (new values) | uninstall removes everything | pass |
⚠️ postgres-highly-available/2.8.0 — 18/20 passed, 2 warnings (12.1 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 2.8.0 | install + every workload ready | pass |
| install 2.8.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb15-postgres-ha spec.containers[0].livenessProbe.httpGet.scheme: stored "HTTP", chart omits it; workload/e2eikn7ewb15-postgres-ha spec.containers[0].livenessProbe.initialDelaySeconds: stored 60, chart omits it; workload/e2eikn7ewb15-postgres-ha spec.containers[0].livenessProbe.successThreshold: stored 1, chart omits it; workload/e2eikn7ewb15-postgres-ha spec.containers[0].read |
| install 2.8.0 | cluster-healthy | pass |
| install 2.8.0 | write-read-via-proxy | pass |
| install 2.8.0 | rejects-bad-password | pass |
| install 2.8.0 | data-survives-upgrade | pass |
| install 2.8.0 | no-op upgrade ×2 (no churn) | pass |
| install 2.8.0 | uninstall removes everything | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | install 2.4.1 (starting point) | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | cluster-healthy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | write-read-via-proxy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | rejects-bad-password | pass |
| upgrade 2.4.1 → 2.8.0 (new values) [before, on 2.4.1] | data-survives-upgrade | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | upgrade to 2.8.0 + every workload ready | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb15u241-postgres-ha spec.containers[0].livenessProbe.httpGet.scheme: stored "HTTP", chart omits it; workload/e2eikn7ewb15u241-postgres-ha spec.containers[0].livenessProbe.initialDelaySeconds: stored 60, chart omits it; workload/e2eikn7ewb15u241-postgres-ha spec.containers[0].livenessProbe.successThreshold: stored 1, chart omits it; workload/e2eikn7ewb15u241-postgres-ha spec.co |
| upgrade 2.4.1 → 2.8.0 (new values) | cluster-healthy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | write-read-via-proxy | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | rejects-bad-password | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | data-survives-upgrade | pass |
| upgrade 2.4.1 → 2.8.0 (new values) | uninstall removes everything | pass |
⚠️ redis-cluster/1.7.0 — 18/20 passed, 2 warnings (9.7 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.7.0 | install + every workload ready | pass |
| install 1.7.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb16-redis-cluster spec.rolloutOptions.maxUnavailableReplicas: chart sends "1", API did not keep it; workload/e2eikn7ewb16-redis-cluster spec.rolloutOptions.terminationGracePeriodSeconds: stored 90, chart omits it |
| install 1.7.0 | cluster-healthy | pass |
| install 1.7.0 | write-read | pass |
| install 1.7.0 | rejects-bad-password | pass |
| install 1.7.0 | data-survives-upgrade | pass |
| install 1.7.0 | no-op upgrade ×2 (no churn) | pass |
| install 1.7.0 | uninstall removes everything | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | install 1.4.3 (starting point) | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | cluster-healthy | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | write-read | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | rejects-bad-password | pass |
| upgrade 1.4.3 → 1.7.0 (new values) [before, on 1.4.3] | data-survives-upgrade | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | upgrade to 1.7.0 + every workload ready | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb16u143-redis-cluster spec.rolloutOptions.maxUnavailableReplicas: chart sends "1", API did not keep it; workload/e2eikn7ewb16u143-redis-cluster spec.rolloutOptions.terminationGracePeriodSeconds: stored 90, chart omits it |
| upgrade 1.4.3 → 1.7.0 (new values) | cluster-healthy | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | write-read | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | rejects-bad-password | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | data-survives-upgrade | pass |
| upgrade 1.4.3 → 1.7.0 (new values) | uninstall removes everything | pass |
✅ tidb/2.2.0 — 10/10 passed (5.6 min, aws-us-east-1, aws-us-east-2, aws-us-west-2)
| Scenario | Check | Result |
|---|---|---|
| install 2.2.0 | install + every workload ready | pass |
| install 2.2.0 | rendered == stored (Console Drift tab) | pass |
| install 2.2.0 | stores-up | pass |
| install 2.2.0 | write-read-via-server | pass |
| install 2.2.0 | write-read-via-proxysql | pass |
| install 2.2.0 | root-password-set | pass |
| install 2.2.0 | rejects-bad-password | pass |
| install 2.2.0 | data-survives-upgrade | pass |
| install 2.2.0 | no-op upgrade ×2 (no churn) | pass |
| install 2.2.0 | uninstall removes everything | pass |
⚠️ timescaledb/1.2.0 — 18/20 passed, 2 warnings (3.2 min, aws-us-east-1)
| Scenario | Check | Result |
|---|---|---|
| install 1.2.0 | install + every workload ready | pass |
| install 1.2.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb18-timescaledb spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb18-timescaledb spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb18-timescaledb spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb18-timescaledb spec.defaultOptions.timeoutSeconds: stored |
| install 1.2.0 | write-read | pass |
| install 1.2.0 | extension-works | pass |
| install 1.2.0 | rejects-bad-password | pass |
| install 1.2.0 | data-survives-upgrade | pass |
| install 1.2.0 | no-op upgrade ×2 (no churn) | pass |
| install 1.2.0 | uninstall removes everything | pass |
| upgrade 1.1.1 → 1.2.0 | install 1.1.1 (starting point) | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | write-read | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | extension-works | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | rejects-bad-password | pass |
| upgrade 1.1.1 → 1.2.0 [before, on 1.1.1] | data-survives-upgrade | pass |
| upgrade 1.1.1 → 1.2.0 | upgrade to 1.2.0 + every workload ready | pass |
| upgrade 1.1.1 → 1.2.0 | rendered == stored (Console Drift tab) | warn — workload/e2eikn7ewb18u111-timescaledb spec.defaultOptions.autoscaling.maxConcurrency: stored 0, chart omits it; workload/e2eikn7ewb18u111-timescaledb spec.defaultOptions.autoscaling.scaleToZeroDelay: stored 300, chart omits it; workload/e2eikn7ewb18u111-timescaledb spec.defaultOptions.autoscaling.target: stored 95, chart omits it; workload/e2eikn7ewb18u111-timescaledb spec.defaultOptions.timeou |
| upgrade 1.1.1 → 1.2.0 | write-read | pass |
| upgrade 1.1.1 → 1.2.0 | extension-works | pass |
| upgrade 1.1.1 → 1.2.0 | rejects-bad-password | pass |
| upgrade 1.1.1 → 1.2.0 | data-survives-upgrade | pass |
| upgrade 1.1.1 → 1.2.0 | uninstall removes everything | pass |
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
…the fields that change its limit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
Contributor
Author
|
Combined into #685 so work item 5376 is one merge (maintainer request). This branch is merged into it unchanged; the write-up and test evidence above stay the reference for this template. |
github-actions Bot
added a commit
that referenced
this pull request
Oct 27, 2026
postgres-highly-available 2.8.1: pgvector 0.8.7 (CVE-2026-103484) + no write outage on chart upgrades
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Work item 5376 (10-22 vulnerability scan). Hold for the joint review with the maintainer before merge.
Review diff (everything after the verbatim copy):
git diff 5b6a3bea..HEAD -- postgres-highly-available/versions/2.8.1/ briefings/postgres-highly-available.md1. pgvector CVE-2026-103484
image→controlplanecorporation/patroni-postgres:0.8. The rebuilt image upgrades PGDGpostgresql-{13..17}-pgvector0.8.0 → 0.8.7, along with refreshed ca-certificates/curl. User, entrypoint and command are unchanged.appVersionstays17.pg-ha.validateImagerefusescontrolplanecorporation/patroni-postgrestags0.1–0.7(an optionaldocker.io/prefix and an optional patch number are accepted). It is mirrored by a wizard rule. It exists because the Console wizard storesimagein release values, so ahelm upgrade -fwould otherwise keep the vulnerable image.\dxkeeps reporting the old version until you runALTER EXTENSION vector UPDATE;.2. Chart upgrades no longer cost ~2 minutes of refused writes (HAProxy startup)
Through 2.8.0, the proxy's start script waited for every Patroni member to answer :8008, and the proxy workload had no readiness probe. A chart upgrade redeploys the proxy while Patroni is rolling. The platform therefore counted the new proxies ready and retired the old ones, while the new ones were still waiting: 125.6 s of refused writes, with the leader untouched. The fix is copied from shipped pgedge 3.0.0:
resolvers mesh).readinessProbeon/stats:8405, true once HAProxy is listening. An upgrade keeps the old proxies serving until a new one is up.The first version used
/healthz:8404, which is true only while a leader is routable. In hang-failover tests the platform then restarted proxy replicas once the leaderless window ended (timescaledb-highly-available: 155 s instead of 70 s), so readiness uses/stats.Testing (test-gvc-3, aws-us-west-2)
Image change (10-23):
ALTER EXTENSION vector UPDATEreplicates.Proxy fix, final version (10-26, test-gvc-2; the first version was tested in test-gvc-3). Writes ran continuously; 0 acknowledged writes lost in every row:
haproxy -c, resolver warningsclean ✓Drift: the proxy workload is clean. The Patroni workload drifts on six probe fields, which is pre-existing (2.8.0 has the same) and deferred with the rest of the drift work.
Placeholder addresses, the problem the old gate (#309) guarded against: the
replica-Nnames resolve to stable per-replica mesh VIPs. On a cold install the mesh can briefly answer with a placeholder address; runtime DNS replaced it with the real address in 32 s, with no restart (measured on timescaledb-highly-available).Gates:
tw lint→0 errors, 0 warnings, 62/62 leaves covered; the default render passes.Pre-existing:
tw check-docsreports a missing anchor,#wal-level-and-logical-replication.Same proxy fix in #664 (timescaledb-highly-available 1.2.1) and #665 (postgres-multi-location 2.0.1). The 14 templates that bundle this chart adopt 2.8.1 in a later 5376 batch.
🤖 Generated with Claude Code
https://claude.ai/code/session_01WZ5WWhTn9mEkPY7cLt1cr4