Skip to content

fix(core): MessageBus.request() silently hangs 60s when publish() fails #22588

@TravisHaa

Description

@TravisHaa

Bug Description

MessageBus.request() contains a floating promise that causes two failure modes when publish()
rejects:

  1. The rejection is routed to this.emit('error', error) on the EventEmitter. If no error
    listener is registered at call time, Node.js throws an uncaught exception and crashes the
    process
    .
  2. Even with an error listener, the Promise returned by request() silently hangs for the full
    60-second timeout instead of failing fast — the caller gets no immediate signal that the publish
    failed.

Root Cause

In packages/core/src/confirmation-bus/message-bus.ts, inside the new Promise() constructor
callback, this.publish() is not awaited and has no .catch() chain:

// eslint-disable-next-line @typescript-eslint/no-floating-promises,
@typescript-eslint/no-unsafe-type-assertion
this.publish({ ...request, correlationId } as TRequest);

Fix

Chain .catch(reject) on the publish call so any publish failure immediately cancels the timeout and rejects the caller. This affects any code path that calls messageBus.request() — including the planned STEP_THROUGH_REQUEST/RESPONSE flow in step-through mode, where a malformed message would deadlock the scheduler for 60 seconds.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/coreIssues related to User Interface, OS Support, Core Functionalitystatus/need-triageIssues that need to be triaged by the triage automation.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions