[object Object]

← back to Dw Validator Debug TK11314

Kravet roll-add: scope guard (refuse un-scoped --commit; require --only or --all) + exclude hard-archived Nicolette Mayer. Cody FIX-FIRST — has_sample_variant gate broadened the universe to ~5.7k, needed blast-radius discipline.

41b5c6099e134ad58c8d7af1ee3a2ade5fb906ef · 2026-08-18 15:58:50 -0700 · Steve

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

Files touched

Diff

commit 41b5c6099e134ad58c8d7af1ee3a2ade5fb906ef
Author: Steve <steve@designerwallcoverings.com>
Date:   Tue Aug 18 15:58:50 2026 -0700

    Kravet roll-add: scope guard (refuse un-scoped --commit; require --only or --all) + exclude hard-archived Nicolette Mayer. Cody FIX-FIRST — has_sample_variant gate broadened the universe to ~5.7k, needed blast-radius discipline.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 shopify/scripts/cadence/add-kravet-roll-variants.js | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/shopify/scripts/cadence/add-kravet-roll-variants.js b/shopify/scripts/cadence/add-kravet-roll-variants.js
index b51452cb..da0135c5 100644
--- a/shopify/scripts/cadence/add-kravet-roll-variants.js
+++ b/shopify/scripts/cadence/add-kravet-roll-variants.js
@@ -39,6 +39,7 @@ const flag = n => args.includes(n);
 const val = (n, d) => { const i = args.indexOf(n); return i >= 0 ? args[i + 1] : d; };
 const COMMIT = flag('--commit');
 const ONLY = val('--only', null);
+const ALL = flag('--all'); // explicit opt-in for an un-scoped commit run (see scope guard below)
 const LIMIT = parseInt(val('--limit', '25'), 10);
 const SANE_MIN = 5, SANE_MAX = 50000, SAMPLE = 4.25;
 const KILL = path.join(os.homedir(), '.dw-fixer-stop');
@@ -108,7 +109,10 @@ function candidates() {
       LEFT JOIN kravet_catalog kc ON upper(trim(kc.mfr_sku))=upper(trim(COALESCE(NULLIF(trim(s.metafields->'global'->'Item'->>'value'),''), s.mfr_sku)))
       LEFT JOIN kravet_master_price km ON upper(trim(km.mfr_sku))=upper(trim(COALESCE(NULLIF(trim(s.metafields->'global'->'Item'->>'value'),''), s.mfr_sku)))
       LEFT JOIN kravet_authoritative_pricing ap ON upper(trim(ap.mfr_sku))=upper(trim(COALESCE(NULLIF(trim(s.metafields->'global'->'Item'->>'value'),''), s.mfr_sku)))
-      WHERE s.vendor ~* 'kravet|lee ?jofa|groundworks|brunschwig|baker|mulberry|threads|clarke|cole|gp ?& ?j|colefax|nicolette'
+      -- Nicolette Mayer removed 2026-08-18: it is a Kravet-family brand but HARD-ARCHIVED
+      -- (memory nicolette-mayer-hidden-on-shopify) — must never be reactivated / get a roll.
+      WHERE s.vendor ~* 'kravet|lee ?jofa|groundworks|brunschwig|baker|mulberry|threads|clarke|cole|gp ?& ?j|colefax'
+        AND s.vendor !~* 'nicolette'
         AND s.product_type ~* 'wallcover'
         AND s.mfr_sku IS NOT NULL AND s.mfr_sku <> ''
         -- (2026-08-18) gate on the has_sample_variant flag, not the deduped mirror row's
@@ -136,6 +140,15 @@ function rollLabel(tags) {
 
 (async () => {
   if (COMMIT && fs.existsSync(KILL)) { console.log(`KILL SWITCH present (${KILL}) — aborting.`); return; }
+  // SCOPE GUARD (2026-08-18, Cody FIX-FIRST): the has_sample_variant gate matches ~5.7k
+  // Kravet-family products, so an un-scoped --commit could mutate arbitrary/never-activate
+  // products. Require an explicit target: --only <id> (safe, per-product) or --all (opt-in).
+  if (COMMIT && !ONLY && !ALL) {
+    console.log('REFUSING un-scoped --commit. Pass --only <shopify_id> to target one product,\n' +
+      'or --all to explicitly run the whole ~5.7k candidate universe (bounded by --limit). This\n' +
+      'guard prevents accidentally adding roll variants to arbitrary Kravet products.');
+    return;
+  }
   ensureAudit();
   const cands = candidates();
   console.log(`MAP-priceable sample-only candidates (from mirror): ${cands.length}`);

← d2220252 Kravet roll-add: gate candidates on has_sample_variant (not  ·  back to Dw Validator Debug TK11314  ·  Kravet 3b-PRE roll-price fix: set 117 archived roll variants e1e1481b →