diff --git a/deploy/helm/pulse/Chart.yaml b/deploy/helm/pulse/Chart.yaml index 704736ad1d..7ac5349df2 100644 --- a/deploy/helm/pulse/Chart.yaml +++ b/deploy/helm/pulse/Chart.yaml @@ -2,9 +2,9 @@ apiVersion: v2 name: pulse description: Helm chart for deploying the Pulse hub and optional Docker, Kubernetes, or OpenShift monitoring agent. type: application -version: 6.4.0-rc.11 -appVersion: "6.4.0-rc.11" -icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.0-rc.11/docs/images/pulse-logo.svg +version: 6.4.0-rc.12 +appVersion: "6.4.0-rc.12" +icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.4.0-rc.12/docs/images/pulse-logo.svg keywords: - monitoring - proxmox @@ -32,7 +32,7 @@ annotations: description: Smoke tests with kind cluster deployment artifacthub.io/links: | - name: Documentation - url: https://github.com/rcourtman/Pulse/blob/v6.4.0-rc.11/docs/KUBERNETES.md + url: https://github.com/rcourtman/Pulse/blob/v6.4.0-rc.12/docs/KUBERNETES.md - name: Support url: https://github.com/rcourtman/Pulse/discussions artifacthub.io/maintainers: | diff --git a/deploy/helm/pulse/README.md b/deploy/helm/pulse/README.md index d47fc7c66f..b62c302a46 100644 --- a/deploy/helm/pulse/README.md +++ b/deploy/helm/pulse/README.md @@ -1,6 +1,6 @@ # pulse -![Version: 6.4.0-rc.11](https://img.shields.io/badge/Version-6.4.0--rc.11-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.0-rc.11](https://img.shields.io/badge/AppVersion-6.4.0--rc.11-informational?style=flat-square) +![Version: 6.4.0-rc.12](https://img.shields.io/badge/Version-6.4.0--rc.12-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.4.0-rc.12](https://img.shields.io/badge/AppVersion-6.4.0--rc.12-informational?style=flat-square) Helm chart for deploying the Pulse hub and optional Docker, Kubernetes, or OpenShift monitoring agent. diff --git a/docker-compose.yml b/docker-compose.yml index d3d24aa274..7438a0e9ef 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: pulse: - image: ${PULSE_IMAGE:-rcourtman/pulse:6.4.0-rc.11} + image: ${PULSE_IMAGE:-rcourtman/pulse:6.4.0-rc.12} container_name: pulse restart: unless-stopped logging: diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index 01f4c538ad..14c9a29343 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -1842,10 +1842,10 @@ diagnostics. The same release workflow also executes the generated self-signed and custom-CA Windows installer commands through Windows PowerShell 5.1 before release assembly, so the first HTTPS fetch is release proof rather than a string-shape assertion. -The active prerelease `v6.4.0-rc.11` cut sets the repo-root `VERSION`, repo-root +The active prerelease `v6.4.0-rc.12` cut sets the repo-root `VERSION`, repo-root `docker-compose.yml` image default, `scripts/install-docker.sh` fallback, and -Helm chart release metadata to the same `6.4.0-rc.11` release version. It -follows `v6.4.0-rc.10` on the published `v6.4.0` candidate line. This +Helm chart release metadata to the same `6.4.0-rc.12` release version. It +follows `v6.4.0-rc.11` on the published `v6.4.0` candidate line. This prerelease keeps `rollback_version=v6.3.2`, publishes a versioned public GitHub prerelease plus versioned Docker and Helm artifacts, and does not move stable/latest @@ -1866,6 +1866,14 @@ Anthropic cost estimates; merges complete cross-source disk identities; retains uniquely resolved dismissed TrueNAS SMART risk; and stabilizes narrow alert investigation, shared chart interaction, responsive inline View preferences, and the mobile Settings workspace. +The rc.12 corrective set makes the GitHub Atom release-feed fallback retain a +publication timestamp and resolve the exact architecture-specific archive URL, +so an API rate limit cannot leave the in-app Start Update action without an +installable asset. Missing URLs also produce an explicit operator-facing error, +and the Unraid sentinel boundary now keeps empty array slots neutral through +both agent collection and server monitoring. The final cutoff also prevents +standalone Proxmox provider instances with reused short node names from sharing +one linked agent without exact endpoint or TLS-fingerprint proof. It also checkpoints a crash-safe active-state recovery envelope after durable lifecycle failure and prevents any Pulse host interface from satisfying an external dead-man signal. The changes since @@ -2417,8 +2425,8 @@ For the active stable `v6.1.2` cut, the repo-root compose default and `scripts/install-docker.sh` fallback must both pin `6.1.2` whenever the governed `VERSION` is that stable cut. The stable promotion guard remains in force and rejects leftover `-rc.` defaults. -For the active prerelease `v6.4.0-rc.11` cut, the repo-root compose default and -`scripts/install-docker.sh` fallback must both pin `6.4.0-rc.11` until the next +For the active prerelease `v6.4.0-rc.12` cut, the repo-root compose default and +`scripts/install-docker.sh` fallback must both pin `6.4.0-rc.12` until the next governed stable cut moves them forward. Each new release moves these two pins together with the repo-root `VERSION` and the Helm chart metadata in the same commit; a cut that leaves any of the four on a superseded value is a diff --git a/docs/releases/RELEASE_NOTES_v6.4.0-rc.12.md b/docs/releases/RELEASE_NOTES_v6.4.0-rc.12.md index 179461ac41..db02d5d246 100644 --- a/docs/releases/RELEASE_NOTES_v6.4.0-rc.12.md +++ b/docs/releases/RELEASE_NOTES_v6.4.0-rc.12.md @@ -1,6 +1,6 @@ # Pulse v6.4.0-rc.12 Release Notes -`v6.4.0-rc.12` is a focused corrective candidate that restores reliable in-app upgrades when GitHub rate limiting sends release checks through the Atom feed fallback. It also includes the latest Unraid empty-slot correction from `main`. +`v6.4.0-rc.12` restores reliable in-app upgrades when GitHub rate limiting sends release checks through the Atom feed fallback. It also includes the latest Unraid empty-slot correction and retains the complete v6.4 candidate feature set. ## What's improved @@ -8,12 +8,26 @@ - **Complete fallback release details** - Feed-based update checks retain the release timestamp as well as the installable asset URL, keeping update metadata consistent with normal GitHub API responses. - **Visible update-start failures** - If a future update check ever lacks an installable URL, Pulse now reports a clear error instead of leaving the Start Update button apparently unresponsive. - **Accurate Unraid empty-slot handling** - Sentinel entries used for unassigned array slots remain neutral across agent collection and monitoring, preventing empty slots from being reported as real disks or degraded storage. +- **Correct standalone Proxmox identity reuse** - Separate standalone Proxmox connections can reuse node names without borrowing one another's linked agent or collapsing distinct machines. +- **Atomic credential lifecycle** - API token creation, agent enrollment, and agent removal roll back live state when durable persistence fails, preventing undisclosed credentials, accidental eviction, or revocations that reverse after restart. +- **Accurate Anthropic budgets** - Current Opus and Haiku versions use version-specific first-party rates, so stale estimates no longer stop Patrol early or understate current Haiku usage. +- **Stronger disk identity and risk** - PVE and agent observations of the same RAID volume merge across normalized serial and WWN forms, while dismissed TrueNAS SMART alerts continue to flag uniquely identified disks with critical hardware evidence. +- **More stable incident investigation** - Mobile alert timelines keep context and actions together, history charts expose readable axes, grouped charts synchronize hover timestamps, and View preferences expand inline without covering tables. +- **Durable alert lifecycles** - Alert history and active state rebuild from the event log after restarts, with persisted identities migrated automatically and false all-clear states prevented during hydration. +- **Better notification control** - Alerts can be snoozed individually, maintenance can recur by scope, escalation repeats can target specific destinations, delivery routes can filter by severity, and informational events remain distinct from warnings. +- **Earlier capacity warnings** - Rolling metric windows and predictive storage forecasts surface sustained pressure and likely exhaustion before a single threshold breach becomes an outage. +- **More accurate host disk health** - SMART sector, media, endurance, spare, and CRC thresholds can be tuned per host, while empty Unraid slots remain neutral and Proxmox-linked agents avoid duplicate disk-risk alerts. +- **External availability monitoring** - Dead-man checks can notify when an expected external signal stops arriving, with configuration and recovery state persisted. +- **Clearer infrastructure details** - Resource drawers, Proxmox backup views, and alert timelines present more complete and consistent context across desktop and narrow layouts. +- **Phone-friendly Settings** - On narrow layouts, phone Settings use a searchable index, sticky section title, compact controls, and full-size touch targets. +- **Safer governed actions** - Docker action results carry independently observed post-action state, while deployment enrollment and credential changes persist atomically. +- **Safer recovery and watchdog isolation** - Alert lifecycle failures retain a crash-safe restart snapshot until SQLite is durably repaired, and external dead-man targets fail closed when any address points to a Pulse host interface. ## Before you upgrade - This is a release candidate. Stable installations remain on v6.3.2 unless an operator explicitly selects this version. -- Existing configurations remain valid. No manual data migration is required. -- Existing Pulse Mobile iOS build 12 and Android versionCode 9 remain compatible. These updater and Unraid normalization changes do not alter mobile routes, pairing, push, or resource payload contracts. +- Existing configurations remain valid. Alert identity and history migrations run automatically, with no manual data migration required. +- Existing Pulse Mobile iOS build 12 and Android versionCode 9 remain compatible. The new `alert_fired` push uses the already-supported `view_alert` action and existing informational severity presentation, so no companion update is required for this candidate. - Windows Unified Agent binaries are checksum- and detached-signature-verified but are not Authenticode-signed, so Windows may show an Unknown Publisher warning. ## Known issues diff --git a/docs/releases/V6_CHANGELOG_v6.4.0-rc.12.md b/docs/releases/V6_CHANGELOG_v6.4.0-rc.12.md index 5ef231ce14..7394f7d752 100644 --- a/docs/releases/V6_CHANGELOG_v6.4.0-rc.12.md +++ b/docs/releases/V6_CHANGELOG_v6.4.0-rc.12.md @@ -1,6 +1,15 @@ # Pulse v6.4.0-rc.12 -This changelog describes the changes since `v6.4.0-rc.11`. +This changelog describes the changes since `v6.4.0-rc.11`. The candidate also retains the complete v6.4 alerting and reliability change set summarized below. + +## Added + +- Rolling-window metric evaluation supports sustained CPU and memory policies, including workload inheritance from host defaults. +- Predictive storage-capacity alerts estimate exhaustion risk from retained usage history and recover when the forecast clears. +- Per-alert snooze, recurring scoped maintenance, destination severity routing, repeatable escalation schedules, and external dead-man monitoring expand operator control over alert delivery. +- Resolved host SMART policy covers health failure, sector counters, media errors, remaining life, NVMe spare, and CRC growth without creating duplicate Proxmox disk alerts. +- Canonical `alert_fired` push events use the existing mobile `view_alert` navigation action. +- Informational alerts now retain an explicit `info` severity through configuration, persistence, API responses, filtering, notification routing, and display. ## Changed @@ -8,12 +17,42 @@ This changelog describes the changes since `v6.4.0-rc.11`. - Release-note generation and visual-plan validation handle mixed existing notes and structured capture metadata more defensively. - Missing update download URLs now produce an explicit error notification while leaving the confirmation dialog available for retry. - Unraid disk-state normalization uses one canonical sentinel boundary across host-agent collection and server monitoring. +- Standalone Proxmox provider instances require an exact endpoint or matching TLS fingerprint before sharing a linked host agent across node views. +- API token creation, agent install issuance, and agent-removal revocation share an atomic live-and-durable inventory boundary. +- Anthropic pricing distinguishes current Opus and Haiku model generations from legacy aliases when estimating retained usage and enforcing budgets. +- Cross-source disk identity normalizes complete serial and WWN framing without truncating hardware identifiers. +- Alert investigation on narrow layouts uses a dedicated timeline dialog, while shared history charts synchronize hover timestamps and retain readable axes. +- The append-only event log is the authority for alert history and active lifecycle reconstruction, including restart recovery, acknowledgement, resolution, suppression, notification, and migration evidence. +- Alert identities and persisted history migrate to canonical resource keys, while active state uses durable atomic snapshots and ordered recovery. +- Alert hydration no longer exposes a false all-clear state before persisted incidents are restored. +- Escalation and delivery decisions are destination-specific, repeated holds are coalesced, and destination updates persist before the active runtime changes. +- Resource detail drawers use shared information-card and detail-table primitives across infrastructure, Docker, storage, and Proxmox backup surfaces. +- Docker lifecycle results distinguish command acceptance from independently observed post-action state, and deployment enrollment plus credential updates commit atomically. +- Email, ntfy, and mobile push presentation preserve informational priority instead of elevating non-warning events to warning treatment. +- Active-alert cards give informational severity an explicit blue presentation while preserving warning as the fail-safe for unknown values. +- Remembered table View preferences expand in a responsive inline disclosure instead of covering data. +- Phone Settings use a searchable two-level workspace with a sticky section title and touch-sized controls. ## Fixed - GitHub API rate limiting no longer leaves in-app release checks with a new version but no archive URL, which previously made Start Update appear to do nothing. - Feed fallback results no longer expose the zero-value release date when Atom includes a valid publication timestamp. - Empty Unraid array slots no longer materialize as physical disks or contribute false degraded state when the sentinel is observed through either agent path. +- Sequential standalone Proxmox connections that reuse a short node name no longer borrow the first connection's linked agent, and existing ambiguous links are discarded on the next provider poll. +- Failed token persistence no longer leaves an undisclosed new token active, evicts an older valid token, or allows an apparent agent-token revocation to reverse after restart. +- Current Anthropic Opus usage is no longer overestimated at legacy rates, and Haiku 4.5 is no longer underestimated at Haiku 3 rates. +- PVE and agent observations of the same RAID-controller volume no longer render duplicate resources when one source frames the NAA identity as a serial and the other as a WWN. +- Dismissed TrueNAS SMART alerts retain uniquely resolved critical disk evidence instead of allowing a damaged disk to return to healthy presentation. +- Mobile alert timelines remain scroll-stable, selected incident history revalidates correctly, chart axis labels remain readable, and grouped hover timestamps stay aligned. +- Restart recovery, history queries, and mock alert timelines preserve lifecycle order, observation time, and complete incident evidence. +- Fresh rolling-window metric data remains authoritative, including when older samples or counter resets are present. +- Offline mock hosts remain on the normal host-alert lifecycle instead of losing active incidents during refresh. +- API token watcher updates remain ordered across successive persistence mutations. +- Proxmox backup health, inventory refresh, offline fixtures, and drawer detail presentation retain complete current context. +- Informational active-alert cards use the blue severity palette, while unknown severity values fail safe to warning presentation. +- Alert-lifecycle failures synchronously checkpoint a crash-safe recovery envelope before shutdown. +- A malformed or source-less degraded-state marker no longer lets startup trust a potentially stale SQLite alert projection. +- Dead-man configuration and dial-time DNS validation reject every address assigned to the Pulse host. ## Release Metadata @@ -25,4 +64,4 @@ This changelog describes the changes since `v6.4.0-rc.11`. - Rollback command: `./scripts/install.sh --version v6.3.2` - Promotion path: exact-SHA single-build release candidate from `main` - Windows signing decision: prereleases publish checksum- and detached-signature-verified Windows agents without Authenticode while SignPath remains unavailable. Windows may show an Unknown Publisher warning. -- Mobile decision: `existing-mobile-build-compatible`. Published iOS build 12 and Android versionCode 9 do not consume the server self-update Atom fallback or Unraid sentinel parsing paths, and no mobile-facing contract changes in this candidate require a companion upload. +- Mobile decision: `existing-mobile-build-compatible`. Published iOS build 12 and Android versionCode 9 already route `action_type=view_alert`; no companion upload is required. They do not consume the server self-update Atom fallback or Unraid sentinel parsing paths, and no mobile-facing contract changes in this candidate require a companion upload. diff --git a/frontend-modern/public/docs/UPGRADE_v6.md b/frontend-modern/public/docs/UPGRADE_v6.md index 4c2ede5e13..02c5340640 100644 --- a/frontend-modern/public/docs/UPGRADE_v6.md +++ b/frontend-modern/public/docs/UPGRADE_v6.md @@ -4,8 +4,8 @@ This guide covers practical upgrade steps for existing Pulse installs moving to For the current v6 release candidate packet (the current v6 support release candidate packet), see: -- `docs/releases/RELEASE_NOTES_v6.4.0-rc.11.md` -- `docs/releases/V6_CHANGELOG_v6.4.0-rc.11.md` +- `docs/releases/RELEASE_NOTES_v6.4.0-rc.12.md` +- `docs/releases/V6_CHANGELOG_v6.4.0-rc.12.md` For the current stable v6 packet, see: diff --git a/scripts/install-docker.sh b/scripts/install-docker.sh index be9ba8b11f..3adcb5d472 100755 --- a/scripts/install-docker.sh +++ b/scripts/install-docker.sh @@ -6,7 +6,7 @@ set -euo pipefail SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" DOCKER_IMAGE_REPO="${DOCKER_IMAGE_REPO:-rcourtman/pulse}" -CANONICAL_DEFAULT_PULSE_VERSION="6.4.0-rc.11" +CANONICAL_DEFAULT_PULSE_VERSION="6.4.0-rc.12" resolve_default_pulse_version() { if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then