fix(FN-2117): log swallowed engine runtime errors

- Add structured warning logs in silent catch paths for IPC worker shutdown, plugin unregistration cleanup, child runtime metrics polling, and merger build rollback reset
- Improve merger rollback warning context to make build-verification reset and retry failures easier to diagnose
- Add regression tests covering each new warning path to ensure errors are surfaced without changing existing control flow
- Add StepSessionExecutor test coverage for cherry-pick abort logging when conflict cleanup fails
This commit is contained in:
Fusion
2026-04-19 02:55:04 -07:00
committed by gsxdsm
parent 12f1e7fa32
commit f7bd321d42
9 changed files with 196 additions and 11 deletions

View File

@@ -15,6 +15,7 @@
*/
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { PING, PONG, OK, ERROR, TASK_CREATED, ERROR_EVENT } from "./ipc-protocol.js";
import { ipcLog } from "../logger.js";
// ── Mock logger to suppress console output ──────────────────────────────
vi.mock("../logger.js", () => ({
@@ -408,6 +409,23 @@ describe("IpcWorker", () => {
worker.removeAllListeners();
});
it("logs warning when process.send throws during shutdown", () => {
const { worker, sendFn } = createWorker();
vi.mocked(ipcLog.warn).mockClear();
sendFn.mockImplementation(() => {
throw new Error("channel closed");
});
worker.shutdown();
expect(vi.mocked(ipcLog.warn)).toHaveBeenCalledWith(
expect.stringContaining("Failed to send SHUTDOWN message to parent: channel closed"),
);
expect(worker.isShuttingDown()).toBe(true);
worker.removeAllListeners();
});
it('emits "shutdown" event on the IpcWorker instance', () => {
const { worker } = createWorker();
const handler = vi.fn();

View File

@@ -278,8 +278,9 @@ export class IpcWorker extends EventEmitter {
// Notify parent we're shutting down
try {
process.send?.({ type: "SHUTDOWN", id: generateCorrelationId(), payload: {} });
} catch {
// Ignore errors during shutdown
} catch (sendErr: unknown) {
const msg = sendErr instanceof Error ? sendErr.message : String(sendErr);
ipcLog.warn(`Failed to send SHUTDOWN message to parent: ${msg}`);
}
}