Documentation / guides
Configuration errors
Fix invalid Rig, Loop, Hustle, gate, and workspace configuration.
Configuration errors are raised while immutable definitions, bindings, or composition roots are checked. They do not represent a partially running session. Extract the typed value, fix the named field or kind, and call the constructor again.
Rig and loop definitions
rig.DefinitionError has Kind, Name, and an optional wrapped Cause.
Its exact kinds cover the composition graph:
| Group | DefinitionErrorKind values |
|---|---|
| Definition shape | nil_option, missing_loop, invalid_loop, duplicate_loop, missing_primer, invalid_primer, invalid_active_primer, missing_session_store, invalid_session_store, duplicate_option |
| Runtime collaborators | invalid_delegation_limits, invalid_foreign_builders, invalid_gate_caps, invalid_restore_decider, invalid_hooks, missing_resource_storage, invalid_resource_storage |
| Hustle and compaction | invalid_hustle, duplicate_hustle, missing_hustle_limits, unused_hustle_limits, invalid_hustle_limits, missing_compaction_hustle, incompatible_compaction_hustle |
| Permission review | invalid_permission_classifiers, invalid_permission_review_policy, incomplete_permission_review, unused_permission_review_limits, invalid_permission_review_evidence, missing_permission_review_evidence, unused_permission_review_evidence, invalid_permission_review_security_ceiling, missing_permission_review_security_ceiling, unused_permission_review_security_ceiling, invalid_permission_review_observations, unused_permission_review_observations |
loop.DefinitionError has Kind, Field, Value, and Cause. Its exact
definition kinds include missing_name, invalid_client, invalid_model,
nil_option, duplicate_option, invalid_tool, invalid_tool_limits,
invalid_drain_timeout, invalid_middleware, invalid_access_gate,
invalid_engine, invalid_runtime_context, invalid_delegate,
invalid_delegation, invalid_mode, duplicate_mode,
missing_initial_mode, invalid_initial_mode, missing_policy_revision,
invalid_policy_revision, missing_context_counter,
invalid_context_counter, missing_inference_capability,
invalid_inference_capability, incompatible_context_counter,
missing_context_policy, conflicting_context_policy,
invalid_context_observation, invalid_compaction, invalid_mode_binding,
invalid_output_schema, reserved_tool_name,
duplicate_context_transport, and invalid_context_transport.
loop.BindError is the next boundary. Its kinds are
invalid_definition, invalid_context, duplicate_definition_name,
duplicate_tool_name, invalid_tool_info, invalid_access_gate,
invalid_runtime, invalid_session_id, and invalid_loop_id.
Hustles, gates, and hooks
hustle.DefinitionError uses Kind, Field, and Cause. Its exact kinds are
missing_name, reserved_name, nil_option, duplicate_option,
invalid_participation, invalid_model_source, missing_model_source,
invalid_client, invalid_model, invalid_timeout, invalid_limits,
invalid_system_prompt, invalid_prompt_revision,
missing_policy_revision, invalid_policy_revision,
invalid_output_schema, invalid_evidence_tools, and
invalid_retry_policy. Binding and resolution use hustle.BindError kinds
invalid_definition, invalid_context, missing_model_resolver, and
invalid_evidence_tools, followed by hustle.ResolveError kinds
invalid_context, invalid_loop_id, model_failed, and invalid_binding.
Gate construction has two distinct typed families. gate.GateValidationError
uses restorable_not_allowed and origin_invalid. Runtime evaluation uses
gate.EvaluationError kinds rule_match_failed, denied, action_invalid,
approver_missing, approval_required, approval_failed, writer_missing,
write_failed, issuer_missing, grant_version_unsupported, and
grant_failed. Payload decoding additionally has typed unknown, nil, encode,
decode, and request-decode errors.
hook.ConfigError distinguishes unknown_operation,
operation_not_guardable, nil_guard, nil_around, missing_policy_revision,
unexpected_policy_revision, invalid_policy_revision, and
invalid_denial. An intentional guard refusal is *hook.Denial, not a
configuration error; classify it with hook.AsDenial.
Bindings and tools
Tool definition and preparation errors are also configuration boundaries:
| Type | Exact classifications or fields |
|---|---|
tool.InvalidDefinitionError | Field identifies the invalid definition field. |
tool.InvalidBindingsError | Field plus wrapped Cause. |
tool.MissingBindingError | Missing Requirement. |
tool.RequestValidationError | invalid_field, duplicate_requirement, duplicate_candidate, duplicate_grant_pair, invalid_command_grant, missing_grant_binding; Field identifies the location. |
tool.ProcessLifecycleValidationError | Invalid process lifecycle declaration. |
hustleruntime.ConfigError | invalid_context, invalid_concurrent, invalid_queued, capacity_overflow, invalid_session_id, invalid_definitions, invalid_timeout, missing_collaborator; Field identifies the scheduler field. |
hustleruntime.ConfigEvidenceKindError | A registered evidence requirement kind is absent from the runtime allowlist. |
Rig workspace placement has its own typed boundary. WorkspacePlacementError
kinds are multiple_placements, nil_store, nil_leaser, empty_root,
canonicalize_failed, lease_name_invalid, and
workspace_tool_without_placement. PersistenceOverlapError reports the
canonical persistence path and workspace root. Per-call NewSession options
use SessionOptionError kinds nil_option, duplicate_seed, and
empty_seed.
Recovery boundary
These errors occur before durable session construction succeeds. Do not call
RestoreSession for an invalid immutable definition and do not create a
replacement merely because a Define or Bind call failed. Correct the
configuration, then rebuild the Rig or binding.
configured, err := definition.Bind(ctx, bindContext)
if err != nil {
var bindErr *loop.BindError
if errors.As(err, &bindErr) {
log.Printf("loop bind kind=%s name=%s", bindErr.Kind, bindErr.Name)
}
return err
}
_ = configured
For a workspace placement failure, inspect WorkspacePlacementError.Kind and
its optional cause. A canonicalization failure can wrap an OS error; the
placement error remains the stable branch. A persistence overlap is a direct
topology violation and does not wrap a cause.
%%{init: {"theme":"dark"}}%%
flowchart LR
A[Definition options] --> B[rig.Define]
B -- DefinitionError --> C[Fix composition]
B -- WorkspacePlacementError --> D[Fix root, store, or lease]
B -- success --> E[loop or hustle Bind]
E -- BindError or ResolveError --> F[Fix collaborators]
E -- success --> G[Construct runtime]
Source and runnable proof
Rig definition and lifecycle types are in
pkg/rig/errors.go,
pkg/rig/workspace_errors.go,
and pkg/rig/session_options.go.
Loop and hustle definitions are in
pkg/loop/definition_errors.go
and pkg/hustle/definition_errors.go.
Gate, hook, and tool boundaries are defined in
pkg/gate/validate.go,
pkg/gate/evaluator.go,
pkg/hook/errors.go,
pkg/tool/definition.go,
and pkg/tool/preparation.go.
The configuration and workspace error chains are exercised in
pkg/rig/rig_test.go,
pkg/rig/workspace_test.go,
pkg/loop/definition_test.go,
and pkg/tool/definition_test.go.