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

Labels

area/coreIssues related to User Interface, OS Support, Core Functionalityeffort/small1 day or less: trivial logic, UI adjustments, docskind/bugpriority/p2Important but can be addressed in a future release.status/bot-triagedtype/bug🔒 maintainer only⛔ Do not contribute. Internal roadmap item.

Type

No fields configured for Bug.

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions