From 102b67ec9bb41900def65bdf7464fac208a979a9 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 11 Aug 2026 22:27:26 +0800 Subject: [PATCH] fix(slack): retry transient member event failures --- .../slack/src/monitor/events/members.test.ts | 25 +++++++++++++++++++ .../slack/src/monitor/events/members.ts | 1 + 2 files changed, 26 insertions(+) diff --git a/extensions/slack/src/monitor/events/members.test.ts b/extensions/slack/src/monitor/events/members.test.ts index e42aa6906529..b6823f13a504 100644 --- a/extensions/slack/src/monitor/events/members.test.ts +++ b/extensions/slack/src/monitor/events/members.test.ts @@ -145,6 +145,31 @@ describe("registerSlackMemberEvents", () => { expect(trackEvent).toHaveBeenCalledTimes(1); }); + it("logs and rejects transient member lookup failures", async () => { + const lookupError = new Error("users.info temporarily unavailable"); + const harness = initSlackHarness(); + const runtimeError = vi.fn(); + harness.ctx.runtime.error = runtimeError; + harness.ctx.resolveUserName = vi.fn().mockRejectedValue(lookupError); + registerSlackMemberEvents({ ctx: harness.ctx }); + const handler = harness.getHandler("member_joined_channel"); + if (!handler) { + throw new Error("expected Slack member joined handler"); + } + + await expect( + handler({ + event: makeMemberEvent(), + body: { event_id: "Ev-member-failure" }, + }), + ).rejects.toBe(lookupError); + + expect(runtimeError).toHaveBeenCalledWith( + expect.stringContaining("users.info temporarily unavailable"), + ); + expect(memberMocks.enqueue).not.toHaveBeenCalled(); + }); + it("keys each queued event by the envelope occurrence", async () => { await runMemberCase({ body: { event_id: "Ev-member-2" } }); diff --git a/extensions/slack/src/monitor/events/members.ts b/extensions/slack/src/monitor/events/members.ts index 3670c6b5b35f..150fbe5c53fc 100644 --- a/extensions/slack/src/monitor/events/members.ts +++ b/extensions/slack/src/monitor/events/members.ts @@ -66,6 +66,7 @@ export function registerSlackMemberEvents(params: { ctx.runtime.error?.( danger(`slack ${paramsLocal.verb} handler failed: ${formatErrorMessage(err)}`), ); + throw err; } };