diff --git a/docs/MIGRATION_UNIFIED_NAV.md b/docs/MIGRATION_UNIFIED_NAV.md index fcb781d40..84cc2578a 100644 --- a/docs/MIGRATION_UNIFIED_NAV.md +++ b/docs/MIGRATION_UNIFIED_NAV.md @@ -1,30 +1,65 @@ # Migration Guide: Unified Navigation -This guide explains what changed in unified navigation and where legacy pages moved in v6. +> **This migration has been reverted as of `v6.0.0-rc.6`.** Pulse v6 ships +> with the platform-shaped top-level navigation existing v5 operators +> already know (Proxmox, Docker, Kubernetes, TrueNAS, vSphere, Standalone, +> plus Alerts, Patrol, and Settings). The unified +> `/infrastructure` / `/workloads` / `/storage` / `/recovery` layout that +> briefly shipped across `rc.1` through `rc.5` is retired. The unified +> resource model and `/api/resources` contract remain on the backend. +> +> If you have automation, bookmarks, or runbooks targeting the unified +> routes, point them at the platform-shaped equivalents instead: +> +> - `/infrastructure?source=pmg` → `/proxmox/mail-gateway` (or the +> relevant Proxmox sub-page) +> - `/workloads?type=k8s` → `/kubernetes` +> - `/storage` → the platform-shaped Storage views on each platform page +> - `/recovery` → the platform-shaped Recovery / Backups views on each +> platform page (the underlying `/api/recovery/*` contract is unchanged) +> +> The keyboard shortcuts follow the platform-shaped shape: +> +> - `g p` Proxmox, `g d` Docker, `g k` Kubernetes, `g n` TrueNAS, +> `g v` vSphere, `g s` Standalone +> - `g a` Alerts, `g r` Patrol, `g t` Settings, `?` shortcuts help +> +> The "Classic shortcuts" bar referenced in the historical content below +> is not part of the shipped product; ignore that aid. +> +> The rest of this document is preserved as historical context for the +> `rc.1` through `rc.5` line. -## What Changed -- Navigation is now organized by **task** (Infrastructure, Workloads, Storage, Recovery) instead of by platform. +## Historical context (rc.1 through rc.5 only) + +The content below describes the unified-navigation migration that +shipped across `rc.1` through `rc.5` and was reverted in `rc.6`. It is +kept as a historical record so links from earlier release notes still +resolve. None of it describes the shipped product as of `rc.6` or later. + +### What Changed (historical) +- Navigation was organized by **task** (Infrastructure, Workloads, Storage, Recovery) instead of by platform. - Legacy pages (Proxmox Overview, Hosts, Docker, Services, Kubernetes) were replaced by unified views. - Global search and keyboard shortcuts make navigation faster across all resources. -- Kubernetes is now split by intent: - - **Infrastructure** shows Kubernetes clusters and nodes. - - **Workloads** shows Kubernetes pods with the same filters/grouping as VMs and containers. +- Kubernetes was split by intent: + - **Infrastructure** showed Kubernetes clusters and nodes. + - **Workloads** showed Kubernetes pods with the same filters/grouping as VMs and containers. -## Why This Change +### Why This Change (historical) - A unified resource model enables one inventory and one search across platforms. - Filters, drawers, and workflows stay consistent, instead of being re-implemented per platform page. - New integrations can be added without expanding the top-level navigation indefinitely. -## Legacy Aliases and Redirects +### Legacy Aliases and Redirects (historical) - Legacy aliases have been fully removed; update bookmarks and runbooks to canonical routes. - Optional migration aid: enable the **Classic shortcuts** bar in the main navigation (Settings → System → General). - Plan automation/bookmarks to use canonical routes now: - `/infrastructure?source=pmg` - `/workloads?type=k8s` -## Where Old Pages Moved +### Where Old Pages Moved (historical) -| Legacy Page | New Location | +| Legacy Page | New Location (rc.1-rc.5) | |------------|--------------| | Proxmox Overview | `/infrastructure` | | Hosts | `/infrastructure` | @@ -37,15 +72,15 @@ This guide explains what changed in unified navigation and where legacy pages mo | Services | `/infrastructure?source=pmg` | | Kubernetes | `/workloads?type=k8s` | -## New Features to Know +### New Features to Know (historical) -### Global Search +#### Global Search - Press `/` to focus search. - Search by name, node, type, tags, or status. - Results navigate directly to the relevant view. - - Use `Cmd/Ctrl+K` for the command palette. +- Use `Cmd/Ctrl+K` for the command palette. -### Keyboard Shortcuts +#### Keyboard Shortcuts (historical, rc.1-rc.5 shape) - `g i` → Infrastructure - `g w` → Workloads - `g s` → Storage @@ -54,10 +89,10 @@ This guide explains what changed in unified navigation and where legacy pages mo - `g t` → Settings - `?` → Shortcut help -### Debug Drawer (Optional) +#### Debug Drawer (Optional) - Enable with localStorage key `pulse_debug_mode` for raw JSON in resource drawer. -## Tips +### Tips (historical) - If you used Docker and Hosts pages before, start with **Infrastructure** (hosts) and **Workloads** (containers). - If you used the Kubernetes page before, use **Infrastructure** for cluster/node health and **Workloads** for pod-level operations. - The new pages support unified filters, tags, and search across all sources. diff --git a/docs/UPGRADE_v6.md b/docs/UPGRADE_v6.md index c7a6b79af..a552d6729 100644 --- a/docs/UPGRADE_v6.md +++ b/docs/UPGRADE_v6.md @@ -9,9 +9,8 @@ For current stable release notes and rollout references, see: For the current v6 prerelease packet, see: -- `docs/releases/RELEASE_NOTES_v6_RC5_DRAFT.md` -- `docs/releases/V6_CHANGELOG_RC5_DRAFT.md` -- `docs/releases/V6_RC5_OPERATOR_SUPPORT_PACK_DRAFT.md` +- `docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md` +- `docs/releases/V6_CHANGELOG_RC6_DRAFT.md` ## Before You Upgrade diff --git a/docs/releases/RELEASE_NOTES_v6.md b/docs/releases/RELEASE_NOTES_v6.md index ff0bbedfc..6fac512ed 100644 --- a/docs/releases/RELEASE_NOTES_v6.md +++ b/docs/releases/RELEASE_NOTES_v6.md @@ -3,10 +3,21 @@ `v6.0.0` is the first stable release of Pulse v6. It promotes the validated `v6.0.0-rc.1` and `v6.0.0-rc.2` line into the default supported v6 release. -Pulse v6 reorganizes the product around `Infrastructure`, `Workloads`, -`Storage`, and `Recovery`, keeps the governed v5-to-v6 upgrade and Unified Agent -continuity path, and ships the corrected self-hosted commercial model that was -validated during `rc.2`. +Pulse v6 keeps the platform-shaped top-level navigation existing v5 operators +already know (Proxmox, Docker, Kubernetes, TrueNAS, vSphere, Standalone, plus +Alerts, Patrol, and Settings), rebuilds the runtime behind it on a unified +resource model and contract (`/api/resources`), ships first-class vSphere and +TrueNAS support, adds the Patrol intelligence and agent-substrate surfaces, +keeps the governed v5-to-v6 upgrade and Unified Agent continuity path, and +ships the corrected self-hosted commercial model that was validated during +`rc.2`. + +The v6 line briefly shipped a unified `Infrastructure` / `Workloads` / +`Storage` / `Recovery` top-level layout across `rc.1` through `rc.5`. Operator +feedback consistently preferred the platform-shaped navigation v5 already had, +so I reverted the frontend information architecture in `rc.6` to platform- +shaped pages while keeping the unified resource model on the backend. Same +backend, the navigation shape you already know. ## Pulse v5 Support Transition @@ -17,27 +28,47 @@ I publish an explicit exception. ## What Is In v6.0.0 -### Unified v6 product layout +### Platform-shaped frontend on a unified backend -Pulse v6 changes the default product shape. Authenticated users now land on -`Infrastructure`, and the primary surfaces are: +The top-level navigation is platform-shaped. Each backing source has its own +top-level page (Proxmox, Docker, Kubernetes, TrueNAS, vSphere, Standalone), +alongside Alerts, Patrol, and Settings. Behind those pages, Pulse v6 runs on +a unified resource model: a single canonical `Resource` type normalising data +across the backing sources, served from `/api/resources`. The platform-shaped +pages consume that contract and add platform-shaped presentation. -- `Infrastructure` -- `Workloads` -- `Storage` -- `Recovery` +vSphere is a first-class platform in v6, parallel to Proxmox, Docker, +Kubernetes, and TrueNAS. The Standalone surface (renamed from Agents during +the v6 line) carries Pulse Agent resources as their own top-level page, with +native detail UX for IP, disk I/O, RAID, network, and SMART temperature. -Existing bookmarks, old screenshots, and operator runbooks that assumed the v5 -Proxmox-first layout should be reviewed during upgrade. +### Patrol intelligence and the agent substrate -### Recovery and infrastructure are first-class +`Patrol` is a top-level intelligence surface with in-place verbs on findings +(Investigate, Why, Verify fix, Create rule, Mark resolved), structured +investigation records that carry operator-facing Impact and rollback, a first- +class resolved-finding lifecycle, capacity-forecast action templates, and a +reliability finding that fires when an alert starts flapping. Patrol consumes +an HTTP alert bridge for PDM (Proxmox Datacenter Manager). -`Recovery` is now a primary surface rather than a backup-only page family, and -infrastructure onboarding is split by ownership: +Pulse v6 also exposes a stable HTTP contract for external agents +(`/api/agent/capabilities`, `/api/agent/resource-context/{id}`, +`/api/agent/fleet-context`, `/api/agent/events`) so Claude Desktop, Claude +Code, custom MCP clients, and plain HTTP consumers can drive Pulse with the +same situated context Patrol and Assistant have. Worked examples ship in +`cmd/pulse-mcp` (MCP adapter) and `cmd/agent-probe` (plain HTTP). -- `Install on a host` for direct Unified Agent deployment -- `Platform connections` for API-backed systems such as Proxmox, TrueNAS, and - VMware +### Recovery and infrastructure onboarding + +Backup, snapshot, and replication state is served from `/api/recovery/*` +(PBS snapshots, ZFS snapshots, replication tasks) and consumed by the +platform-shaped pages that present it. Infrastructure onboarding is split by +ownership inside Settings: + +- `Settings → Infrastructure → Install on a host` for direct Unified Agent + deployment +- `Settings → Infrastructure → Platform connections` for API-backed systems + such as Proxmox, TrueNAS, and VMware ### Self-hosted packaging is corrected from the early RC posture @@ -94,8 +125,12 @@ hosted product; see the MSP section of the pricing doc. ## Upgrade Guidance For Existing v5 Users 1. Back up the current system and keep direct console access available. -2. Re-test navigation, bookmarks, and any saved links that depended on the old - route structure. +2. Re-test bookmarks and saved links. The platform-shaped top-level pages + (`/proxmox`, `/docker`, `/kubernetes`, `/truenas`, `/vmware`, `/standalone`) + are the canonical v6 routes. The unified `/infrastructure`, `/workloads`, + `/storage`, and `/recovery` routes that briefly shipped across `rc.1`-`rc.5` + are retired in `rc.6` and onward; any bookmark or runbook pointing at those + should move to the platform-shaped equivalent. 3. Re-test custom automation or dashboards that depended on v5-style `/api/state` or websocket payloads. 4. Re-test recovery workflows and any backup-era assumptions. @@ -109,4 +144,3 @@ hosted product; see the MSP section of the pricing doc. - `docs/UPGRADE_v6.md` - `docs/releases/V6_CHANGELOG.md` - `docs/PULSE_PRO.md` -- `docs/MIGRATION_UNIFIED_NAV.md` diff --git a/docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md b/docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md new file mode 100644 index 000000000..5d193b799 --- /dev/null +++ b/docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md @@ -0,0 +1,236 @@ +# Pulse v6.0.0-rc.6 Draft Release Notes + +_Draft only. Do not treat this as published until the governed +`v6.0.0-rc.6` tag and GitHub prerelease exist._ + +## What this RC is, and what it is not + +`v6.0.0-rc.6` is a pre-release for testing, not a candidate for general +availability. It is published on the existing `rc` channel because the +prerelease update path (`internal/updates/version.go`, +`internal/config/config.go`) is RC-shaped, but the framing is closer to +"come kick the tyres" than "this is days from GA". Pulse v5.1.32 remains +the current stable line. + +## Why the frontend looks like v5 again + +`rc.1` through `rc.5` introduced a unified information architecture for +v6: `/infrastructure`, `/workloads`, `/storage`, and `/recovery` as +top-level pages, with platform names demoted to filters and source +badges inside those views. Across five prereleases, the feedback I +received was consistent: existing users preferred the platform-shaped +navigation from v5. I did not receive feedback that the unified IA was +working better than the per-platform pages it replaced. + +With that signal pointing in one direction and no countervailing signal, +I reverted the frontend information architecture in `rc.6` to +platform-shaped top-level navigation: + +- Proxmox, Docker, Kubernetes, TrueNAS, vSphere, and Standalone are + each their own top-level page again. +- Alerts, Patrol, and Settings keep their own top-level pages. +- The unified resource model is still the backend contract. + `/api/resources` remains the canonical read; the platform pages + consume it and apply platform-shaped presentation on top. + +In short: v5 navigation, v6 data model. Same backend, the navigation +shape you already know. + +The keyboard shortcuts follow the new shape: + +- `g p` Proxmox, `g d` Docker, `g k` Kubernetes, `g n` TrueNAS, + `g v` vSphere, `g s` Standalone +- `g a` Alerts, `g r` Patrol, `g t` Settings, `?` shortcuts help + +The unified IA pages (`/infrastructure`, `/workloads`, `/storage`, +`/recovery`) and their aggregate route aliases are gone. The Command +Palette (`Cmd/Ctrl+K`) and global search (`/` to focus) still work and +are the fastest way across platforms. + +## Support Stance + +- Pulse v5.1.32 remains the current stable line. +- Pulse v6 `rc.6` is an opt-in evaluation build, not the default + production recommendation. +- Existing v5 users should still prefer staging, lab, or otherwise + controlled evaluation first. +- If you previously evaluated `rc.1` through `rc.5` on the unified IA + and held back because of the navigation, `rc.6` is the build to look + at again. +- The stable rollback target for this candidate is `v5.1.32`: + `./scripts/install.sh --version v5.1.32` + +## What changed since `rc.5` + +### Frontend information architecture reverted to platform-shaped + +The unified `/infrastructure`, `/workloads`, `/storage`, and `/recovery` +pages have been retired in favour of per-platform top-level pages. The +aggregate route aliases and legacy top-level workspace routes were +removed in the same pass, along with the orphaned summary components, +aggregate state hooks, and presentation utilities the unified pages +relied on. The unified resource model and `/api/resources` contract are +retained on the backend; per-platform pages consume that contract and +add platform-shaped presentation. Drawer shells, inline detail rows, +and per-platform filters were unified across Workloads, Docker, K8s, +and host drawers so the platform-shaped pages share their detail +surface. + +### vSphere as a first-class platform + +vSphere is a top-level platform in `rc.6`, parallel to Proxmox, Docker, +Kubernetes, and TrueNAS. The surface carries vSphere VMs through the +shared workloads pipeline, an inventory of vSphere networks, hosts with +version and uptime, cluster services, VM hardware configuration, VMware +Tools status, vCenter MoRef in the workload ID column, snapshot trees, +and a vSphere placement card in the workload drawer. vSphere tables +follow the canonical platform-table column alignment helper and the +shared platform conventions used by Proxmox and Docker. + +### Standalone surface renamed to Machines, with native detail UX + +The surface previously labelled "Agents" and then "Standalone" is now +"Machines". The rename consolidates the IA decision and the landing +behaviour into one name. The Machines table gained row identity +context, an expansion affordance, IP / disk I/O / RAID / network / +temperature detail tooltips, an aggregate disk summary in machine +details, SMART temperature fallback, machine discovery promoted into +drawer tabs, and a richer agent telemetry view. Machines is now +restricted to Pulse Agent resources. + +### TrueNAS native detail surfacing + +TrueNAS got native inline detail rendering across storage, system, +service, protection, and health rows, plus a shared TrueNAS detail +table extraction. TrueNAS health alerts surface on the overview, and +TrueNAS alert detail rows now appear in the drawer. + +### Proxmox backup recovery coverage and tab polish + +Proxmox backup tabs got click-to-sort across all three tabs, visual +density alignment with the Storage and Ceph pages, a canonical +ProgressBar for metric bars, a Backups column hidden on non-Proxmox +workload surfaces, a workload-row backup-age display, a consistency +pass on the sub-page conventions, and a coverage view that surfaces +which workloads have recent PBS artifacts. The Replication tab is +hidden when no replication signals exist. + +### FilterBar adoption and SavedViews wiring + +The Alerts history page, the audit log filter form, and the embedded +workloads filter all migrated to the canonical FilterBar pattern with +URL-backed filter state and SavedViews wiring. SavedViews are now wired +into Storage with a platform-scoped key, and the default-star is always +visible. Workloads search and `statusMode` migrated to URL params, and +the localStorage backup for `viewMode` and `containerRuntime` was +dropped so URL state is the single source of truth. + +### Patrol intelligence: capacity-forecast and reliability findings + +Patrol gained a capacity-forecast action template registry, forecast +proposals that attach onto a Patrol `RemediationPlan`, a reliability +finding that fires when an alert starts flapping, a PDM (Proxmox +Datacenter Manager) HTTP alert bridge that emits and resolves through +`FindingsStore.Add`, and a verification-outcome and capability- +postcondition substrate for finding lifecycle. + +### Self-hosted commercial posture: free-first, no caps + +Self-hosted commercial framing moved to free-first. The self-hosted +trial start route, hosted AI quickstart runtime, self-hosted AI +quickstart surfaces, monitored-system handoff prompts, and inactive Pro +upsell helpers are retired. Self-hosted guest capacity caps are gone, +self-hosted Pro continuity holds with no caps, and the Pulse Pro value +copy was aligned to the free-first posture. The Pro upsell path remains +opt-in. + +### Install pipeline hardening + +The release pipeline now ships `install.sh` as a GitHub Release asset, +gates the release on an end-to-end `install.sh` smoke test against the +published release, and self-tests the smoke gate on every workflow +edit. The archive install path now requires a `.sshsig` sidecar. +Windows agent onboarding moved to a seamless install flow with a +corrected installer readiness path. + +### Connection identity and source badges + +The platform source badge is now live and de-duplicates cluster +members. A connection-degraded alert fires for wedged platform +connections. Platform identity badges were clarified on the +infrastructure system rows. + +### Performance and correctness + +Workload charts are faster (TTL cache plus removal of redundant +clones). Concurrent `/api/state` and `/api/diagnostics` reads are +deduplicated through a singleflight gate. A regression that stripped +workloads `runtime` and `namespace` before guest data loaded is fixed. +Grouped notification cancellation, mixed quiet-hours notification +replay queueing, and resolved notifications after direct alert dispatch +are fixed. + +## Validation + +This packet should be audited against the commit range from the +published `v6.0.0-rc.5` tag through the validation-risk commit: + +- `v6.0.0-rc.5`: `` +- validation-risk commit: `` +- range: `v6.0.0-rc.5..` + +Expected scope: roughly 600+ commits, with the bulk concentrated in +`frontend-modern/src` (information architecture revert, vSphere +surface, Machines detail UX), `internal/vmware` (new vSphere +collector and inventory), `internal/api` (recovery and resources +contract continuity), `internal/ai` (capacity-forecast, PDM bridge, +verification substrate), and `.github/workflows` (install.sh smoke +gate). + +## Retest Plan + +1. Frontend information architecture: each of Proxmox, Docker, + Kubernetes, TrueNAS, vSphere, Standalone (Machines) loads as its + own top-level page; no `/infrastructure`, `/workloads`, + `/storage`, or `/recovery` aggregate routes remain; Command Palette + (`Cmd/Ctrl+K`) navigates across platforms; keyboard shortcuts + `g p / g d / g k / g n / g v / g s / g a / g r / g t` work. +2. vSphere: VMs through workloads pipeline, network inventory, hosts + with version and uptime, cluster services, VM hardware config, + VMware Tools status, vCenter MoRef in workload ID column, snapshot + trees in drawer, vSphere placement card. +3. Machines: row identity, expansion affordance, IP / disk I/O / RAID + / network / temperature detail tooltips, aggregate disk summary, + SMART fallback, machine discovery drawer tabs. +4. TrueNAS: native storage/system/service/protection details, alert + detail rows, overview health alerts. +5. Proxmox backups: click-sort across the three tabs, canonical + ProgressBar, hidden Replication tab on no-signals, backup-age on + workload rows, recovery coverage view. +6. FilterBar + SavedViews: Alerts history, audit log filter, embedded + workloads filter, Storage SavedViews, default-star visible, URL- + backed workload search and `statusMode`. +7. Patrol: capacity-forecast action template, forecast proposals on + RemediationPlan, flapping-alert reliability finding, PDM HTTP + alert bridge. +8. Self-hosted commercial: no trial start route, no AI quickstart + surfaces, no guest capacity caps, Pro continuity, free-first copy. +9. Install pipeline: `install.sh` smoke gate against published + release, `.sshsig` sidecar required on archive install path. +10. Release artifact download, checksum/signature, and installer + paths before broad retesting. + +## Evidence Appendix + +For the code-backed evidence packet that maps these claims to the +current release line, see: + +- `docs/release-control/v6/internal/subsystems/api-contracts.json` +- `docs/release-control/v6/internal/subsystems/unified-resources.json` +- `docs/release-control/v6/internal/subsystems/monitoring.json` +- `docs/release-control/v6/internal/subsystems/patrol-intelligence.json` +- `docs/release-control/v6/internal/subsystems/ai-runtime.json` +- `frontend-modern/src/features/platformPage/columnAlignment.ts` +- `frontend-modern/src/App.tsx` (top-level route shape) +- `frontend-modern/src/hooks/useKeyboardShortcuts.ts` (platform-keyed + shortcuts) diff --git a/docs/releases/V6_CHANGELOG.md b/docs/releases/V6_CHANGELOG.md index 32f871c0c..570d9f8d3 100644 --- a/docs/releases/V6_CHANGELOG.md +++ b/docs/releases/V6_CHANGELOG.md @@ -6,34 +6,66 @@ _This changelog describes the shipped stable `v6.0.0` release compared with ## What v6 changes at a high level -Pulse v6 changes both the shape of the product and the shape of the runtime -behind it. Pulse v5 was organized mainly around Proxmox and separate -platform-specific views. Pulse v6 is organized around the primary operational -surfaces: `Infrastructure`, `Workloads`, `Storage`, and `Recovery`. +Pulse v6 keeps the platform-shaped top-level navigation existing v5 operators +already know (Proxmox, Docker, Kubernetes, TrueNAS, vSphere, Standalone, plus +Alerts, Patrol, and Settings) and rebuilds the runtime behind it on a unified +resource model. The default top-level shape is the same shape v5 had; the +data flowing into those pages is the v6 unified `Resource` contract served +from `/api/resources`. -For existing Pulse v5 operators, this is not just a visual refresh. The -default routes change, the main live-state contract changes, install and -onboarding are split differently, and self-hosted commercial posture now -revolves around core monitoring included for self-hosted installs plus paid -convenience, history, and AI/admin surfaces rather than capped monitored-system -volume. +For existing Pulse v5 operators, this is not just a visual refresh. The live- +state contract changes, install and onboarding are split differently inside +Settings, self-hosted commercial posture now revolves around core monitoring +included for self-hosted installs plus paid convenience, history, and AI/admin +surfaces rather than capped monitored-system volume, and there are new top- +level pages (vSphere, Standalone, Patrol). + +The v6 line briefly shipped a unified `Infrastructure` / `Workloads` / +`Storage` / `Recovery` layout across `rc.1` through `rc.5`. Operator feedback +consistently preferred the platform-shaped navigation v5 already had, so I +reverted the frontend information architecture in `rc.6` to platform-shaped +pages while keeping the unified resource model on the backend. Same backend, +the navigation shape you already know. ## Major product and workflow changes -- **The top-level product layout is different.** Opening Pulse no longer drops - directly into a Proxmox overview. The v6 default route lands on - `Infrastructure`, with separate primary views for `Workloads`, `Storage`, and - `Recovery`. +- **The top-level product layout stays platform-shaped, on a unified + backend.** Proxmox, Docker, Kubernetes, TrueNAS, vSphere, and Standalone + are each their own top-level page, alongside Alerts, Patrol, and Settings. + Behind those pages, Pulse v6 runs on a unified `Resource` contract + (`/api/resources`) and per-platform pages consume that contract. -- **Recovery is a first-class surface.** In v5, backup-related behavior was - centered on backup-specific pages and route families. In v6, recovery is - treated as its own primary surface, and `Recovery` replaces the older - backup-first page model. +- **vSphere is a first-class platform.** vSphere has a top-level page + parallel to Proxmox, Docker, Kubernetes, and TrueNAS, with VMs through + the shared workloads pipeline, network inventory, hosts with version and + uptime, cluster services, VM hardware config, VMware Tools status, + vCenter MoRef on the workload ID, snapshot trees, and a vSphere placement + card in the workload drawer. -- **Infrastructure setup is split by ownership.** `Install on a host` is the - path for machines that should run the Unified Agent directly. `Platform - connections` is the path for API-backed systems such as Proxmox, TrueNAS, - and VMware. +- **Patrol is a first-class intelligence surface.** Patrol findings carry + in-place verbs (Investigate, Why, Verify fix, Create rule, Mark resolved), + structured investigation records with operator-facing Impact and rollback, + and a first-class resolved-finding lifecycle. Capacity-forecast action + templates and a reliability finding for flapping alerts are part of the + shipped surface. + +- **An external agent substrate ships.** `/api/agent/capabilities`, + `/api/agent/resource-context/{id}`, `/api/agent/fleet-context`, and + `/api/agent/events` give external agents (Claude Desktop, Claude Code, + custom MCP clients, plain HTTP consumers) the same situated context + Patrol and Assistant have. Worked examples ship in `cmd/pulse-mcp` and + `cmd/agent-probe`. + +- **Recovery is served as a backend contract.** `/api/recovery/*` aggregates + PBS snapshots, ZFS snapshots, and replication tasks. The platform-shaped + pages consume that contract; there is no top-level Recovery page in the + shipped frontend. + +- **Infrastructure onboarding is split by ownership inside Settings.** + `Settings → Infrastructure → Install on a host` is the path for machines + that should run the Unified Agent directly. `Settings → Infrastructure → + Platform connections` is the path for API-backed systems such as Proxmox, + TrueNAS, and VMware. - **Adding infrastructure is more structured.** The shipped v6 line includes cluster agent deployment workflows with candidate discovery, preflights, @@ -57,7 +89,7 @@ volume. ## What existing Pulse v5 users should re-test first -1. **Navigation and bookmarks.** Re-test saved links, runbooks, screenshots, and operator habits that assumed the old Proxmox-first route structure. +1. **Navigation and bookmarks.** The platform-shaped top-level pages (`/proxmox`, `/docker`, `/kubernetes`, `/truenas`, `/vmware`, `/standalone`) are the canonical v6 routes. The unified `/infrastructure`, `/workloads`, `/storage`, and `/recovery` routes that briefly shipped across `rc.1`-`rc.5` are retired in `rc.6` and onward; any bookmark or runbook pointing at those should move to the platform-shaped equivalent. 2. **Any custom automation that reads Pulse state.** If there are scripts, dashboards, browser extensions, or internal tooling that depended on v5-style `/api/state` or websocket payloads, re-test those before anything else. @@ -76,7 +108,7 @@ volume. ## Breaking or compatibility-sensitive changes -- **The default route and settings structure changed.** Existing links to old primary pages should be reviewed, even where legacy redirects still exist. +- **The settings structure changed.** Settings is reorganised in v6; existing links into specific settings sub-pages should be reviewed. The platform-shaped top-level routes match the v5 shape, so most navigation bookmarks will continue to resolve; bookmarks into the briefly-shipped unified routes (`/infrastructure`, `/workloads`, `/storage`, `/recovery`) are retired and need to move to the platform-shaped equivalents. - **The v5 live-state contract is not the v6 contract.** If custom code depends on `nodes`, `vms`, `containers`, `dockerHosts`, `hosts`, `storage`, or `backups` in `/api/state` or websocket payloads, it should be treated as migration work. diff --git a/docs/releases/V6_CHANGELOG_RC6_DRAFT.md b/docs/releases/V6_CHANGELOG_RC6_DRAFT.md new file mode 100644 index 000000000..e5068ce4c --- /dev/null +++ b/docs/releases/V6_CHANGELOG_RC6_DRAFT.md @@ -0,0 +1,300 @@ +# Pulse v6.0.0-rc.6 Draft Changelog + +_Draft only. This changelog describes the current `pulse/v6-release` delta +since the published `v6.0.0-rc.5` tag. Do not treat it as published until +the governed `v6.0.0-rc.6` prerelease exists._ + +## What `rc.6` changes compared with `rc.5` + +`v6.0.0-rc.6` is the frontend-reset RC. It is published on the `rc` +update channel for continuity with the existing prerelease pipe, but +its purpose is closer to "open this for testing under the new +navigation shape" than to "this is days from GA". It does not reopen +the `rc.2` commercial model or replace `v5.1.32` as the stable line. + +The headline change is the revert of the unified information +architecture introduced across `rc.1` through `rc.5`. The unified +`/infrastructure`, `/workloads`, `/storage`, and `/recovery` pages, +their aggregate route aliases, and the orphaned summary components, +aggregate state hooks, and presentation utilities that fed them are +removed. The frontend top level is platform-shaped again: Proxmox, +Docker, Kubernetes, TrueNAS, vSphere, Standalone (Machines), plus +Alerts, Patrol, and Settings. The unified resource model and +`/api/resources` contract are retained on the backend; the per- +platform pages consume that contract and add platform-shaped +presentation. + +Beyond the IA revert, `rc.6` carries the new vSphere first-class +platform surface, the Standalone-to-Machines surface evolution with +native detail UX, TrueNAS native detail rendering, Proxmox backup +recovery coverage and tab polish, FilterBar adoption with SavedViews, +Patrol capacity-forecast and reliability-finding work, the free-first +self-hosted commercial posture, and `install.sh` release-pipeline +hardening. + +## Commit Coverage Audit + +The changelog should be audited against every feature/runtime commit +in the exact code-backed release-validation range for the current +candidate: + +- `v6.0.0-rc.5`: `` +- validation-risk commit: `` +- range: `v6.0.0-rc.5..` +- expected commit count: 600+ +- expected changed scope: 1300+ files, 130000+ insertions, 65000+ + deletions + +Those commits are grouped in this changelog rather than listed one by +one. The range carries: the frontend information architecture revert +to platform-shaped navigation, the vSphere first-class platform +surface, the Standalone-to-Machines rename and native detail UX, the +TrueNAS native detail rendering pass, Proxmox backup recovery +coverage and tab polish, FilterBar adoption with SavedViews wiring on +Alerts history / audit log / embedded workloads / Storage, Patrol +capacity-forecast action templates and forecast proposals on +RemediationPlan, the PDM HTTP alert bridge and reliability finding +for flapping alerts, the free-first self-hosted commercial posture +with trial and AI quickstart retirement, `install.sh` release-asset +shipping with end-to-end smoke gate and `.sshsig` sidecar requirement, +Windows agent onboarding rework, connection-degraded alerting and +live platform source badges, drawer shell unification across +Workloads / Docker / host detail drawers, and a set of correctness +fixes around workloads runtime/namespace stripping, grouped +notification cancellation, quiet-hours notification replay, and +resolved notifications after direct alert dispatch. + +## Major Changes + +### 1. Frontend information architecture reverted to platform-shaped navigation + +The unified Infrastructure / Workloads / Storage / Recovery pages +introduced across `rc.1`-`rc.5` are removed. The frontend top level is +platform-shaped again: + +- Proxmox, Docker, Kubernetes, TrueNAS, vSphere, and Standalone + (Machines) are each their own top-level page. +- Alerts, Patrol, and Settings keep their own top-level pages. +- Aggregate top-level workspace routes and legacy infrastructure + route aliases are retired; aggregate route-state path builders are + removed. +- Orphaned summary components, aggregate state hooks, and + presentation utilities are deleted as part of the same pass. +- Drawer shells are unified across Workloads, Docker, K8s, and host + detail drawers so the platform pages share their detail surface. +- Keyboard shortcuts moved to platform keys: `g p` Proxmox, `g d` + Docker, `g k` Kubernetes, `g n` TrueNAS, `g v` vSphere, `g s` + Standalone, `g a` Alerts, `g r` Patrol, `g t` Settings. + +The unified resource model and `/api/resources` contract are retained +on the backend; the platform-shaped pages consume that contract and +apply platform-shaped presentation on top. + +This is the reason `rc.6` exists. Across `rc.1`-`rc.5` the feedback on +the unified IA was consistently in favour of the platform-shaped +navigation v5 already had, with no countervailing signal in favour of +the unified shape. `rc.6` realigns the frontend to the navigation +operators already had a mental model for, while keeping the v6 +backend. + +### 2. vSphere as a first-class platform + +vSphere is a top-level platform in `rc.6`, parallel to Proxmox, Docker, +Kubernetes, and TrueNAS: + +- vSphere VMs route through the shared Workloads pipeline (the legacy + `VsphereVirtualMachinesTable` is deleted). +- vSphere networks inventory. +- vSphere Hosts table with version and uptime columns. +- vSphere VM uptime and guest disk usage. +- vSphere cluster services. +- vSphere VM hardware config. +- VMware Tools status carried into the workload row. +- vCenter MoRef shown in the workload ID column. +- vSphere snapshot trees. +- vSphere placement card in the workload drawer. +- vSphere tables follow the canonical platform-table column-alignment + helper and the shared platform conventions used by Proxmox and + Docker. +- Guest OS column lights up for Proxmox and vSphere workloads in + unison. + +### 3. Standalone surface renamed to Machines with native detail UX + +The surface previously labelled "Agents" and then "Standalone" is now +"Machines". The IA decision and landing behaviour are consolidated +into one name and the surface is restricted to Pulse Agent resources: + +- Row identity context. +- Row expansion affordance. +- IP, disk I/O, RAID, network, and temperature detail tooltips. +- Aggregate disk summary in machine details. +- SMART temperature fallback. +- Richer agent telemetry preserved in the Machines table. +- Machine discovery promoted into drawer tabs. +- Machine facts promoted in drawer rows. + +### 4. TrueNAS native detail rendering + +TrueNAS gained native inline detail rendering across the row types: + +- Native storage details, system details, service detail rows, + protection detail rows. +- Shared TrueNAS detail table extraction (single rendering path). +- TrueNAS health alerts on the overview. +- TrueNAS alert detail rows in the drawer. + +### 5. Proxmox backup recovery coverage and tab polish + +The three Proxmox Backups tabs got: + +- Click-to-sort across all three tabs. +- Visual density alignment with the Storage and Ceph pages. +- A consistency pass on sub-page conventions. +- Canonical `ProgressBar` for metric bars. +- A coverage view that surfaces which workloads have recent PBS + artifacts. +- Backup-age display on workload rows. +- A Backups column hidden on non-Proxmox workload surfaces. +- The Replication tab is hidden when no replication signals exist. +- A backup artifact surface fix on the PBS path. +- A simplification pass on Proxmox backup recovery navigation. + +### 6. FilterBar adoption with SavedViews + +The canonical FilterBar pattern (chips plus `+ Filter`) expanded: + +- Alerts history converted to FilterBar with URL-backed filter state. +- Audit log filter form converted to FilterBar with SavedViews. +- Embedded workloads filter wired to `savedViewsKey`. +- Storage wired to SavedViews with a platform-scoped key. +- SavedViews default-star always visible. +- Workloads search and `statusMode` moved to URL params; the + localStorage backup for `viewMode` and `containerRuntime` is + dropped. URL state is now the single source of truth. +- Audit filters moved to URL with live-apply. + +### 7. Patrol intelligence additions + +Patrol gained: + +- Capacity-forecast action template registry. +- Forecast proposals attached onto Patrol `RemediationPlan`. +- Reliability finding emitted when an alert starts flapping. +- PDM (Proxmox Datacenter Manager) HTTP alert source and bridge, + emitting and resolving through `FindingsStore.Add`. +- Verification-outcome and capability-postcondition substrate for + finding lifecycle. +- A connection-degraded alert for wedged platform connections. +- Patrol approval-section assertions and shipped CONFIGURATION docs + synced after the changes landed. + +A storage-growth-planner runway widget was prototyped and removed in +the same range; it is not present in `rc.6`. + +### 8. Self-hosted commercial posture: free-first + +Self-hosted commercial framing moved to free-first: + +- Self-hosted trial start route, trial signup control plane, trial + activation callback, and trial-expired purchase handoff retired. +- Self-hosted AI quickstart surfaces and hosted AI quickstart runtime + retired. +- Hosted quickstart backend retired (the inactive Pro upsell helper + and self-hosted Pro upsell copy are gone). +- Self-hosted guest capacity caps removed; self-hosted Pro continuity + holds with no caps. A self-hosted commercial continuity proof is + shipped. +- Monitored-system handoffs routed to usage review. +- Self-hosted Pro prompts remain opt-in; trial starts are kept out of + feature gates. +- Pulse Pro v6 value copy aligned to the new posture. +- Stripped self-hosted monitoring upsell copy and stale Relay + onboarding price copy. +- A relationship-first monitoring v2 prototype with platform-layer + filters is in the range; it is exploratory and not the shipped + product surface in `rc.6`. + +### 9. Install pipeline hardening + +The release pipeline now treats `install.sh` as a release-blocking +artifact: + +- `install.sh` is shipped as a GitHub Release asset alongside the + binaries. +- An end-to-end `install.sh` smoke gate runs against the published + release on every workflow edit and on every create-release run. +- Archive install path requires a `.sshsig` sidecar. +- Installer extraction is hardened. +- Manual systemd install snippet binary path fixed. +- Windows agent onboarding moved to a seamless install flow with a + corrected installer readiness path. +- Proxmox install command tokens bound on first use. +- `publish-helm-chart` triggered via `workflow_call` from + `create-release`. +- Helm chart `agent.enabled` routed through the main pulse image. + +### 10. Connection identity, source badges, and notifications + +- Platform source badge is live and de-duplicates cluster members. +- Connection-degraded alert for wedged platform connections. +- Platform identity badges clarified on infrastructure system rows. +- `/api/state` and `/api/diagnostics` concurrent reads deduplicated + through a singleflight gate. +- Monitor reload skipped on no-op auto-register. +- Auto-register refresh notifications fixed. +- Grouped notification cancellation fixed. +- Mixed quiet-hours notification replay queueing fixed; quiet-hours + alert notifications now replay. +- Resolved notifications after direct alert dispatch fixed. + +### 11. Performance and correctness fixes + +- Workload charts use a TTL cache and skip redundant clones. +- Workloads `runtime` and `namespace` no longer stripped before guest + data loads. +- Table-only workload filtered empty state fixed. +- vSphere workload-type toolbar fix. +- Kubernetes nodes table reworked with Kubelet, runtime, and capacity + columns. +- Ceph drawer capacity bars use canonical metric color tokens. + +### 12. Documentation and accessibility + +- Notification and settings switches labelled. +- Alert schedule toggles labelled by section. +- Alert schedule and notification form labels bound. +- Patrol configuration toggles labelled. +- Four customer-facing doc drift findings fixed (RBAC, OIDC, helm, + webhooks). +- LLM markdown renderer DOMPurify config tightened. + +## Validation + +This range should be re-validated against the GitHub release pipeline +before `rc.6` is published: + +- Release artifact download, checksum, and signature verification. +- `install.sh` end-to-end smoke gate against the published release. +- Helm chart publication path. +- Frontend route inventory (no `/infrastructure`, `/workloads`, + `/storage`, `/recovery` top-level routes; per-platform routes + present). +- API route inventory (`/api/resources`, `/api/recovery/*` still + served). +- Keyboard shortcut surface matches `useKeyboardShortcuts.ts` + platform-keyed shape. +- Subsystem proofs across api-contracts, unified-resources, + monitoring, patrol-intelligence, and ai-runtime. + +## Evidence Appendix + +- `docs/release-control/v6/internal/subsystems/api-contracts.json` +- `docs/release-control/v6/internal/subsystems/unified-resources.json` +- `docs/release-control/v6/internal/subsystems/monitoring.json` +- `docs/release-control/v6/internal/subsystems/patrol-intelligence.json` +- `docs/release-control/v6/internal/subsystems/ai-runtime.json` +- `frontend-modern/src/App.tsx` (top-level route shape) +- `frontend-modern/src/hooks/useKeyboardShortcuts.ts` +- `frontend-modern/src/features/platformPage/columnAlignment.ts` +- `frontend-modern/src/features/platformPage/sharedPlatformPage.tsx`