An absent state is reached two ways, and only one is worth retrying: a
source answering "no image" will answer the same next time, while an
exhausted retry budget will not. --source absent swept both together, so
recovering a handful of failures meant re-asking the provider about every
artist it has no photo for.
failed joins the source vocabulary next to absent, as a pseudo-source
matching absent rows that carry a last_failure. Several sources are a
union, so asking for absent and failed together is still just absent.
It resolves through the filter CountBySource and EnqueueBySource already
share, which is what keeps the dry-run preview honest, and the status
column now reads through the same call rather than its own query — so
the number in the report is the set the command acts on, by construction
rather than by agreement.