diff --git a/src/signal/daemon.test.ts b/src/signal/daemon.test.ts index 4940fc8b7..134605f10 100644 --- a/src/signal/daemon.test.ts +++ b/src/signal/daemon.test.ts @@ -16,6 +16,15 @@ describe("classifySignalCliLogLine", () => { expect(classifySignalCliLogLine("ERROR Something")).toBe("error"); }); + it("treats failures without explicit severity as error", () => { + expect( + classifySignalCliLogLine("Failed to initialize HTTP Server - oops"), + ).toBe("error"); + expect(classifySignalCliLogLine('Exception in thread "main"')).toBe( + "error", + ); + }); + it("returns null for empty lines", () => { expect(classifySignalCliLogLine("")).toBe(null); expect(classifySignalCliLogLine(" ")).toBe(null); diff --git a/src/signal/daemon.ts b/src/signal/daemon.ts index 0bd382f9c..ca1b01b60 100644 --- a/src/signal/daemon.ts +++ b/src/signal/daemon.ts @@ -23,6 +23,8 @@ export function classifySignalCliLogLine(line: string): "log" | "error" | null { if (!trimmed) return null; // signal-cli commonly writes all logs to stderr; treat severity explicitly. if (/\b(ERROR|WARN|WARNING)\b/.test(trimmed)) return "error"; + // Some signal-cli failures are not tagged with WARN/ERROR but should still be surfaced loudly. + if (/\b(FAILED|SEVERE|EXCEPTION)\b/i.test(trimmed)) return "error"; return "log"; }