Prepare v6.2.0-rc.8 release

This commit is contained in:
rcourtman
2026-08-05 14:43:37 +01:00
parent 54a312bebd
commit fdcb223e6f
13 changed files with 210 additions and 55 deletions
+1 -1
View File
@@ -1 +1 @@
6.2.0-rc.7
6.2.0-rc.8
+4 -4
View File
@@ -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.2.0-rc.7
appVersion: "6.2.0-rc.7"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.2.0-rc.7/docs/images/pulse-logo.svg
version: 6.2.0-rc.8
appVersion: "6.2.0-rc.8"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.2.0-rc.8/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.2.0-rc.7/docs/KUBERNETES.md
url: https://github.com/rcourtman/Pulse/blob/v6.2.0-rc.8/docs/KUBERNETES.md
- name: Support
url: https://github.com/rcourtman/Pulse/discussions
artifacthub.io/maintainers: |
+1 -1
View File
@@ -1,6 +1,6 @@
# pulse
![Version: 6.2.0-rc.7](https://img.shields.io/badge/Version-6.2.0--rc.7-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.2.0-rc.7](https://img.shields.io/badge/AppVersion-6.2.0--rc.7-informational?style=flat-square)
![Version: 6.2.0-rc.8](https://img.shields.io/badge/Version-6.2.0--rc.8-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.2.0-rc.8](https://img.shields.io/badge/AppVersion-6.2.0--rc.8-informational?style=flat-square)
Helm chart for deploying the Pulse hub and optional Docker, Kubernetes, or OpenShift monitoring agent.
+1 -1
View File
@@ -2,7 +2,7 @@ version: '3.8'
services:
pulse:
image: ${PULSE_IMAGE:-rcourtman/pulse:6.2.0-rc.7}
image: ${PULSE_IMAGE:-rcourtman/pulse:6.2.0-rc.8}
container_name: pulse
restart: unless-stopped
logging:
+4 -2
View File
@@ -7,10 +7,12 @@ For historical v4 notes that previously lived in this repo, see:
`docs/releases/RELEASE_NOTES_v4.md`
For the current v6 support release candidate packet, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.7.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.7.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.8.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.8.md`
For historical v6.2 support release candidate packets, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.7.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.7.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.6.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.6.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.5.md`
+4 -3
View File
@@ -4,11 +4,13 @@ This guide covers practical upgrade steps for existing Pulse installs moving to
For the current v6 support release candidate packet, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.7.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.7.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.8.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.8.md`
For historical v6.2 support release candidate packets, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.7.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.7.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.6.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.6.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.5.md`
@@ -383,4 +385,3 @@ Multi-tenant mode is opt-in and additionally license-gated:
- Enablement flag: `PULSE_MULTI_TENANT_ENABLED=true`
- Capability gate: `multi_tenant`
@@ -1169,19 +1169,19 @@ host-local redirect contract as runtime token minting and exchange. Proof input
must reject absolute, scheme-relative, backslash-authority, encoded-separator,
and control-character targets before constructing the handoff request.
The active support prerelease `v6.2.0-rc.7` cut sets the repo-root `VERSION`,
The active support prerelease `v6.2.0-rc.8` 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.2.0-rc.7` release
fallback, and Helm chart release metadata to the same `6.2.0-rc.8` release
version. This support prerelease keeps `rollback_version=v6.1.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. Stable
install pointers stay on `v6.1.2`, whose active stable cut is recorded below and
continues to govern the stable line until this candidate is promoted. The
seventh `v6.2.0` candidate is a continuity and operator-workflow cut that
supersedes `v6.2.0-rc.6`: it preserves Proxmox guest and renamed-host identity,
corrects TrueNAS and host metrics, makes platform tables and filters responsive,
ships the in-app documentation set, and hardens installer and private Pro
release recovery. The exact `main` SHA must pass the integrated release checks
eighth `v6.2.0` candidate is a runtime-resilience and authorization-coherence
cut that supersedes `v6.2.0-rc.7`: it aligns Go memory pressure with cgroup
limits, hardens WebSocket liveness, corrects TrueNAS and Proxmox protection
state, unifies session-admin enforcement, and removes clipping from long
operator surfaces. The exact `main` SHA must pass the integrated release checks
and immutable-candidate build before the single-build workflow crosses its
public mutation boundary.
Every release cut, including a prerelease, now gates that mutation boundary on
@@ -1194,13 +1194,18 @@ 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 `v6.2.0-rc.7` server cut is classified
The `v6.2.0-rc.8` server cut is classified
`existing-mobile-build-compatible`. The synchronized Pulse Mobile 1.0.0 iOS
build 12 and Android versionCode 9 candidates, both using runtime version 2,
remain distributed to the existing beta cohort through TestFlight and Play
open testing. The current beta candidates cover the server contract used by
this cut; no additional companion upload or public store rollout is part of
RC7.
open testing. The changes since RC7 do not alter mobile relay payloads, pairing,
approvals, or onboarding contracts; no additional companion upload or public
store rollout is part of RC8.
The preceding `v6.2.0-rc.7` candidate used the same support-prerelease path
with `rollback_version=v6.1.2` and pinned the same four install surfaces to
`6.2.0-rc.7`. It is superseded by this cut and no longer governs the install
pins; its packet stays in `docs/releases/` as the historical candidate record
for the `v6.2.0` line.
The preceding `v6.2.0-rc.6` candidate used the same support-prerelease path
with `rollback_version=v6.1.2` and pinned the same four install surfaces to
`6.2.0-rc.6`. It is superseded by this cut and no longer governs the install
@@ -1380,20 +1385,19 @@ 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 support prerelease `v6.2.0-rc.7` cut, the repo-root compose
default and `scripts/install-docker.sh` fallback must both pin `6.2.0-rc.7`
For the active support prerelease `v6.2.0-rc.8` cut, the repo-root compose
default and `scripts/install-docker.sh` fallback must both pin `6.2.0-rc.8`
until the next governed stable cut moves them forward. The stable promotion
guard remains in force and must reject leftover `-rc.` defaults when the
governed `VERSION` returns to a stable release. Each new candidate on the
`v6.2.0` line moves these two pins together with the repo-root `VERSION` and
the Helm chart metadata in the same commit; a candidate that leaves any of the
four on a superseded `6.2.0-rc.*` value is a release-packet blocker.
The RC7 packet refresh records `fc10de9b5477613316473267b72b05b6b2b7aaff`
as the current validation-risk commit. That head includes the earlier
Docker-default correction plus the follow-on capacity-forecast and Patrol
history hardening commits. Later metadata-only packet refreshes may be the
workflow dispatch head only when they do not change the code-backed
release-risk range.
The RC8 packet records `54a312bebd97d7cd79004acff54687755d2ab809` as
the code-backed validation-risk head. That head includes the post-RC7 runtime,
authorization, protection-state, responsive-layout, telemetry, and release
proof changes. The metadata-only release-preparation commit may be the workflow
dispatch head because it does not change that code-backed release-risk range.
`internal/updates/` is the live deployment and upgrade planner. It owns
deployment-type detection, update-plan generation, adapter selection, server
@@ -0,0 +1,90 @@
# Pulse v6.2.0-rc.8 Release Notes
`v6.2.0-rc.8` is a release candidate for the next Pulse v6 minor line. It
follows stable `v6.1.2` and supersedes `v6.2.0-rc.7`. This candidate focuses on
runtime resilience, authorization consistency, protection-state correctness,
responsive operator workflows, and privacy-preserving product telemetry.
## Highlights
- Pulse now aligns the Go runtime memory limit with Docker, Kubernetes, and
systemd cgroup limits, reducing the risk of kernel OOM termination on
memory-capped installs.
- Settings, discovery, configuration, password, and platform-administration
routes now share one session-administrator model, including correct behavior
for OIDC-only and organization-scoped instances.
- TrueNAS completed init containers no longer create permanent critical alerts,
Proxmox protection evidence retains timestamp precision, and backup status
reserves red for genuinely missing backups.
- Large threshold sections and expanded infrastructure tables remain usable at
desktop and narrow widths, with consistent attention filters and prioritized
responsive columns.
- Product telemetry now measures content-free adoption counts for licensed
features while removing a Patrol autofix counter that could never become
non-zero.
## Fixed
- Matched cross-site auto-registration to canonical Proxmox identity without
merging ambiguous instances.
- Kept accepted and removed Unified Agent inventory synchronized with canonical
resource state, serialized metric and remediation-history persistence, and
restored release-candidate metrics and bundle behavior.
- Treated every successfully read WebSocket frame as client liveness and widened
keepalive tolerance for background tabs and middleboxes that delay control
frames.
- Stopped healthy TrueNAS applications with completed one-shot init containers
from raising permanent critical incidents.
- Made settings capabilities agree with route enforcement, closed the
non-admin change-password session path, restored OIDC-only administrator
parity, and kept organization-scoped tenants outside platform administration.
- Removed the fixed-height ceiling that clipped long alert-threshold sections
and improved responsive tables, settings controls, and attention filters.
- Reduced mock-mode startup memory by defaulting synthetic trend seeding to 48
hours and eliminated repeated allocations in metric-role classification.
- Added privacy-preserving counts for RBAC, persistent audit logging, scheduled
reports, alert-triggered analysis, and agent profiles without collecting
names, permissions, recipients, report scope, or audit-event content.
## Release Qualification
- The v6 control plane reports all 44 readiness assertions and all 25 release
gates passed for this release-preparation checkpoint.
- Release publication builds and validates one immutable `main` SHA before
creating or publishing the GitHub prerelease, Docker image, Helm chart, and
private Pro packet.
- Hardware-related fix claims now require version-bound live-runtime proof in
addition to source and automated-test evidence.
- Targeted regression coverage locks cgroup memory-limit detection, WebSocket
liveness, session-admin parity, TrueNAS container semantics, Proxmox
protection posture, resource-state refresh, telemetry privacy, and responsive
threshold and table behavior.
## Upgrade Notes
Use the normal v6 install or update flow for `v6.2.0-rc.8` only when you are
comfortable testing an RC. The rollback target is stable `v6.1.2`.
The exact rollback reinstall command is:
```bash
./scripts/install.sh --version v6.1.2
```
Existing configurations remain valid and no manual data migration is required.
This server candidate is compatible with the current Pulse Mobile 1.0.0 beta
candidates. iOS build 12 is distributed through the TestFlight public beta link,
and Android versionCode 9 remains available through Play open testing; both use
runtime version 2. The changes since RC7 do not alter mobile relay payloads,
pairing, approvals, or onboarding contracts. No public mobile-store rollout is
part of this RC.
Windows Unified Agent binaries in this candidate keep checksum and
detached-signature verification, but they are not yet Authenticode-signed and
Windows may show an unknown-publisher warning. No unsigned-Windows exception
applies to any `v6.2.0` release. Stable `v6.2.0` must publish Windows agents
through the mandatory SignPath Authenticode path.
Paid Pulse Pro, Relay, and eligible legacy customers should continue to use the
private download page and private runtime image for paid runtime features.
+56
View File
@@ -0,0 +1,56 @@
# Pulse v6.2.0-rc.8
_This changelog describes the changes since `v6.2.0-rc.7`.
`v6.2.0-rc.8` remains a prerelease and rolls back to stable `v6.1.2`._
## Added
- Cgroup-aware Go memory-limit configuration for container and systemd memory
caps.
- Privacy-preserving adoption counts for licensed RBAC, audit, reporting,
alert-analysis, and agent-profile features.
- Version-bound live-runtime evidence for hardware-related release claims.
## Improved
- Unified session-administrator decisions across settings capabilities,
discovery, configuration, password, and platform-administration routes.
- Accepted any inbound WebSocket frame as proof of liveness and increased
tolerance for delayed control frames.
- Serialized metrics and remediation-history persistence and reduced mock-mode
startup memory and allocation pressure.
- Prioritized responsive infrastructure columns, standardized attention
filters, and made narrow settings controls and expanded tables fit reliably.
## Fixed
- Matched cross-site auto-registration to canonical Proxmox identity.
- Restored Proxmox protection-posture evidence without losing timestamp
precision.
- Stopped completed TrueNAS init containers from creating permanent critical
incidents.
- Refreshed canonical resource state after accepted or removed agent inventory.
- Corrected authorization and capability parity for non-admin, OIDC-only, and
organization-scoped sessions.
- Reserved red backup status for missing backups and removed the fixed-height
ceiling that clipped long threshold sections.
- Removed the structurally inert Patrol autofix telemetry counter.
## Release Metadata
- Version: `v6.2.0-rc.8`
- Previous candidate: `v6.2.0-rc.7`
- Previous stable: `v6.1.2`
- Rollback target: `v6.1.2`
- Rollback command: `./scripts/install.sh --version v6.1.2`
- Promotion path: exact-SHA single-build release candidate from `main`,
published as a support prerelease that does not move stable or latest
install pointers
- Windows signing decision: Authenticode through SignPath is the mandatory
signing backend and no unsigned-Windows exception applies to any `v6.2.0`
release
- Mobile decision: `existing-mobile-build-compatible`; Pulse Mobile 1.0.0 iOS
build 12 is distributed through the TestFlight public beta link and Android
versionCode 9 remains on Play open testing, both using runtime version 2. The
changes since RC7 do not alter mobile relay payloads, pairing, approvals, or
onboarding contracts. No public store rollout is part of this candidate
+4 -3
View File
@@ -4,11 +4,13 @@ This guide covers practical upgrade steps for existing Pulse installs moving to
For the current v6 support release candidate packet, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.7.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.7.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.8.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.8.md`
For historical v6.2 support release candidate packets, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.7.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.7.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.6.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.6.md`
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.5.md`
@@ -383,4 +385,3 @@ Multi-tenant mode is opt-in and additionally license-gated:
- Enablement flag: `PULSE_MULTI_TENANT_ENABLED=true`
- Capability gate: `multi_tenant`
+1 -1
View File
@@ -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.2.0-rc.7"
CANONICAL_DEFAULT_PULSE_VERSION="6.2.0-rc.8"
resolve_default_pulse_version() {
if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then
@@ -492,15 +492,14 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
"`v"+version+"` is a release candidate",
"## Highlights",
"stable `v"+previous+"`",
"supersedes `v6.2.0-rc.6`",
"Proxmox guests keep one canonical identity",
"TrueNAS ZFS ARC is treated as reclaimable cache",
"remain usable on narrow screens",
"documentation set linked from Pulse now ships with the application",
"bounded configuration-backup retention",
"hostname changes heal without detaching findings",
"Browser-verification receipts are now enforced",
"Windows PowerShell 5.1",
"supersedes `v6.2.0-rc.7`",
"aligns the Go runtime memory limit",
"routes now share one session-administrator model",
"TrueNAS completed init containers no longer create permanent critical alerts",
"Large threshold sections and expanded infrastructure tables remain usable",
"Product telemetry now measures content-free adoption counts",
"every successfully read WebSocket frame as client liveness",
"Hardware-related fix claims now require version-bound live-runtime proof",
"iOS build 12 is distributed through the TestFlight public beta link",
"Android versionCode 9 remains available through Play open testing",
"No public mobile-store rollout is part of this RC",
@@ -510,17 +509,17 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
)
assertFileContainsAllNormalized(t, changelogPath,
"Version: `v"+version+"`",
"Previous candidate: `v6.2.0-rc.6`",
"Previous candidate: `v6.2.0-rc.7`",
"Previous stable: `v"+previous+"`",
"Rollback target: `v"+previous+"`",
"Promotion path: exact-SHA single-build release candidate from `main`",
"This changelog describes the changes since `v6.2.0-rc.6`",
"Preserved canonical Proxmox guest identity and metadata across node migrations",
"Healed safe hostname-rename identity forks",
"Treated TrueNAS ZFS ARC as reclaimable cache",
"Retained valid virtio, Xen, and non-SMART block devices",
"Centralized platform View controls",
"Enforced, content-bound browser verification receipts",
"This changelog describes the changes since `v6.2.0-rc.7`",
"Cgroup-aware Go memory-limit configuration",
"Accepted any inbound WebSocket frame as proof of liveness",
"Matched cross-site auto-registration to canonical Proxmox identity",
"Stopped completed TrueNAS init containers from creating permanent critical incidents",
"Corrected authorization and capability parity",
"Removed the structurally inert Patrol autofix telemetry counter",
"Windows signing decision: Authenticode through SignPath is the mandatory signing backend",
"Mobile decision: `existing-mobile-build-compatible`",
"iOS build 12 is distributed through the TestFlight public beta link",
@@ -559,7 +558,7 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
"This support prerelease keeps `rollback_version=v"+previous+"`, publishes a versioned public GitHub prerelease plus versioned Docker and Helm artifacts, and does not move stable/latest install pointers or stable semver aliases.",
"For the active support prerelease `v"+version+"` cut, the repo-root compose default and `scripts/install-docker.sh` fallback must both pin `"+version+"` until the next governed stable cut moves them forward.",
"The `v"+version+"` server cut is classified `existing-mobile-build-compatible`.",
"The current beta candidates cover the server contract used by this cut; no additional companion upload or public store rollout is part of RC7.",
"The changes since RC7 do not alter mobile relay payloads, pairing, approvals, or onboarding contracts; no additional companion upload or public store rollout is part of RC8.",
)
}
@@ -132,6 +132,7 @@ func TestPreviousStableForPrereleaseVersionCrossesMinorBoundaries(t *testing.T)
{version: "6.2.0-rc.5", want: "6.1.2"},
{version: "6.2.0-rc.6", want: "6.1.2"},
{version: "6.2.0-rc.7", want: "6.1.2"},
{version: "6.2.0-rc.8", want: "6.1.2"},
}
for _, test := range tests {
@@ -339,7 +340,8 @@ func TestInstallDockerProofTracksSupportPrereleaseContract(t *testing.T) {
assertFileContainsAllNormalized(t, repoFile("docs", "release-control", "v6", "internal", "subsystems", "deployment-installability.md"),
"The active support prerelease `v"+version+"` 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 `"+version+"` release version.",
"This support prerelease keeps `rollback_version=v"+previous+"`, publishes a versioned public GitHub prerelease plus versioned Docker and Helm artifacts, and does not move stable/latest install pointers or stable semver aliases.",
"is a continuity and operator-workflow cut that supersedes `v6.2.0-rc.6`: it preserves Proxmox guest and renamed-host identity, corrects TrueNAS and host metrics, makes platform tables and filters responsive, ships the in-app documentation set, and hardens installer and private Pro release recovery",
"is a runtime-resilience and authorization-coherence cut that supersedes `v6.2.0-rc.7`: it aligns Go memory pressure with cgroup limits, hardens WebSocket liveness, corrects TrueNAS and Proxmox protection state, unifies session-admin enforcement, and removes clipping from long operator surfaces",
"The preceding `v6.2.0-rc.7` candidate used the same support-prerelease path with `rollback_version=v6.1.2` and pinned the same four install surfaces to `6.2.0-rc.7`.",
"The preceding `v6.2.0-rc.6` candidate used the same support-prerelease path with `rollback_version=v6.1.2` and pinned the same four install surfaces to `6.2.0-rc.6`.",
"The preceding `v6.2.0-rc.5` candidate used the same support-prerelease path with `rollback_version=v6.1.2` and pinned the same four install surfaces to `6.2.0-rc.5`.",
"The preceding `v6.2.0-rc.4` candidate used the same support-prerelease path with `rollback_version=v6.1.2` and pinned the same four install surfaces to `6.2.0-rc.4`.",
@@ -348,7 +350,7 @@ func TestInstallDockerProofTracksSupportPrereleaseContract(t *testing.T) {
"The preceding `v6.2.0-rc.1` candidate used the same support-prerelease path with `rollback_version=v6.1.2` and pinned the same four install surfaces to `6.2.0-rc.1`.",
"The `v"+version+"` server cut is classified `existing-mobile-build-compatible`.",
"Pulse Mobile 1.0.0 iOS build 12 and Android versionCode 9 candidates, both using runtime version 2, remain distributed to the existing beta cohort through TestFlight and Play open testing.",
"The current beta candidates cover the server contract used by this cut; no additional companion upload or public store rollout is part of RC7.",
"The changes since RC7 do not alter mobile relay payloads, pairing, approvals, or onboarding contracts; no additional companion upload or public store rollout is part of RC8.",
"Authenticode signing through SignPath is the canonical Windows signing backend for the `v6.2.0` line.",
"For the active support prerelease `v"+version+"` cut, the repo-root compose default and `scripts/install-docker.sh` fallback must both pin `"+version+"` until the next governed stable cut moves them forward.",
)