perf(core): don't re-publish step messages this invocation already published (#4099)
On a fan-out that runs some steps inline, the orchestrator invocation publishes the queued siblings' step-execution messages, runs its inline steps, falls back into the replay loop, reloads the log, and its pending-step dispatch pass publishes every one of those messages again (measured 19-28 re-sends per pass on a 32-branch fan-out, ~400 ms after the originals). The queue dedupes them by idempotency key, but the sends still cost round-trips on the shared connection pool and hold the invocation open past its useful work. Track, per delivery, the correlation ids this invocation has already published a step message for (the suspension handler's resilient publishes plus the dispatch pass's own immediate enqueues) and skip the immediate re-enqueue for those on later passes, unless a step_retrying has been observed since (a new schedule). The set is invocation-scoped and never derived from the log: a step_created does not prove the message was ever sent, so a different delivery still re-enqueues unconditionally. Reported as a debug log and the `workflow.dispatch.republish_skipped` span attribute. The QuickJS engine already keeps the equivalent invocation-scoped `queuedStepIds` set, so it is unchanged. Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
P
Pranay Prakash committed
788d4fbc261655b1dd7d049c334d21afac3edd81
Parent: 6cc851c
Committed by GitHub <noreply@github.com>
on 9/11/2026, 8:07:19 PM