From 8b42c151621f80149fd0d11ae96f8697b8bc0e1a Mon Sep 17 00:00:00 2001 From: Lyon <88232613+pikasTech@users.noreply.github.com> Date: Wed, 24 Jun 2026 02:08:09 +0800 Subject: [PATCH] fix(web-probe): classify observer refresh aborts (#765) Co-authored-by: Codex --- scripts/src/hwlab-node-web-observe-runner-source.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/src/hwlab-node-web-observe-runner-source.ts b/scripts/src/hwlab-node-web-observe-runner-source.ts index ab6ec8b5..7d5af686 100644 --- a/scripts/src/hwlab-node-web-observe-runner-source.ts +++ b/scripts/src/hwlab-node-web-observe-runner-source.ts @@ -3523,7 +3523,7 @@ function buildRuntimeAlerts(samples, control, network, consoleEvents, errors) { const consoleAlerts = consoleEvents .filter((item) => /error|warning|warn|assert/iu.test(String(item?.type || "")) || isDiagnosticText(item?.text)) .map((item) => consoleAlertEvent(item, promptTimes)); - const significantConsoleAlerts = consoleAlerts.filter((item) => !isBenignLongLivedStreamClosureAlert(item)); + const significantConsoleAlerts = consoleAlerts.filter((item) => !isBenignLongLivedStreamClosureAlert(item) && !isObserverRefreshClosureAlert(item, observerRefreshTimes)); const pageErrors = errors.map((item) => ({ ts: item.ts ?? null, promptIndex: promptIndexForTs(promptTimes, item.ts), @@ -3804,10 +3804,11 @@ function isBenignLongLivedStreamClosureAlert(event) { } function isObserverRefreshClosureAlert(event, observerRefreshTimes) { - if (!["/v1/workbench/events", "/v1/web-performance"].includes(String(event?.urlPath || ""))) return false; + const urlPath = String(event?.urlPath || ""); + if (!["/v1/workbench/events", "/v1/web-performance"].includes(urlPath) && !/^\/v1\/workbench\/traces\/[^/]+\/events$/u.test(urlPath)) return false; if (event.status !== null && event.status !== undefined && Number(event.status) > 0) return false; const text = String(event.failureKind || event.errorPreview || event.preview || ""); - if (!/ERR_NETWORK_CHANGED|ERR_ABORTED|net::ERR_NETWORK_CHANGED|net::ERR_ABORTED|aborted|network changed/iu.test(text)) return false; + if (!/ERR_NETWORK_CHANGED|ERR_ABORTED|ERR_INCOMPLETE_CHUNKED_ENCODING|ERR_INVALID_CHUNKED_ENCODING|net::ERR_NETWORK_CHANGED|net::ERR_ABORTED|aborted|network changed|incomplete chunked|invalid chunked/iu.test(text)) return false; const ts = Date.parse(String(event.ts || "")); return Number.isFinite(ts) && observerRefreshTimes.some((refreshTs) => Math.abs(ts - refreshTs) <= 8000); }