---
url: >-
  https://adk.nht.io/api/@nhtio/adk/exceptions/variables/E_LLM_EXECUTION_ALREADY_SIGNALLED.md
description: >-
  Thrown when {@link @nhtio/adk!DispatchContext.ack} or {@link
  @nhtio/adk!DispatchContext.nack} is called on a context that has already been
  signalled.
---

# Variable: E\_LLM\_EXECUTION\_ALREADY\_SIGNALLED

```ts
const E_LLM_EXECUTION_ALREADY_SIGNALLED: CreatedException<[]>;
```

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

Thrown when [@nhtio/adk!DispatchContext.ack](../../types/interfaces/DispatchContext.md#ack) or [@nhtio/adk!DispatchContext.nack](../../types/interfaces/DispatchContext.md#nack) is called on a
context that has already been signalled.

## Remarks

Fatal — signalling twice is a programming error in the caller. The first signal wins; the
second call is rejected loudly so callers cannot accidentally race between ack and nack.

##

::: danger
Signalling is **not** silently idempotent. The first `ack()` or `nack()` wins; the second
throws immediately. Guard with `if (!ctx.isSignalled)` when more than one seam may signal.
:::
