[object Object]

← back to Designer Wallcoverings

Kravet roll-add: gate candidates on has_sample_variant (not the deduped variant_sku) so the executor stops silently missing ~78% of sample-bearing targets; derive rollSku from dw_sku

d2220252543a1eb3d8d54f7e00028b623c76226b · 2026-08-18 15:54:07 -0700 · Steve

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit d2220252543a1eb3d8d54f7e00028b623c76226b
Author: Steve <steve@designerwallcoverings.com>
Date:   Tue Aug 18 15:54:07 2026 -0700

    Kravet roll-add: gate candidates on has_sample_variant (not the deduped variant_sku) so the executor stops silently missing ~78% of sample-bearing targets; derive rollSku from dw_sku
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 shopify/scripts/cadence/add-kravet-roll-variants.js | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/shopify/scripts/cadence/add-kravet-roll-variants.js b/shopify/scripts/cadence/add-kravet-roll-variants.js
index cdbe5727..b51452cb 100644
--- a/shopify/scripts/cadence/add-kravet-roll-variants.js
+++ b/shopify/scripts/cadence/add-kravet-roll-variants.js
@@ -97,7 +97,7 @@ function candidates() {
     WITH base AS (
       SELECT DISTINCT s.shopify_id,
              COALESCE(NULLIF(trim(s.metafields->'global'->'Item'->>'value'),''), s.mfr_sku) AS mfr_sku,
-             s.title, s.variant_sku,
+             s.title, s.variant_sku, s.dw_sku,
              COALESCE(ap.new_map, km.map_price, kc.dw_sell_price, km.whls_cost*1.5, kc.cost_price*1.5) AS map,
              CASE WHEN ap.new_map>0 THEN 'auth_new_map'
                   WHEN km.map_price>0 THEN 'master_map'
@@ -111,17 +111,20 @@ function candidates() {
       WHERE s.vendor ~* 'kravet|lee ?jofa|groundworks|brunschwig|baker|mulberry|threads|clarke|cole|gp ?& ?j|colefax|nicolette'
         AND s.product_type ~* 'wallcover'
         AND s.mfr_sku IS NOT NULL AND s.mfr_sku <> ''
-        AND s.variant_sku ILIKE '%sample%'
+        -- (2026-08-18) gate on the has_sample_variant flag, not the deduped mirror row's
+        -- variant_sku (which often carries the NON-sample sku) — the old gate silently dropped
+        -- ~78% of sample-bearing worklist targets (33/173 vs 168/173).
+        AND (s.has_sample_variant IS TRUE OR s.variant_sku ILIKE '%sample%')
         ${onlyClause})
-    SELECT shopify_id, mfr_sku, title, variant_sku, map, map_src
+    SELECT shopify_id, mfr_sku, title, variant_sku, dw_sku, map, map_src
       FROM base
      WHERE map > ${SANE_MIN} AND map < ${SANE_MAX}
      ORDER BY shopify_id;`;
   const out = psql(sql);
   if (!out) return [];
   return out.split('\n').map(l => {
-    const [shopify_id, mfr_sku, title, variant_sku, map, map_src] = l.split('\t');
-    return { shopify_id, mfr_sku, title, variant_sku, map: Math.round(parseFloat(map) * 100) / 100, map_src };
+    const [shopify_id, mfr_sku, title, variant_sku, dw_sku, map, map_src] = l.split('\t');
+    return { shopify_id, mfr_sku, title, variant_sku, dw_sku, map: Math.round(parseFloat(map) * 100) / 100, map_src };
   });
 }
 
@@ -153,7 +156,7 @@ function rollLabel(tags) {
     if (hasRoll) { already++; continue; }   // idempotent: roll already exists
     const optName = (p.options[0] && p.options[0].name) || 'Title';
     const label = rollLabel((p.tags || []).join(' '));
-    const rollSku = (c.variant_sku || '').replace(/-sample$/i, '');
+    const rollSku = (c.dw_sku && c.dw_sku.trim()) || (c.variant_sku || '').replace(/-sample$/i, '');
     const price = c.map.toFixed(2);
     // UNIT-MISMATCH GUARD (2026-08-18, Cody FIX-FIRST): never create a "Sold Per Single Roll"
     // variant on a mural/panel/meter product. Signal = mural/panel/scenic/tapestry/embroider in

← 67771259 Kravet roll-add: harden unit-mismatch ceiling — drop the wid  ·  back to Designer Wallcoverings  ·  Kravet roll-add: scope guard (refuse un-scoped --commit; req 41b5c609 →