Pulse/frontend-modern/browser-tests
pulse-triage[bot] 3d77bb5b3c Keep physical disk rows current across live snapshots
The keyed platform renderer preserves row owners, but the disk table captured mount-time presentation. Derive current health, readings, placement and target bindings reactively without discarding focus or expanded detail. Cover snapshot replacement, in-place updates, missing evidence and attention-filter recovery; record desktop and phone browser acceptance.

Change-source: pulse-maintainer
2026-10-02 11:17:00 +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 Preserve backup coverage row focus across polling snapshots 2026-09-05 01:33:47 +01:00
backups.tsx Preserve backup coverage row focus across polling snapshots 2026-09-05 01:33:47 +01:00
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
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-pointer.cjs Keep drawer History pointer values at one observed time 2026-10-01 01:38:17 +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
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.