A project icon that fails to fetch is not tried again for 24 hours. Each failing URL and the time it failed are kept in the index meta. A URL that later succeeds, or that no project uses any more, is dropped.
In the last timed local runs, every run spent about 20 s on https://permadeath.games/favicon.ico: a 10 s timeout, a retry, then another timeout. Now that cost hits one run a day.
Verified: cargo fmt --check, clippy (aws), cargo test (197 with aws, 185 without, plus a new test that a failed URL is skipped for 23 hours and retried after 25) and node --check.
🤖 Generated with Claude Code