Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled
Phase-1 of the backfill scan selects all zero-parts decoded vehicles every wave. Genuine residue (VINs with no catalog data anywhere — model-indexed HKN, EMEX-uncovered, etc.) stays zero-parts forever, so it filled the batch every wave, re-attempting dead vehicles and starving the Phase-2 rolling rescan (its cursor was stuck for a week). Track a per-vehicle no-result counter (prefetch:noresult:<id>) incremented when a prefetch attempt finishes with the vehicle still at zero parts (0 categories in init, or 0 parts after the whole chain). tryPick skips vehicles past PREFETCH_NORESULT_MAX (default 2) attempts; the counter has a TTL (PREFETCH_NORESULT_TTL_DAYS, default 7) so a later catalog fix re-fills them. Frees capacity for fillable vehicles and lets Phase-2 run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>