chore(release): prepare repaired v6.4.4-beta.2

Freeze the protected notification recovery repair as the next beta checkpoint and align version pins, tester notes, rollback guidance, and the zero-capture visual plan.

Contract-Neutral: release preparation changes version and delivery metadata only; product runtime and public API behavior remain the reviewed release-line checkpoint.
Change-source: pulse-maintainer
(cherry picked from commit 9a1f44d7c8a3e7757f5f3f3a1f8016997f04fc72)
This commit is contained in:
pulse-triage[bot]
2026-09-08 14:15:05 +01:00
parent 65783a2ff3
commit c8f19c1dbc
12 changed files with 310 additions and 35 deletions
+1 -1
View File
@@ -1 +1 @@
6.4.4-beta.1
6.4.4-beta.2
+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.4.4-beta.1
appVersion: "6.4.4-beta.1"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.4-beta.1/docs/images/pulse-logo.svg
version: 6.4.4-beta.2
appVersion: "6.4.4-beta.2"
icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.4-beta.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.4.4-beta.1/docs/KUBERNETES.md
url: https://github.com/rcourtman/Pulse/blob/v6.4.4-beta.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.4.4-beta.1](https://img.shields.io/badge/Version-6.4.4--beta.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.4-beta.1](https://img.shields.io/badge/AppVersion-6.4.4--beta.1-informational?style=flat-square)
![Version: 6.4.4-beta.2](https://img.shields.io/badge/Version-6.4.4--beta.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.4-beta.2](https://img.shields.io/badge/AppVersion-6.4.4--beta.2-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.4.4-beta.1}
image: ${PULSE_IMAGE:-rcourtman/pulse:6.4.4-beta.2}
container_name: pulse
restart: unless-stopped
logging:
+2 -2
View File
@@ -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 beta packet, see:
- `docs/releases/RELEASE_NOTES_v6.4.4-beta.1.md`
- `docs/releases/V6_CHANGELOG_v6.4.4-beta.1.md`
- `docs/releases/RELEASE_NOTES_v6.4.4-beta.2.md`
- `docs/releases/V6_CHANGELOG_v6.4.4-beta.2.md`
For the current stable v6 packet, see:
- `docs/releases/RELEASE_NOTES_v6.4.1.md`
+2 -2
View File
@@ -4,8 +4,8 @@ This guide covers practical upgrade steps for existing Pulse installs moving to
For the current v6 beta packet, see:
- `docs/releases/RELEASE_NOTES_v6.4.4-beta.1.md`
- `docs/releases/V6_CHANGELOG_v6.4.4-beta.1.md`
- `docs/releases/RELEASE_NOTES_v6.4.4-beta.2.md`
- `docs/releases/V6_CHANGELOG_v6.4.4-beta.2.md`
For the current stable v6 packet, see:
@@ -2635,24 +2635,26 @@ verification without Authenticode. Stable `v6.4.3` also skips SignPath under the
standing unavailable policy from `v6.3.2` onward, with public Unknown Publisher
disclosure and the existing signed integrity controls.
The active prerelease `v6.4.4-beta.1` cut sets the repo-root `VERSION`, repo-root
The active prerelease `v6.4.4-beta.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.4.4-beta.1` release version. It
follows stable `v6.4.1` and opens the published `v6.4.4` candidate line. It is a
beta maturity reset above `v6.4.3-rc.1` and is not represented as an RC that
can become stable unchanged. This prerelease keeps `rollback_version=v6.4.1`,
publishes a versioned public GitHub prerelease plus versioned Docker and Helm
artifacts, and does not move stable/latest install pointers or stable semver
aliases. It carries the unpublished `v6.4.2` packet and published RC1
foundation together with bounded alert-finality, diagnosis-ordering,
restart-persistence, host-observation, update-verification, identity,
reconnect, and accessibility repairs from the protected release line.
Helm chart release metadata to the same `6.4.4-beta.2` release version. It
follows `v6.4.4-beta.1` on the published `v6.4.4` candidate line. It remains
beta because installed recurrence, ordinary destination delivery, and retained
history across restart still require user testing. This prerelease keeps
`rollback_version=v6.4.1`, publishes a versioned public GitHub prerelease plus
versioned Docker and Helm artifacts, and does not move stable/latest install
pointers or stable semver aliases. It retains beta.1 and adds exact lifecycle
occurrence matching plus bounded canonical projection so delayed historical
replay cannot reopen a resolved incident or mutate a newer recurrence. It also
preserves exponential webhook pacing after a response-specific zero retry hint
and keeps queue statistics, dead-letter inspection, Retry, and Dismiss bound to
the active notification queue after runtime replacement.
No governed mobile-facing path changed from `v6.4.1`, so the release decision
is `no-mobile-impact`; no companion upload or public mobile-store rollout is
part of this candidate. The prerelease Windows path retains exact-SHA,
checksum, and detached-signature verification without Authenticode. Stable
`v6.4.4` also skips SignPath under the standing unavailable policy from
No governed mobile-facing path changed from `v6.4.1`, so the release
decision is `no-mobile-impact`; no companion upload or public mobile-store
rollout is part of this candidate. The prerelease Windows path retains
exact-SHA, checksum, and detached-signature verification without Authenticode.
Stable `v6.4.4` also skips SignPath under the standing unavailable policy from
`v6.3.2` onward, with public Unknown Publisher disclosure and the existing
signed integrity controls. Exact-candidate validation must still qualify the
public artifacts, install, upgrade, rollback, and private paid-runtime packet;
@@ -3111,11 +3113,10 @@ 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.4-beta.1` cut, the repo-root compose default and
`scripts/install-docker.sh` fallback must both pin `6.4.4-beta.1` until the next
governed stable cut moves them forward. The published `v6.4.3-rc.1` cut pinned
`6.4.3-rc.1`, and the tagged but unpublished `v6.4.2` cut pinned `6.4.2`, until
this beta moved them forward. The stable promotion guard remains in force and
For the active prerelease `v6.4.4-beta.2` cut, the repo-root compose default and
`scripts/install-docker.sh` fallback must both pin `6.4.4-beta.2` until the next
governed stable cut moves them forward. The published `v6.4.4-beta.1` cut
pinned `6.4.4-beta.1` until this beta moved them forward. The stable promotion guard remains in force and
rejects leftover prerelease defaults. 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
@@ -0,0 +1,171 @@
# Pulse v6.4.4-beta.2 Release Notes
This second beta is a bounded alert-history and delivery-recovery checkpoint
for Preview-channel testers. It supersedes `v6.4.4-beta.1`, carries every
change from the `v6.4.2` packet that was tagged but never published, adds exact
occurrence boundaries for delayed lifecycle replay, and keeps retained-delivery
controls connected to the active notification queue after a runtime reload. It
is not an RC or stable release.
## What's improved
- **Recurring incidents keep their own history** - Delayed firing,
resolution, or acknowledgement replay for an older occurrence cannot reopen
it, close a newer recurrence, or merge both occurrences into one timeline.
- **Resolved alerts stay resolved** - Pending, failed, and dead-lettered firing
notifications cannot be revived by a later retry after the incident resolves.
Disabled destinations are cancelled instead of being reported as delivered.
- **Retained-delivery recovery survives reloads** - Queue statistics,
dead-letter details, **Retry retained deliveries**, and **Dismiss retained
failures** now follow the active notification queue after runtime replacement
instead of retaining a stopped queue and returning HTTP 503.
- **Webhook retries keep safe pacing** - A response-specific `Retry-After: 0`
can permit one immediate retry without erasing the exponential delay for later
unhinted 429 or 503 responses.
- **Delivery warnings show the newest truth** - Concurrent timer, retry,
dismissal, and refresh work can no longer let an older healthy snapshot hide
a newer delivery failure or resurrect a warning that was just cleared.
- **Delivery diagnosis is more actionable** - Failure status and reason
ordering remain current after retries and refreshes, unavailable queue health
is visible, and operators are directed to the affected notification settings.
- **Notification diagnostics keep credentials private** - Webhook userinfo,
Slack and Discord paths, Telegram bot tokens, encoded query credentials, and
ntfy transport URLs are masked while useful status and destination context is
retained.
- **Recovery requires real observations** - Storage and PBS incidents do not
clear merely because a metric or provider sample is absent. Incident identity
and history survive configuration reloads and restarts until measured recovery.
- **Provider alert semantics are more accurate** - TrueNAS CORE 12 endpoints
are accepted, completed replication is recognised, informational events stay
out of acknowledgement work, NOTICE events remain actionable, and critical
transitions can notify correctly.
- **PBS behavior is restart-safe** - Capacity, task, partial-metric, and webhook
paths remain bound to actual observations across restart and recurrence.
- **Host telemetry is more dependable** - Host and Docker CPU collectors use
separate sampling baselines, disk collection follows the agent mount
namespace, and pool-only or empty Unraid layouts no longer manufacture parity
warnings.
- **Updates fail more truthfully** - Docker updates require independent success
evidence, oversized GitHub release metadata falls back to verified assets,
and portable installer state retains correct ownership.
- **Identity and reconnect behavior is safer** - Same-name systems stay
separate across Proxmox providers, delayed browser startup offers a truthful
retry path, and infrastructure edits stay mounted during background polling.
- **Discovery repairs stay repaired** - Availability-suggestion backfill no
longer writes an old discovery snapshot over a concurrent manual refresh,
drops the repaired URL or engine version, or resurrects a deleted record.
- **Navigation and settings are more accessible** - The skip link is first in
keyboard order, badges remain readable, landmarks are distinct, and settings,
Patrol, mobile navigation, and compact controls have stronger focus and
screen-reader behavior.
- **Current OpenAI models are handled correctly** - GPT-5-family requests use
the supported completion-token parameter and can learn the required parameter
from bounded API responses.
- **The RC1 reliability fixes remain included** - Windows agent delivery is
restored, Large Availability estates scan faster, Slow starts are recoverable,
and Disk I/O totals are more accurate.
- **The safer operational foundation remains included** - Resource identity,
safer agent lifecycle operations, canonical health APIs, bounded privileged
actions, and response size limits remain in this checkpoint.
## Known issues
- The recurring-occurrence repair has focused race-enabled and protected-line
CI evidence, but has not yet been verified on an installed beta through a
restart and ordinary notification destination.
- Open issue [#1761](https://github.com/rcourtman/Pulse/issues/1761) has a
7 September stable `v6.4.1` report where both retained-failure actions returned
HTTP 503 while alert emails continued. This beta includes the source repair
for the reproduced stopped-queue ownership path, with focused race-enabled
tests and protected-line CI, but it has not been verified on that reporter's
installation. Do not delete queue or alert files as a workaround. Keep the
rollback pin and report sanitized action results.
- A 7 September comment on [#1812](https://github.com/rcourtman/Pulse/issues/1812)
says a `v6.4.1` user saw a retained-delivery warning but could not find recovery
controls or delivery-attempt details from the incident timeline.
- This beta includes Overview controls and the Notifications activity view, but
installed discoverability is unverified. Broader task-timeline and orchestration
requests are outside this checkpoint.
- Open issue [#1966](https://github.com/rcourtman/Pulse/issues/1966) reports
50-66 GB/day of Pulse process writes on one idle `v6.4.1` LXC and repeated
incident IDs sharing one occurrence start.
- This beta has alert-lifecycle repairs but does not claim reduced aggregate
writes, migration of old duplicates, or resolution on that installation. On
flash-constrained systems, monitor write volume and keep the rollback pin ready.
- An advisory paired CI comparison measured UUID route-segment normalization
at 62.50 ns/op versus 51.64 ns/op, a 21.04% increase with no allocations.
Local comparisons measured roughly 9-11%.
- No end-user latency or throughput regression is demonstrated. Candidate-only
benchmarking passed, but does not erase the paired result. This uncertainty is
accepted for beta observation and needs a new disposition before RC.
- Permanent SMTP authentication, configuration, or rejection errors can still
consume the inner retry budget before queue handling. This beta improves
diagnosis and finality but excludes the separate main-line classification fix.
- Open issue [#1913](https://github.com/rcourtman/Pulse/issues/1913) reports
an inaccessible GUI after changing a Docker deployment from v5.1.35 to stable
v6.4.1.
- The report does not yet separate direct access, published ports, reverse-proxy
behavior, WebSocket routing, or running image identity. Keep the prior image
pin available and include those details when reporting results.
- This server beta does not require a companion mobile release. It does
not change Relay pairing, native push payloads, approvals, or onboarding.
- Ordinary off-LAN receipt, terminated-process replay, Doze, expiry, and
failed-WAN cases are not claimed as qualified by this beta.
- Historical notification rows are not rewritten or blindly replayed. The
fixes govern new processing and operator retries.
## Before you upgrade
- This is an opt-in Preview-channel beta, not a stable release. Back up the
Pulse data directory and keep the stable rollback pin available.
- The `v6.4.2` tag had no GitHub release and was not shipped. This beta
carries its administrator-boundary and security changes with published rc.1
and later alert fixes. The preceding stable release remains `v6.4.1`.
- On an SSO-only deployment, map at least one trusted IdP group to the built-in
`admin` role before upgrading so an intended administrator retains access.
- For least-privilege rootless Docker or Podman monitoring, expose exactly one
local collector-owned runtime socket. Ambiguous or invalid sockets may fall
back to summary-only monitoring.
- Windows Unified Agent binaries are not Authenticode-signed while SignPath
remains unavailable and may show an Unknown Publisher warning. Verify
downloads with published checksums and detached signatures.
- The rollback target is stable `v6.4.1`. For systemd and Proxmox LXC, run
`sudo /bin/update --version v6.4.1`.
- For Docker Compose rollback, pin `rcourtman/pulse:6.4.1` and recreate the
container.
- For Helm rollback, run `helm upgrade --install pulse
oci://ghcr.io/rcourtman/pulse-chart/pulse --version 6.4.1` with the values
used by the current installation.
After upgrading, please test:
- Trigger, resolve, and then retrigger the same alert. Restart Pulse or replay
retained lifecycle work between transitions. Confirm the old occurrence stays
resolved with its own acknowledgement history while the recurrence remains a
separate current incident.
- Exercise a threshold alert through firing, a missing observation, Pulse
restart, genuine recovery, and recurrence. Confirm only the appropriate
firing and recovery notifications arrive.
- With a controlled webhook destination, return `Retry-After: 0` once and then
an unhinted 429 or 503. Confirm the immediate override applies only once and
the next retry resumes exponential pacing instead of hammering the endpoint.
- On a backed-up installation with retained delivery failures, try **Retry
retained deliveries** and **Dismiss retained failures**. Confirm each succeeds
without deleting queue or alert files and delivery history remains.
- Reload notification configuration or exercise a normal runtime restart before
inspecting queue statistics, dead-letter details, Retry, and Dismiss. Confirm
each operation follows the active queue rather than returning HTTP 503.
- Confirm the retained-delivery warning reconciles while another health refresh
is in flight. If either action fails, report the HTTP status and sanitized logs.
- Retest PBS capacity and task transitions, TrueNAS replication and NOTICE
events, host plus Docker CPU readings, and pool-only Unraid arrays.
- Run a manual service-discovery refresh while availability suggestions are
backfilled. Confirm a repaired service keeps its type, name, URL, and engine
version after restart.
- Inspect sanitized notification failures. Confirm recognised secrets are absent
while the remaining error context is actionable.
- Upgrade a backed-up `v6.4.1` installation, including Docker behind a reverse
proxy, and verify direct GUI access, proxied access, WebSocket reconnect, and
`/api/version`.
- On high-request-rate installations, compare API latency and CPU with your
previous pin and report any material change.
@@ -0,0 +1,5 @@
{
"schema_version": 1,
"decision": "No screenshots are proposed because this checkpoint changes lifecycle replay, incident-history occurrence boundaries, and backend ownership of retained-delivery controls without changing visual presentation. Static images cannot prove delayed replay, reload behavior, queue ownership, acknowledgement isolation, or ordinary destination delivery.",
"captures": []
}
@@ -0,0 +1,98 @@
# Pulse v6.4.4-beta.2
This changelog describes the changes since `v6.4.4-beta.1`. It carries the complete `v6.4.2` change set from that
published beta and `v6.4.3-rc.1` foundation,
then adds the bounded recurring-incident lifecycle repairs below.
## Alert delivery and lifecycle
- Exact occurrence start times now bind delayed lifecycle replay to the
intended incident. Historical resolution and acknowledgement cannot mutate a
later recurrence, and canonical projection stops at the next retained start.
- Replayed firing and resolution transitions are idempotent across retained
checkpoints; genuine recurrences keep distinct shells and timelines.
- Resolved incidents cannot be revived by later retry work, and destinations
disabled before dispatch are recorded as cancelled rather than delivered.
- Queue statistics, dead-letter inspection, Retry, and Dismiss follow the live
notification queue after runtime replacement instead of retaining a stopped
queue owner and returning HTTP 503.
- A webhook `Retry-After` value overrides only its response-specific wait; a
zero hint no longer erases exponential pacing for later unhinted failures.
- Delivery diagnosis preserves the newest failure, dismissal, or unavailable
state when timer, retry, and manual refresh work overlap.
- Webhook, Slack, Discord, Telegram, encoded-query, and ntfy diagnostics mask
recognised credentials without discarding useful failure context.
- Storage and PBS alert identity persists through missing observations,
configuration reload, restart, measured recovery, and recurrence.
- TrueNAS replication completion and NOTICE severity, PBS capacity/task
callbacks, and pool-only or empty Unraid layouts retain their intended alert
semantics.
## Host, update, identity, and interface reliability
- Host and Docker CPU collection use independent baselines, agent disk
collection follows its mount namespace, and Docker update completion requires
independent success evidence.
- Same-name systems stay separate across provider scope; delayed startup,
reconnect, settings navigation, skip-link order, badges, landmarks, and
compact controls retain the reviewed recovery and accessibility behavior.
- Availability-suggestion backfill derives from the current discovery under
lock, so a concurrent manual repair remains intact and deleted records are
not resurrected.
- Current OpenAI model requests use the supported completion-token parameter
and may learn that requirement from bounded API responses.
## Carried from the unpublished v6.4.2 packet and RC1
- Failed backups and completed PBS-to-PBS sync copies no longer pin a guest in
Backup Running, and incomplete artifacts are excluded from recoverable
latest-backup pointers (#1815).
- Two standalone sites that reuse one short node name and one shared install
token no longer collapse into a single host or Docker record (#1753).
- Windows Unified Agent auto-update no longer fails with HTTP 404; canonical
signed `.exe` assets and detached signatures are served from release assets
(#1820).
- Infrastructure actions and SSO sessions retain the canonical administrator
boundary, sensitive request bodies are bounded, large Availability estates
use the compact fleet view, slow starts offer recovery, and Disk I/O totals
avoid numbered-partition double counting.
## Known beta limits
- Issue #1761 has a 7 September installed report that both retained-failure
actions return HTTP 503 on stable `v6.4.1` while alert emails continue. This
beta repairs the reproduced stopped-queue ownership path, but has not been
verified on that reporter's installation. Non-destructive Retry and Dismiss
behavior after reload remains an explicit test.
- Issue #1812 shows that recovery controls and delivery-attempt details were not
discoverable from a `v6.4.1` incident timeline. The beta includes the Overview
controls and Notifications activity view, but installed discoverability is
unverified; broader task orchestration is outside this checkpoint.
- Issue #1966 reports 50-66 GB/day of process writes and duplicate incident IDs
on one idle `v6.4.1` LXC. This beta does not establish reduced aggregate
writes, migrate old duplicates, or resolve that installed report.
- A paired advisory benchmark measured UUID route-segment normalization at
62.50 ns/op versus 51.64 ns/op (+21.04%, zero allocations). Candidate-only
CI passed its budget, but the paired result remains adverse evidence for
beta observation and requires a new disposition before RC.
- Permanent SMTP authentication, configuration, or rejection errors may still
consume the existing inner retry budget before final failure.
- Ordinary off-LAN native receipt, terminated-process replay, Doze, expiry,
and failed-WAN cases are not qualified by this server checkpoint.
- Historical notification rows are not rewritten or blindly replayed.
## Release Metadata
- Version: `v6.4.4-beta.2`
- Previous published preview: `v6.4.4-beta.1`
- Previous stable: `v6.4.1`
- Rollback target: `v6.4.1`
- Rollback command: `sudo /bin/update --version v6.4.1`
- Promotion path: exact-SHA single-build release candidate from `release/v6.4`
- Windows signing decision: prereleases publish checksum- and
detached-signature-verified Windows agents without Authenticode while
SignPath remains unavailable. Windows Unified Agent binaries may display an
Unknown Publisher warning
- Mobile decision: `no-mobile-impact`. No governed mobile route, payload,
Relay, pairing, approval, push, or onboarding contract changed from
`v6.4.1`, so no companion mobile build or store rollout is required
+2 -2
View File
@@ -4,8 +4,8 @@ This guide covers practical upgrade steps for existing Pulse installs moving to
For the current v6 beta packet, see:
- `docs/releases/RELEASE_NOTES_v6.4.4-beta.1.md`
- `docs/releases/V6_CHANGELOG_v6.4.4-beta.1.md`
- `docs/releases/RELEASE_NOTES_v6.4.4-beta.2.md`
- `docs/releases/V6_CHANGELOG_v6.4.4-beta.2.md`
For the current stable v6 packet, see:
+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.4.4-beta.1"
CANONICAL_DEFAULT_PULSE_VERSION="6.4.4-beta.2"
resolve_default_pulse_version() {
if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then