.NET API
RunErrorClass
Tracon.Abstractions.dllA run error’s class.
[JsonConverter(typeof(JsonStringEnumConverter<RunErrorClass>))]public enum RunErrorClassFields
Section titled “Fields”Canceled = 10
Cancelled.
CompilationFailed = 8
The agent definition failed to compile.
ContentBlocked = 11
The content was blocked by Tracon’s own IContentGuard policy (TraconContentBlockedException).
Separate from RunErrorClass.ContentFiltered: the cause is not the provider but the installation’s own rule set. The corresponding action is also different — one calls for loosening provider settings, the other for reviewing the policy.
ContentFiltered = 5
The model response was cut off by the provider’s safety/content filter.
This is not the class for a decision made by Tracon’s own guard; see RunErrorClass.ContentBlocked. Merging the two would make the operator lose the distinction between “the model refused” and “our policy refused.”
Infrastructure = 12
The process running the run disappeared without ever talking to the
provider (example: an agent.RunAsync crash with no retry).
Only orphaned-run reconciliation falls into this class. Every other class relies on a response from the provider/tool/quota; this one requires a separate class because no response was ever received.
LoopUnsatisfied = 15
A harness loop reached its iteration ceiling while a criterion still asked for another iteration, and its LoopSettings.OnExhausted fails the run (TraconLoopUnsatisfiedException).
A quality rejection, not a fault: the agent and its model answered. A criterion that THROWS under LoopSettings.OnCriterionError keeps its own class (for an unreachable judge, RunErrorClass.ProviderUnavailable or RunErrorClass.Timeout), so a provider outage is never counted here.
OutputTruncated = 16
The model stopped at its output token limit before a structured (JSON) response was complete (TraconOutputTruncatedException).
Separate from RunErrorClass.StructuredResponseInvalid: the model did not write the wrong JSON, it ran out of room. The action is to raise ModelBinding.MaxOutputTokens, not to change the prompt or the schema, and a repair turn would hit the same limit again, so none runs. A plain-text response cut off at the limit does not fail its run; the run records a RunEventCustomTypes.OutputTruncated event instead.
ProviderError = 1
The model provider or an HTTP call failed: a 5xx, a 4xx, or a connection failure that is not a timeout.
This class tells which fault occurred, not whether a retry helps. A permanent 4xx (any 4xx except 408 and 429, for example a 401 or a 404) is in this class too, and a workflow node retry and the model fallback chain never repeat it.
ProviderUnavailable = 2
The circuit breaker is open (TraconProviderUnavailableException).
QuotaExceeded = 4
A Tracon quota was exhausted, a tenant’s quota refused new work inside a run tree that was already running (TraconTenantQuotaExceededException), or a run tree’s token, cost, or time budget ran out mid-run (TraconRunBudgetExceededException).
RateLimited = 3
The provider returned 429.
StructuredResponseInvalid = 14
The response failed structured output validation (TraconStructuredResponseException).
TenantProviderRefused = 17
The tenant’s provider rules refused the call before it left the process: the
tenant’s egress policy does not allow the provider, or the tenant has its own
credential for a provider path that cannot use it, or a binding whose key has
no value. The error type is tenant_provider_refused.
Separate from RunErrorClass.CompilationFailed and RunErrorClass.ProviderError: no provider was called, and the agent definition is not at fault. The action is to change the tenant’s egress policy or provider binding. The model, a fallback, the summarizer, image generation, speech, embeddings and live voice all report it the same way, and a retry never repeats it.
Timeout = 7
The run exceeded its time limit.
ToolError = 6
A tool threw an exception.
ToolTimeout = 13
A tool call did not settle within its configured timeout (TraconToolTimeoutException).
Separate from RunErrorClass.Canceled: the wrapper’s own linked cancellation looks identical to a user cancellation at the exception type level (OperationCanceledException), and merging the two would hide the reason for every tool timeout behind “the user canceled”. This class does not fail a run — the run continues with a tool error — but the taxonomy applies wherever this exception’s stable identity is classified.
Unknown = 0
Matched no rule. Not a failure, a measurement tool.
Remarks
Section titled “Remarks”The taxonomy is kept small and stable. RunErrorClass.Unknown is not a failure but a measurement tool: a classifier that finds no matching rule does not GUESS an error’s class, it writes into this bucket. A high proportion here shows the taxonomy is incomplete.
Written as a name in JSON; stored as smallint in
the database (the same pattern as every other runs enum, for
example RunKind). Once assigned, numeric values are
never renumbered: they are stored permanently in past
rows. A new class is added to the end of the list, not inserted in order.