diff --git a/audit/internal/webui/pages.go b/audit/internal/webui/pages.go
index 9b75d97..51b5602 100644
--- a/audit/internal/webui/pages.go
+++ b/audit/internal/webui/pages.go
@@ -1112,11 +1112,11 @@ func renderValidate(opts HandlerOptions) string {
)) +
`` +
`
` +
- renderSATCard("nvidia-pulse", "NVIDIA Pulse Test", "runNvidiaValidateSet('nvidia-pulse')", "", renderValidateCardBody(
+ renderSATCard("nvidia-pulse", "NVIDIA PSU Pulse Test", "runNvidiaFabricValidate('nvidia-pulse')", "", renderValidateCardBody(
inv.NVIDIA,
- `Verifies GPU transient power response using DCGM pulse load. Pass/fail determined by DCGM.`,
+ `Tests power supply transient response by pulsing all GPUs simultaneously between idle and full load. Synchronous pulses across all GPUs create worst-case PSU load spikes — running per-GPU would miss PSU-level failures.`,
`
dcgmi diag pulse_test`,
- `Skipped in Validate mode. Runs in Stress mode only. Runs one GPU at a time.
Only runs in Stress mode. Switch mode above to enable in Run All.
`,
+ `Skipped in Validate mode. Runs in Stress mode only. Runs all selected GPUs simultaneously — synchronous pulsing is required to stress the PSU.
Only runs in Stress mode. Switch mode above to enable in Run All.
`,
)) +
`
` +
`` +
@@ -1321,8 +1321,9 @@ function runSATWithOverrides(target, overrides) {
return enqueueSATTarget(target, overrides)
.then(d => streamSATTask(d.task_id, title, false));
}
-const nvidiaPerGPUTargets = ['nvidia', 'nvidia-targeted-stress', 'nvidia-targeted-power', 'nvidia-pulse'];
-const nvidiaAllGPUTargets = ['nvidia-interconnect', 'nvidia-bandwidth'];
+const nvidiaPerGPUTargets = ['nvidia', 'nvidia-targeted-stress', 'nvidia-targeted-power'];
+// pulse_test and fabric tests run on all selected GPUs simultaneously
+const nvidiaAllGPUTargets = ['nvidia-pulse', 'nvidia-interconnect', 'nvidia-bandwidth'];
function expandSATTarget(target) {
if (nvidiaAllGPUTargets.indexOf(target) >= 0) {
const selected = satSelectedGPUIndices();