Document rc.6 frontend IA revert in v6 release docs

rc.1-rc.5 shipped a unified /infrastructure /workloads /storage
/recovery top-level layout; rc.6 reverts the frontend to platform-
shaped pages (Proxmox / Docker / Kubernetes / TrueNAS / vSphere /
Standalone) on the same unified resource backend.

Updates the shipped v6 release docs to match:

- RELEASE_NOTES_v6.md and V6_CHANGELOG.md rewritten to describe the
  v6 layout as platform-shaped on a unified backend, with a paragraph
  in each explaining the rc.6 revert and the operator feedback that
  drove it.
- UPGRADE_v6.md prerelease packet pointer bumped from rc.5 to rc.6.
- MIGRATION_UNIFIED_NAV.md gets a top-of-file revert banner that
  redirects bookmarks targeting the unified routes to their platform-
  shaped equivalents; the original content is preserved below as a
  Historical Context section so the 19 tracked references into that
  doc still resolve.

Also adds the rc.6 draft packet:

- docs/releases/RELEASE_NOTES_v6_RC6_DRAFT.md
- docs/releases/V6_CHANGELOG_RC6_DRAFT.md

Validation SHAs in both drafts are left as <populate at packet
finalisation> markers; they fill in when the release-control packet
runs.
This commit is contained in:
rcourtman 2026-05-27 11:50:59 +01:00
parent 53149ab6c2
commit df79349368
6 changed files with 701 additions and 65 deletions

View file

@ -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.

View file

@ -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

View file

@ -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`

View file

@ -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`: `<populate at packet finalisation>`
- validation-risk commit: `<populate at packet finalisation>`
- range: `v6.0.0-rc.5..<validation-risk-sha>`
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)

View file

@ -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.

View file

@ -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`: `<populate at packet finalisation>`
- validation-risk commit: `<populate at packet finalisation>`
- range: `v6.0.0-rc.5..<validation-risk-sha>`
- 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`