diff --git a/VERSION b/VERSION index acb7cc375..867bcf888 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.5-rc.3 +6.0.5-rc.4 diff --git a/deploy/helm/pulse/Chart.yaml b/deploy/helm/pulse/Chart.yaml index 9943965a0..f311b9dc2 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 monitoring agent. type: application -version: 6.0.5-rc.3 -appVersion: "6.0.5-rc.3" -icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.0.5-rc.3/docs/images/pulse-logo.svg +version: 6.0.5-rc.4 +appVersion: "6.0.5-rc.4" +icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.0.5-rc.4/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.0.5-rc.3/docs/KUBERNETES.md + url: https://github.com/rcourtman/Pulse/blob/v6.0.5-rc.4/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 9d9b182f4..20f7e4b66 100644 --- a/deploy/helm/pulse/README.md +++ b/deploy/helm/pulse/README.md @@ -1,6 +1,6 @@ # pulse -![Version: 6.0.5-rc.3](https://img.shields.io/badge/Version-6.0.5--rc.3-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.0.5-rc.3](https://img.shields.io/badge/AppVersion-6.0.5--rc.3-informational?style=flat-square) +![Version: 6.0.5-rc.4](https://img.shields.io/badge/Version-6.0.5--rc.4-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.0.5-rc.4](https://img.shields.io/badge/AppVersion-6.0.5--rc.4-informational?style=flat-square) Helm chart for deploying the Pulse hub and optional Docker monitoring agent. diff --git a/docker-compose.yml b/docker-compose.yml index e5242b8a6..479842445 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: pulse: - image: ${PULSE_IMAGE:-rcourtman/pulse:6.0.5-rc.3} + image: ${PULSE_IMAGE:-rcourtman/pulse:6.0.5-rc.4} container_name: pulse restart: unless-stopped logging: diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index 83c630d85..cd4a74534 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -7,10 +7,12 @@ For historical v4 notes that previously lived in this repo, see: `docs/releases/RELEASE_NOTES_v4.md` For the current v6 support release candidate packet, see: -- `docs/releases/RELEASE_NOTES_v6.0.5-rc.3.md` -- `docs/releases/V6_CHANGELOG_v6.0.5-rc.3.md` +- `docs/releases/RELEASE_NOTES_v6.0.5-rc.4.md` +- `docs/releases/V6_CHANGELOG_v6.0.5-rc.4.md` For historical v6 support release candidate packets, see: +- `docs/releases/RELEASE_NOTES_v6.0.5-rc.3.md` +- `docs/releases/V6_CHANGELOG_v6.0.5-rc.3.md` - `docs/releases/RELEASE_NOTES_v6.0.5-rc.2.md` - `docs/releases/V6_CHANGELOG_v6.0.5-rc.2.md` - `docs/releases/RELEASE_NOTES_v6.0.5-rc.1.md` diff --git a/docs/UPGRADE_v6.md b/docs/UPGRADE_v6.md index a9e4da7d5..c1366287f 100644 --- a/docs/UPGRADE_v6.md +++ b/docs/UPGRADE_v6.md @@ -4,8 +4,8 @@ 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.0.5-rc.3.md` -- `docs/releases/V6_CHANGELOG_v6.0.5-rc.3.md` +- `docs/releases/RELEASE_NOTES_v6.0.5-rc.4.md` +- `docs/releases/V6_CHANGELOG_v6.0.5-rc.4.md` For the current stable v6 packet and rollout references, see: diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index 43d36bbd3..6a4ee61b0 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -852,9 +852,9 @@ TLS floor in the dynamic config. ## Current State -The active support prerelease `v6.0.5-rc.3` cut sets the repo-root `VERSION`, +The active support prerelease `v6.0.5-rc.4` 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.0.5-rc.3` release +fallback, and Helm chart release metadata to the same `6.0.5-rc.4` release version. This support prerelease keeps `rollback_version=v6.0.4`, 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 @@ -864,8 +864,11 @@ SMART temperature fallback, legacy agent update token recovery, threshold-aware temperature display severity, PBS backup polling memory bounds, physical disk SMART/Proxmox merge identity, Proxmox token preservation diagnostics, legacy OIDC SSO discovery with CSP nonce handling, mobile onboarding URL handoff -sanitization, SSO browser-session display labels, and route-aware Proxmox host -URLs behind RC validation instead of publishing another same-day stable patch. +sanitization, SSO browser-session display labels, route-aware Proxmox host +URLs, MSP report scheduling with a portal alert rollup, per-disk-type +temperature thresholds, PBS backup discovery recovery, host fingerprint +auto-discovery, and surfaced agent auth failures behind RC validation instead +of publishing another same-day stable patch. The initial GA promotion metadata remains `promoted_from_tag=v6.0.0-rc.7`, `rollback_version=v5.1.35`, @@ -919,8 +922,8 @@ compose image default, standalone installer fallback constant, and packaged Helm metadata. A draft release workflow failure caused by stale image or chart pins is a release-packet blocker until the defaults, tests, and evidence record are refreshed from the new branch head. -For the active support prerelease `v6.0.5-rc.3` cut, the repo-root compose -default and `scripts/install-docker.sh` fallback must both pin `6.0.5-rc.3` +For the active support prerelease `v6.0.5-rc.4` cut, the repo-root compose +default and `scripts/install-docker.sh` fallback must both pin `6.0.5-rc.4` until the next governed stable cut moves them forward. The stable promotion guard remains in force by rejecting leftover `-rc.` defaults when the governed `VERSION` is a stable release. diff --git a/docs/releases/RELEASE_NOTES_v6.0.5-rc.4.md b/docs/releases/RELEASE_NOTES_v6.0.5-rc.4.md new file mode 100644 index 000000000..45c175bfc --- /dev/null +++ b/docs/releases/RELEASE_NOTES_v6.0.5-rc.4.md @@ -0,0 +1,68 @@ +# Pulse v6.0.5-rc.4 Release Notes + +`v6.0.5-rc.4` is a release candidate for the next Pulse v6 patch line. It +follows stable `v6.0.4` and supersedes `v6.0.5-rc.3` with MSP report +scheduling and a provider portal alert rollup, per-disk-type temperature +thresholds, a PBS backup discovery recovery, host fingerprint auto-discovery, +surfaced agent auth failures, and additional SSO and filter improvements. It +retains the earlier support fixes for Patrol Gemini model readiness, +remembered-login submit persistence, Proxmox SMART temperature fallback for +direct SATA/SAT disks, legacy agent update token recovery, threshold-aware +temperature display severity, PBS backup polling memory bounds, physical disk +SMART/Proxmox merge identity, Proxmox token preservation diagnostics, legacy +OIDC SSO discovery with CSP nonce handling, Pulse Mobile pairing handoff +sanitization, SSO browser-session display labels, and route-aware Proxmox host +URLs. + +## Added + +- Reports can now be scheduled with weekly or monthly cadence, explicit + resource or tag scoping, and PDF or CSV delivery by email or to disk. The + MSP provider portal shows a per-workspace alert rollup so provider + operators see client alert pressure at a glance. +- Physical disk temperature thresholds are now configurable per disk type, + and explicit per-disk overrides beat the per-type defaults. +- OIDC provider settings now support editing requested scopes, and SSO + provider restriction fields can be cleared once set. +- Kubernetes shared toolbar filters are now URL-backed so saved views keep + exclusions, Docker container filters support `-term` search exclusions and + persistent saved views, and saved views are reachable from the FilterBar + mobile expanded body. + +## Fixed + +- Fixed a PBS backup discovery regression from the rc.3 bounded-polling + change: snapshot groups beyond the bound were synthesized without + verification, size, or file data, so real deployments saw backups as + Unverified with a collapsed timeline. Bounds are now derived from real + snapshot data. +- Hosts now participate in the discovery fingerprint model so they + auto-discover instead of requiring manual entry. +- Agent auth failures and staleness are now surfaced in the UI instead of an + agent silently retrying 401 responses forever while the node stayed green, + and the recovery guidance points at the Pulse UI. +- The Pro binary now blocks in-app self-update so a paid install can no + longer silently downgrade itself to the community build. +- Registry rebuilds no longer write no-op relationship-change rows, which + previously grew resource history by hundreds of thousands of rows per day + on busy deployments. +- Mock-mode data churn is paced to realistic homelab rates, so demo and + evaluation deployments stop generating phantom restart and state-flap + events. +- Docker Swarm workload dedupe now picks cluster-scoped winners + deterministically. +- Legacy 3-segment OIDC SSO login and callback paths are served again so + bookmarked or configured legacy SSO URLs keep working after upgrade. +- Relay pairing help now points at the Pulse Mobile install page so a + pairing QR has an obvious companion app to scan it with. +- v5 migration recovery states are clarified so interrupted migrations + explain what happened and what to do next. + +## Upgrade Notes + +Use the normal v6 install or update flow for `v6.0.5-rc.4` only when you are +comfortable testing an RC. The rollback target for this release candidate is +`v6.0.4`. + +Paid Pulse Pro, Relay, and eligible legacy customers should continue to use the +private download page and private runtime image for paid runtime features. diff --git a/docs/releases/V6_CHANGELOG_v6.0.5-rc.4.md b/docs/releases/V6_CHANGELOG_v6.0.5-rc.4.md new file mode 100644 index 000000000..f51f96441 --- /dev/null +++ b/docs/releases/V6_CHANGELOG_v6.0.5-rc.4.md @@ -0,0 +1,73 @@ +# Pulse v6.0.5-rc.4 + +_This changelog describes the `v6.0.5-rc.4` release candidate compared with +stable `v6.0.4`._ + +## Added + +- MSP reports now support scheduled delivery with weekly or monthly cadence, + explicit resource or tag scoping, and PDF or CSV output by email or to + disk, and the MSP provider portal now shows a per-workspace alert rollup. +- Physical disk temperature thresholds are now configurable per disk type, + with explicit per-disk overrides beating per-type defaults. +- OIDC provider settings now support editing requested scopes, and SSO + provider restriction fields can be cleared once set. +- Kubernetes shared toolbar filters are now URL-backed so saved views keep + exclusions, Docker container filters support `-term` search exclusions and + persistent saved views, and saved views appear in the FilterBar mobile + expanded body. + +## Fixed + +- Patrol readiness checks now detect Gemini tool-call capability from Gemini + candidate parts as well as top-level tool-call lists. +- Remembered-login state now persists the saved username when the checkbox is + enabled during submit. +- Proxmox SMART temperature collection now retries direct SATA/SAT disks with an + explicit SAT probe when smartctl auto-detection returns health but no + temperature. +- Legacy agent update token recovery now handles v5-to-v6 update paths where a + running agent can provide connection details even when stored state is absent. +- Temperature displays now resolve configured alert thresholds across node, + workload, Docker, standalone agent, and drawer surfaces. +- PBS backup polling now keeps a bounded read-state working set during backup + discovery. +- PBS backup discovery now derives its memory bounds from real snapshot data, + fixing an rc.3 regression where groups beyond the bound were synthesized + without verification, size, file, or per-snapshot time data. +- Physical disk SMART and Proxmox records now merge through canonical disk + identity so NVMe, size, SMART, and temperature metadata survive enrichment. +- Proxmox install/update flows now preserve generated token state and expose + smoke diagnostics for setup validation. +- Legacy OIDC SSO discovery now persists and advertises configured providers, + with CSP nonce handling for embedded frontend assets. +- Legacy 3-segment OIDC SSO login and callback paths are served again for + installs configured before the route consolidation. +- Pulse Mobile pairing now omits unsafe non-HTTPS Pulse web handoff URLs from + QR/deep-link payloads while keeping relay pairing usable and returning an + `instance_url_not_https` diagnostic for settings copy. +- OIDC and SAML browser sessions now expose a separate display label for app + chrome while authorization remains bound to the stable provider-scoped + principal. +- Proxmox host setup now prefers route-aware host URLs. +- Hosts now join the discovery fingerprint model so they auto-discover. +- Agent auth failures and staleness are now surfaced instead of a silent 401 + retry loop, with recovery guidance pointing at the Pulse UI. +- The Pro binary now blocks in-app self-update to prevent a silent downgrade + to the community build. +- Registry rebuilds no longer emit no-op relationship-change records, keeping + resource history growth bounded on busy deployments. +- Mock-mode churn is paced to homelab rates so demo deployments stop + generating phantom change events. +- Docker Swarm workload dedupe now picks cluster-scoped winners + deterministically. +- Relay pairing help now points at the Pulse Mobile install page. +- v5 migration recovery states are clarified for interrupted migrations. +- Docker, Helm, installer, and release-helper metadata now track the active + release candidate version. + +## Release Metadata + +- Version: `v6.0.5-rc.4` +- Rollback target: `v6.0.4` +- Promotion path: release candidate from `main` diff --git a/scripts/install-docker.sh b/scripts/install-docker.sh index 604f89c84..f8d3c3a6f 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.0.5-rc.3" +CANONICAL_DEFAULT_PULSE_VERSION="6.0.5-rc.4" resolve_default_pulse_version() { if [ -n "${PULSE_IMAGE_VERSION:-}" ]; then diff --git a/scripts/installtests/build_release_assets_test.go b/scripts/installtests/build_release_assets_test.go index 8cb7707c0..45d804ede 100644 --- a/scripts/installtests/build_release_assets_test.go +++ b/scripts/installtests/build_release_assets_test.go @@ -336,6 +336,10 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) { "Pulse Mobile pairing", "SSO browser-session display labels", "route-aware Proxmox host URLs", + "MSP report scheduling", + "portal alert rollup", + "per-disk-type temperature thresholds", + "PBS backup discovery recovery", "rollback target for this release candidate is `v"+previous+"`", ) assertFileContainsAll(t, changelogPath, @@ -355,6 +359,10 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) { "Pulse Mobile pairing now omits unsafe non-HTTPS Pulse web handoff URLs", "OIDC and SAML browser sessions now expose a separate display label", "Proxmox host setup now prefers route-aware host URLs", + "MSP reports now support scheduled delivery", + "per-workspace alert rollup", + "Physical disk temperature thresholds are now configurable per disk type", + "PBS backup discovery now derives its memory bounds from real snapshot data", ) assertFileContainsAll(t, repoFile("docs", "RELEASE_NOTES.md"), "docs/releases/RELEASE_NOTES_v"+version+".md", diff --git a/scripts/installtests/install_docker_sh_test.go b/scripts/installtests/install_docker_sh_test.go index 0cfe0e276..1162f4be3 100644 --- a/scripts/installtests/install_docker_sh_test.go +++ b/scripts/installtests/install_docker_sh_test.go @@ -229,7 +229,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.", - "legacy agent update token recovery, threshold-aware temperature display severity, PBS backup polling memory bounds, physical disk SMART/Proxmox merge identity, Proxmox token preservation diagnostics, legacy OIDC SSO discovery with CSP nonce handling, mobile onboarding URL handoff sanitization, SSO browser-session display labels, and route-aware Proxmox host URLs behind RC validation", + "legacy agent update token recovery, threshold-aware temperature display severity, PBS backup polling memory bounds, physical disk SMART/Proxmox merge identity, Proxmox token preservation diagnostics, legacy OIDC SSO discovery with CSP nonce handling, mobile onboarding URL handoff sanitization, SSO browser-session display labels, route-aware Proxmox host URLs, MSP report scheduling with a portal alert rollup, per-disk-type temperature thresholds, PBS backup discovery recovery, host fingerprint auto-discovery, and surfaced agent auth failures behind RC validation", "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.", ) }