From a8418f99bd7bada30f68436b29086b83f678eaf6 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 10:42:43 +0000 Subject: [PATCH] fix(error-reporting): silence ValidationError from Sentry --- src/lib/error-reporting.ts | 10 +++++++++- test/lib/error-reporting.test.ts | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/error-reporting.ts b/src/lib/error-reporting.ts index a44c98596..7ee1c24aa 100644 --- a/src/lib/error-reporting.ts +++ b/src/lib/error-reporting.ts @@ -54,7 +54,8 @@ type SilenceReason = | "output_error" | "auth_expected" | "api_user_error" - | "network_error"; + | "network_error" + | "validation_error"; /** * Classify whether an error should be silenced. @@ -88,6 +89,13 @@ export function classifySilenced(error: unknown): SilenceReason | null { // is now only thrown for a genuine 401/403 (see auth/login.ts) — transient // network/server failures no longer masquerade as it — so it is safe to // silence alongside the others (CLI-19). + // A ValidationError means the user supplied invalid input (e.g. combining + // --follow with an absolute date range). These are user-input mistakes, not + // CLI bugs, so silencing them keeps Sentry noise-free while still showing + // the user an actionable error message (CLI-296). + if (error instanceof ValidationError) { + return "validation_error"; + } if (error instanceof AuthError) { return "auth_expected"; } diff --git a/test/lib/error-reporting.test.ts b/test/lib/error-reporting.test.ts index 1b0bed9e1..72f80e523 100644 --- a/test/lib/error-reporting.test.ts +++ b/test/lib/error-reporting.test.ts @@ -298,12 +298,17 @@ describe("classifySilenced", () => { expect(classifySilenced(err)).toBeNull(); }); + test("silences ValidationError (user input mistake)", () => { + expect(classifySilenced(new ValidationError("bad"))).toBe( + "validation_error" + ); + }); + test.each([ [ "ResolutionError", new ResolutionError("Project 'x'", "not found", "sentry issue list"), ], - ["ValidationError", new ValidationError("bad")], ["SeerError", new SeerError("not_enabled")], ["ConfigError", new ConfigError("bad")], ["generic Error", new Error("boom")],