Revert "Prepare v6.2.0-rc.9 release"

Restore RC8 release metadata and remove the unpublished RC9 packet after cancelling its release workflow.
This commit is contained in:
rcourtman
2026-08-05 22:18:52 +01:00
parent c16a9901b4
commit f5c492357e
13 changed files with 54 additions and 190 deletions
+1 -1
View File
@@ -1 +1 @@
6.2.0-rc.9
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.9
appVersion: "6.2.0-rc.9"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.2.0-rc.9/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.9/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.9](https://img.shields.io/badge/Version-6.2.0--rc.9-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.2.0-rc.9](https://img.shields.io/badge/AppVersion-6.2.0--rc.9-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.9}
image: ${PULSE_IMAGE:-rcourtman/pulse:6.2.0-rc.8}
container_name: pulse
restart: unless-stopped
logging:
+2 -4
View File
@@ -7,12 +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.9.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.9.md`
For historical v6.2 support release candidate packets, see:
- `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`
+2 -4
View File
@@ -4,13 +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.9.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.9.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.8.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.8.md`
- `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`
@@ -1169,21 +1169,21 @@ 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.9` 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.9` 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 ninth
`v6.2.0` candidate is an alert-delivery, lifecycle-safety, and read-path
efficiency cut that supersedes `v6.2.0-rc.8`: it restores notification
transport metadata and state continuity, honors disabled grouping, closes
tenant resource stores, completes guest metadata writes before shutdown, and
shares generation-bound resource views. The exact `main` SHA must pass the
integrated release checks and immutable-candidate build before the single-build
workflow crosses its public mutation boundary.
continues to govern the stable line until this candidate is promoted. The
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
the complete frontend unit suite, frontend type-checking, and a deterministic
render smoke against the verified frontend bundle. The smoke must render
@@ -1194,18 +1194,13 @@ 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.9` 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 changes since RC8 do not alter mobile relay payloads, pairing,
approvals, authentication, or onboarding contracts; no additional companion
upload or public store rollout is part of RC9.
The preceding `v6.2.0-rc.8` 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.8`. 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.
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
@@ -1390,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.9` cut, the repo-root compose
default and `scripts/install-docker.sh` fallback must both pin `6.2.0-rc.9`
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 RC9 packet records `d7f8e98912f89b1636066b52e401a32c7245417e` as
the code-backed validation-risk head. That head includes the post-RC8
notification-delivery, tenant resource lifecycle, guest metadata shutdown, and
resource-read efficiency changes. The CI guardrail alignment and metadata-only
release-preparation commits may be the workflow dispatch head because they do
not change that 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
@@ -1,78 +0,0 @@
# Pulse v6.2.0-rc.9 Release Notes
`v6.2.0-rc.9` is a release candidate for the next Pulse v6 minor line. It
follows stable `v6.1.2` and supersedes `v6.2.0-rc.8`. This candidate focuses on
alert-notification correctness, orderly tenant and monitor shutdown, and lower
allocation pressure on frequently read resource views.
## Highlights
- Live ntfy alert delivery now preserves the configured title, priority, and
tags, matching the notification test path.
- Saving notification settings no longer drops provider incidents or resets
acknowledgement state, and disabling grouping now delivers queued alerts
individually instead of retaining stale grouped behavior.
- Grouped provider notifications describe every alert in the group rather than
presenting one alert as though it were the whole incident set.
- Tenant offboarding and server shutdown now release per-tenant resource-store
handles, while guest metadata writes are allowed to finish before the monitor
stops.
- Resource APIs reuse per-generation raw and presentation lists, and mock-mode
consumers reuse a versioned unified view between fixture ticks.
## Fixed
- Restored ntfy metadata on the live firing path and kept live/test delivery
semantics aligned.
- Preserved non-metric provider incidents and acknowledged alert state across
notification configuration saves.
- Honored `grouping.enabled: false`, flushed pending alerts separately, and
represented all grouped alerts in provider payloads.
- Closed tenant-scoped resource stores during offboarding, replacement, and
shutdown without leaking handles or racing active readers.
- Waited for guest metadata persistence before monitor teardown so accepted
writes are not abandoned during shutdown.
- Replaced repeated registry and mock-fixture rebuilding with generation-bound
shared read views while keeping request-local decoration isolated.
## 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.
- Notification regression suites cover live ntfy metadata, configuration-save
incident continuity, acknowledgement preservation, disabled grouping, and
multi-alert provider payloads.
- Resource and monitoring regression suites cover per-generation list sharing,
mock-view caching, orderly metadata completion, and resource-store cleanup.
## Upgrade Notes
Use the normal v6 install or update flow for `v6.2.0-rc.9` 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 RC8 do not alter mobile relay payloads,
pairing, approvals, authentication, 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.
-44
View File
@@ -1,44 +0,0 @@
# Pulse v6.2.0-rc.9
_This changelog describes the changes since `v6.2.0-rc.8`.
`v6.2.0-rc.9` remains a prerelease and rolls back to stable `v6.1.2`._
## Improved
- Shared per-generation resource lists across API requests while preserving
request-local decoration and canonical presentation behavior.
- Cached mock unified views against fixture versions instead of rebuilding
registries for every read between ticks.
- Released per-tenant resource-store handles during offboarding, replacement,
and shutdown.
- Let accepted guest metadata writes complete before monitor shutdown.
## Fixed
- Preserved configured ntfy title, priority, and tags on live alert delivery.
- Kept provider incidents and acknowledged state intact across notification
configuration saves.
- Honored disabled alert grouping and flushed queued alerts individually.
- Included every grouped alert in provider notification payloads.
- Replaced two non-discriminating audit telemetry fields with meaningful,
privacy-preserving signals.
## Release Metadata
- Version: `v6.2.0-rc.9`
- Previous candidate: `v6.2.0-rc.8`
- 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 RC8 do not alter mobile relay payloads, pairing, approvals,
authentication, or onboarding contracts. No public store rollout is part of
this candidate
+2 -4
View File
@@ -4,13 +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.9.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.9.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.8.md`
- `docs/releases/V6_CHANGELOG_v6.2.0-rc.8.md`
- `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`
+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.9"
CANONICAL_DEFAULT_PULSE_VERSION="6.2.0-rc.8"
resolve_default_pulse_version() {
if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then
@@ -492,14 +492,14 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
"`v"+version+"` is a release candidate",
"## Highlights",
"stable `v"+previous+"`",
"supersedes `v6.2.0-rc.8`",
"Live ntfy alert delivery now preserves the configured title, priority, and tags",
"Saving notification settings no longer drops provider incidents or resets acknowledgement state",
"disabling grouping now delivers queued alerts individually",
"Grouped provider notifications describe every alert in the group",
"Tenant offboarding and server shutdown now release per-tenant resource-store handles",
"Resource APIs reuse per-generation raw and presentation lists",
"Notification regression suites cover live ntfy metadata",
"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",
@@ -509,17 +509,17 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) {
)
assertFileContainsAllNormalized(t, changelogPath,
"Version: `v"+version+"`",
"Previous candidate: `v6.2.0-rc.8`",
"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.8`",
"Shared per-generation resource lists across API requests",
"Cached mock unified views against fixture versions",
"Released per-tenant resource-store handles",
"Preserved configured ntfy title, priority, and tags",
"Kept provider incidents and acknowledged state intact",
"Honored disabled alert grouping",
"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",
@@ -558,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 changes since RC8 do not alter mobile relay payloads, pairing, approvals, authentication, or onboarding contracts; no additional companion upload or public store rollout is part of RC9.",
"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.",
)
}
@@ -133,7 +133,6 @@ func TestPreviousStableForPrereleaseVersionCrossesMinorBoundaries(t *testing.T)
{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"},
{version: "6.2.0-rc.9", want: "6.1.2"},
}
for _, test := range tests {
@@ -341,8 +340,7 @@ 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 an alert-delivery, lifecycle-safety, and read-path efficiency cut that supersedes `v6.2.0-rc.8`: it restores notification transport metadata and state continuity, honors disabled grouping, closes tenant resource stores, completes guest metadata writes before shutdown, and shares generation-bound resource views",
"The preceding `v6.2.0-rc.8` 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.8`.",
"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`.",
@@ -352,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 changes since RC8 do not alter mobile relay payloads, pairing, approvals, authentication, or onboarding contracts; no additional companion upload or public store rollout is part of RC9.",
"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.",
)