# TraconLoopUnsatisfiedException

> Tracon documentation. Tracon is a .NET package family that adds a control
> plane on Microsoft Agent Framework, published as NuGet packages that run
> inside your own ASP.NET Core application.
>
> Page: https://tracon.dev/api/tracon.traconloopunsatisfiedexception/
> Summary: TraconLoopUnsatisfiedException: Thrown when a harness loop reaches its iteration ceiling while a criterion still asks for another iteration, and its LoopSettings.OnExhausted is LoopOutcome.FailRun.

<div class="api-provenance">Namespace Tracon · Assembly <code>Tracon.Abstractions.dll</code></div>

Thrown when a harness loop reaches its iteration ceiling while a criterion still
asks for another iteration, and its [LoopSettings.OnExhausted](/api/tracon.loopsettings/#Tracon_LoopSettings_OnExhausted) is
[LoopOutcome.FailRun](/api/tracon.loopoutcome/).

```csharp
public sealed class TraconLoopUnsatisfiedException : TraconException, ISerializable
```

<dl class="api-relations"><dt>Inheritance</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object">object</a> ← <a href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a> ← <a href="/api/tracon.traconexception/">TraconException</a> ← <a href="/api/tracon.traconloopunsatisfiedexception/">TraconLoopUnsatisfiedException</a></dd><dt>Implements</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.runtime.serialization.iserializable">ISerializable</a></dd><dt>Inherited Members</dt><dd><a href="/api/tracon.traconexception/#Tracon_TraconException_ErrorType">TraconException.ErrorType</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.getbaseexception">Exception.GetBaseException()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.tostring">Exception.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.gettype">Exception.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.targetsite">Exception.TargetSite</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.message">Exception.Message</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.data">Exception.Data</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.innerexception">Exception.InnerException</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.helplink">Exception.HelpLink</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.source">Exception.Source</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.hresult">Exception.HResult</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.stacktrace">Exception.StackTrace</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a></dd></dl>

## Remarks

The run fails with error type `loop_unsatisfied`, classified as
[RunErrorClass.LoopUnsatisfied](/api/tracon.runerrorclass/). A workflow that runs the agent stops
at that node: the response no criterion accepted does not reach the next one.

The message names the agent, the number of iterations and the kind of the
criterion that was not satisfied. It never carries the model's response or the
criterion's feedback: both are free-form text written for the model, and the
error is stored with the run and shown to clients.

## Constructors

### <a id="Tracon_TraconLoopUnsatisfiedException__ctor"></a> TraconLoopUnsatisfiedException\(\)

Creates a new error.

```csharp
public TraconLoopUnsatisfiedException()
```

### <a id="Tracon_TraconLoopUnsatisfiedException__ctor_System_String_"></a> TraconLoopUnsatisfiedException\(string\)

Creates a new error.

```csharp
public TraconLoopUnsatisfiedException(string message)
```

#### Parameters

`message` [string](https://learn.microsoft.com/dotnet/api/system.string)

The error message. Must not carry the response or the feedback text.

### <a id="Tracon_TraconLoopUnsatisfiedException__ctor_System_String_System_Exception_"></a> TraconLoopUnsatisfiedException\(string, Exception\)

Creates a new error.

```csharp
public TraconLoopUnsatisfiedException(string message, Exception innerException)
```

#### Parameters

`message` [string](https://learn.microsoft.com/dotnet/api/system.string)

The error message. Must not carry the response or the feedback text.

`innerException` [Exception](https://learn.microsoft.com/dotnet/api/system.exception)

The underlying error.

## Fields

### <a id="Tracon_TraconLoopUnsatisfiedException_LoopUnsatisfiedErrorType"></a> LoopUnsatisfiedErrorType

The stable value written to [TraconException.ErrorType](/api/tracon.traconexception/#Tracon_TraconException_ErrorType).

```csharp
public const string LoopUnsatisfiedErrorType = "loop_unsatisfied"
```

#### Field Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)

## Properties

### <a id="Tracon_TraconLoopUnsatisfiedException_AgentName"></a> AgentName

Gets the name of the agent whose loop was not satisfied.

```csharp
public string? AgentName { get; init; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)?

### <a id="Tracon_TraconLoopUnsatisfiedException_ErrorType"></a> ErrorType

Gets the stable error type name written to the run record.

```csharp
public override string ErrorType { get; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)

#### Remarks

Defaults to the full name of the exception type, so today's behaviour does
not change. A derived type overrides this member when the record has to be
machine readable — for example [TraconContentFilteredException](/api/tracon.traconcontentfilteredexception/)
writes `content_filtered`. Reports and alert rules can rely on this
stable name instead of an assembly name.

The value is written to `RunError.Type` and **carries no secret**.

### <a id="Tracon_TraconLoopUnsatisfiedException_Iterations"></a> Iterations

Gets the number of iterations the loop ran.

```csharp
public int Iterations { get; init; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

### <a id="Tracon_TraconLoopUnsatisfiedException_UnsatisfiedCriterion"></a> UnsatisfiedCriterion

Gets the kind of the criterion that still asked for another iteration.

```csharp
public string? UnsatisfiedCriterion { get; init; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)?
