Problem
ProviderStatus uses Promise.all to fan out per-provider activities. If any one of the processProviderStatus activities exhausts its retries and rejects, the whole workflow execution is marked Failed, even when the other providers' activities completed successfully.
In practice this happens every minute on mainnet — a few external provider endpoints regularly return HTML or "Bad Gateway" instead of JSON (vido.info, weaversnodes.com, poktpool.com, nodefleet.org, kleomed.es). Result: ~100% of ProviderStatus workflow runs end as Failed despite most provider activities succeeding.
Source
apps/middleman-workflows/src/workflows/ProviderStatus.ts:17
await Promise.all(
providers.map((provider) => processProviderStatus(provider.identity))
);
Suggested fix
Swap Promise.all for Promise.allSettled so providers fail independently:
await Promise.allSettled(
providers.map((provider) => processProviderStatus(provider.identity))
);
Workflow ends as Completed; individual provider failures remain visible as ActivityTaskFailed events in the workflow history.
Problem
ProviderStatususesPromise.allto fan out per-provider activities. If any one of theprocessProviderStatusactivities exhausts its retries and rejects, the whole workflow execution is markedFailed, even when the other providers' activities completed successfully.In practice this happens every minute on mainnet — a few external provider endpoints regularly return HTML or "Bad Gateway" instead of JSON (
vido.info,weaversnodes.com,poktpool.com,nodefleet.org,kleomed.es). Result: ~100% ofProviderStatusworkflow runs end asFaileddespite most provider activities succeeding.Source
apps/middleman-workflows/src/workflows/ProviderStatus.ts:17Suggested fix
Swap
Promise.allforPromise.allSettledso providers fail independently:Workflow ends as
Completed; individual provider failures remain visible asActivityTaskFailedevents in the workflow history.