fix(cron): restore direct fallback after announce failure in best-effort mode (openclaw#36177)

Verified:
- pnpm build
- pnpm check (fails on pre-existing origin/main lint debt in extensions/mattermost imports)
- pnpm test:macmini

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
This commit is contained in:
Tak Hoffman
2026-03-05 07:25:24 -06:00
committed by GitHub
parent 4dc0c66399
commit 544abc927f
3 changed files with 35 additions and 35 deletions

View File

@@ -421,13 +421,13 @@ describe("runCronIsolatedAgentTurn", () => {
});
});
it("marks attempted when announce delivery reports false and best-effort is enabled", async () => {
it("falls back to direct delivery when announce reports false and best-effort is enabled", async () => {
const { res, deps } = await runAnnounceFlowResult(true);
expect(res.status).toBe("ok");
expect(res.delivered).toBe(false);
expect(res.delivered).toBe(true);
expect(res.deliveryAttempted).toBe(true);
expect(runSubagentAnnounceFlow).toHaveBeenCalledTimes(1);
expect(deps.sendMessageTelegram).not.toHaveBeenCalled();
expect(deps.sendMessageTelegram).toHaveBeenCalledTimes(1);
});
it("falls back to direct delivery when announce flow throws and best-effort is disabled", async () => {

View File

@@ -465,39 +465,38 @@ export async function dispatchCronDelivery(
}
} else {
const announceResult = await deliverViaAnnounce(params.resolvedDelivery);
if (announceResult) {
// Fall back to direct delivery only when the announce send was
// actually attempted and failed. Early returns from
// deliverViaAnnounce (active subagents, interim suppression,
// SILENT_REPLY_TOKEN) are intentional suppressions that must NOT
// trigger direct delivery — doing so would bypass the suppression
// guard and leak partial/stale content to the channel. (#32432)
if (announceDeliveryWasAttempted && !delivered && !params.isAborted()) {
const directFallback = await deliverViaDirect(params.resolvedDelivery);
if (directFallback) {
return {
result: directFallback,
delivered,
deliveryAttempted,
summary,
outputText,
synthesizedText,
deliveryPayloads,
};
}
// If direct delivery succeeded (returned null without error),
// `delivered` has been set to true by deliverViaDirect.
if (delivered) {
return {
delivered,
deliveryAttempted,
summary,
outputText,
synthesizedText,
deliveryPayloads,
};
}
// Fall back to direct delivery only when the announce send was actually
// attempted and failed. Early returns from deliverViaAnnounce (active
// subagents, interim suppression, SILENT_REPLY_TOKEN) are intentional
// suppressions that must NOT trigger direct delivery — doing so would
// bypass the suppression guard and leak partial/stale content.
if (announceDeliveryWasAttempted && !delivered && !params.isAborted()) {
const directFallback = await deliverViaDirect(params.resolvedDelivery);
if (directFallback) {
return {
result: directFallback,
delivered,
deliveryAttempted,
summary,
outputText,
synthesizedText,
deliveryPayloads,
};
}
// If direct delivery succeeded (returned null without error),
// `delivered` has been set to true by deliverViaDirect.
if (delivered) {
return {
delivered,
deliveryAttempted,
summary,
outputText,
synthesizedText,
deliveryPayloads,
};
}
}
if (announceResult) {
return {
result: announceResult,
delivered,