@@ -26,15 +26,25 @@ export async function markPackagistMetadataScanned(
2626 purl : string ,
2727 result : PackagistRunResult ,
2828 metadataLastModified ?: string | null ,
29+ // p2-only failures (phase 1 already succeeded) should NOT push the refresh watermark
30+ // forward — versions/dependencies never actually refreshed, so the package must stay
31+ // (or become) due again on the next run instead of sitting out the full refresh window.
32+ bumpLastRunAt = true ,
2933) : Promise < void > {
3034 await qx . result (
3135 `INSERT INTO packagist_package_state (purl, metadata_run_result, metadata_last_run_at, metadata_last_modified)
32- VALUES ($(purl), $(result)::jsonb, NOW(), $(metadataLastModified))
36+ VALUES ($(purl), $(result)::jsonb, CASE WHEN $(bumpLastRunAt) THEN NOW() ELSE NULL END , $(metadataLastModified))
3337 ON CONFLICT (purl) DO UPDATE SET
3438 metadata_run_result = EXCLUDED.metadata_run_result,
35- metadata_last_run_at = EXCLUDED.metadata_last_run_at,
39+ metadata_last_run_at = CASE WHEN $(bumpLastRunAt) THEN EXCLUDED.metadata_last_run_at
40+ ELSE packagist_package_state.metadata_last_run_at END,
3641 metadata_last_modified = COALESCE(EXCLUDED.metadata_last_modified, packagist_package_state.metadata_last_modified)` ,
37- { purl, result : JSON . stringify ( result ) , metadataLastModified : metadataLastModified ?? null } ,
42+ {
43+ purl,
44+ result : JSON . stringify ( result ) ,
45+ metadataLastModified : metadataLastModified ?? null ,
46+ bumpLastRunAt,
47+ } ,
3848 )
3949}
4050
0 commit comments