028fe2c4c8
A background delegate_task call used to be ONE async unit: the runner joined on every child and a single consolidated message re-entered the conversation when the SLOWEST finished. Fifteen independent PR reviews therefore waited on the fifteenth before the parent could act on the first. Each task now carries an optional `group`. `_units_of` partitions the call's children into units — one per distinct group, one per ungrouped task — and each unit is dispatched to the async registry on its own, so its results re-enter the conversation as soon as THAT unit is done. Tasks that must be compared or merged share a group and still return together. Capacity is unchanged: every unit of one call joins the first unit's pool slot (`slot_key` in `async_delegation._dispatch`), so splitting never consumes more of `delegation.max_concurrent_children` than the call did. Unit ids suffix the call's id (`deleg_xxxx-1`, `-2`, …) so live transcripts stay under one dir; the completion block names the group and notes that sibling units report separately; `active_task_count` counts a unit's own tasks.