Pulse/frontend-modern/browser-tests
pulse-triage[bot] b112524cd2 Keep single History observations visible and inspectable
A one-point stored History response drew no visible series and pointer inspection mapped it into a fictional one-millisecond window. Show a centred marker and one real timestamp, including measured zero, and share timestamp geometry with pointer inspection. Preserve multi-point rendering, keyboard access, empty states and request ownership.

Chromium and WebKit reproduce the predecessor defect. Twelve final desktop and phone states verify real canvas pixels, pointer and keyboard inspection, and sparse-to-empty refreshes. Synthetic presentation proof does not establish native collection or release availability.

Change-source: pulse-maintainer
2026-10-02 19:38:38 +01:00
..
action-receipt-wait.cjs Make pending action receipts safely refreshable 2026-09-29 20:10:56 +01:00
action-receipt-wait.html Make pending action receipts safely refreshable 2026-09-29 20:10:56 +01:00
action-receipt-wait.tsx Make pending action receipts safely refreshable 2026-09-29 20:10:56 +01:00
action-review-navigation.cjs Guard Actions review against stale responses 2026-09-29 20:52:24 +01:00
action-review-navigation.html Guard Actions review against stale responses 2026-09-29 20:52:24 +01:00
action-review-navigation.tsx Guard Actions review against stale responses 2026-09-29 20:52:24 +01:00
alert-card-footer.html fix(alerts): align the Started run with the alert-card footer (#2119) 2026-09-21 14:31:27 +01:00
alert-card-footer.tsx fix(alerts): align the Started run with the alert-card footer (#2119) 2026-09-21 14:31:27 +01:00
alert-recovery-acceptance.md docs(delivery): resolve acceptance identity from selected packet 2026-09-08 07:01:31 +01:00
app-refresh-verification.json test(web): qualify backup refresh through application boundaries 2026-09-05 01:55:54 +01:00
backups.html
backups.tsx
disk-live-refresh.cjs Keep physical disk rows current across live snapshots 2026-10-02 11:17:00 +01:00
disk-live-refresh.html Keep physical disk rows current across live snapshots 2026-10-02 11:17:00 +01:00
disk-live-refresh.tsx Keep physical disk rows current across live snapshots 2026-10-02 11:17:00 +01:00
disk-temperature.cjs Show disk temperature without extended SMART attributes 2026-10-02 17:37:38 +01:00
disk-temperature.html Show disk temperature without extended SMART attributes 2026-10-02 17:37:38 +01:00
disk-temperature.tsx Show disk temperature without extended SMART attributes 2026-10-02 17:37:38 +01:00
docs-fragment-navigation.html Restore semantic column headers in shipped documentation tables 2026-10-01 19:27:17 +01:00
docs-fragment-navigation.tsx Restore semantic column headers in shipped documentation tables 2026-10-01 19:27:17 +01:00
docs-table-headers.cjs Restore semantic column headers in shipped documentation tables 2026-10-01 19:27:17 +01:00
guest-storage-2263.cjs fix(workloads): defer SMART detail until disk expansion 2026-09-27 01:26:48 +01:00
guest-storage-2263.html Show linked guest disks and RAID in VM details 2026-09-26 18:37:32 +01:00
guest-storage-2263.tsx Show linked guest disks and RAID in VM details 2026-09-26 18:37:32 +01:00
history-inspection.cjs Make drawer History inspectable by keyboard and touch 2026-10-01 00:28:29 +01:00
history-keyboard.cjs Make storage History readings inspectable by keyboard 2026-10-02 16:02:38 +01:00
history-keyboard.html Make storage History readings inspectable by keyboard 2026-10-02 16:02:38 +01:00
history-keyboard.tsx Make storage History readings inspectable by keyboard 2026-10-02 16:02:38 +01:00
history-pointer.cjs Keep drawer History pointer values at one observed time 2026-10-01 01:38:17 +01:00
history-selection.cjs Keep shared History responses bound to the selected target 2026-10-02 15:16:10 +01:00
history-selection.html Keep shared History responses bound to the selected target 2026-10-02 15:16:10 +01:00
history-selection.tsx Keep shared History responses bound to the selected target 2026-10-02 15:16:10 +01:00
history-sparse.cjs Keep single History observations visible and inspectable 2026-10-02 19:38:38 +01:00
history-sparse.html Keep single History observations visible and inspectable 2026-10-02 19:38:38 +01:00
history-sparse.tsx Keep single History observations visible and inspectable 2026-10-02 19:38:38 +01:00
history-status.cjs Distinguish empty History from failed background refreshes 2026-10-02 16:52:26 +01:00
history-status.html Distinguish empty History from failed background refreshes 2026-10-02 16:52:26 +01:00
history-status.tsx Distinguish empty History from failed background refreshes 2026-10-02 16:52:26 +01:00
history-window.cjs Show sparse drawer History without inventing a trend 2026-10-01 06:22:45 +01:00
lifecycle-control.md test(web): verify incident convergence after native tab suspension 2026-09-08 08:23:44 +01:00
patrol-off-attention-2257.cjs Keep attention visible beside blocked Patrol setup 2026-09-26 20:18:42 +01:00
patrol-off-attention-2257.html Keep attention visible beside blocked Patrol setup 2026-09-26 20:18:42 +01:00
patrol-off-attention-2257.tsx Keep attention visible beside blocked Patrol setup 2026-09-26 20:18:42 +01:00
pbs-history-refresh.cjs Show sparse drawer History without inventing a trend 2026-10-01 06:22:45 +01:00
pbs-history-refresh.html Keep drawer History usable through failed refreshes 2026-09-30 23:02:05 +01:00
pbs-history-refresh.tsx Keep drawer History usable through failed refreshes 2026-09-30 23:02:05 +01:00
pbs-history-source-isolation.cjs Keep drawer History scoped to its current target and range 2026-09-30 21:12:44 +01:00
pbs-host-history-correlation.html fix(web): correlate PBS host history across guest and agent rows (#1723) 2026-09-22 09:43:00 +01:00
pbs-host-history-correlation.tsx fix(unifiedresources): correlate PBS host agent by reported node name 2026-09-23 11:29:27 +01:00
pbs-identity-boundary.cjs Keep PBS host History behind corroborated machine identity 2026-09-30 02:40:15 +01:00
pbs-identity-boundary.html Keep PBS host History behind corroborated machine identity 2026-09-30 02:40:15 +01:00
pbs-identity-boundary.tsx Keep PBS host History behind corroborated machine identity 2026-09-30 02:40:15 +01:00
pbs-mixed-source-1723.html Restore PBS History for mixed Agent and PVE sources 2026-09-29 17:43:53 +01:00
pbs-mixed-source-1723.tsx Restore PBS History for mixed Agent and PVE sources 2026-09-29 17:43:53 +01:00
pool-capacity.cjs Preserve missing capacity readings in storage pool details 2026-10-02 13:58:40 +01:00
pool-capacity.html Preserve missing capacity readings in storage pool details 2026-10-02 13:58:40 +01:00
pool-capacity.tsx Preserve missing capacity readings in storage pool details 2026-10-02 13:58:40 +01:00
proxmox-private-input.cjs Keep Proxmox bootstrap credentials out of copied commands 2026-10-01 05:23:08 +01:00
proxmox-private-input.html Keep Proxmox bootstrap credentials out of copied commands 2026-10-01 05:23:08 +01:00
proxmox-private-input.tsx Keep Proxmox bootstrap credentials out of copied commands 2026-10-01 05:23:08 +01:00
proxmox-tabs-2321-hook.ts Use source-filtered facets for Proxmox tab evidence 2026-09-29 14:57:59 +01:00
proxmox-tabs-2321-run.json Gate Proxmox tabs on observed capabilities 2026-09-29 12:25:29 +01:00
proxmox-tabs-2321.cjs Use source-filtered facets for Proxmox tab evidence 2026-09-29 14:57:59 +01:00
proxmox-tabs-2321.html Gate Proxmox tabs on observed capabilities 2026-09-29 12:25:29 +01:00
proxmox-tabs-2321.tsx Gate Proxmox tabs on observed capabilities 2026-09-29 12:25:29 +01:00
README.md docs(web): scope alert recurrence acceptance by installed identity 2026-09-08 05:21:46 +01:00
sso-mappings-2266.cjs Preserve spaced SSO group mappings in settings 2026-09-26 20:04:41 +01:00
sso-mappings-2266.html Preserve spaced SSO group mappings in settings 2026-09-26 20:04:41 +01:00
sso-mappings-2266.tsx Preserve spaced SSO group mappings in settings 2026-09-26 20:04:41 +01:00
table-row-touch.cjs Restore touch activation on shared table rows 2026-10-01 04:24:25 +01:00
table-row-touch.html Restore touch activation on shared table rows 2026-10-01 04:24:25 +01:00
table-row-touch.tsx Restore touch activation on shared table rows 2026-10-01 04:24:25 +01:00
thresholds-windowed-list.html fix(alerts): keep grouped-list window estimate off the header (#2130) 2026-09-20 23:50:19 +01:00
thresholds-windowed-list.tsx fix(alerts): keep grouped-list window estimate off the header (#2130) 2026-09-20 23:50:19 +01:00
unix-guidance-copy.cjs Keep private-file and uninstall guidance clear through copy lint 2026-10-01 19:25:52 +01:00
unix-private-install.cjs Keep Unix lifecycle credentials out of copied commands 2026-10-01 14:07:33 +01:00
unix-private-install.html Keep Unix lifecycle credentials out of copied commands 2026-10-01 14:07:33 +01:00
unix-private-install.tsx Keep private-file and uninstall guidance clear through copy lint 2026-10-01 19:25:52 +01:00
update-action-receipt.cjs Keep governed Docker updates pending until their action outcome is known 2026-09-29 23:18:14 +01:00
update-action-receipt.html Keep governed Docker updates pending until their action outcome is known 2026-09-29 23:18:14 +01:00
update-action-receipt.tsx Keep governed Docker updates pending until their action outcome is known 2026-09-29 23:18:14 +01:00
update-progress-modal.cjs Keep the update progress modal moving when the update stream goes quiet 2026-09-30 23:39:35 +01:00
update-progress-modal.html Keep the update progress modal moving when the update stream goes quiet 2026-09-30 23:39:35 +01:00
update-progress-modal.tsx Keep the update progress modal moving when the update stream goes quiet 2026-09-30 23:39:35 +01:00

Backup polling browser regression

From the repository root, after npm ci at the root and in frontend-modern:

pulse-heavy-run -- node scripts/check-backup-browser-polling.mjs
pulse-heavy-run -- env PULSE_BROWSER_WIDTH=390 node scripts/check-backup-browser-polling.mjs

Requires Playwright Chromium (npx playwright install chromium). The runner starts and closes a loopback-only Vite server on port 5198 and a headless browser; it neither needs nor contacts a live Pulse deployment. API responses are synthetic.

The fixture mounts the production backup table, router and CSS in a native scroll container, with 40 workloads replaced by HTTP polling once per second. It expands a mid-table workload and focuses its toggle, then verifies three changed snapshot names render while focus, restore evidence, scroll offset and the coverage route survive. Non-zero initial scroll prevents a vacuous pass.

This covers #1869's refresh stability at the coverage-table boundary. It does not qualify the full application resource provider/WebSocket path, PBS drawer, By date view, virtualised large tables, Settings editing, or Brave. A passing result is not grounds to close #1869 or claim the reported top-of-page jump fixed.

Application refresh boundary

pulse-heavy-run -- node scripts/check-backup-app-refresh.mjs
pulse-heavy-run -- env PULSE_BROWSER_WIDTH=390 node scripts/check-backup-app-refresh.mjs

This separate runner loads the actual application entry point, authentication bootstrap, router, scoped/paginated resource queries, WebSocket store and PBS resource drawer. Authentication and all API/socket data are synthetic; no live Pulse server or credentials are used. The browser blocks off-origin HTTP traffic. It supplies 240 workloads and a hybrid PBS resource with a metrics-history target. Three replacement rawData frames per view change rendered names, rather than merely waiting on a timer with unchanged content.

Assertions cover:

  • Coverage: fewer rendered rows than the inventory (windowing enabled), non-zero scroll, expanded restore evidence, focused expansion button and route retained.
  • By date: changed workload name, non-zero scroll, focused navigation link and route retained. This view has no per-artifact expansion toggle.
  • PBS: real History panel remains visible and selected, with its tab focused and route/scroll retained while the PBS name changes. Its baseline scroll is zero; this checks drawer state, not a non-zero drawer-scroll regression.
  • No uncaught page errors or error-level browser console messages.

Printed samples record scroll offsets and active controls. The fixed 500ms waits allow initial layout/scroll synchronisation; each refresh waits for changed text. The backup artifact HTTP payload itself is static after initial loading: this is resource-provider/socket replacement qualification, not backup API refetch proof. Narrow-width interaction is keyboard-driven, not touch or Brave qualification. The test does not cover Settings Manage editing, Authentication strategy selection, expansion padding, arbitrary inventory churn/reordering, or a deployed release. Passing is not grounds to close the mixed report #1869.

CI and release evidence

These standalone runners are manual qualification commands: the current GitHub workflows do not invoke them. A green Frontend or Core E2E check therefore does not establish that either runner passed on the checked commit. Record the exact source revision, command, viewport and output when using their results for release review; retained JSON samples describe their recorded run, not later commits or distributed images.

The separate integration spec tests/integration/tests/64-workloads-proxmox-refresh-stability.spec.ts covers workload History, LXC refresh/deletion and off-screen PBS drawer scrolling. It is currently listed in PROBATION_SPECS in tests/integration/e2e-tiering.mjs: its failures are reported but do not fail the Core E2E gate. Inspect the probation report as well as the aggregate check. It is not a substitute for these runners' Coverage/By date assertions. Promotion remains subject to the existing ten-clean- executed-main-runs rule; a local pass is not grounds to bypass it.

Alert recovery acceptance

The separate alert recovery checklist covers installed ordinary-event receipts, recurrence/restart isolation, and separately identified main-build screen-reader feedback. It is a manual procedure, not an automated runner or evidence that a candidate passed.