Problem
Three defects cause scan failures to hide vulnerability evidence:
-
OSV detail lookup failure poisons cache. When getVuln fails transiently, the cache stores { vuln: null }. The next scan sees this as "confirmed clean" and skips retry.
-
404 and negative cache silently drop advisory IDs. Advisory IDs from queryBatch that cannot be resolved are silently filtered out of findings. The scan appears clean.
-
Packument transient failures cached as missing forever. fetchPackument caches transient network failures as null, same as a confirmed 404. The package appears permanently missing.
-
Spinner misreports success. "Loaded N records" message counts all requested IDs, including failures.
Fix
PR #869 introduces:
DetailCacheEntry.failed flag to distinguish transient vs confirmed failures
Finding.unresolvedAdvisoryIds to preserve every unresolved advisory ID
- Packument cache eviction on transient failures (404 only persists as negative)
- Spinner reports actual success count
Related
Problem
Three defects cause scan failures to hide vulnerability evidence:
OSV detail lookup failure poisons cache. When
getVulnfails transiently, the cache stores{ vuln: null }. The next scan sees this as "confirmed clean" and skips retry.404 and negative cache silently drop advisory IDs. Advisory IDs from
queryBatchthat cannot be resolved are silently filtered out of findings. The scan appears clean.Packument transient failures cached as missing forever.
fetchPackumentcaches transient network failures asnull, same as a confirmed 404. The package appears permanently missing.Spinner misreports success. "Loaded N records" message counts all requested IDs, including failures.
Fix
PR #869 introduces:
DetailCacheEntry.failedflag to distinguish transient vs confirmed failuresFinding.unresolvedAdvisoryIdsto preserve every unresolved advisory IDRelated