






















@@ -330,6 +330,7 @@ describe("dispatchCronDelivery — double-announce guard", () => {
330330331331// deliveryAttempted must be true so timer does NOT fire enqueueSystemEvent
332332expect(state.deliveryAttempted).toBe(true);
333+expect(waitForDescendantSubagentSummary).toHaveBeenCalledTimes(1);
333334334335// Verify timer guard agrees: shouldEnqueueCronMainSummary returns false
335336expect(
@@ -347,6 +348,66 @@ describe("dispatchCronDelivery — double-announce guard", () => {
347348expect(deliverOutboundPayloads).not.toHaveBeenCalled();
348349});
349350351+it("bestEffort delivery skips active subagent wait and sends the cron reply", async () => {
352+vi.mocked(countActiveDescendantRuns).mockReturnValue(2);
353+vi.mocked(waitForDescendantSubagentSummary).mockResolvedValue(undefined);
354+vi.mocked(readDescendantSubagentFallbackReply).mockResolvedValue(undefined);
355+356+const params = makeBaseParams({
357+synthesizedText: "Parent cron summary is ready.",
358+deliveryBestEffort: true,
359+});
360+const state = await dispatchCronDelivery(params);
361+362+expect(waitForDescendantSubagentSummary).not.toHaveBeenCalled();
363+expect(deliverOutboundPayloads).toHaveBeenCalledTimes(1);
364+expectDeliveryCall(0, {
365+channel: "telegram",
366+to: "123456",
367+payloads: [{ text: "Parent cron summary is ready." }],
368+skipQueue: true,
369+});
370+expect(state.deliveryAttempted).toBe(true);
371+expect(state.delivered).toBe(true);
372+});
373+374+it("bestEffort delivery skips expected subagent follow-up waits", async () => {
375+vi.mocked(countActiveDescendantRuns).mockReturnValue(0);
376+vi.mocked(expectsSubagentFollowup).mockReturnValue(true);
377+vi.mocked(waitForDescendantSubagentSummary).mockResolvedValue(undefined);
378+379+const params = makeBaseParams({
380+synthesizedText: "Spawned a subagent and returning the parent summary now.",
381+deliveryBestEffort: true,
382+});
383+const state = await dispatchCronDelivery(params);
384+385+expect(waitForDescendantSubagentSummary).not.toHaveBeenCalled();
386+expect(deliverOutboundPayloads).toHaveBeenCalledTimes(1);
387+expectDeliveryCall(0, {
388+payloads: [{ text: "Spawned a subagent and returning the parent summary now." }],
389+});
390+expect(state.delivered).toBe(true);
391+});
392+393+it("bestEffort delivery still suppresses stale interim text while descendants run", async () => {
394+vi.mocked(countActiveDescendantRuns).mockReturnValue(2);
395+vi.mocked(isLikelyInterimCronMessage).mockReturnValue(true);
396+vi.mocked(readDescendantSubagentFallbackReply).mockResolvedValue(undefined);
397+vi.mocked(waitForDescendantSubagentSummary).mockResolvedValue(undefined);
398+399+const params = makeBaseParams({
400+synthesizedText: "on it, pulling everything together",
401+deliveryBestEffort: true,
402+});
403+const state = await dispatchCronDelivery(params);
404+405+expect(waitForDescendantSubagentSummary).not.toHaveBeenCalled();
406+expect(state.deliveryAttempted).toBe(true);
407+expect(state.delivered).toBe(false);
408+expect(deliverOutboundPayloads).not.toHaveBeenCalled();
409+});
410+350411it("early return (stale interim suppression) sets deliveryAttempted=true so timer skips enqueueSystemEvent", async () => {
351412// First countActiveDescendantRuns call returns >0 (had descendants), second returns 0
352413vi.mocked(countActiveDescendantRuns)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。