Prepare v6.2.0-rc.2 release

Second candidate on the v6.2.0 line, superseding v6.2.0-rc.1 and still
following stable v6.1.2. This is a hardening and bugfix candidate:
auto-update reliability including in-place migration of already-deployed
update units, PBS backup attribution across multiple Proxmox clusters,
Proxmox installer registration including per-canonical-type bootstrap
grants on combined PVE+PBS hosts, Patrol readiness streaming transport
plus a completed-verdict readiness gate, discovery-policy DNS and SSH
retry churn, explicit per-metric threshold off toggles, request-derived
SSO callback URLs, and the new Entra ID SSO guide. Version pins move to
6.2.0-rc.2 across the repo root, Docker bootstrap defaults, and Helm
metadata per the deployment-installability contract; stable install
pointers remain on v6.1.2 until governed promotion.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
rcourtman
2026-07-28 16:05:56 +01:00
parent 72599bd1ec
commit 16ff5544c1
13 changed files with 341 additions and 67 deletions
+1 -1
View File
@@ -1 +1 @@
6.2.0-rc.1
6.2.0-rc.2
+4 -4
View File
@@ -2,9 +2,9 @@ apiVersion: v2
name: pulse
description: Helm chart for deploying the Pulse hub and optional Docker monitoring agent.
type: application
version: 6.2.0-rc.1
appVersion: "6.2.0-rc.1"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.2.0-rc.1/docs/images/pulse-logo.svg
version: 6.2.0-rc.2
appVersion: "6.2.0-rc.2"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.2.0-rc.2/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.1/docs/KUBERNETES.md
url: https://github.com/rcourtman/Pulse/blob/v6.2.0-rc.2/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.1](https://img.shields.io/badge/Version-6.2.0--rc.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.2.0-rc.1](https://img.shields.io/badge/AppVersion-6.2.0--rc.1-informational?style=flat-square)
![Version: 6.2.0-rc.2](https://img.shields.io/badge/Version-6.2.0--rc.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.2.0-rc.2](https://img.shields.io/badge/AppVersion-6.2.0--rc.2-informational?style=flat-square)
Helm chart for deploying the Pulse hub and optional Docker monitoring agent.
+1 -1
View File
@@ -2,7 +2,7 @@ version: '3.8'
services:
pulse:
image: ${PULSE_IMAGE:-rcourtman/pulse:6.2.0-rc.1}
image: ${PULSE_IMAGE:-rcourtman/pulse:6.2.0-rc.2}
container_name: pulse
restart: unless-stopped
logging:
+4
View File
@@ -7,6 +7,10 @@ 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.2.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.2.md`
For historical v6.2 support release candidate packets, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.1.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.1.md`
+5
View File
@@ -4,6 +4,11 @@ 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.2.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.2.md`
For historical v6.2 support release candidate packets, see:
- `docs/releases/RELEASE_NOTES_v6.2.0-rc.1.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.1.md`
+6 -6
View File
@@ -9229,13 +9229,13 @@
],
"work_claims": [
{
"id": "release-operator-v620rc1-release-gate-single-build-release-promotion-path",
"agent_id": "release-operator-v620rc1",
"summary": "Prepare and publish v6.2.0-rc.1 through the governed exact-SHA promotion workflow",
"id": "release-operator-v620rc2-release-gate-single-build-release-promotion-path",
"agent_id": "release-operator-v620rc2",
"summary": "Prepare and publish v6.2.0-rc.2 through the governed exact-SHA promotion workflow",
"target_id": "v6-product-lane-expansion",
"claimed_at": "2026-07-27T12:45:00Z",
"heartbeat_at": "2026-07-27T12:45:00Z",
"expires_at": "2026-07-27T20:45:00Z",
"claimed_at": "2026-07-28T14:59:51Z",
"heartbeat_at": "2026-07-28T14:59:51Z",
"expires_at": "2026-07-28T22:59:51Z",
"work_item": {
"kind": "release-gate",
"id": "single-build-release-promotion-path"
@@ -1136,28 +1136,34 @@ 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.1` cut sets the repo-root `VERSION`,
The active support prerelease `v6.2.0-rc.2` 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.1` release
fallback, and Helm chart release metadata to the same `6.2.0-rc.2` 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 first
`v6.2.0` candidate introduces the Pulse Pro External Probes feature that runs
assigned availability checks from a connected agent outside the monitored site,
completes the multi-site Proxmox identity-isolation trilogy across connection
consolidation, same-name node aggregation, and the first-poll unclassified-node
window, adds host-agent identity-collapse detection for cloned machine-ids,
restores service availability after a failed unattended update, follows
same-host TrueNAS handshake redirects, and makes Pulse Intelligence outcome
telemetry verified and complete. The exact `main` SHA must pass the integrated
release checks and immutable-candidate build before the single-build workflow
crosses its public mutation boundary.
The `v6.2.0-rc.1` server cut is classified `no-mobile-impact`; no companion
continues to govern the stable line until this candidate is promoted. The second
`v6.2.0` candidate is a hardening and bugfix cut that supersedes `v6.2.0-rc.1`
without dropping anything it carried: it restores unattended-update reliability
including in-place repair of already-deployed update units, corrects PBS backup
attribution across multiple Proxmox clusters, repairs Proxmox installer
registration including per-canonical-type bootstrap grants on combined hosts,
hardens the Patrol readiness streaming transport and gates readiness on a
completed verdict, ends discovery-policy DNS and SSH retry churn, adds explicit
per-metric threshold off toggles, derives SSO callback URLs from the request
that reached Pulse, and documents Entra ID SSO integration. The exact `main` SHA
must pass the integrated release checks and immutable-candidate build before the
single-build workflow crosses its public mutation boundary.
The `v6.2.0-rc.2` server cut is classified `no-mobile-impact`; no companion
build upload is part of this cut. The existing mobile candidate programme
remains separate, and the release packet must not describe a public store
rollout.
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`. 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.
Authenticode signing through SignPath is the canonical Windows signing backend
for the `v6.2.0` line. The owner-approved unsigned-Windows exception is bounded
to `v6.1.0`, `v6.1.1`, and `v6.1.2` and does not extend to any `v6.2.0`
@@ -1307,11 +1313,14 @@ 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.1` cut, the repo-root compose
default and `scripts/install-docker.sh` fallback must both pin `6.2.0-rc.1`
For the active support prerelease `v6.2.0-rc.2` cut, the repo-root compose
default and `scripts/install-docker.sh` fallback must both pin `6.2.0-rc.2`
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.
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 the superseded `6.2.0-rc.1` 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
+143
View File
@@ -0,0 +1,143 @@
# Pulse v6.2.0-rc.2 Release Notes
`v6.2.0-rc.2` is a release candidate for the next Pulse v6 minor line. It
follows stable `v6.1.2` and supersedes `v6.2.0-rc.1`. It is a hardening and
bugfix candidate: it closes the highest-impact defects reported against
v6.1.x — nightly service outages from the unattended updater, missing PBS
backups on multi-cluster estates, broken Proxmox agent installs, and a DNS
query flood — and carries the fixes from an adversarial review pass over every
change since the previous candidate.
## Highlights
- Unattended updates no longer stop Pulse in the night. The update timer fired
twice per day and a failed update left the service down until someone
restarted it; the timer now runs once, failures always restart the service,
and already-deployed installations repair their own stale update units on
the next update cycle.
- PBS backups are attributed to the right guest on estates with more than one
Proxmox cluster. VMIDs that exist on both clusters no longer show "no
backup" or an ancient backup age when the real backups are in the root
namespace (#1639).
- Installing the agent on a Proxmox host from **Settings → Infrastructure**
works again, including combined PVE+PBS hosts, and failures are reported
loudly in the installer output instead of a buried journal warning (#1644).
- The Patrol model readiness check survives reverse proxies with short read
timeouts, reports an interrupted check neutrally instead of blaming the
model, and never renders a proxy's HTML error page into the results (#1640).
- Pulse no longer floods the local resolver. A discovery-policy check that
resolved every cluster node's hostname on every 10-second poll now uses the
shared DNS cache, cutting hundreds of thousands of daily queries to a
handful (#1638).
## Fixed
- **Auto-update reliability.** The generated `pulse-update.timer` carried two
`OnCalendar` lines and attempted two updates per day; it now runs once
daily in the 02:0006:00 window. Asset staging is guarded: a failed copy or
write can no longer install a broken helper or a truncated systemd unit
while reporting success. Existing installations whose hardened update unit
cannot rewrite its own files migrate automatically through a transient
`systemd-run` unit on their next update; if the migration cannot run, the
update itself still completes as before.
- **PBS backup attribution across clusters** (#1639). Snapshot-to-guest
matching now uses each cluster's own view of its PBS storage and a
submission-source learner that only trusts evidence when every candidate
cluster is visible, so shared tokens or synced datastores cannot attribute
one cluster's backups to another. Evidence survives partial poll failures
instead of flapping. Backup-age alerts no longer cross-match a PBS
connection name against a similarly named node.
- **Proxmox agent installation** (#1644). Install tokens minted from the main
installer can now register the PVE or PBS source the installer detects —
one registration per product type, bound to the first presenting hostname,
and only within 24 hours of minting. A refused registration aborts the
install visibly. The API setup script's closing message points at
**Settings → Infrastructure** instead of a page that no longer exists, and
its error branch reports invalid or expired setup tokens instead of
claiming success. The post-install check waits for the agent's first report
instead of warning two seconds in.
- **Patrol readiness checks** (#1640). The readiness endpoint streams
keepalive bytes from the first moment of the run, so proxies with 30-second
read timeouts see a live connection for the full multi-probe evaluation. A
connection cut mid-run is classified as interrupted, keeps the evidence
from completed scenarios, and shows a neutral "check did not complete"
banner; readiness is only reported from a completed verdict, and an
interrupted check never blocks Patrol from running. A crash inside a
provider integration now fails the check instead of the whole process, and
the browser client no longer prints raw non-JSON error bodies into the UI.
- **DNS and SSH churn** (#1638). The cluster endpoint discovery-policy check
resolves hostnames through the shared cached resolver instead of a raw
lookup per node per poll, and the link-local blocklist is enforced against
the same resolver view the connection dial uses. Failed SSH temperature
probes and host-key scans back off with decay instead of retrying every 10
seconds, and the backoff clears when the SSH key changes or settings are
saved.
- **Alert threshold editors** (#1642). Each metric now has an explicit On/Off
toggle in the per-resource override editor, the global defaults row, and
the bulk edit dialog — no more typing -1. Values disabled under older
guidance that said to use 0 render consistently as Off everywhere, turning
a metric back on always produces a working threshold, and the toggle is
reachable by keyboard.
- **SSO callback URLs.** OIDC provider cards show the provider's callback /
redirect URL with a copy button, and all SSO URLs are derived from the
configured public URL or, when none is set, from the request that reached
Pulse — never a `localhost` guess that fails at the identity provider.
- LXC memory metrics fall back to the cluster-resources listing again when
per-guest RRD data is unavailable, restoring memory readings lost on some
PVE configurations.
- Agent command execution honors the configuration gate at channel admission,
closing a window where a disabled command channel could still admit an
agent.
## Changed
- Platform table metric bars are colored from the configured alert thresholds
rather than fixed cutoffs.
- The unused `autoUpdateTime` and `autoUpdateCheckInterval` settings were
removed from the system settings API and UI; they were stored but never
drove the update schedule. Existing configurations containing them load
unchanged, and API clients that still send them are accepted.
## Docs
- New Microsoft Entra ID (Azure AD) SSO integration guide covering app
registration, group claims by Object ID, role mapping, the `AADSTS650053`
scope pitfall, and group-overage protection (#1635), contributed by
@drgimpfen and expanded.
## Upgrade Notes
Use the normal v6 install or update flow for `v6.2.0-rc.2` only when you are
comfortable testing an RC. The rollback target is `v6.1.2`.
The exact rollback reinstall command is:
```bash
./scripts/install.sh --version v6.1.2
```
Installations already running the hardened unattended-update unit repair their
own timer and helper on the next update cycle, so no manual step is needed to
pick up the once-daily schedule. If that in-place migration cannot run, the
update itself still completes and the repair is retried on the following
cycle.
Everything `v6.2.0-rc.1` introduced is still in this candidate, including
External Probes for Pulse Pro. External Probes need the `external_probe` Pulse
Pro entitlement on the Pulse server, and ICMP probes use the system `ping`
binary, so a probe host running in a container or a hardened service unit needs
`CAP_NET_RAW`; prefer TCP or HTTP checks there, or grant the capability. See
`docs/UNIFIED_AGENT.md`.
This server candidate has no mobile compatibility change and does not require a
companion build upload. 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: the owner-approved exception was bounded to
`v6.1.0`, `v6.1.1`, and `v6.1.2`, and 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.
+109
View File
@@ -0,0 +1,109 @@
# Pulse v6.2.0-rc.2
_This changelog describes the changes since `v6.2.0-rc.1`.
`v6.2.0-rc.2` remains a prerelease and rolls back to stable `v6.1.2`._
## Added
- Explicit per-metric off toggles in the per-resource override editor, the
global defaults row, and the bulk edit dialog, replacing the `-1` sentinel
operators had to type by hand (#1642).
- OIDC provider cards show the provider's callback / redirect URL with a copy
button so it can be registered at the identity provider without guesswork.
- Recorded PVE RRD fixtures and decode-alignment tests pin the guest RRD
decode path against real Proxmox payloads.
## Changed
- Platform table metric bars are colored from the configured alert thresholds
rather than fixed cutoffs.
- SSO callback, SP metadata, and ACS URLs are derived from the configured
public URL or, when none is set, from the request that reached Pulse,
instead of a hardcoded `localhost` base that fails at the identity provider.
When neither source resolves a host the fields are omitted and the panel
points at the public URL setting.
- The unused `autoUpdateTime` and `autoUpdateCheckInterval` system settings
were removed from the settings API and UI; stored values load unchanged and
API clients that still send them are accepted.
- Dead cache-aware RRD fields were removed from the guest RRD path.
## Fixed
- The generated `pulse-update.timer` carried two `OnCalendar` lines and
attempted two updates per day; it now runs once daily in the 02:00-06:00
window.
- Auto-update asset staging is guarded, so a failed copy or write can no
longer install a broken helper or a truncated systemd unit while reporting
success.
- Deployed installations whose hardened update unit cannot rewrite its own
files migrate through a transient `systemd-run` unit on the next update
cycle, and the update still completes when that migration cannot run.
- PBS backup attribution for VMIDs shared across clusters uses each cluster's
own view of its PBS storage, so a guest no longer shows "no backup" or a
stale backup age when its real backups sit in the root namespace (#1639).
- PBS submission-source learning only trusts evidence when every candidate
cluster is visible, survives partial poll failures instead of flapping, and
backup-age alerts no longer cross-match a PBS connection name against a
similarly named node (#1639).
- Proxmox host-token installs register the source the installer detects, with
one registration per canonical product type, a shared first-use hostname
bind, and the 24-hour mint-age bound, so combined PVE and PBS hosts complete
both legs from a single install token (#1644).
- A refused Proxmox registration aborts the install visibly, the API setup
script points at Settings then Infrastructure instead of a page that no
longer exists, its error branch reports invalid or expired setup tokens, and
the post-install check waits for the agent's first report (#1644).
- The Patrol readiness endpoint commits its response header and streams
keepalive bytes from the start of the run, so proxies with short read
timeouts keep the connection open for the full multi-probe evaluation
(#1640).
- A Patrol readiness run cut mid-flight is classified as interrupted, keeps
evidence from completed scenarios, and renders a neutral banner instead of
blaming the model (#1640).
- Patrol readiness is reported only from a completed overall verdict, an
unassessed snapshot falls back to the base-config classifier capped at a
warning, and an interrupted check never blocks Patrol from running (#1640).
- A panic inside provider streaming or validation is recovered into an
ordinary readiness result carrying an internal-error cause instead of
taking the process down, and the browser client no longer renders raw
non-JSON error bodies (#1640).
- The cluster endpoint discovery-policy check resolves hostnames through the
shared cached resolver instead of a raw lookup per node per poll, and the
link-local blocklist is enforced against the same resolver view the
connection dial uses (#1638).
- Failed SSH temperature probes and host-key scans back off with decay instead
of retrying every poll cycle, and the backoff clears when the SSH key
changes or system settings are saved (#1638).
- Thresholds disabled under the older guidance that said to use 0 render
consistently as off, turning a metric back on always produces a working
threshold, and the toggle is reachable by keyboard (#1642).
- LXC memory metrics fall back to the cluster-resources listing when per-guest
RRD data is unavailable, restoring memory readings lost on some PVE
configurations.
- Agent command execution honors the configuration gate at channel admission,
closing a window where a disabled command channel could still admit an
agent.
## Docs
- New Microsoft Entra ID (Azure AD) SSO integration guide covering app
registration, group claims by Object ID, role mapping, the `AADSTS650053`
scope pitfall, and group-overage protection (#1635).
## Release Metadata
- Version: `v6.2.0-rc.2`
- Previous candidate: `v6.2.0-rc.1`
- 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; this candidate publishes Windows agents under the standing
prerelease path with exact-SHA, checksum, and detached-signature
verification
- Mobile decision: `no-mobile-impact`; no companion build upload or public
store rollout is part of this candidate
+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.1"
CANONICAL_DEFAULT_PULSE_VERSION="6.2.0-rc.2"
resolve_default_pulse_version() {
if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then
@@ -406,25 +406,26 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
"`v"+version+"` is a release candidate",
"## Highlights",
"stable `v"+previous+"`",
"External Probes (Pulse Pro)",
"run from a connected Pulse agent outside the monitored site",
"assigned to a connected Pulse agent through the new **Run from** control",
"travel over the signed agent configuration channel",
"per-target source attribution",
"Only the currently assigned agent's results are accepted",
"an assigned check never also runs locally",
"surface as indeterminate",
"resumes local execution automatically if the entitlement lapses",
"Local availability checks remain free and unchanged in every edition",
"cloned `/etc/machine-id`",
"`availability_probe_targets`",
"`availability_probe_agents`",
"disclosed in `docs/PRIVACY.md`",
"Contradicting captured TLS certificate fingerprints now veto the merge",
"same TLS identity doctrine as connection consolidation",
"positive same-machine evidence before it can fold into a named cluster",
"no longer leaves the service down",
"same-host HTTP-to-HTTPS redirect",
"supersedes `v6.2.0-rc.1`",
"Unattended updates no longer stop Pulse in the night",
"the timer now runs once, failures always restart the service",
"already-deployed installations repair their own stale update units",
"PBS backups are attributed to the right guest on estates with more than one Proxmox cluster",
"combined PVE+PBS hosts",
"survives reverse proxies with short read timeouts",
"never renders a proxy's HTML error page into the results",
"now uses the shared DNS cache",
"`pulse-update.timer`",
"submission-source learner that only trusts evidence when every candidate cluster is visible",
"one registration per product type, bound to the first presenting hostname",
"streams keepalive bytes from the first moment of the run",
"A connection cut mid-run is classified as interrupted",
"an interrupted check never blocks Patrol from running",
"resolves hostnames through the shared cached resolver",
"back off with decay",
"explicit On/Off toggle",
"never a `localhost` guess that fails at the identity provider",
"Microsoft Entra ID (Azure AD) SSO integration guide",
"`CAP_NET_RAW`",
"no mobile compatibility change",
"No public mobile-store rollout",
@@ -434,27 +435,29 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
)
assertFileContainsAllNormalized(t, changelogPath,
"Version: `v"+version+"`",
"Previous candidate: `v6.2.0-rc.1`",
"Previous stable: `v"+previous+"`",
"Rollback target: `v"+previous+"`",
"Promotion path: exact-SHA single-build release candidate from `main`",
"External Probes (Pulse Pro)",
"gated by the `external_probe` entitlement at assignment time",
"delivered to their agent over the signed agent-config channel",
"skipped by the local poller",
"accepted only from the currently assigned agent",
"derive to indeterminate at read time when reports go stale",
"Host-agent identity-collapse detection for cloned `/etc/machine-id`",
"Telemetry counts `availability_probe_targets` and `availability_probe_agents`",
"Availability probe execution moved into a shared package",
"`postcss` build tooling is updated to `8.5.23`",
"remain isolated when TLS identity evidence contradicts",
"closing the first-poll window where an unclassified node could be folded into another site's cluster slot",
"Failed unattended updates restart a previously active Pulse service",
"follow safe same-host HTTPS redirects",
"This changelog describes the changes since `v6.2.0-rc.1`",
"Explicit per-metric off toggles in the per-resource override editor",
"OIDC provider cards show the provider's callback / redirect URL with a copy button",
"carried two `OnCalendar` lines",
"Auto-update asset staging is guarded",
"migrate through a transient `systemd-run` unit on the next update cycle",
"PBS backup attribution for VMIDs shared across clusters",
"one registration per canonical product type",
"The Patrol readiness endpoint commits its response header and streams keepalive bytes",
"Patrol readiness is reported only from a completed overall verdict",
"resolves hostnames through the shared cached resolver",
"back off with decay instead of retrying every poll cycle",
"LXC memory metrics fall back to the cluster-resources listing",
"Agent command execution honors the configuration gate at channel admission",
"derived from the configured public URL or, when none is set, from the request that reached Pulse",
"Microsoft Entra ID (Azure AD) SSO integration guide",
"Windows signing decision: Authenticode through SignPath is the mandatory signing backend",
"Mobile decision: `no-mobile-impact`",
"no companion build upload or public store rollout",
"the license-server entitlement catalog carrying `external_probe` was deployed on 2026-07-27, before this cut",
)
assertFileContainsAll(t, repoFile("docs", "RELEASE_NOTES.md"),
"docs/releases/RELEASE_NOTES_v"+version+".md",
@@ -128,7 +128,7 @@ func TestPreviousStableForPrereleaseVersionCrossesMinorBoundaries(t *testing.T)
want string
}{
{version: "6.0.5-rc.4", want: "6.0.4"},
{version: "6.2.0-rc.1", want: "6.1.2"},
{version: "6.2.0-rc.2", want: "6.1.2"},
}
for _, test := range tests {
@@ -336,7 +336,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.",
"introduces the Pulse Pro External Probes feature that runs assigned availability checks from a connected agent outside the monitored site, completes the multi-site Proxmox identity-isolation trilogy across connection consolidation, same-name node aggregation, and the first-poll unclassified-node window, adds host-agent identity-collapse detection for cloned machine-ids, restores service availability after a failed unattended update, follows same-host TrueNAS handshake redirects, and makes Pulse Intelligence outcome telemetry verified and complete",
"is a hardening and bugfix cut that supersedes `v6.2.0-rc.1` without dropping anything it carried: it restores unattended-update reliability including in-place repair of already-deployed update units, corrects PBS backup attribution across multiple Proxmox clusters, repairs Proxmox installer registration including per-canonical-type bootstrap grants on combined hosts, hardens the Patrol readiness streaming transport and gates readiness on a completed verdict, ends discovery-policy DNS and SSH retry churn, adds explicit per-metric threshold off toggles, derives SSO callback URLs from the request that reached Pulse, and documents Entra ID SSO integration",
"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 `no-mobile-impact`; no companion build upload is part of this cut. The existing mobile candidate programme remains separate, and the release packet must not describe a public store rollout.",
"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.",