diff --git a/VERSION b/VERSION index c36e36681..00cc242ca 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.4.0-rc.2 +6.4.0-rc.3 diff --git a/deploy/helm/pulse/Chart.yaml b/deploy/helm/pulse/Chart.yaml index 8c38c97e1..dad8f8fda 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.2 -appVersion: "6.4.0-rc.2" -icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.0-rc.2/docs/images/pulse-logo.svg +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 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.2/docs/KUBERNETES.md + url: https://github.com/rcourtman/Pulse/blob/v6.4.0-rc.3/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 fd1320d80..09c6a9ea9 100644 --- a/deploy/helm/pulse/README.md +++ b/deploy/helm/pulse/README.md @@ -1,6 +1,6 @@ # pulse -![Version: 6.4.0-rc.2](https://img.shields.io/badge/Version-6.4.0--rc.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.0-rc.2](https://img.shields.io/badge/AppVersion-6.4.0--rc.2-informational?style=flat-square) +![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) 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 8f0c5b9c0..72f2cf4bf 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.2} + image: ${PULSE_IMAGE:-rcourtman/pulse:6.4.0-rc.3} container_name: pulse restart: unless-stopped logging: diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index 5e3a007e5..f61cce1ce 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.2.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.2.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` For the current stable v6 packet, see: - `docs/releases/RELEASE_NOTES_v6.3.2.md` @@ -19,6 +19,10 @@ 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.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 0530ac0fd..b61b7dcdc 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.2.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.2.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` For the current stable v6 packet, see: @@ -19,6 +19,11 @@ For the preceding stable v6 packet, see: For the preceding v6.4 release candidate packet, 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 07bbaf96b..034a5b58f 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -1747,10 +1747,10 @@ 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.2` cut sets the repo-root `VERSION`, repo-root +The active prerelease `v6.4.0-rc.3` 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.2` release version. It follows -`v6.4.0-rc.1` on the published `v6.4.0` candidate line. This prerelease keeps +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 `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 @@ -1760,7 +1760,8 @@ 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. The changes since `v6.4.0-rc.1` do not require a Pulse Mobile +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 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 @@ -1773,6 +1774,11 @@ 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.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 +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`, repo-root `docker-compose.yml` image default, `scripts/install-docker.sh` fallback, and Helm chart release metadata to the same `6.4.0-rc.1` release @@ -2204,8 +2210,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.2` cut, the repo-root compose default and -`scripts/install-docker.sh` fallback must both pin `6.4.0-rc.2` until the next +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 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.3.md b/docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md new file mode 100644 index 000000000..571cb6d20 --- /dev/null +++ b/docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md @@ -0,0 +1,37 @@ +# Pulse v6.4.0-rc.3 Release Notes + +`v6.4.0-rc.3` is a release candidate for the next v6 minor release. It improves large-estate performance, notification visibility, agent recovery and subscription options, while carrying forward the latest stable fixes. + +## What's improved + +- **Faster large-estate navigation** — Storage and platform cold loads fell from roughly 15.6 seconds to 1.1 seconds in the measured large-estate case, with windowed tables keeping scrolling responsive. +- **Lighter live updates** — The `/api/state` response fell from 4.75 MB to 4.09 MB, while changed-item catch-up and faster patch merging reduce work after reconnects and open mobile Alerts reliably. +- **Visible notification delivery** — A recent-delivery log shows redacted outcomes, and test sends now say when delivery is paused instead of implying that a message was sent. +- **Safer agent operation** — A least-privilege install profile limits the agent account and sudo access, while Docker and Kubernetes recovery controls allow deliberate re-enrolment after removal. +- **Clearer plan choices** — MSP evaluation mode supports provider trials, and the Business tier is now available for teams that need the annual business plan. +- **Simpler saved filtering** — Saved views have been removed; bookmarkable filtered URLs remain available for returning to useful table filters. + +## Fixes + +- Metrics history now releases oversized backing memory after dense data ages out, preventing the memory growth first corrected in v6.3.2. +- Patrol retries provider setup on each scheduled run, reports the real blocked reason and recovers from an early-start timing race. +- Proxmox backup roll-ups now calculate total pages from the normalised page size, so recovery pagination remains accurate. +- The Proxmox storage drawer now stacks the TLS and command-execution checkboxes, keeping both controls usable in issue #1775. +- Storage rows mark retained values stale and show the last successful refresh after a source poll fails. +- Stopped Docker and Podman containers no longer repeat health alerts from a stale retained result. +- Docker, Kubernetes and host agents expose recovery controls when a removed agent needs permission to re-enrol. +- A disabled Proxmox backup collection scope remains disabled after configuration reloads. +- Fixed polling intervals, offline-alert policy and command-execution intent remain intact across monitoring and re-enrolment flows. +- Proxmox RAID controller member disks are visible again in storage details. +- API-only Proxmox nodes now retain node metrics history; disk I/O is shown only when a linked agent supplies it. + +## 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. +- Windows Unified Agent binaries are checksum- and detached-signature-verified but are not Authenticode-signed, so Windows may show an Unknown Publisher warning. +- No Pulse Mobile update is required for this candidate. + +## 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.3.md b/docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md new file mode 100644 index 000000000..eb4f03e68 --- /dev/null +++ b/docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md @@ -0,0 +1,68 @@ +# Pulse v6.4.0-rc.3 + +_This changelog describes the changes since `v6.4.0-rc.2` included in +`v6.4.0-rc.3`. It carries that candidate packet forward and also re-lists fixes +first shipped on the `v6.3.2` stable patch line where they remain part of the +next minor release._ + +## Added + +- Notification delivery history exposes recent redacted delivery outcomes, + while test sends report when delivery is paused instead of claiming success. +- A least-privilege Unified Agent install profile creates a non-login service + account and grants only the selected system inspection commands through sudo. +- Docker, Kubernetes and host-agent diagnostics expose an **Allow re-enrol** + recovery control when a prior removal blocks a legitimate returning agent. +- MSP evaluation mode supports provider trials, and the annual Business tier is + available for teams that need the business plan. + +## Changed + +- Large-estate storage and platform navigation uses windowed rows, incremental + route loading and stable scroll ownership. The measured storage cold path + improved from approximately 15.6 seconds to 1.1 seconds. +- `/api/state` fell from 4.75 MB to 4.09 MB in the measured estate. Resource + updates use changed-ID catch-up, including mobile Alerts entry, and merge + patched keys without rebuilding unaffected resource state. +- Per-tick real-time merges and workload row updates now avoid redundant work. +- Saved views have been removed. URL-backed filters remain bookmarkable and + shareable without a second saved-view state model. + +## Fixed + +- Metrics-history retention releases oversized backing arrays after dense seed + data ages out. This correction first shipped in stable `v6.3.2` and remains + included in the next minor line. +- Patrol retries provider initialisation on every scheduled run, exposes the + actual blocked reason and self-recovers from its early-start race + ([fix](https://github.com/rcourtman/Pulse/commit/7c37a85cb)). +- Proxmox backup roll-ups derive `totalPages` from the normalised page size + ([fix](https://github.com/rcourtman/Pulse/commit/6686cdce2)). +- The Proxmox storage drawer stacks the TLS and command-execution checkboxes so + both controls remain usable + ([#1775](https://github.com/rcourtman/Pulse/commit/a28b3535b)). +- Storage rows mark retained readings stale and show the last good refresh age + after a poll failure. +- Stopped Docker and Podman containers no longer re-fire health alerts from a + retained stale health result. +- Disabled Proxmox backup collection scope persists across configuration + reloads. +- Fixed polling intervals, disabled offline policies, command intent and + re-enrolment cleanup remain intact across monitoring and agent recovery. +- Proxmox storage details show RAID controller member disks again. +- API-only Proxmox nodes retain node metrics history without presenting agent- + only disk I/O; linked-agent nodes keep the full host history groups. + +## Release Metadata + +- Version: `v6.4.0-rc.3` +- Previous candidate tag: `v6.4.0-rc.2` +- 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`; 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 0530ac0fd..b61b7dcdc 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.2.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.2.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.3.md` For the current stable v6 packet, see: @@ -19,6 +19,11 @@ For the preceding stable v6 packet, see: For the preceding v6.4 release candidate packet, 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 66c50b0f3..790c73adb 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.2" +CANONICAL_DEFAULT_PULSE_VERSION="6.4.0-rc.3" 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 ce0ca9cb3..b89262e3b 100644 --- a/scripts/installtests/build_release_assets_test.go +++ b/scripts/installtests/build_release_assets_test.go @@ -892,6 +892,7 @@ func TestCurrentPrereleasePacketTracksInstallMetadata(t *testing.T) { "Saved views have been removed", "MSP evaluation mode", "Business tier", + "API-only Proxmox nodes now retain node metrics history", "not Authenticode-signed", "Unknown Publisher warning", ) @@ -911,6 +912,7 @@ func TestCurrentPrereleasePacketTracksInstallMetadata(t *testing.T) { "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", "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 6fb149a2f..901e78435 100644 --- a/scripts/installtests/install_docker_sh_test.go +++ b/scripts/installtests/install_docker_sh_test.go @@ -143,6 +143,7 @@ func TestPreviousStableForPrereleaseVersionCrossesMinorBoundaries(t *testing.T) {version: "6.3.0-rc.2", want: "6.2.1"}, {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"}, } for _, test := range tests {