test(signal): make status reaction timing deterministic (#111477)

This commit is contained in:
Peter Steinberger
2026-07-19 08:43:10 -07:00
committed by GitHub
parent ca3a1873a6
commit 218c8a5496
4 changed files with 25 additions and 2 deletions
@@ -640,6 +640,13 @@ describe("signal createSignalEventHandler inbound context", () => {
},
channels: { signal: { dmPolicy: "open", allowFrom: ["*"] } },
} as OpenClawConfig,
statusReactionTiming: {
debounceMs: 0,
doneHoldMs: 0,
errorHoldMs: 0,
stallSoftMs: 5_000,
stallHardMs: 15_000,
},
historyLimit: 0,
}),
);
@@ -715,6 +722,13 @@ describe("signal createSignalEventHandler inbound context", () => {
},
channels: { signal: { dmPolicy: "open", allowFrom: ["*"] } },
} as OpenClawConfig,
statusReactionTiming: {
debounceMs: 0,
doneHoldMs: 0,
errorHoldMs: 0,
stallSoftMs: 5_000,
stallHardMs: 15_000,
},
historyLimit: 0,
}),
);
@@ -6,6 +6,13 @@ export function createBaseSignalEventHandlerDeps(
): SignalEventHandlerDeps {
return {
runtime: { log: () => {}, error: () => {} } as SignalEventHandlerDeps["runtime"],
statusReactionTiming: {
debounceMs: 0,
doneHoldMs: 0,
errorHoldMs: 0,
stallSoftMs: 60_000,
stallHardMs: 120_000,
},
cfg: {},
baseUrl: "http://localhost",
accountId: "default",
@@ -218,6 +218,7 @@ async function finalizeSignalStatusReaction(params: {
}
export function createSignalEventHandler(deps: SignalEventHandlerDeps) {
const statusReactionTiming = deps.statusReactionTiming ?? DEFAULT_TIMING;
const activeEnqueueEntries = new WeakSet<SignalInboundEntry>();
async function handleSignalInboundMessage(entry: SignalInboundEntry) {
@@ -444,7 +445,7 @@ export function createSignalEventHandler(deps: SignalEventHandlerDeps) {
},
initialEmoji: ackReaction,
emojis: resolveSignalStatusReactionEmojis(statusReactionsConfig.emojis),
timing: DEFAULT_TIMING,
timing: statusReactionTiming,
onError: (err) => {
logAckFailure({
log: logVerbose,
@@ -455,7 +456,6 @@ export function createSignalEventHandler(deps: SignalEventHandlerDeps) {
},
})
: null;
const statusReactionTiming = DEFAULT_TIMING;
if (statusReactionController) {
void statusReactionController.setQueued();
}
@@ -1,3 +1,4 @@
import type { StatusReactionTiming } from "openclaw/plugin-sdk/channel-feedback";
// Signal type declarations define plugin contracts.
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
import type {
@@ -91,6 +92,7 @@ export type SignalNativeReplyContext = {
export type SignalEventHandlerDeps = {
runtime: RuntimeEnv;
statusReactionTiming?: Required<StatusReactionTiming>;
abortSignal?: AbortSignal;
runTrackedTask?: (task: () => Promise<void>) => void;
cfg: OpenClawConfig;