feat(FN-957): filter silent transient errors from executor and triage logs

- Add isSilentTransientError() function to detect noisy transient errors (ETIMEDOUT, ENOTFOUND, ECONNRESET, etc.)
- Filter silent transient errors from executor error logging to reduce noise
- Filter silent transient errors from triage error logging to reduce noise
- Add unit tests for isSilentTransientError covering all error patterns
This commit is contained in:
gsxdsm
2026-04-04 22:03:42 -07:00
parent ba90bad3dc
commit 64f617e0eb
4 changed files with 82 additions and 6 deletions

View File

@@ -2,6 +2,7 @@ import { describe, it, expect } from "vitest";
import {
isTransientError,
classifyError,
isSilentTransientError,
TRANSIENT_ERROR_PATTERNS,
} from "./transient-error-detector.js";
import { isUsageLimitError } from "./usage-limit-detector.js";
@@ -202,4 +203,37 @@ describe("Transient Error Detector", () => {
});
});
});
describe("isSilentTransientError", () => {
it("returns true for 'request was aborted'", () => {
expect(isSilentTransientError("request was aborted")).toBe(true);
expect(isSilentTransientError("Request was aborted")).toBe(true);
expect(isSilentTransientError("REQUEST WAS ABORTED")).toBe(true);
expect(isSilentTransientError("Error: request was aborted")).toBe(true);
});
it("returns false for other transient errors", () => {
expect(isSilentTransientError("ECONNREFUSED")).toBe(false);
expect(isSilentTransientError("socket hang up")).toBe(false);
expect(isSilentTransientError("upstream connect error")).toBe(false);
expect(isSilentTransientError("connection reset")).toBe(false);
});
it("returns false for non-transient errors", () => {
expect(isSilentTransientError("SyntaxError: Unexpected token")).toBe(false);
expect(isSilentTransientError("Test failed")).toBe(false);
});
it("returns false for empty/invalid input", () => {
expect(isSilentTransientError("")).toBe(false);
expect(isSilentTransientError(null as unknown as string)).toBe(false);
expect(isSilentTransientError(undefined as unknown as string)).toBe(false);
});
it("returns false for partial matches like 'abort' alone", () => {
expect(isSilentTransientError("abort")).toBe(false);
expect(isSilentTransientError("Aborted")).toBe(false);
expect(isSilentTransientError("The operation was aborted by user")).toBe(false);
});
});
});