---
url: >-
  https://adk.nht.io/api/@nhtio/adk/exceptions/variables/E_PIPELINE_SHORT_CIRCUITED.md
description: >-
  Emitted (via the `error` event) when a middleware pipeline resolves without
  reaching its terminal handler and without the turn being aborted. Indicates
  that some middleware returned without calling `next` and without signalling a
  deliberate refusal via the turn's abort controller.
---

# Variable: E\_PIPELINE\_SHORT\_CIRCUITED

```ts
const E_PIPELINE_SHORT_CIRCUITED: CreatedException<[string]>;
```

Defined in: [lib/exceptions/runtime.ts:108](https://github.com/NHTIO/ADK/blob/v1.20260605.0/src/lib/exceptions/runtime.ts#L108)

Emitted (via the `error` event) when a middleware pipeline resolves without reaching its
terminal handler and without the turn being aborted. Indicates that some middleware
returned without calling `next` and without signalling a deliberate refusal via the turn's
abort controller.

## Remarks

Not fatal — the runner emits this on the `error` event so the failure is observable, then
proceeds to short-circuit the remainder of the turn the same way any other pipeline error
would. The constructor takes a single positional argument identifying the pipeline that
short-circuited: one of `'turn-input'`, `'turn-output'`, `'dispatch-input'`, or `'dispatch-output'`.

Deliberate refusals should call `ctx.abort(reason)`, which sets the `'aborted'` outcome
instead of emitting this error.

##

::: warning
This is a **detection condition**, not a thrown exception. The runner constructs and emits
the code itself when it detects a missing `next()` on the unwind — nothing in user code
throws it. Upstream post-steps still run normally.
:::

## Example

```ts
throw new E_PIPELINE_SHORT_CIRCUITED(["turn-input"]);
```
