From 5c0de752af002a207be511188e6c857444a172f3 Mon Sep 17 00:00:00 2001 From: Kelly Date: Tue, 16 Dec 2025 10:20:48 -0700 Subject: [PATCH] fix: Check inventory_snapshots for product_discovery output verification raw_crawl_payloads only saved during baseline window (12:01-3:00 AM), but inventory_snapshots are always saved. This caused product_discovery tasks to fail verification outside the baseline window. --- backend/src/tasks/task-service.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/backend/src/tasks/task-service.ts b/backend/src/tasks/task-service.ts index 4ef1ca9e..7222a344 100644 --- a/backend/src/tasks/task-service.ts +++ b/backend/src/tasks/task-service.ts @@ -1001,9 +1001,31 @@ class TaskService { const claimedAt = task.claimed_at || task.created_at; switch (task.role) { - case 'product_refresh': case 'product_discovery': { - // Verify payload was saved to raw_crawl_payloads after task was claimed + // For product_discovery, verify inventory snapshots were saved (always happens) + // Note: raw_crawl_payloads only saved during baseline window, so check snapshots instead + const snapshotResult = await pool.query( + `SELECT COUNT(*)::int as count + FROM inventory_snapshots + WHERE dispensary_id = $1 + AND captured_at > $2`, + [task.dispensary_id, claimedAt] + ); + + const snapshotCount = snapshotResult.rows[0]?.count || 0; + + if (snapshotCount === 0) { + return { + verified: false, + reason: `No inventory snapshots found for dispensary ${task.dispensary_id} after ${claimedAt}` + }; + } + + return { verified: true }; + } + + case 'product_refresh': { + // For product_refresh, verify payload was saved to raw_crawl_payloads const payloadResult = await pool.query( `SELECT id, product_count, fetched_at FROM raw_crawl_payloads