Files
pulse/docs/release-control
rcourtman ce338b1496 Remove the unreachable Workloads group drawer and group pin (#2723)
## Why

`useWorkloadsState` defaulted `groupNodeDrawerMode` to `'inline'`, and
only that mode wired group-header hover preview, click-to-pin group
scope and an inline `NodeDrawer` under the group row. The only page that
used the default, the standalone `/workloads` page, was retired in May.
Both production mounts have passed `'disabled'` since host drawers moved
to each page's own hosts table: Proxmox in 84f627e22a (2026-05-18, "Move
Proxmox host drawers to the host table") and vSphere in d96d5612fd
(2026-05-23). The disabling was deliberate on both pages, so this
removes the dead path instead of re-enabling it. The demand ledger has
no entry asking for workload group hover or pin.

The only way left to reach the group pin was a hand-typed
`?summaryGroup=` URL. No link builder passes it, and row expansion
stopped writing it in 86ac84f68e.

## What changes

- `WorkloadPanel`: drops the inline `NodeDrawer` mount, the group hover
and pin handlers, `aria-expanded`, `data-summary-group-series-count`,
`data-summary-row-active` on group rows, and the group-member state
passed to `GuestRow`. Group rows stay identity-only dividers and keep
`data-summary-group-id`, so clicking one still leaves an open guest
drawer alone (`summaryTableFocus` ignores that selector).
- `useWorkloadSelectionState`: drops the hovered and focused group
scope, `summaryGroup` hydration and the related effects. It no longer
passes group options to the shared bridge; Storage still uses them.
- `useWorkloadsState`: drops the option, `getNodeTemperatureThresholds`
(it only fed the removed drawer), and the `summaryGroupScopes` memo,
which rebuilt a scope for every group on every filtered-guest change.
- Removes `buildWorkloadSummaryGroupScope(Map)`,
`workloadsHasVisibleWorkloadGroupScope`, the `GuestRow` group-member
attribute and the workloads `summaryGroup` route param.
- Proxmox and vSphere stop passing the option. Their filter bars'
pinned-selection state now reads only the selected guest.
- `NodeDrawer` stays live in `ProxmoxNodesTable`. The temperature
guardrail now pins that live mount instead of the dead one.
- Contracts: rule 8 and the Workloads, Proxmox and vSphere clauses now
describe static dividers. Stale sentences about grouped node rows
opening the node drawer, group-row emphasis, and Workloads selection
writing back to the route are corrected.

## Verification

- Before/after browser pass on pulse-dev: embedded builds on mock demo
stacks, Proxmox and vSphere overviews, at 1440x900 and 390x844.
  - Hover, click and tap on group dividers do nothing on both builds.
- Guest drawer, Escape, guest-row hover emphasis, `?resource=` links and
the Proxmox nodes-table `NodeDrawer` behave the same on both builds.
- Clicking a divider with a guest drawer open keeps the drawer: 10/10 on
each build.
- The hand-typed `?summaryGroup=` URL pinned 18 Proxmox rows on main and
pins none now.
- Receipt: `frontend-modern/browser-verification/db4ee39cb5db006c.json`.
- Frontend typecheck passes. The targeted suites (Workloads, proxmox,
vmware, platformPage, shared, routing, utils, hooks, Storage) pass on
pulse-dev except one Proxmox backups windowing test that failed once at
load ~40 and then passed 2/2 alone.
- A full-suite run on the earlier base passed except files that also
fail on unmodified main or only under load. `useReportingPanelState`
fails on main there too.
- Commit hook battery and governance audits pass.
- Two rounds of second-opinion review. Round 1 caught a stale test pin
and stale perf-contract prose; round 2 caught one inaccurate
scroll-restore sentence. All are fixed here.

Follow-ups raised separately: the built-in `WorkloadsSurface` filter
toolbar is also unreachable, since both mounts pass
`suppressFilterToolbar`. The quarantined E2E spec 48 still targets the
retired `/workloads` page.
2026-10-08 01:58:31 +01:00
..