v4.4.6
triggerdotdev/trigger.devv4.4.6May 12, 2026by github-actions[bot]
AI Summary
Fixes uncaught exception handling in workers and resolves CPU spinning issues in dev workers when the CLI disconnects.
Key Highlights
- Fail fast on uncaught exceptions (Node EventEmitter) instead of hanging to MAX_DURATION_EXCEEDED
- Fix dev workers spinning at 100% CPU after parent CLI disconnects
Full Release Notes
# trigger.dev v4.4.6
## Upgrade
```sh
npx trigger.dev@latest update # npm
pnpm dlx trigger.dev@latest update # pnpm
yarn dlx trigger.dev@latest update # yarn
bunx trigger.dev@latest update # bun
```
Self-hosted Docker image: [`ghcr.io/triggerdotdev/trigger.dev:v4.4.6`](https://github.com/triggerdotdev/trigger.dev/pkgs/container/trigger.dev/858669743?tag=v4.4.6)
## Release notes
Read the full release notes: https://trigger.dev/changelog/v4-4-6
## What's changed
## Improvements
- Fail attempts on uncaught exceptions instead of hanging to `MAX_DURATION_EXCEEDED`. A Node `EventEmitter` (e.g. `node-redis`) emitting `"error"` with no `.on("error", ...)` listener escalates to `uncaughtException`, which the worker previously reported but did not act on — runs drifted to maxDuration with empty attempts. They now fail fast with the original error and status `FAILED`, and respect the task's normal retry policy. You should still attach `.on("error", ...)` listeners to long-lived clients to handle errors gracefully. ([#3529](https://github.com/triggerdotdev/trigger.dev/pull/3529))
## Bug fixes
- Fix dev workers spinning at 100% CPU after the parent CLI disconnects. Orphaned `trigger-dev-run-worker` (and indexer) processes were caught in an `uncaughtException` feedback loop: a periodic IPC send via `process.send` would throw `ERR_IPC_CHANNEL_CLOSED` once the parent closed the channel, which re-entered the same handler that itself called `process.send`, scheduled via `setImmediate` and amplified by source-map-support's `prepareStackTrace`. Fixed by (1) silently dropping packets in `ZodIpcConnection` when the channel is disconnected, (2) adding a `process.on("disconnect", ...)` handler in dev workers so they exit cleanly when the CLI closes the IPC channel, and (3) wrapping all `uncaughtException`-path `process.send` calls in a `safeSend` guard that checks `process.connected` and swallows synchronous throws. ([#3491](https://github.com/triggerdotdev/trigger.dev/pull/3491))
## All packages: v4.4.6
@trigger.dev/build, @trigger.dev/core, @trigger.dev/python, @trigger.dev/react-hooks, @trigger.dev/redis-worker, @trigger.dev/rsc, @trigger.dev/schema-to-json, @trigger.dev/sdk, trigger.dev
## Contributors
Eric Allam, @nicktrn, James Ritchie, @isshaddad, @d-cs, github-actions[bot], Matt Aitken, Saadi Myftija, Oskar Otwinowski
**Full changelog**: https://github.com/triggerdotdev/trigger.dev/compare/v4.4.5...v4.4.6