docs(frontend): record windowed item-height estimate sampling

Record the shared windowing controller's representative item-height
measurement in the frontend-primitives and performance-and-scalability
contracts. Grouped surfaces lead with a short group header, so sampling only
the first sibling collapsed the estimate and desynced the mounted window from
the scroll position; the controller now samples several leading siblings and
keeps the tallest.

Change-source: pulse-maintainer
This commit is contained in:
pulse-triage[bot]
2026-09-21 00:00:19 +01:00
parent 6f0dc177c8
commit 8738eb1bff
2 changed files with 14 additions and 0 deletions
@@ -288,6 +288,14 @@ drawer state, and must never reconcile one row's nested value through another
row or duplicate rows after sorting. Missing or duplicate keys retain the
reference-keyed fallback.
The window's item-height estimate is measured from representative content, not
the leading sibling alone. Grouped surfaces render a short group header before
their first content row, and sampling only that header collapses the estimate so
the mounted window advances far faster than the real scroll position and drops a
group's rows mid-scroll. The controller samples several leading siblings and
keeps the tallest, so uniform tables still measure their real row height while
mixed group/content lists keep a content-scale estimate.
Shared workload, node, Docker-host, and resource-drawer history presentation
keeps current readings separate from stored samples. A current metric may
populate the legend while history is still being collected, but it must never
@@ -2242,6 +2242,12 @@ also reconciles unique string/number resource IDs into stable row proxies, so
sparse live snapshots update fields without remounting an open inline drawer
or discarding its tab and form state. Rows without a unique logical ID retain
reference-keyed rendering rather than paying for guessed index identity.
Spacer geometry and the inverse scroll-to-index mapping must share one
representative item height. The controller samples several leading siblings and
keeps the tallest, because a short leading group header sampled alone collapses
the estimate and lets the mounted window outrun the real scroll position,
turning a small scroll into many rows of unmounting and making an estate appear
to lose rows.
The workload guest-row path now follows the same pattern: the render shell
stays in `frontend-modern/src/components/Workloads/GuestRow.tsx`, tooltip-backed
cell presentation lives in `frontend-modern/src/components/Workloads/GuestRowCells.tsx`,