@@ -799,6 +799,35 @@ finally:
799799
800800In most cases, prefer the context manager pattern.
801801
802+ ### Per-call task deadlines
803+
804+ Use ` TaskOptions ` when a complete SDK call must fit one wall-clock budget:
805+
806+ ``` python
807+ from adcp import ADCPTimeoutError, TaskOptions
808+
809+ try :
810+ result = await client.create_media_buy(
811+ request,
812+ options = TaskOptions(timeout = 15.0 ),
813+ )
814+ except ADCPTimeoutError as error:
815+ if error.recovery is not None :
816+ # Dispatch began, so the seller may have committed the mutation.
817+ # Retry the exact request with this same key; never mint a new one.
818+ retry_key = error.recovery.idempotency_key
819+ ```
820+
821+ The deadline includes discovery, capability/version and signing preflight,
822+ protocol dispatch, response validation, and postflight projection. It never
823+ resets when one phase finishes. ` AgentConfig.timeout ` remains a separate
824+ transport timeout for connection/read-idle behavior.
825+
826+ Every single-agent task method accepts the keyword-only ` options ` argument.
827+ Multi-agent fan-out intentionally does not yet accept it because one timeout
828+ exception cannot safely represent several sellers' independent mutation
829+ outcomes and idempotency keys.
830+
802831### Error Handling
803832
804833The library provides a comprehensive exception hierarchy with helpful error messages:
0 commit comments