Sequentially processes all documents with a file but no thumbnail and tallies processed / skipped / failed counts. Runs on thumbnailExecutor so it shares back-pressure with live upload thumbnails but can never saturate them (single-threaded loop). Concurrent start rejected with THUMBNAIL_BACKFILL_ALREADY_RUNNING. Emits a structured summary log line on completion for operator visibility. Refs #307 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>