Files
pulse/docs
rcourtman 0a55939c72 Keep open row drawers spanning the table when columns change (#2571)
An open inline row drawer measured its colspan from the summary row's
visible cells only on mount and on resize. Hiding or showing a column
with the drawer open, from View > Columns or through a data-driven
column such as the vCenter column added in #2566, left the drawer with
its old span.

Reproduced on a mock stack before the change:
- **Machines (`/standalone`), 1440px**: hiding Uptime with a drawer open
left colspan 9 against 8 headers. The header and rows shrank to 939px of
the 1375px table, beside a blank 436px column. Showing System left
colspan 7 against 8, and the drawer stopped 79px short of the actions
column.
- **Proxmox guests (`/proxmox`), 1440/1024/768px**: hiding Type, Uptime
or Backup left colspan one above the header count. The fixed layout
collapses the phantom column to about 1px there.

Fix, in the shared `InlineDetailTableRow`:
- A MutationObserver on the summary row re-measures when cells are
added, removed or hidden (class, style, hidden or colspan changes on a
cell). Changes inside a cell's content are ignored, so live metric
updates do not re-measure.
- The span also re-syncs when the caller's requested colspan changes,
which covers rows with no summary row to measure.
- When the span grows, Chromium keeps a fixed-layout table's old column
widths for the widened cell (minimal repro: 400px instead of 600px after
a column is added and laid out). The row sets the cell's own width for
one forced layout and restores it. Focus and inner scroll positions
survive.

After the change, on both tables at 1440 and 768px, the drawer colspan
equals the visible header count after every toggle. The drawer, the last
header cell and the last summary cell all end at the table edge, and the
drawer row stays mounted. The vSphere Activity drawer still spans 6 of 6
columns.

`InlineDetailTableRow.test.tsx` gains three tests that fail on main:
removing and restoring a summary cell, hiding one in place, and changing
the requested span with no summary row. It also becomes a registered
frontend-primitives proof. The contract note sits beside the existing
`InlineDetailTableRow` clause in `frontend-primitives.md`.

Follow-up commits on this branch:
- `InlineDetailTableRow.test.tsx` spies on `offsetWidth`. It requires
exactly one forced layout read of the detail cell, at width 0px with the
new colspan, when the requested span and the summary cells grow in the
same update, and none when they shrink. A further test checks that a
summary cell's colspan change re-measures while class and node churn
inside a cell does not. Removing the forced read, doubling the
workaround, removing it, or widening the observer filter each fails the
matching test.
- `tests/integration/tests/98-inline-drawer-column-span.spec.ts` is a
real-browser check on the Machines table. It opens a drawer, hides and
restores System through View > Columns, and asserts the following after
each step: the drawer spans the visible headers, the drawer, last header
and table share a right edge, and the drawer row, focus and any inner
scroll survive. It fails on main before the fix (colspan 8 against 7)
and with only the width workaround removed (drawer 79px short). It
passed five runs in a row with the fix.
2026-10-06 17:37:34 +01:00
..
2026-10-05 21:53:41 +01:00
2026-10-05 21:53:41 +01:00
2026-10-05 21:53:41 +01:00

Pulse documentation

Start here for installation, platform setup, security, operations, and Pulse Intelligence. Commands, configuration keys, image names, API fields, and product identifiers remain untranslated in localized guides.

Start here

  • Install Pulse — signed Proxmox/Linux installation, Docker, Docker Compose, Kubernetes, and first-run setup.
  • Production deployment and security — least-privilege Proxmox setup, root-agent boundaries, discovery, supply-chain verification, plan limits, scale evidence, and a rollout checklist.
  • Upgrade from Pulse v5 — migration prerequisites, rollback, agent continuity, and post-upgrade checks.
  • Releases and update channels: choosing Stable or Preview, beta and RC expectations, and how releases are tested and promoted.
  • Configure Pulse — authentication, notifications, discovery, retention, and system settings.
  • Deployment models — data locations, lifecycle, and differences between supported deployment paths.
  • Troubleshooting and FAQ — common failures, diagnostics, and operator questions.

Localized getting started guides: Deutsch · Español

Platforms and agents

VMware vSphere support is early access. Current builds expose dedicated vSphere inventory and recovery context, but operators should validate the integration against their own vCenter before production use.

Monitoring and operations

Pulse Intelligence

Patrol watch-only analysis is available on Community with a local model or the operator's own provider. Investigation and governed fixes require the relevant Pulse Pro capabilities.

Security, privacy, and access

Plans and managed access

Pulse Cloud is not generally available. Ordinary self-hosted Pulse remains the primary installation path; MSP and Enterprise access are explicit commercial paths rather than defaults in self-hosted setup.

Development and reference

Detailed design notes and dated migration specifications may remain in this directory for maintainers, but they are not operator setup guides unless they are linked from the sections above.

Previous versions and migrations

Found a bug? Use the issue forms. For setup questions, use GitHub Discussions.