Errors

Structured error hierarchy with TraceInfo, error IDs, JSON serialization, and wrap() for cause chaining.

Error Hierarchy

PatchError
├── StorageError
├── CircuitBreakerOpenError
└── StorageConnectionError
├── FSMError
├── InvalidStateTransition
└── StateNotFoundError
├── MiddlewareError
└── RouterError

TraceInfo

Every PatchError includes a trace_info with error ID, timestamp, and context for log correlation.

try:
    await patch_helper.set_state(SomeState.step)
except InvalidStateTransition as e:
    print(e.trace_info.error_id)    # "err_abc123"
    print(e.trace_info.timestamp)   # datetime
    print(e.to_json())              # full JSON repr