From 5194e0ca4de9b3cb629df4d434381324bc60810c Mon Sep 17 00:00:00 2001 From: rcourtman Date: Wed, 26 Aug 2026 19:08:28 +0100 Subject: [PATCH] Prepare v6.4.0-rc.4 release --- VERSION | 2 +- deploy/helm/pulse/Chart.yaml | 8 +-- deploy/helm/pulse/README.md | 2 +- docker-compose.yml | 2 +- docs/RELEASE_NOTES.md | 10 +-- docs/UPGRADE_v6.md | 12 ++-- .../subsystems/deployment-installability.md | 42 +++++++----- docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md | 33 ++++++++++ docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md | 66 +++++++++++++++++++ frontend-modern/public/docs/UPGRADE_v6.md | 12 ++-- scripts/install-docker.sh | 2 +- .../installtests/build_release_assets_test.go | 28 ++++---- .../installtests/install_docker_sh_test.go | 1 + 13 files changed, 165 insertions(+), 55 deletions(-) create mode 100644 docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md create mode 100644 docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md diff --git a/VERSION b/VERSION index 00cc242ca..90ff953f1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.4.0-rc.3 +6.4.0-rc.4 diff --git a/deploy/helm/pulse/Chart.yaml b/deploy/helm/pulse/Chart.yaml index dad8f8fda..3f9810206 100644 --- a/deploy/helm/pulse/Chart.yaml +++ b/deploy/helm/pulse/Chart.yaml @@ -2,9 +2,9 @@ apiVersion: v2 name: pulse description: Helm chart for deploying the Pulse hub and optional Docker, Kubernetes, or OpenShift monitoring agent. type: application -version: 6.4.0-rc.3 -appVersion: "6.4.0-rc.3" -icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.0-rc.3/docs/images/pulse-logo.svg +version: 6.4.0-rc.4 +appVersion: "6.4.0-rc.4" +icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.0-rc.4/docs/images/pulse-logo.svg keywords: - monitoring - proxmox @@ -32,7 +32,7 @@ annotations: description: Smoke tests with kind cluster deployment artifacthub.io/links: | - name: Documentation - url: https://github.com/rcourtman/Pulse/blob/v6.4.0-rc.3/docs/KUBERNETES.md + url: https://github.com/rcourtman/Pulse/blob/v6.4.0-rc.4/docs/KUBERNETES.md - name: Support url: https://github.com/rcourtman/Pulse/discussions artifacthub.io/maintainers: | diff --git a/deploy/helm/pulse/README.md b/deploy/helm/pulse/README.md index 09c6a9ea9..c5cb873b1 100644 --- a/deploy/helm/pulse/README.md +++ b/deploy/helm/pulse/README.md @@ -1,6 +1,6 @@ # pulse -![Version: 6.4.0-rc.3](https://img.shields.io/badge/Version-6.4.0--rc.3-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.0-rc.3](https://img.shields.io/badge/AppVersion-6.4.0--rc.3-informational?style=flat-square) +![Version: 6.4.0-rc.4](https://img.shields.io/badge/Version-6.4.0--rc.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.0-rc.4](https://img.shields.io/badge/AppVersion-6.4.0--rc.4-informational?style=flat-square) Helm chart for deploying the Pulse hub and optional Docker, Kubernetes, or OpenShift monitoring agent. diff --git a/docker-compose.yml b/docker-compose.yml index 72f2cf4bf..a15280a6b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: pulse: - image: ${PULSE_IMAGE:-rcourtman/pulse:6.4.0-rc.3} + image: ${PULSE_IMAGE:-rcourtman/pulse:6.4.0-rc.4} container_name: pulse restart: unless-stopped logging: diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index f61cce1ce..e91f4dbd2 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -7,8 +7,8 @@ For historical v4 notes that previously lived in this repo, see: `docs/releases/RELEASE_NOTES_v4.md` For the current v6 release candidate packet (the current v6 support release candidate packet), see: -- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md` For the current stable v6 packet, see: - `docs/releases/RELEASE_NOTES_v6.3.2.md` @@ -19,10 +19,12 @@ For the preceding stable v6 packet, see: - `docs/releases/V6_CHANGELOG_v6.3.1.md` For the preceding v6.4 release candidate packet, see: +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` + +For earlier v6.4 release candidate packets, see: - `docs/releases/RELEASE_NOTES_v6.4.0-rc.2.md` - `docs/releases/V6_CHANGELOG_v6.4.0-rc.2.md` - -For the earlier v6.4 release candidate packet, see: - `docs/releases/RELEASE_NOTES_v6.4.0-rc.1.md` - `docs/releases/V6_CHANGELOG_v6.4.0-rc.1.md` diff --git a/docs/UPGRADE_v6.md b/docs/UPGRADE_v6.md index b61b7dcdc..c9798e7ad 100644 --- a/docs/UPGRADE_v6.md +++ b/docs/UPGRADE_v6.md @@ -4,8 +4,8 @@ This guide covers practical upgrade steps for existing Pulse installs moving to For the current v6 release candidate packet (the current v6 support release candidate packet), see: -- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md` For the current stable v6 packet, see: @@ -19,11 +19,13 @@ For the preceding stable v6 packet, see: For the preceding v6.4 release candidate packet, see: +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` + +For earlier v6.4 release candidate packets, see: + - `docs/releases/RELEASE_NOTES_v6.4.0-rc.2.md` - `docs/releases/V6_CHANGELOG_v6.4.0-rc.2.md` - -For the earlier v6.4 release candidate packet, see: - - `docs/releases/RELEASE_NOTES_v6.4.0-rc.1.md` - `docs/releases/V6_CHANGELOG_v6.4.0-rc.1.md` diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index c356896a1..636c9d334 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -1774,25 +1774,29 @@ diagnostics. The same release workflow also executes the generated self-signed and custom-CA Windows installer commands through Windows PowerShell 5.1 before release assembly, so the first HTTPS fetch is release proof rather than a string-shape assertion. -The active prerelease `v6.4.0-rc.3` cut sets the repo-root `VERSION`, repo-root +The active prerelease `v6.4.0-rc.4` cut sets the repo-root `VERSION`, repo-root `docker-compose.yml` image default, `scripts/install-docker.sh` fallback, and -Helm chart release metadata to the same `6.4.0-rc.3` release version. It follows -`v6.4.0-rc.2` on the published `v6.4.0` candidate line. This prerelease keeps +Helm chart release metadata to the same `6.4.0-rc.4` release version. It follows +`v6.4.0-rc.3` on the published `v6.4.0` candidate line. This prerelease keeps `rollback_version=v6.3.2`, publishes a versioned public GitHub prerelease plus versioned Docker and Helm artifacts, and does not move stable/latest -install pointers or stable semver aliases. The candidate makes large-estate -workload, infrastructure, storage, and platform rendering incremental; -canonicalizes table, drawer, touch, disclosure, sorting, and navigation -behavior; adds notification delivery history and a least-privilege agent -profile; provides deliberate Docker and Kubernetes re-enrolment recovery; and -fixes metrics-history retention, Patrol startup recovery, backup pagination, -stale storage and stale container-health presentation, and backup scope -persistence. API-only Proxmox nodes also retain node metrics history without -presenting agent-only disk I/O. The changes since `v6.4.0-rc.2` do not require a Pulse Mobile +install pointers or stable semver aliases. The candidate moves resources, +Connected infrastructure, and active alerts onto keyed per-client deltas; +defers expensive realtime merges during operator input; preserves windowed-row +identity across reordered snapshots; and isolates REST recovery from the +websocket delta baseline. It also restores Proxmox network details, hardens +backup and drawer history targeting, clears committed notification delivery +warnings immediately, and keeps supported Proxmox VM/LXC lifecycle requests on +the governed action path without a QEMU guest-agent prerequisite or manual +command fallback. The changes since `v6.4.0-rc.3` do not require a Pulse Mobile client change and preserve the existing mobile, Relay, onboarding, and mobile-facing API contracts, so the server cut is classified `no-mobile-impact`; no companion upload or public -mobile-store rollout is part of this candidate. The prerelease Windows path +mobile-store rollout is part of this candidate. The canonical mobile +compatibility projection and route/method/scope, request/response, pairing, and +push checks passed against Pulse Mobile revision +`57353a83eb950d1102c90074aa8fe67e1559685b`, iOS build 12, and Android build 9. +The prerelease Windows path retains exact-SHA, checksum, and detached-signature verification without Authenticode. Stable `v6.4.0` also skips SignPath under the standing unavailable policy and retains the same exact-SHA, checksum, detached-signature, manifest, @@ -1801,9 +1805,15 @@ only after the release owner explicitly confirms that production credentials and certificate authorization are ready and a reviewed policy/code change restores it. +The preceding `v6.4.0-rc.3` cut published from exact source SHA +`cf0ca6f127540e9997c2eb97eeed32f27619d242`. Its tag and versioned artifacts +remain immutable; `v6.4.0-rc.4` supersedes it without moving stable install +pointers or stable semver aliases from `v6.3.2`. + The preceding `v6.4.0-rc.2` publication attempt built and staged the exact candidate artifacts but failed release convergence before public activation. -Its tag is immutable and the candidate is superseded by `v6.4.0-rc.3`; stable +Its tag is immutable and the candidate is superseded by later `v6.4.0` +prereleases; stable install pointers and stable semver aliases remained on `v6.3.2`. The preceding prerelease `v6.4.0-rc.1` cut set the repo-root `VERSION`, @@ -2237,8 +2247,8 @@ For the active stable `v6.1.2` cut, the repo-root compose default and `scripts/install-docker.sh` fallback must both pin `6.1.2` whenever the governed `VERSION` is that stable cut. The stable promotion guard remains in force and rejects leftover `-rc.` defaults. -For the active prerelease `v6.4.0-rc.3` cut, the repo-root compose default and -`scripts/install-docker.sh` fallback must both pin `6.4.0-rc.3` until the next +For the active prerelease `v6.4.0-rc.4` cut, the repo-root compose default and +`scripts/install-docker.sh` fallback must both pin `6.4.0-rc.4` until the next governed stable cut moves them forward. Each new release moves these two pins together with the repo-root `VERSION` and the Helm chart metadata in the same commit; a cut that leaves any of the four on a superseded value is a diff --git a/docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md b/docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md new file mode 100644 index 000000000..66a1d46b5 --- /dev/null +++ b/docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md @@ -0,0 +1,33 @@ +# Pulse v6.4.0-rc.4 Release Notes + +`v6.4.0-rc.4` is a release candidate for the next v6 minor release. It fixes two customer-reported trust issues, restores several Proxmox views, and makes live large-estate screens steadier while data is changing. + +## What's improved + +- **Steadier large-estate screens** — Resource, infrastructure, and alert updates now use keyed deltas. Pulse defers expensive live merges while an operator is interacting, then applies the queued state afterward. +- **Smaller resource snapshots** — Repeated capability descriptions and default policy metadata are deduplicated without changing the resource shape consumed by the web interface. +- **More useful workload tables** — Workload IDs can be sorted, columns can be resized deliberately, and header alignment remains stable across the table. +- **Restored Proxmox network details** — Node network interfaces and their configuration are visible again in the Proxmox detail view. +- **Clearer operational API access** — API token scopes now expose the governed agent-lifecycle capability used for lifecycle operations. + +## Fixes + +- Delivery warnings now clear as soon as the committed notification queue becomes healthy after a retry, dismissal, cancellation, or successful delivery ([#1761](https://github.com/rcourtman/Pulse/issues/1761)). +- Assistant no longer treats the QEMU guest agent as a prerequisite for governed Proxmox VM or LXC lifecycle actions, and no longer redirects supported requests to manual `qm` or `pct` commands ([#1782](https://github.com/rcourtman/Pulse/issues/1782)). +- Keyed resource rows retain their identity when full snapshots arrive in a different order, and REST recovery no longer contaminates the websocket delta baseline. +- Proxmox backup rows keep the correct alert attribution, filter by repository correctly, and hydrate reliably when backup data arrives after the initial page state. +- Docker container history keeps the selected container identity across filtered refreshes. +- Workload and infrastructure drawers use the canonical history target, preventing one resource from showing another resource's metrics. +- Mock storage and workload histories preserve continuity so release render checks exercise the same stable chart behavior as a live runtime. +- Proxmox network detail formatting and offline-node browser coverage are back under their qualified checks. + +## Before you upgrade + +- This is a release candidate. Stable installations remain on v6.3.2 unless an operator explicitly selects this version. +- Existing configurations remain valid and no manual data migration is required. +- Pulse Mobile does not consume the changed browser resource stream. The canonical route, request/response, pairing, and push compatibility checks passed against Pulse Mobile 1.0.0 build 12 on iOS and build 9 on Android, so no companion update is required. +- Windows Unified Agent binaries are checksum- and detached-signature-verified but are not Authenticode-signed, so Windows may show an Unknown Publisher warning. + +## Known issues + +- Windows Authenticode signing remains unavailable for this candidate; use the published checksum and detached signature when verifying Windows agent downloads. diff --git a/docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md b/docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md new file mode 100644 index 000000000..5b02f9415 --- /dev/null +++ b/docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md @@ -0,0 +1,66 @@ +# Pulse v6.4.0-rc.4 + +_This changelog describes the changes since `v6.4.0-rc.3` included in +`v6.4.0-rc.4`._ + +## Added + +- API token scope presentation includes the governed agent-lifecycle scope. +- Workload tables support deliberate column-width persistence and sorting by + workload ID. +- Webhook presentation retains stable message keys and explicit resource + context for language-neutral downstream handling. + +## Changed + +- Resources, connected-infrastructure entries, and active alerts use per-client + keyed deltas. Unkeyed or missing-baseline transitions fail safely to a full + payload instead of attempting a partial merge. +- Browser resource ingestion deduplicates capability catalogs, default policy + posture, AI-safe summaries, and self-alias identity entries while restoring + the existing consumer shape at the ingestion boundary. +- Realtime resource application defers during operator input and coalesces the + queued changes after the gesture. Windowed workload, storage, and platform + rows preserve identity while scrolling and while reordered snapshots arrive. +- REST state recovery is isolated from the websocket baseline, so a late REST + response cannot advance or replace the per-connection delta source of truth. +- History drawers resolve canonical storage, Docker, host, VM, and container + targets before querying metrics, including mock and API-only source paths. + +## Fixed + +- Notification queue health is reconciled immediately after committed queue + transitions, clearing stale delivery system alerts after retry, dismissal, + cancellation, purge, or successful delivery + ([#1761](https://github.com/rcourtman/Pulse/issues/1761)). +- Proxmox VM/LXC lifecycle actions remain available through the governed action + path without a QEMU guest-agent prerequisite. Assistant grounding no longer + suggests manual `qm`/`pct` fallback for supported lifecycle requests + ([#1782](https://github.com/rcourtman/Pulse/issues/1782)). +- Proxmox node network details render again and retain browser-qualified layout + coverage. +- Backup recovery data retains the correct source attribution, repository + filter, and delayed-hydration state. +- Docker container history retains its selected target through filtered + refreshes, and workload drawer history no longer crosses resource identities. +- Keyed platform rows retain component identity when a full snapshot reorders + otherwise unchanged entries. +- Mock storage and workload histories preserve continuity across refreshes. +- Offline-node E2E coverage returned to the qualified stable tier after its + repaired proof passed. + +## Release Metadata + +- Version: `v6.4.0-rc.4` +- Previous candidate tag: `v6.4.0-rc.3` +- Previous stable: `v6.3.2` +- Rollback target: `v6.3.2` +- Rollback command: `./scripts/install.sh --version v6.3.2` +- Promotion path: exact-SHA single-build release candidate from `main` +- Windows signing decision: prereleases publish checksum- and + detached-signature-verified Windows agents without Authenticode while + SignPath remains unavailable; Windows may show an Unknown Publisher warning +- Mobile decision: `no-mobile-impact`; the changed keyed stream is a browser + transport and the canonical core/mobile contract passed against Pulse Mobile + revision `57353a83eb950d1102c90074aa8fe67e1559685b`, iOS build 12, and Android + build 9, so no companion build or public store rollout is required diff --git a/frontend-modern/public/docs/UPGRADE_v6.md b/frontend-modern/public/docs/UPGRADE_v6.md index b61b7dcdc..c9798e7ad 100644 --- a/frontend-modern/public/docs/UPGRADE_v6.md +++ b/frontend-modern/public/docs/UPGRADE_v6.md @@ -4,8 +4,8 @@ This guide covers practical upgrade steps for existing Pulse installs moving to For the current v6 release candidate packet (the current v6 support release candidate packet), see: -- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.4.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.4.md` For the current stable v6 packet, see: @@ -19,11 +19,13 @@ For the preceding stable v6 packet, see: For the preceding v6.4 release candidate packet, see: +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` + +For earlier v6.4 release candidate packets, see: + - `docs/releases/RELEASE_NOTES_v6.4.0-rc.2.md` - `docs/releases/V6_CHANGELOG_v6.4.0-rc.2.md` - -For the earlier v6.4 release candidate packet, see: - - `docs/releases/RELEASE_NOTES_v6.4.0-rc.1.md` - `docs/releases/V6_CHANGELOG_v6.4.0-rc.1.md` diff --git a/scripts/install-docker.sh b/scripts/install-docker.sh index 790c73adb..000edcb33 100755 --- a/scripts/install-docker.sh +++ b/scripts/install-docker.sh @@ -6,7 +6,7 @@ set -euo pipefail SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" DOCKER_IMAGE_REPO="${DOCKER_IMAGE_REPO:-rcourtman/pulse}" -CANONICAL_DEFAULT_PULSE_VERSION="6.4.0-rc.3" +CANONICAL_DEFAULT_PULSE_VERSION="6.4.0-rc.4" resolve_default_pulse_version() { if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then diff --git a/scripts/installtests/build_release_assets_test.go b/scripts/installtests/build_release_assets_test.go index 4e42341d4..4910895d1 100644 --- a/scripts/installtests/build_release_assets_test.go +++ b/scripts/installtests/build_release_assets_test.go @@ -887,12 +887,11 @@ func TestCurrentPrereleasePacketTracksInstallMetadata(t *testing.T) { "## Fixes", "## Before you upgrade", "## Known issues", - "notification delivery", - "least-privilege", - "Saved views have been removed", - "MSP evaluation mode", - "Business tier", - "API-only Proxmox nodes now retain node metrics history", + "keyed per-client deltas", + "Delivery warnings now clear", + "QEMU guest agent", + "Restored Proxmox network details", + "Pulse Mobile does not consume the changed browser resource stream", "not Authenticode-signed", "Unknown Publisher warning", ) @@ -902,17 +901,12 @@ func TestCurrentPrereleasePacketTracksInstallMetadata(t *testing.T) { "Rollback target: `v"+previous+"`", "Promotion path: exact-SHA single-build release candidate from `main`", "This changelog describes the changes since `v"+comparisonVersion+"`", - "Notification delivery history", - "least-privilege Unified Agent install profile", - "Saved views have been removed", - "4.75 MB to 4.09 MB", - "Metrics-history retention releases oversized backing arrays", - "Patrol retries provider initialisation", - "backup roll-ups derive `totalPages`", - "Storage rows mark retained readings stale", - "Stopped Docker and Podman containers no longer re-fire health alerts", - "Disabled Proxmox backup collection scope persists", - "API-only Proxmox nodes retain node metrics history", + "Resources, connected-infrastructure entries, and active alerts use per-client keyed deltas", + "REST state recovery is isolated from the websocket baseline", + "Notification queue health is reconciled immediately", + "Proxmox VM/LXC lifecycle actions remain available through the governed action path", + "Proxmox node network details render again", + "Backup recovery data retains the correct source attribution", "Windows signing decision: prereleases publish checksum- and detached-signature-verified Windows agents without Authenticode", "Mobile decision: `no-mobile-impact`", "no companion build or public store rollout is required", diff --git a/scripts/installtests/install_docker_sh_test.go b/scripts/installtests/install_docker_sh_test.go index 901e78435..9e89cd568 100644 --- a/scripts/installtests/install_docker_sh_test.go +++ b/scripts/installtests/install_docker_sh_test.go @@ -144,6 +144,7 @@ func TestPreviousStableForPrereleaseVersionCrossesMinorBoundaries(t *testing.T) {version: "6.4.0-rc.1", want: "6.3.2"}, {version: "6.4.0-rc.2", want: "6.3.2"}, {version: "6.4.0-rc.3", want: "6.3.2"}, + {version: "6.4.0-rc.4", want: "6.3.2"}, } for _, test := range tests {