Structured Concurrency in Python 3.11+: Replacing Ad-Hoc Task Management with asyncio.TaskGroup
Python 3.11's asyncio.TaskGroup enforces structured concurrency: child tasks are awaited on exit, exceptions cancel siblings and re-raise as ExceptionGroup. Covers design, trust boundaries, failure modes, and when to use a supervised nursery instead.