From e2ec59a840535d7ebaccceef511b03cb9cd66b3e Mon Sep 17 00:00:00 2001 From: rcourtman Date: Mon, 13 Jul 2026 18:35:08 +0100 Subject: [PATCH] Prepare v6.1.0 RC1 release --- VERSION | 2 +- deploy/helm/pulse/Chart.yaml | 8 +-- deploy/helm/pulse/README.md | 2 +- docker-compose.yml | 2 +- docs/RELEASE_NOTES.md | 4 +- docs/UPGRADE_v6.md | 4 +- .../subsystems/deployment-installability.md | 8 ++- ...6-rc.1.md => RELEASE_NOTES_v6.1.0-rc.1.md} | 61 ++++++++++++++++--- ....6-rc.1.md => V6_CHANGELOG_v6.1.0-rc.1.md} | 36 ++++++++++- scripts/install-docker.sh | 2 +- .../installtests/build_release_assets_test.go | 6 ++ .../installtests/install_docker_sh_test.go | 3 +- 12 files changed, 112 insertions(+), 26 deletions(-) rename docs/releases/{RELEASE_NOTES_v6.0.6-rc.1.md => RELEASE_NOTES_v6.1.0-rc.1.md} (57%) rename docs/releases/{V6_CHANGELOG_v6.0.6-rc.1.md => V6_CHANGELOG_v6.1.0-rc.1.md} (67%) diff --git a/VERSION b/VERSION index 9eb39ce91..b7515051e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.0.6-rc.1 +6.1.0-rc.1 diff --git a/deploy/helm/pulse/Chart.yaml b/deploy/helm/pulse/Chart.yaml index 923d669f9..7487aab80 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.6-rc.1 -appVersion: "6.0.6-rc.1" -icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.0.6-rc.1/docs/images/pulse-logo.svg +version: 6.1.0-rc.1 +appVersion: "6.1.0-rc.1" +icon: https://raw.githubusercontent.com/rcourtman/Pulse/v6.1.0-rc.1/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.6-rc.1/docs/KUBERNETES.md + url: https://github.com/rcourtman/Pulse/blob/v6.1.0-rc.1/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 46717eb2d..f734b8c9b 100644 --- a/deploy/helm/pulse/README.md +++ b/deploy/helm/pulse/README.md @@ -1,6 +1,6 @@ # pulse -![Version: 6.0.6-rc.1](https://img.shields.io/badge/Version-6.0.6--rc.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.0.6-rc.1](https://img.shields.io/badge/AppVersion-6.0.6--rc.1-informational?style=flat-square) +![Version: 6.1.0-rc.1](https://img.shields.io/badge/Version-6.1.0--rc.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 6.1.0-rc.1](https://img.shields.io/badge/AppVersion-6.1.0--rc.1-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 e0b8df03c..4ae67d639 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.6-rc.1} + image: ${PULSE_IMAGE:-rcourtman/pulse:6.1.0-rc.1} container_name: pulse restart: unless-stopped logging: diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index e96224fe7..a5103b212 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -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 support release candidate packet, see: -- `docs/releases/RELEASE_NOTES_v6.0.6-rc.1.md` -- `docs/releases/V6_CHANGELOG_v6.0.6-rc.1.md` +- `docs/releases/RELEASE_NOTES_v6.1.0-rc.1.md` +- `docs/releases/V6_CHANGELOG_v6.1.0-rc.1.md` For historical v6 support release candidate packets, see: - `docs/releases/RELEASE_NOTES_v6.0.5-rc.4.md` diff --git a/docs/UPGRADE_v6.md b/docs/UPGRADE_v6.md index 442f1017d..9439d76ba 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.6-rc.1.md` -- `docs/releases/V6_CHANGELOG_v6.0.6-rc.1.md` +- `docs/releases/RELEASE_NOTES_v6.1.0-rc.1.md` +- `docs/releases/V6_CHANGELOG_v6.1.0-rc.1.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 d5b93e584..b76344624 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -977,7 +977,10 @@ TLS floor in the dynamic config. `mobile-candidate-required` is a blocking state until the mobile candidate is built/submitted and the release is rerun with `mobile-candidate-uploaded` evidence. Compatibility or uploaded-candidate decisions must carry evidence - text rather than relying on memory. + text rather than relying on memory. A `mobile-candidate-uploaded` release + packet must also name the exact iOS build number and Android version code in + its release notes and changelog, and must distinguish TestFlight or Play + internal-testing availability from a public store rollout. 12. Keep forward release signing pinned to an explicit trust root. Governed release scripts, Docker release builds, and historical backfill paths must accept the active private signing key only alongside a non-secret expected @@ -1007,6 +1010,9 @@ operator-facing Actions inbox, monitor-first product workflows, governed host and storage operations, native-agent update safety, Windows logged-readiness and recovery proof, OIDC callback recovery, and fail-closed security hardening behind RC validation before the next stable minor release. +The companion evidence for this cut is Pulse Mobile iOS build 8 and Android +versionCode 7 on TestFlight and Google Play internal testing only. The release +packet must not describe either candidate as a public store rollout. The same release boundary now provides one canonical in-app release-note experience. Update checks can preview a curated `Highlights` section, and an authenticated running-version endpoint lets the update surface show those diff --git a/docs/releases/RELEASE_NOTES_v6.0.6-rc.1.md b/docs/releases/RELEASE_NOTES_v6.1.0-rc.1.md similarity index 57% rename from docs/releases/RELEASE_NOTES_v6.0.6-rc.1.md rename to docs/releases/RELEASE_NOTES_v6.1.0-rc.1.md index a86e397e7..fc414bb17 100644 --- a/docs/releases/RELEASE_NOTES_v6.0.6-rc.1.md +++ b/docs/releases/RELEASE_NOTES_v6.1.0-rc.1.md @@ -1,9 +1,21 @@ -# Pulse v6.0.6-rc.1 Release Notes +# Pulse v6.1.0-rc.1 Release Notes -`v6.0.6-rc.1` is a release candidate for the next Pulse v6 patch line. It -follows stable `v6.0.5` with a larger monitor-first product update, a typed -Pulse Intelligence action lifecycle, safer native-agent update and recovery -behavior, and broad security and reliability hardening. +`v6.1.0-rc.1` is a release candidate for the next Pulse v6 minor line. It +follows stable `v6.0.5` with a substantial monitor-first product update, a +typed Pulse Intelligence action lifecycle, a dedicated Actions workspace, +safer native-agent update and recovery behavior, and broad security and +reliability hardening. + +## Highlights + +- Patrol findings can now move through one reviewed Actions inbox with clear + approval, execution, and verification state. +- Pulse can safely carry out a wider set of explicitly governed Docker, + Proxmox, host-update, package-maintenance, and storage-cleanup actions. +- Platform pages, connected systems, responsive layouts, and Assistant + conversations are more task-focused and easier to operate day to day. +- Native updates, agent recovery, authentication boundaries, and service + hardening fail closed across more installation and recovery paths. ## Added @@ -13,10 +25,16 @@ behavior, and broad security and reliability hardening. - Patrol action state now reconciles from the authoritative action audit and stays current across investigation history, desktop approval controls, and Pulse Mobile approve or reject flows. +- Actions provides a dedicated inbox for reviewing proposed work, checking + policy and verification details, and seeing pending approvals without + searching through Assistant history. - Patrol can authorize low-risk Docker and Podman restarts through explicit per-resource capability allowlists and optional recurring maintenance windows, while unsupported, out-of-window, or downgraded-mode actions remain approval-gated and fail closed. +- Governed host updates, Debian and Ubuntu package maintenance, storage-pressure + cleanup, and supported Proxmox guest lifecycle operations now use reviewed + plans, durable execution receipts, and independent outcome verification. - Local AI setup includes a guided Ollama quickstart for `qwen3:8b`, with clearer Provider & Models readiness guidance. - Cluster members can override their connection addresses when the discovered @@ -40,6 +58,13 @@ behavior, and broad security and reliability hardening. - Investigation prompts receive the real typed capability catalog, including approval requirements and parameter constraints, instead of asking the model to guess which actions are available. +- Assistant conversations can be retried, regenerated, edited and resent, and + steered while a response is running. Long pasted input is collapsed into a + manageable composer attachment, and the last-turn summary reports estimated + model cost when available. +- Patrol handoffs now open the related Actions review directly, background + Patrol work stays out of the Assistant quick-resume list, and the Actions tab + shows its pending-approval count. - Docker, Kubernetes, TrueNAS, vSphere, and Proxmox node tables preserve user-controlled column sorting through one shared platform-table model. @@ -48,6 +73,10 @@ behavior, and broad security and reliability hardening. - Native updates self-test the replacement binary before swapping it in, reject silent edition downgrades, preserve a sanctioned rollback path, and fail fast when signing configuration is incomplete. +- Native updates fail closed instead of silently falling back to a community + build, preserve writable configuration backups under hardened services, and + publish verification keys in the exact OpenSSH `allowed_signers` form used + by the documented verification command. - Docker updates now recreate the container instead of attempting a restart that cannot apply a new image. - Docker containers retain their grouped-by-host view and open configured web @@ -64,20 +93,34 @@ behavior, and broad security and reliability hardening. this candidate. - FreeBSD agent update recovery and Windows service recovery now preserve a usable runtime across replacement and restart paths. +- Cluster re-registration preserves an operator-selected member address, moved + guests keep their alert ownership aligned with the new node, and unavailable + guest-agent disk data is no longer presented as a real measurement. +- Physical disks no longer disappear on wide node layouts, standby SSDs no + longer report misleading state, shared Docker network namespaces survive + container updates, and SSO administrators retain the expected settings + authority. ## Upgrade Notes -Use the normal v6 install or update flow for `v6.0.6-rc.1` only when you are +Use the normal v6 install or update flow for `v6.1.0-rc.1` only when you are comfortable testing an RC. The rollback target for this release candidate is `v6.0.5`. +The exact rollback reinstall command is: + +```bash +./scripts/install.sh --version v6.0.5 +``` + This candidate changes authentication and native installer/updater boundaries, so it is intentionally using the governed RC path rather than the direct stable-patch path. -Pulse Mobile candidate builds with runtime version 1 receive the matching -typed-action approval client through the candidate OTA channel; no public store -rollout is part of this RC. +Pulse Mobile iOS candidate build 8 and Android candidate versionCode 7 carry +the matching plan-bound action review and approval client. They remain on the +TestFlight and Google Play internal-testing tracks; no public store rollout is +part of this RC. Windows Unified Agent binaries in this release candidate retain the same checksum and detached-signature verification used by `v6.0.5`, but they are diff --git a/docs/releases/V6_CHANGELOG_v6.0.6-rc.1.md b/docs/releases/V6_CHANGELOG_v6.1.0-rc.1.md similarity index 67% rename from docs/releases/V6_CHANGELOG_v6.0.6-rc.1.md rename to docs/releases/V6_CHANGELOG_v6.1.0-rc.1.md index 2ff75bb1b..cb5f42028 100644 --- a/docs/releases/V6_CHANGELOG_v6.0.6-rc.1.md +++ b/docs/releases/V6_CHANGELOG_v6.1.0-rc.1.md @@ -1,6 +1,6 @@ -# Pulse v6.0.6-rc.1 +# Pulse v6.1.0-rc.1 -_This changelog describes the `v6.0.6-rc.1` release candidate compared with +_This changelog describes the `v6.1.0-rc.1` release candidate compared with stable `v6.0.5`._ ## Added @@ -12,11 +12,17 @@ stable `v6.0.5`._ - Desktop and Pulse Mobile clients now use the canonical pending-action queue, decision endpoint, and action identity instead of retired command-shaped approval endpoints. +- The desktop Actions inbox now provides one review surface for proposed work, + policy provenance, approval state, execution progress, verification detail, + and direct Patrol handoffs. - Docker and Kubernetes actions verify supported scale and update outcomes after execution. - Policy-scoped Patrol autonomy can authorize low-risk Docker and Podman restarts only for explicitly allowed resources and optional recurring maintenance windows. +- Host update, Debian and Ubuntu package, storage-pressure cleanup, Docker + restart, and supported Proxmox guest lifecycle plans now share the governed + action, durable receipt, and independent-verification path. - Local provider setup includes a guided Ollama `qwen3:8b` quickstart. - Cluster members can override discovered connection addresses. - The Unified Agent accepts a rotating JSON log path for native service use. @@ -37,12 +43,20 @@ stable `v6.0.5`._ read later. - Investigation prompts include the validated capability catalog with approval floors, parameter schemas, and sensitive/operator-only constraints. +- Assistant supports in-place retry, response regeneration, edit-and-resend, + mid-turn steering, collapsed long-paste attachments, and estimated + last-turn cost summaries. +- Patrol action handoffs open the matching Actions review, background Patrol + sessions stay out of Assistant quick resume, and pending approvals are + visible on the Actions navigation tab. - Docker, Kubernetes, TrueNAS, vSphere, and Proxmox node tables share one sortable platform-table model and retain user-controlled column ordering. - Windows native CI exercises installer parsing, install, version replacement, logged readiness, forced-process recovery, restart persistence, and cleanup. - Release automation builds one signed exact-SHA candidate and promotes that candidate without rebuilding. +- Action dispatch now binds server-authored policy provenance and reviewed plan + identity through durable admission, transport, result, and audit records. ## Fixed @@ -53,6 +67,8 @@ stable `v6.0.5`._ - Docker update guidance recreates the container so the selected image is actually applied. - Docker and Kubernetes agent liveness handles clock skew correctly. +- Docker updates preserve containers that share another container's network + namespace. - Guest suppression is honored for posture alerts. - Legacy OIDC callback handling recovers the initiating provider. - Simultaneous provider/runtime and proposal-channel failures preserve both @@ -65,6 +81,14 @@ stable `v6.0.5`._ - Windows install success now requires both local readiness and a non-empty durable service log. - Discovery backfills quiesce during shutdown. +- Cluster members retain an operator-selected connection address when they + re-register through another member. +- Guest alerts move with the guest when its owning node changes, and missing + guest-agent disk data uses an unavailable sentinel instead of a fabricated + measurement. +- Physical disk tables keep wide-node disks visible and avoid reporting + standby SSDs as active failures. +- SSO-backed administrators retain their effective settings privileges. ## Security @@ -77,9 +101,15 @@ stable `v6.0.5`._ explicitly while the public signing application is pending. - Demo SSH setup no longer weakens host-key handling for private deploy hosts or IP targets. +- Update verification documentation and release output use a guarded OpenSSH + `allowed_signers` line, and hardened update services keep configuration + backups on a writable path. ## Release Metadata -- Version: `v6.0.6-rc.1` +- Version: `v6.1.0-rc.1` - Rollback target: `v6.0.5` +- Rollback command: `./scripts/install.sh --version v6.0.5` - Promotion path: release candidate from `main` +- Mobile companion candidates: iOS build 8 and Android versionCode 7 on the + TestFlight and Google Play internal-testing tracks diff --git a/scripts/install-docker.sh b/scripts/install-docker.sh index 8e30d6c15..d5a72b7c0 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.6-rc.1" +CANONICAL_DEFAULT_PULSE_VERSION="6.1.0-rc.1" 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 00c71bed4..4f2637ffe 100644 --- a/scripts/installtests/build_release_assets_test.go +++ b/scripts/installtests/build_release_assets_test.go @@ -329,6 +329,7 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) { assertFileContainsAllNormalized(t, releaseNotesPath, "`v"+version+"` is a release candidate", + "## Highlights", "stable `v"+previous+"`", "Pulse Intelligence", "detection and investigation profiles", @@ -345,6 +346,8 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) { "Legacy OIDC callbacks", "Windows service recovery", "fail closed", + "Pulse Mobile iOS candidate build 8 and Android candidate versionCode 7", + "TestFlight and Google Play internal-testing tracks", "rollback target for this release candidate is `v"+previous+"`", ) assertFileContainsAllNormalized(t, changelogPath, @@ -367,6 +370,8 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) { "Windows service installation fails closed", "First-run security boundaries now fail closed", "one signed exact-SHA candidate", + "Mobile companion candidates: iOS build 8 and Android versionCode 7", + "TestFlight and Google Play internal-testing tracks", ) assertFileContainsAll(t, repoFile("docs", "RELEASE_NOTES.md"), "docs/releases/RELEASE_NOTES_v"+version+".md", @@ -399,6 +404,7 @@ func TestCurrentSupportPrereleasePacketTracksInstallMetadata(t *testing.T) { "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.", "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 companion evidence for this cut is Pulse Mobile iOS build 8 and Android versionCode 7 on TestFlight and Google Play internal testing only. The release packet must not describe either candidate as a public store rollout.", ) } diff --git a/scripts/installtests/install_docker_sh_test.go b/scripts/installtests/install_docker_sh_test.go index 0a5e0e28f..12808dd2f 100644 --- a/scripts/installtests/install_docker_sh_test.go +++ b/scripts/installtests/install_docker_sh_test.go @@ -231,7 +231,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.", - "the typed Pulse Intelligence lifecycle, monitor-first product workflows, native-agent update safety, Windows logged-readiness and recovery proof, OIDC callback recovery, and fail-closed security hardening behind RC validation", + "the expanded Pulse Intelligence action and verification lifecycle, the operator-facing Actions inbox, monitor-first product workflows, governed host and storage operations, native-agent update safety, Windows logged-readiness and recovery proof, OIDC callback recovery, and fail-closed security hardening behind RC validation", + "The companion evidence for this cut is Pulse Mobile iOS build 8 and Android versionCode 7 on TestFlight and Google Play internal testing only. The release packet must not describe either candidate as a public store rollout.", "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.", ) }