google-gemini / google-gemini/gemini-cli

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

Open
#22,588 2 comments 0 reactions 1 assignee Claimed by @Adib234 View on GitHub
🔒 maintainer only area/core effort/small kind/bug priority/p2 status/bot-triaged type/bug
Dominant language
TypeScript
Stars
107k
Forks
14.6k
Avg merge
2d 3h
Merged PRs (30d)
45

Description

## 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:

```typescript
// 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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.