Fix race condition in thumbnail candidate generation
Concurrent requests for the same course's thumbnail (e.g. the Precompute background scan overlapping an ordinary page load) shared fixed candidate filenames, so one request's cleanup could delete a temp file the other was still using, crashing with ENOENT. Candidate filenames are now unique per call. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in: