[object Object]

← back to Designer Wallcoverings

TK-10002: DRY-RUN residual-collision plan from AUTHORITATIVE live re-derivation

7635e1c23ca19c5899332cdeac7b9ebf0a330a30 · 2026-07-29 10:17:48 -0700 · Steve

Read-only + dry-run only (no live writes). Live-enumerated inventoryItem.sku per
ACTIVE product for Missoni/MtG/DW Bespoke (mirror variant_sku NOT trusted) + scoped
PR null-Sample fetch + PG order-ref scan.

Finding: 0 true-duplicate MERGES in the approved-65 live; residual is REASSIGN-dominant.
BATCH-1 = safe 18 (4 PR + 6 Missoni + 8 MtG). BATCH-2 = DW Bespoke (22 pairs, all
REASSIGN, wider than 65 + cross-scope SKU leakage) -> DEFER. Order-history flag:
MTG-403723-Sample (order #31283).

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

Files touched

Diff

commit 7635e1c23ca19c5899332cdeac7b9ebf0a330a30
Author: Steve <steve@designerwallcoverings.com>
Date:   Wed Jul 29 10:17:48 2026 -0700

    TK-10002: DRY-RUN residual-collision plan from AUTHORITATIVE live re-derivation
    
    Read-only + dry-run only (no live writes). Live-enumerated inventoryItem.sku per
    ACTIVE product for Missoni/MtG/DW Bespoke (mirror variant_sku NOT trusted) + scoped
    PR null-Sample fetch + PG order-ref scan.
    
    Finding: 0 true-duplicate MERGES in the approved-65 live; residual is REASSIGN-dominant.
    BATCH-1 = safe 18 (4 PR + 6 Missoni + 8 MtG). BATCH-2 = DW Bespoke (22 pairs, all
    REASSIGN, wider than 65 + cross-scope SKU leakage) -> DEFER. Order-history flag:
    MTG-403723-Sample (order #31283).
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 scripts/tk10002-null-sample/build-residual-plan.js | 214 ++++++
 scripts/tk10002-null-sample/order-ref-scan.js      | 103 +++
 scripts/tk10002-null-sample/rederive-live.js       | 162 ++++
 scripts/tk10002-null-sample/rederive-pr.js         |  92 +++
 .../tk10002-null-sample/tk10002-residual-plan.json | 840 +++++++++++++++++++++
 5 files changed, 1411 insertions(+)

diff --git a/scripts/tk10002-null-sample/build-residual-plan.js b/scripts/tk10002-null-sample/build-residual-plan.js
new file mode 100644
index 00000000..8c1706d1
--- /dev/null
+++ b/scripts/tk10002-null-sample/build-residual-plan.js
@@ -0,0 +1,214 @@
+#!/usr/bin/env node
+/**
+ * TK-10002 — build the DRY-RUN residual plan (READ-ONLY; writes only the plan JSON).
+ * Consumes the authoritative LIVE re-derivation:
+ *   /tmp/tk10002_live_collisions.json  (Missoni/MtG/Bespoke live-active collisions)
+ *   /tmp/tk10002_pr_scoped.json        (4 PR null-Sample products + twin search)
+ *   /tmp/tk10002_order_refs.json       (order-history refs)
+ *   /tmp/tk10002_recount_targets.txt   (the approved-65 product set)
+ *
+ * Emits: scripts/tk10002-null-sample/tk10002-residual-plan.json
+ * NO Shopify/PG writes.
+ */
+const fs = require('fs');
+const path = require('path');
+const collide = require('/tmp/tk10002_live_collisions.json');
+const pr = require('/tmp/tk10002_pr_scoped.json');
+const orderRefs = require('/tmp/tk10002_order_refs.json').refs;
+
+const targetRows = fs.readFileSync('/tmp/tk10002_recount_targets.txt','utf8').trim().split('\n').map(l=>{
+  const [legacy, gid, vendor, mirrorSku, status] = l.split('|');
+  return { legacy, shopId: gid.split('/').pop(), vendor, mirrorSku, status };
+});
+const approved = new Set(targetRows.map(r=>r.shopId));
+// filemaker_wallpaper matches are CATALOG rows, not orders → not a real order-history flag.
+const REAL_ORDER_TABLES = new Set(['digital_sample_orders','hawke_recent_orders_cache','accounting_invoices']);
+function orderFlagFor(...skus){
+  const hits = [];
+  for(const s of skus){
+    if(!s) continue;
+    const refs = orderRefs[s] || orderRefs[s.toUpperCase()] || orderRefs[s.replace(/-Sample$/i,'')];
+    if(refs) for(const r of refs) if(REAL_ORDER_TABLES.has(r.table)) hits.push(`${s}:${r.table}(${r.ref})`);
+  }
+  return hits.length ? hits.join(' | ') : null;
+}
+function norm(t){ return (t||'').toLowerCase().replace(/\s*\|.*/,'').replace(/[^a-z0-9]/g,''); }
+
+const plan = { generatedAt:new Date().toISOString(), ticket:'TK-10002', scope:'residual-collision-cleanup',
+  mode:'DRY-RUN (read-only; no live writes this run)',
+  method:'AUTHORITATIVE LIVE re-derivation (inventoryItem.sku enumerated per ACTIVE product; mirror variant_sku NOT trusted)',
+  batches:{ 'BATCH-1':{ description:'genuinely-safe 18: 4 PR null-Sample + 6 Missoni + 8 MtG', items:[] },
+            'BATCH-2':{ description:'DW Bespoke live-derived reassign set (wider + scope-leak hazard; DEFER pending Steve)', items:[] } },
+  flagged_out_of_scope:[], summary:{} };
+
+// ---------- BATCH-1: PR null-Sample (4 products) ----------
+for(const p of pr.products){
+  if(p.missing) continue;
+  const sample = (p.variants||[]).find(v => /-sample$/i.test(v.title) || /sample$/i.test(v.sku||''));
+  const nonSample = (p.variants||[]).find(v => v.sku && !/-sample$/i.test(v.sku) && !/^null/i.test(v.sku));
+  const twin = (pr.twinSearch.find(t=>String(t.forPid)===String(p.pid))||{}).candidates?.[0];
+  let action, newSku=null, survives, why, confidence, note;
+  if(nonSample){
+    // base derivable from sibling -Yard variant → REASSIGN sample from null-Sample to <base>-Sample
+    const base = nonSample.sku.replace(/-(Yard|Roll|DR|SR)$/i,'');
+    newSku = `${base}-Sample`;
+    action='REASSIGN';
+    survives=`this product ${p.pid} (keeps its ${nonSample.sku} sellable variant + gets ${newSku})`;
+    why=`sample variant is literally 'null-Sample' (data defect, not a real MFR collision); correct sample SKU derivable from sibling ${nonSample.sku}. Its memo-sample twin (${twin?twin.pid:'?'}) is ${twin?twin.status:'?'} carrying ${newSku} — twin is ARCHIVED (dead), so ${newSku} is free; no orphan risk. This is REASSIGN not MERGE (twin already archived).`;
+    confidence='HIGH';
+    note = twin && twin.status!=='ARCHIVED' ? `TWIN NOT ARCHIVED (${twin.status}) — re-verify before write` : `twin ${twin?twin.pid:'n/a'} archived`;
+  } else {
+    // Wavy Gone Gravy: null sellable + null-Sample, twin DRAFT with null sku → needs a minted base
+    action='REASSIGN';
+    survives=`this product ${p.pid}`;
+    why=`single-variant sample-only style; BOTH sellable(Roll) and sample carry null; no sibling base to derive. Needs a freshly MINTED DW base SKU (DWPW/DWPX prefix) via dw_sku_registry, then <base>-Sample on the sample variant and <base>-Roll on the roll. Twin ${twin?twin.pid:'?'} is ${twin?twin.status:'?'} and also null — do NOT merge into it.`;
+    confidence='MEDIUM (needs a minted SKU — this is the "Wavy Gone Gravy" straggler the memo called out)';
+    newSku='MINT-REQUIRED';
+    note='mint a new DWPX-5000xx base; assign -Sample + -Roll';
+  }
+  plan.batches['BATCH-1'].items.push({
+    product_id:p.pid, vendor:'Phillipe Romano', title:p.title, handle:p.handle,
+    action, old_sku:'null-Sample', new_sample_sku:newSku,
+    survives, why,
+    redirect_301: 'NONE (no archive — REASSIGN keeps the listing live)',
+    order_ref_flag: orderFlagFor('null-Sample', newSku, nonSample&&nonSample.sku) || 'none',
+    confidence, note
+  });
+}
+
+// ---------- BATCH-1: Missoni (6 products / 3 pairs) ----------
+// Each collision is between two DIFFERENT colorways sharing a MFR SKU → REASSIGN.
+// Oldest-listing keeps the shared SKU; the other gets a suffixed unique SKU (e.g. -W2).
+{
+  const seen = new Set();
+  for(const c of collide.vendors['Missoni Wallpaper'].collisions){
+    // only the non -sample base rows (the -sample rows are the same pairs)
+    if(/-sample$/i.test(c.rawSku)) continue;
+    const pairKey = c.products.map(p=>p.pid).sort().join(',');
+    if(seen.has(pairKey)) continue; seen.add(pairKey);
+    const sorted = [...c.products].sort((a,b)=> new Date(a.createdAt)-new Date(b.createdAt) || String(a.pid).localeCompare(String(b.pid)));
+    const keep = sorted[0], reassign = sorted.slice(1);
+    const oflag = orderFlagFor(c.rawSku, c.rawSku+'-Sample');
+    // keeper
+    plan.batches['BATCH-1'].items.push({
+      product_id:keep.pid, vendor:'Missoni Wallpaper', title:keep.title,
+      action:'REASSIGN (keeper — no change to keeper SKU)',
+      shared_sku:c.rawSku, survives:`${keep.pid} keeps ${c.rawSku} (oldest / created ${keep.createdAt.slice(0,10)})`,
+      why:`distinct colorway wrongly sharing MFR SKU ${c.rawSku} with ${reassign.map(r=>r.pid).join(',')}; oldest keeps it`,
+      redirect_301:'NONE (no archive)', order_ref_flag: oflag||'none',
+      confidence: oflag?'HIGH (has order history — keeper preserves the ordered SKU)':'HIGH'
+    });
+    // reassign side(s)
+    for(const rp of reassign){
+      plan.batches['BATCH-1'].items.push({
+        product_id:rp.pid, vendor:'Missoni Wallpaper', title:rp.title,
+        action:'REASSIGN',
+        old_sku:c.rawSku, new_sku:`${c.rawSku}-W2 (or next free colorway-suffix; verify uniqueness live)`,
+        survives:`${rp.pid} stays live with a NEW unique SKU`,
+        why:`this is a genuinely-different colorway ("${rp.title}") that must not share ${c.rawSku}; mint a unique variant SKU (both roll + -Sample) and set custom.manufacturer_sku accordingly`,
+        redirect_301:'NONE (no archive)', order_ref_flag: oflag||'none',
+        confidence: oflag?'MEDIUM (SKU had an order under the shared value — confirm the order maps to the keeper before renaming this side)':'HIGH'
+      });
+    }
+  }
+}
+
+// ---------- BATCH-1: Mind the Gap (the 4 APPROVED pairs = 8 products) ----------
+{
+  const approvedMtgSkus = ['MTG-403024-Sample','MTG-403235-Sample','MTG-403490-Sample','MTG-403723-Sample'];
+  const wanted = new Map(approvedMtgSkus.map(s=>[s.toUpperCase(),true]));
+  for(const c of collide.vendors['Mind the Gap'].collisions){
+    if(!wanted.has(c.rawSku.toUpperCase())) continue;
+    const sorted = [...c.products].sort((a,b)=> new Date(a.createdAt)-new Date(b.createdAt) || String(a.pid).localeCompare(String(b.pid)));
+    const keep = sorted[0], reassign = sorted.slice(1);
+    const base = c.rawSku.replace(/-Sample$/i,'');
+    const oflag = orderFlagFor(c.rawSku, base);
+    plan.batches['BATCH-1'].items.push({
+      product_id:keep.pid, vendor:'Mind the Gap', title:keep.title,
+      action:'REASSIGN (keeper — no change)',
+      shared_sku:c.rawSku, survives:`${keep.pid} keeps ${c.rawSku} (oldest / ${keep.createdAt.slice(0,10)})`,
+      why:`distinct pattern wrongly sharing sample SKU ${c.rawSku} with ${reassign.map(r=>r.pid).join(',')}`,
+      redirect_301:'NONE (no archive)', order_ref_flag: oflag||'none',
+      confidence: oflag?'MEDIUM — order #31283 references this SKU with mixed title/mfr (WATER LILIES / WILDERNESS); CONFIRM which product the order maps to before renaming the other side':'HIGH'
+    });
+    for(const rp of reassign){
+      plan.batches['BATCH-1'].items.push({
+        product_id:rp.pid, vendor:'Mind the Gap', title:rp.title,
+        action:'REASSIGN',
+        old_sku:c.rawSku, new_sku:`${base}-B-Sample (mint unique; the vendor SKU for "${rp.title}" differs — look up its real MTG mfr#)`,
+        survives:`${rp.pid} stays live with a unique sample SKU`,
+        why:`"${rp.title}" is a different MtG pattern; must not share ${c.rawSku}`,
+        redirect_301:'NONE (no archive)', order_ref_flag: oflag||'none',
+        confidence: oflag?'MEDIUM (order-history on the shared SKU — see keeper note)':'HIGH'
+      });
+    }
+  }
+}
+
+// ---------- BATCH-2: DW Bespoke (all approved-touching collisions) ----------
+{
+  const seenPair = new Set();
+  for(const c of collide.vendors['DW Bespoke Studio'].collisions){
+    if(!c.products.some(p=>approved.has(String(p.pid)))) continue;
+    const pidKey = [...new Set(c.products.map(p=>p.pid))].sort().join(',');
+    const leaks = c.products.some(p=>!approved.has(String(p.pid)));
+    if(seenPair.has(pidKey)) continue; seenPair.add(pidKey);
+    const sameTitle = new Set(c.products.map(p=>norm(p.title))).size===1;
+    plan.batches['BATCH-2'].items.push({
+      product_ids:[...new Set(c.products.map(p=>p.pid))],
+      vendor:'DW Bespoke Studio',
+      example_shared_sku:c.rawSku,
+      titles:[...new Set(c.products.map(p=>p.title))],
+      action: sameTitle ? 'REVIEW (near-identical titles — possible true dup; verify variant-by-variant)' : 'REASSIGN',
+      why: `distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product`,
+      scope_leak: leaks ? 'YES — one colliding product is OUTSIDE the approved-65 (reassign here would touch/relieve a non-65 SKU space)' : 'no (all products in approved-65)',
+      redirect_301:'N/A (REASSIGN — no archive)',
+      order_ref_flag: orderFlagFor(c.rawSku, c.rawSku.replace(/-Sample$/i,'')) || 'none',
+      confidence:'DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch'
+    });
+  }
+}
+
+// ---------- flagged out-of-scope (do NOT touch) ----------
+{
+  // MtG true-duplicate pairs (identical titles, created ~1 week apart) NOT in the approved-65
+  const approvedMtg = new Set(['4469009481779','4469009514547','4469013381171','4469049786419',
+    '4469053718579','4469053751347','4469024948275','4469057945651']);
+  const seen=new Set();
+  for(const c of collide.vendors['Mind the Gap'].collisions){
+    if(/-sample$/i.test(c.rawSku)) continue;
+    const pids=c.products.map(p=>String(p.pid));
+    if(pids.some(p=>approvedMtg.has(p))) continue;
+    const key=pids.sort().join(','); if(seen.has(key)) continue; seen.add(key);
+    const same=new Set(c.products.map(p=>norm(p.title))).size===1;
+    plan.flagged_out_of_scope.push({
+      vendor:'Mind the Gap', product_ids:pids, example_sku:c.rawSku,
+      titles:[...new Set(c.products.map(p=>p.title))],
+      classification: same?'TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE':'reassign',
+      note:'OUTSIDE approved-65 — needs a NEW approval artifact before any action'
+    });
+  }
+  // Bespoke collisions entirely outside the 65
+  let bespokeOut=0;
+  for(const c of collide.vendors['DW Bespoke Studio'].collisions){
+    if(!c.products.some(p=>approved.has(String(p.pid)))) bespokeOut++;
+  }
+  plan.flagged_out_of_scope.push({ vendor:'DW Bespoke Studio', note:`${bespokeOut} additional live-collision SKUs entirely OUTSIDE the approved-65 (DW Bespoke has 257 live-collision SKUs total across 935 active products) — the Bespoke SKU-hygiene problem is far larger than 65 and warrants its own project` });
+}
+
+plan.summary = {
+  batch1_items: plan.batches['BATCH-1'].items.length,
+  batch2_items_pairs: plan.batches['BATCH-2'].items.length,
+  merges: 0,
+  reassigns_batch1: plan.batches['BATCH-1'].items.filter(i=>/REASSIGN/.test(i.action)).length,
+  order_history_flags: Object.keys(orderRefs).filter(s=>(orderRefs[s]||[]).some(r=>REAL_ORDER_TABLES.has(r.table))),
+  key_finding:'0 true-duplicate MERGES in the approved-65 live. Residual set is REASSIGN-dominant. DW Bespoke (BATCH-2) is wider than 65 with cross-scope SKU leakage → DEFER.'
+};
+
+const outPath = path.join(process.env.HOME,'Projects/Designer-Wallcoverings/scripts/tk10002-null-sample/tk10002-residual-plan.json');
+fs.writeFileSync(outPath, JSON.stringify(plan,null,2));
+console.log('WROTE', outPath);
+console.log('BATCH-1 items:', plan.batches['BATCH-1'].items.length);
+console.log('BATCH-2 pairs:', plan.batches['BATCH-2'].items.length);
+console.log('flagged out-of-scope groups:', plan.flagged_out_of_scope.length);
+console.log('order-history flags:', plan.summary.order_history_flags.join(', ')||'none');
diff --git a/scripts/tk10002-null-sample/order-ref-scan.js b/scripts/tk10002-null-sample/order-ref-scan.js
new file mode 100644
index 00000000..e630c363
--- /dev/null
+++ b/scripts/tk10002-null-sample/order-ref-scan.js
@@ -0,0 +1,103 @@
+#!/usr/bin/env node
+/**
+ * TK-10002 — order-history pre-check (READ-ONLY) for every SKU involved in the
+ * scoped live collisions. Shopify order API is NOT readable (no read_orders
+ * scope), so we scan the PG order tables:
+ *   - digital_sample_orders.dig_skus (text[])
+ *   - hawke_recent_orders_cache.dw_sku / mfr_sku
+ *   - filemaker_wallpaper.dw_sku / combo_sku
+ *   - accounting_invoices.line_items (json/text — substring match)
+ * Emits /tmp/tk10002_order_refs.json: { sku -> [{table, ref}] }
+ */
+const { Pool } = require('pg');
+const fs = require('fs');
+const pool = new Pool({ host:'/tmp', database:'dw_unified', user: require('os').userInfo().username });
+
+async function main(){
+  const collide = require('/tmp/tk10002_live_collisions.json');
+  const pr = require('/tmp/tk10002_pr_scoped.json');
+  const fsrows = fs.readFileSync('/tmp/tk10002_recount_targets.txt','utf8').trim().split('\n')
+    .map(l=>l.split('|')[1].split('/').pop());
+  const approved = new Set(fsrows);
+
+  // Gather every raw SKU from in-scope collisions (Missoni all, MtG the 4 approved,
+  // Bespoke the ones touching approved) + PR variant SKUs + their base forms.
+  const skus = new Set();
+  const addBaseForms = s => {
+    if(!s || /^null/i.test(s)) return;
+    skus.add(s);
+    // base (strip -Sample/-Yard/-Roll/etc.)
+    const base = s.replace(/-(Sample|Yard|Roll|DR|SR)$/i,'');
+    if(base && base!==s) skus.add(base);
+  };
+  // Missoni: all collisions (6 approved products)
+  for(const c of collide.vendors['Missoni Wallpaper'].collisions)
+    c.products.forEach(p=>{ if(approved.has(String(p.pid))) c.products.forEach(()=>addBaseForms(c.rawSku)); });
+  for(const c of collide.vendors['Missoni Wallpaper'].collisions) addBaseForms(c.rawSku);
+  // MtG: only the 4 approved-scope collisions (403024/403235/403490/403723)
+  const mtgApprovedSkus = ['MTG-403024-Sample','MTG-403235-Sample','MTG-403490-Sample','MTG-403723-Sample'];
+  mtgApprovedSkus.forEach(addBaseForms);
+  // Bespoke: every raw SKU from collisions touching an approved product
+  for(const c of collide.vendors['DW Bespoke Studio'].collisions){
+    if(c.products.some(p=>approved.has(String(p.pid)))) addBaseForms(c.rawSku);
+  }
+  // PR: variant skus + expected -Sample forms
+  for(const p of pr.products){ (p.variants||[]).forEach(v=>addBaseForms(v.sku)); }
+  ['DWPX-500044-Sample','DWPX-500045-Sample','DWPX-500046-Sample'].forEach(addBaseForms);
+
+  const list = [...skus];
+  console.log(`Scanning ${list.length} distinct SKUs (+base forms) against PG order tables…`);
+
+  const refs = {};
+  const push = (sku, table, ref) => { (refs[sku] ||= []).push({ table, ref }); };
+
+  // 1) digital_sample_orders.dig_skus (array)
+  {
+    const { rows } = await pool.query(
+      `select order_number, unnest(dig_skus) as sku from digital_sample_orders`);
+    const map = new Map();
+    for(const r of rows){ if(!map.has(r.sku)) map.set(r.sku, []); map.get(r.sku).push(r.order_number); }
+    for(const sku of list){
+      for(const [k,v] of map){ if(k && k.toLowerCase()===sku.toLowerCase()) push(sku,'digital_sample_orders', v.join(',')); }
+    }
+  }
+  // 2) hawke_recent_orders_cache dw_sku/mfr_sku
+  {
+    const { rows } = await pool.query(
+      `select dw_sku, mfr_sku from hawke_recent_orders_cache where dw_sku is not null or mfr_sku is not null`);
+    for(const sku of list){
+      const hits = rows.filter(r =>
+        (r.dw_sku && r.dw_sku.toLowerCase()===sku.toLowerCase()) ||
+        (r.mfr_sku && r.mfr_sku.toLowerCase()===sku.toLowerCase()));
+      if(hits.length) push(sku,'hawke_recent_orders_cache', `${hits.length} rows`);
+    }
+  }
+  // 3) filemaker_wallpaper dw_sku/combo_sku
+  {
+    const { rows } = await pool.query(
+      `select dw_sku, combo_sku from filemaker_wallpaper where dw_sku is not null or combo_sku is not null`);
+    for(const sku of list){
+      const hits = rows.filter(r =>
+        (r.dw_sku && r.dw_sku.toLowerCase()===sku.toLowerCase()) ||
+        (r.combo_sku && r.combo_sku.toLowerCase()===sku.toLowerCase()));
+      if(hits.length) push(sku,'filemaker_wallpaper', `${hits.length} rows`);
+    }
+  }
+  // 4) accounting_invoices.line_items substring (only for real SKUs, skip generic)
+  {
+    for(const sku of list){
+      if(sku.length < 6) continue;
+      const { rows } = await pool.query(
+        `select count(*)::int as n from accounting_invoices where line_items::text ilike $1`, [`%${sku}%`]);
+      if(rows[0].n) push(sku,'accounting_invoices', `${rows[0].n} invoices`);
+    }
+  }
+
+  fs.writeFileSync('/tmp/tk10002_order_refs.json', JSON.stringify({ scannedSkus:list.length, refs },null,2));
+  const withRefs = Object.keys(refs);
+  console.log(`\nSKUs with ANY order-history ref: ${withRefs.length}`);
+  for(const s of withRefs) console.log('  '+s+' -> '+refs[s].map(r=>`${r.table}(${r.ref})`).join('; '));
+  if(withRefs.length===0) console.log('  (none — no scoped SKU appears in any PG order table)');
+  await pool.end();
+}
+main().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/tk10002-null-sample/rederive-live.js b/scripts/tk10002-null-sample/rederive-live.js
new file mode 100644
index 00000000..5dcd2376
--- /dev/null
+++ b/scripts/tk10002-null-sample/rederive-live.js
@@ -0,0 +1,162 @@
+#!/usr/bin/env node
+/**
+ * TK-10002 Phase-2 — AUTHORITATIVE LIVE re-derivation (READ-ONLY, $0 Shopify reads).
+ *
+ * The local dw_unified mirror's `variant_sku` scalar is UNRELIABLE for the DW
+ * Bespoke class (mirror flags a `-25-gold-2x27` collision on products that do
+ * NOT carry that SKU live — they have ~20 real variants each). So we DO NOT
+ * trust the mirror's collision list. Instead we enumerate the LIVE Shopify
+ * variants (inventoryItem.sku) of every ACTIVE product in the residual scope
+ * and compute which SKUs are GENUINELY shared across >1 ACTIVE product LIVE.
+ *
+ * Scope (residual, the approved 65):
+ *   - DW Bespoke Studio  (enumerate all ACTIVE, live)
+ *   - Mind the Gap       (enumerate all ACTIVE, live)
+ *   - Missoni Wallpaper  (enumerate all ACTIVE, live)
+ *   - Phillipe Romano    (11.7k active — DO NOT full-enumerate; scope to the 4
+ *                         mirror-flagged `null-Sample` products + a live sibling
+ *                         collision check against the mirror as a POINTER only)
+ *
+ * Output: /tmp/tk10002_live_collisions.json
+ * READ-ONLY. No writes to Shopify or PG.
+ */
+const { Pool } = require('pg');
+const fs = require('fs');
+require('dotenv').config({ path: require('path').join(process.env.HOME,'Projects/Designer-Wallcoverings/shopify/.env') });
+const pool = new Pool({ host:'/tmp', database:'dw_unified', user: require('os').userInfo().username });
+const TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
+const STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
+const API = process.env.SHOPIFY_ADMIN_API_VERSION || '2024-10';
+const sleep = ms => new Promise(r=>setTimeout(r,ms));
+
+async function gql(query, variables){
+  for(let attempt=0; attempt<6; attempt++){
+    const r = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`,{
+      method:'POST',
+      headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},
+      body: JSON.stringify({query,variables})
+    });
+    if(r.status===429){ await sleep(2500); continue; }
+    const j = await r.json();
+    const throttled = (j.errors||[]).some(e=>/throttl/i.test(e.message||''));
+    if(throttled){ await sleep(2500); continue; }
+    if(j.errors) throw new Error('GQL '+JSON.stringify(j.errors));
+    return j.data;
+  }
+  throw new Error('gql retries exhausted');
+}
+
+// Enumerate every ACTIVE product for a vendor, with its live variant SKUs.
+async function enumerateVendorLive(vendor){
+  const out = []; // {pid, gid, handle, title, createdAt, status, skus:[...]}
+  let cursor = null;
+  const q = `
+    query($q:String!,$after:String){
+      products(first:60, query:$q, after:$after){
+        pageInfo{ hasNextPage endCursor }
+        edges{ node{
+          id legacyResourceId handle title status createdAt
+          variants(first:100){ edges{ node{ id title inventoryItem{ sku } } } }
+        } }
+      }
+    }`;
+  const query = `vendor:'${vendor.replace(/'/g,"\\'")}' status:active`;
+  let page=0;
+  do{
+    const d = await gql(q, { q: query, after: cursor });
+    for(const e of d.products.edges){
+      const n = e.node;
+      out.push({
+        pid: n.legacyResourceId, gid: n.id, handle: n.handle, title: n.title,
+        status: n.status, createdAt: n.createdAt,
+        skus: n.variants.edges.map(v => (v.node.inventoryItem && v.node.inventoryItem.sku) || null)
+      });
+    }
+    cursor = d.products.pageInfo.hasNextPage ? d.products.pageInfo.endCursor : null;
+    page++;
+    if(page % 5 === 0) process.stdout.write(`   …${vendor}: ${out.length} products\n`);
+    await sleep(180);
+  } while(cursor);
+  return out;
+}
+
+// Fetch live variants for a specific set of product ids (used for scoped PR check).
+async function fetchProductsLive(pids){
+  const out = [];
+  for(const pid of pids){
+    const d = await gql(`
+      query($id:ID!){ product(id:$id){
+        id legacyResourceId handle title status createdAt
+        variants(first:100){ edges{ node{ id title inventoryItem{ sku } } } } } }`,
+      { id: `gid://shopify/Product/${pid}` });
+    const n = d.product;
+    if(!n){ out.push({ pid, missing:true }); continue; }
+    out.push({
+      pid: n.legacyResourceId, gid: n.id, handle: n.handle, title: n.title,
+      status: n.status, createdAt: n.createdAt,
+      skus: n.variants.edges.map(v => (v.node.inventoryItem && v.node.inventoryItem.sku) || null)
+    });
+    await sleep(150);
+  }
+  return out;
+}
+
+// Build SKU -> [products] index, keeping only ACTIVE products; return SKUs shared by >1 product.
+function collisionsFrom(products){
+  const idx = new Map(); // upperSku -> [{pid,handle,title,createdAt,rawSku}]
+  for(const p of products){
+    if(!p.skus) continue;
+    if((p.status||'').toUpperCase() !== 'ACTIVE') continue;
+    const seenInThis = new Set();
+    for(const s of p.skus){
+      if(!s) continue;                 // skip null/empty
+      if(/^null(-sample)?$/i.test(s)) { /* still index null-Sample explicitly below */ }
+      const up = s.toUpperCase();
+      // de-dup within one product so a SKU repeated on one product isn't a "collision"
+      if(seenInThis.has(up)) continue;
+      seenInThis.add(up);
+      if(!idx.has(up)) idx.set(up, []);
+      idx.get(up).push({ pid:p.pid, handle:p.handle, title:p.title, createdAt:p.createdAt, rawSku:s });
+    }
+  }
+  const collisions = [];
+  for(const [up, arr] of idx){
+    if(arr.length > 1) collisions.push({ sku: up, rawSku: arr[0].rawSku, products: arr });
+  }
+  return collisions;
+}
+
+async function main(){
+  const started = Date.now();
+  const report = { generatedAt: new Date().toISOString(), vendors:{}, notes:[] };
+
+  // ---- DW Bespoke, Mind the Gap, Missoni: full live enumeration ----
+  for(const vendor of ['Missoni Wallpaper','Mind the Gap','DW Bespoke Studio']){
+    console.log(`\n=== enumerating LIVE ACTIVE for: ${vendor} ===`);
+    const products = await enumerateVendorLive(vendor);
+    const collisions = collisionsFrom(products);
+    report.vendors[vendor] = {
+      activeProducts: products.length,
+      genuineCollisionSkus: collisions.length,
+      collisions
+    };
+    console.log(`   ${vendor}: ${products.length} active products, ${collisions.length} genuine live-collision SKUs`);
+  }
+
+  // ---- Phillipe Romano: DO NOT full-enumerate (11.7k). Scope to the 4 null-Sample flagged. ----
+  console.log(`\n=== Phillipe Romano: scoped null-Sample check (no full enumeration) ===`);
+  const prPids = ['66966','1905229','1905230','1905231'];
+  const prProducts = await fetchProductsLive(prPids);
+  report.vendors['Phillipe Romano'] = {
+    scoped: true,
+    products: prProducts.map(p => ({
+      pid:p.pid, handle:p.handle, title:p.title, status:p.status, createdAt:p.createdAt, skus:p.skus
+    }))
+  };
+  console.log('   PR scoped products fetched:', prProducts.length);
+
+  fs.writeFileSync('/tmp/tk10002_live_collisions.json', JSON.stringify(report,null,2));
+  console.log(`\nWROTE /tmp/tk10002_live_collisions.json in ${((Date.now()-started)/1000).toFixed(1)}s`);
+  await pool.end();
+}
+main().catch(e=>{ console.error(e); process.exit(1); });
diff --git a/scripts/tk10002-null-sample/rederive-pr.js b/scripts/tk10002-null-sample/rederive-pr.js
new file mode 100644
index 00000000..01b6664d
--- /dev/null
+++ b/scripts/tk10002-null-sample/rederive-pr.js
@@ -0,0 +1,92 @@
+#!/usr/bin/env node
+/**
+ * TK-10002 — scoped LIVE fetch of the 4 Phillipe Romano null-Sample products
+ * (READ-ONLY, $0). Uses the REAL Shopify product IDs from the recount targets.
+ * Also searches PR live for any DRAFT *-memo-sample twin carrying the correct
+ * DWPW/DWPX-…-sample SKU so we can classify MERGE (twin exists) vs REASSIGN.
+ */
+require('dotenv').config({ path: require('path').join(process.env.HOME,'Projects/Designer-Wallcoverings/shopify/.env') });
+const fs = require('fs');
+const TOKEN = process.env.SHOPIFY_ADMIN_ACCESS_TOKEN || process.env.SHOPIFY_ADMIN_TOKEN;
+const STORE = process.env.SHOPIFY_STORE_DOMAIN || 'designer-laboratory-sandbox.myshopify.com';
+const API = process.env.SHOPIFY_ADMIN_API_VERSION || '2024-10';
+const sleep = ms => new Promise(r=>setTimeout(r,ms));
+
+async function gql(query, variables){
+  for(let attempt=0; attempt<6; attempt++){
+    const r = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`,{
+      method:'POST', headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},
+      body: JSON.stringify({query,variables}) });
+    if(r.status===429){ await sleep(2500); continue; }
+    const j = await r.json();
+    if((j.errors||[]).some(e=>/throttl/i.test(e.message||''))){ await sleep(2500); continue; }
+    if(j.errors) throw new Error('GQL '+JSON.stringify(j.errors));
+    return j.data;
+  }
+  throw new Error('gql retries exhausted');
+}
+
+const PR = {
+  '6764826230835': 'mirror-legacy-66966',
+  '7813312315443': 'mirror-legacy-1905229',
+  '7813312348211': 'mirror-legacy-1905230',
+  '7813312380979': 'mirror-legacy-1905231',
+};
+
+async function main(){
+  const out = { generatedAt:new Date().toISOString(), products:[], twinSearch:[] };
+  for(const pid of Object.keys(PR)){
+    const d = await gql(`query($id:ID!){ product(id:$id){
+      id legacyResourceId handle title status createdAt vendor
+      variants(first:100){ edges{ node{ id title inventoryItem{ sku } } } } } }`,
+      { id:`gid://shopify/Product/${pid}` });
+    const n = d.product;
+    if(!n){ out.products.push({ pid, missing:true }); continue; }
+    out.products.push({
+      pid: n.legacyResourceId, gid:n.id, handle:n.handle, title:n.title, vendor:n.vendor,
+      status:n.status, createdAt:n.createdAt,
+      variants: n.variants.edges.map(v=>({ id:v.node.id, title:v.node.title, sku:(v.node.inventoryItem&&v.node.inventoryItem.sku)||null }))
+    });
+    await sleep(150);
+  }
+
+  // For each PR product, derive an expected base and search live for a memo-sample twin.
+  for(const p of out.products){
+    if(p.missing) continue;
+    // Expected base: from a sibling non-sample variant's SKU, else from handle.
+    const nonSample = (p.variants||[]).find(v => v.sku && !/-(sample)$/i.test(v.sku) && !/^null/i.test(v.sku));
+    const baseGuess = nonSample ? nonSample.sku.replace(/-(Yard|Roll|DR|SR)$/i,'') : null;
+    // Search live: products whose title mirrors this one + a memo/sample twin.
+    // Cheap: query by the product title's leading token(s).
+    const titleToken = (p.title||'').split(/[|\-–]/)[0].trim().split(/\s+/).slice(0,3).join(' ');
+    let twins = [];
+    if(titleToken){
+      const d = await gql(`query($q:String!){ products(first:20, query:$q){ edges{ node{
+        legacyResourceId handle title status createdAt
+        variants(first:50){ edges{ node{ title inventoryItem{ sku } } } } } } } }`,
+        { q: `vendor:'Phillipe Romano' title:*${titleToken.replace(/'/g,'')}*` });
+      twins = d.products.edges.map(e=>({
+        pid:e.node.legacyResourceId, handle:e.node.handle, title:e.node.title, status:e.node.status,
+        createdAt:e.node.createdAt,
+        skus: e.node.variants.edges.map(v=>(v.node.inventoryItem&&v.node.inventoryItem.sku)||null)
+      })).filter(t => String(t.pid)!==String(p.pid));
+      await sleep(200);
+    }
+    out.twinSearch.push({ forPid:p.pid, title:p.title, baseGuess, titleToken, candidates:twins });
+  }
+
+  fs.writeFileSync('/tmp/tk10002_pr_scoped.json', JSON.stringify(out,null,2));
+  console.log('WROTE /tmp/tk10002_pr_scoped.json');
+  for(const p of out.products){
+    console.log('\npid='+p.pid+' status='+p.status+' created='+(p.createdAt||'').slice(0,10));
+    console.log('  title: '+p.title);
+    console.log('  handle: '+p.handle);
+    (p.variants||[]).forEach(v=>console.log('   var ['+v.title+'] sku='+v.sku));
+  }
+  console.log('\n--- twin search ---');
+  for(const t of out.twinSearch){
+    console.log('\nfor pid='+t.forPid+' base='+t.baseGuess+' token="'+t.titleToken+'"  candidates='+t.candidates.length);
+    for(const c of t.candidates) console.log('   cand pid='+c.pid+' status='+c.status+' created='+(c.createdAt||'').slice(0,10)+'  '+c.title+'  skus='+JSON.stringify(c.skus));
+  }
+}
+main().catch(e=>{console.error(e);process.exit(1);});
diff --git a/scripts/tk10002-null-sample/tk10002-residual-plan.json b/scripts/tk10002-null-sample/tk10002-residual-plan.json
new file mode 100644
index 00000000..bef7e3b1
--- /dev/null
+++ b/scripts/tk10002-null-sample/tk10002-residual-plan.json
@@ -0,0 +1,840 @@
+{
+  "generatedAt": "2026-07-29T17:17:13.757Z",
+  "ticket": "TK-10002",
+  "scope": "residual-collision-cleanup",
+  "mode": "DRY-RUN (read-only; no live writes this run)",
+  "method": "AUTHORITATIVE LIVE re-derivation (inventoryItem.sku enumerated per ACTIVE product; mirror variant_sku NOT trusted)",
+  "batches": {
+    "BATCH-1": {
+      "description": "genuinely-safe 18: 4 PR null-Sample + 6 Missoni + 8 MtG",
+      "items": [
+        {
+          "product_id": "6764826230835",
+          "vendor": "Phillipe Romano",
+          "title": "Wavy Gone Gravy on Italiano Grasscloth",
+          "handle": "wavy-gone-gravy-on-italiano-grasscloth",
+          "action": "REASSIGN",
+          "old_sku": "null-Sample",
+          "new_sample_sku": "MINT-REQUIRED",
+          "survives": "this product 6764826230835",
+          "why": "single-variant sample-only style; BOTH sellable(Roll) and sample carry null; no sibling base to derive. Needs a freshly MINTED DW base SKU (DWPW/DWPX prefix) via dw_sku_registry, then <base>-Sample on the sample variant and <base>-Roll on the roll. Twin 7862956195891 is DRAFT and also null — do NOT merge into it.",
+          "redirect_301": "NONE (no archive — REASSIGN keeps the listing live)",
+          "order_ref_flag": "none",
+          "confidence": "MEDIUM (needs a minted SKU — this is the \"Wavy Gone Gravy\" straggler the memo called out)",
+          "note": "mint a new DWPX-5000xx base; assign -Sample + -Roll"
+        },
+        {
+          "product_id": "7813312315443",
+          "vendor": "Phillipe Romano",
+          "title": "Oro Veneziano - Gold Wallcovering | Phillipe Romano",
+          "handle": "oro-veneziano-gold-wallcovering-phillipe-romano",
+          "action": "REASSIGN",
+          "old_sku": "null-Sample",
+          "new_sample_sku": "DWPX-500044-Sample",
+          "survives": "this product 7813312315443 (keeps its DWPX-500044-Yard sellable variant + gets DWPX-500044-Sample)",
+          "why": "sample variant is literally 'null-Sample' (data defect, not a real MFR collision); correct sample SKU derivable from sibling DWPX-500044-Yard. Its memo-sample twin (7863001546803) is ARCHIVED carrying DWPX-500044-Sample — twin is ARCHIVED (dead), so DWPX-500044-Sample is free; no orphan risk. This is REASSIGN not MERGE (twin already archived).",
+          "redirect_301": "NONE (no archive — REASSIGN keeps the listing live)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH",
+          "note": "twin 7863001546803 archived"
+        },
+        {
+          "product_id": "7813312348211",
+          "vendor": "Phillipe Romano",
+          "title": "Argento Bianco - Neutral Wallcovering | Phillipe Romano",
+          "handle": "argento-bianco-neutral-wallcovering-phillipe-romano",
+          "action": "REASSIGN",
+          "old_sku": "null-Sample",
+          "new_sample_sku": "DWPX-500045-Sample",
+          "survives": "this product 7813312348211 (keeps its DWPX-500045-Yard sellable variant + gets DWPX-500045-Sample)",
+          "why": "sample variant is literally 'null-Sample' (data defect, not a real MFR collision); correct sample SKU derivable from sibling DWPX-500045-Yard. Its memo-sample twin (7863001972787) is ARCHIVED carrying DWPX-500045-Sample — twin is ARCHIVED (dead), so DWPX-500045-Sample is free; no orphan risk. This is REASSIGN not MERGE (twin already archived).",
+          "redirect_301": "NONE (no archive — REASSIGN keeps the listing live)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH",
+          "note": "twin 7863001972787 archived"
+        },
+        {
+          "product_id": "7813312380979",
+          "vendor": "Phillipe Romano",
+          "title": "Foglia d'Oro - Gold Wallcovering | Phillipe Romano",
+          "handle": "foglia-doro-gold-wallcovering-phillipe-romano",
+          "action": "REASSIGN",
+          "old_sku": "null-Sample",
+          "new_sample_sku": "DWPX-500046-Sample",
+          "survives": "this product 7813312380979 (keeps its DWPX-500046-Yard sellable variant + gets DWPX-500046-Sample)",
+          "why": "sample variant is literally 'null-Sample' (data defect, not a real MFR collision); correct sample SKU derivable from sibling DWPX-500046-Yard. Its memo-sample twin (7863004102707) is ARCHIVED carrying DWPX-500046-Sample — twin is ARCHIVED (dead), so DWPX-500046-Sample is free; no orphan risk. This is REASSIGN not MERGE (twin already archived).",
+          "redirect_301": "NONE (no archive — REASSIGN keeps the listing live)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH",
+          "note": "twin 7863004102707 archived"
+        },
+        {
+          "product_id": "6751726698547",
+          "vendor": "Missoni Wallpaper",
+          "title": "Magic Garden Wallcovering - Blue/Green/Multi",
+          "action": "REASSIGN (keeper — no change to keeper SKU)",
+          "shared_sku": "MIS-18313",
+          "survives": "6751726698547 keeps MIS-18313 (oldest / created 2022-06-09)",
+          "why": "distinct colorway wrongly sharing MFR SKU MIS-18313 with 6751727386675; oldest keeps it",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "6751727386675",
+          "vendor": "Missoni Wallpaper",
+          "title": "Magic Garden Wallcovering - Cream",
+          "action": "REASSIGN",
+          "old_sku": "MIS-18313",
+          "new_sku": "MIS-18313-W2 (or next free colorway-suffix; verify uniqueness live)",
+          "survives": "6751727386675 stays live with a NEW unique SKU",
+          "why": "this is a genuinely-different colorway (\"Magic Garden Wallcovering - Cream\") that must not share MIS-18313; mint a unique variant SKU (both roll + -Sample) and set custom.manufacturer_sku accordingly",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "6751729385523",
+          "vendor": "Missoni Wallpaper",
+          "title": "Chevronette Wallcovering - Pearl",
+          "action": "REASSIGN (keeper — no change to keeper SKU)",
+          "shared_sku": "MIS-18366W1",
+          "survives": "6751729385523 keeps MIS-18366W1 (oldest / created 2022-06-09)",
+          "why": "distinct colorway wrongly sharing MFR SKU MIS-18366W1 with 6751729549363; oldest keeps it",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "6751729549363",
+          "vendor": "Missoni Wallpaper",
+          "title": "Chevronette Wallcovering - White",
+          "action": "REASSIGN",
+          "old_sku": "MIS-18366W1",
+          "new_sku": "MIS-18366W1-W2 (or next free colorway-suffix; verify uniqueness live)",
+          "survives": "6751729549363 stays live with a NEW unique SKU",
+          "why": "this is a genuinely-different colorway (\"Chevronette Wallcovering - White\") that must not share MIS-18366W1; mint a unique variant SKU (both roll + -Sample) and set custom.manufacturer_sku accordingly",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "6753061896243",
+          "vendor": "Missoni Wallpaper",
+          "title": "Iconic Shades Ombre Wallcovering - Taupe",
+          "action": "REASSIGN (keeper — no change to keeper SKU)",
+          "shared_sku": "MIS-18398",
+          "survives": "6753061896243 keeps MIS-18398 (oldest / created 2022-06-13)",
+          "why": "distinct colorway wrongly sharing MFR SKU MIS-18398 with 6753081589811; oldest keeps it",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "6753081589811",
+          "vendor": "Missoni Wallpaper",
+          "title": "Striped Sunset Wallcovering - Brown/Multi",
+          "action": "REASSIGN",
+          "old_sku": "MIS-18398",
+          "new_sku": "MIS-18398-W2 (or next free colorway-suffix; verify uniqueness live)",
+          "survives": "6753081589811 stays live with a NEW unique SKU",
+          "why": "this is a genuinely-different colorway (\"Striped Sunset Wallcovering - Brown/Multi\") that must not share MIS-18398; mint a unique variant SKU (both roll + -Sample) and set custom.manufacturer_sku accordingly",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "4469009481779",
+          "vendor": "Mind the Gap",
+          "title": "Apodyterium - Beige Wallcovering | Mind the Gap",
+          "action": "REASSIGN (keeper — no change)",
+          "shared_sku": "MTG-403024-Sample",
+          "survives": "4469009481779 keeps MTG-403024-Sample (oldest / 2020-03-12)",
+          "why": "distinct pattern wrongly sharing sample SKU MTG-403024-Sample with 4469009514547",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "4469009514547",
+          "vendor": "Mind the Gap",
+          "title": "Apodyterium Taupe - Beige Wallcovering | Mind the Gap",
+          "action": "REASSIGN",
+          "old_sku": "MTG-403024-Sample",
+          "new_sku": "MTG-403024-B-Sample (mint unique; the vendor SKU for \"Apodyterium Taupe - Beige Wallcovering | Mind the Gap\" differs — look up its real MTG mfr#)",
+          "survives": "4469009514547 stays live with a unique sample SKU",
+          "why": "\"Apodyterium Taupe - Beige Wallcovering | Mind the Gap\" is a different MtG pattern; must not share MTG-403024-Sample",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "4469013381171",
+          "vendor": "Mind the Gap",
+          "title": "Exotic Fruit 2",
+          "action": "REASSIGN (keeper — no change)",
+          "shared_sku": "MTG-403235-Sample",
+          "survives": "4469013381171 keeps MTG-403235-Sample (oldest / 2020-03-12)",
+          "why": "distinct pattern wrongly sharing sample SKU MTG-403235-Sample with 4469049786419",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "4469049786419",
+          "vendor": "Mind the Gap",
+          "title": "Eyes and Circles Blue",
+          "action": "REASSIGN",
+          "old_sku": "MTG-403235-Sample",
+          "new_sku": "MTG-403235-B-Sample (mint unique; the vendor SKU for \"Eyes and Circles Blue\" differs — look up its real MTG mfr#)",
+          "survives": "4469049786419 stays live with a unique sample SKU",
+          "why": "\"Eyes and Circles Blue\" is a different MtG pattern; must not share MTG-403235-Sample",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "4469024948275",
+          "vendor": "Mind the Gap",
+          "title": "Water Lilies - White Wallcovering | Mind the Gap",
+          "action": "REASSIGN (keeper — no change)",
+          "shared_sku": "MTG-403723-Sample",
+          "survives": "4469024948275 keeps MTG-403723-Sample (oldest / 2020-03-12)",
+          "why": "distinct pattern wrongly sharing sample SKU MTG-403723-Sample with 4469057945651",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "MTG-403723-Sample:hawke_recent_orders_cache(1 rows)",
+          "confidence": "MEDIUM — order #31283 references this SKU with mixed title/mfr (WATER LILIES / WILDERNESS); CONFIRM which product the order maps to before renaming the other side"
+        },
+        {
+          "product_id": "4469057945651",
+          "vendor": "Mind the Gap",
+          "title": "Wilderness - Beige Wallcovering | Mind the Gap",
+          "action": "REASSIGN",
+          "old_sku": "MTG-403723-Sample",
+          "new_sku": "MTG-403723-B-Sample (mint unique; the vendor SKU for \"Wilderness - Beige Wallcovering | Mind the Gap\" differs — look up its real MTG mfr#)",
+          "survives": "4469057945651 stays live with a unique sample SKU",
+          "why": "\"Wilderness - Beige Wallcovering | Mind the Gap\" is a different MtG pattern; must not share MTG-403723-Sample",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "MTG-403723-Sample:hawke_recent_orders_cache(1 rows)",
+          "confidence": "MEDIUM (order-history on the shared SKU — see keeper note)"
+        },
+        {
+          "product_id": "4469053718579",
+          "vendor": "Mind the Gap",
+          "title": "Neon Kiss - White Wallcovering | Mind the Gap",
+          "action": "REASSIGN (keeper — no change)",
+          "shared_sku": "MTG-403490-Sample",
+          "survives": "4469053718579 keeps MTG-403490-Sample (oldest / 2020-03-12)",
+          "why": "distinct pattern wrongly sharing sample SKU MTG-403490-Sample with 4469053751347",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        },
+        {
+          "product_id": "4469053751347",
+          "vendor": "Mind the Gap",
+          "title": "Newton Geometry taupe",
+          "action": "REASSIGN",
+          "old_sku": "MTG-403490-Sample",
+          "new_sku": "MTG-403490-B-Sample (mint unique; the vendor SKU for \"Newton Geometry taupe\" differs — look up its real MTG mfr#)",
+          "survives": "4469053751347 stays live with a unique sample SKU",
+          "why": "\"Newton Geometry taupe\" is a different MtG pattern; must not share MTG-403490-Sample",
+          "redirect_301": "NONE (no archive)",
+          "order_ref_flag": "none",
+          "confidence": "HIGH"
+        }
+      ]
+    },
+    "BATCH-2": {
+      "description": "DW Bespoke live-derived reassign set (wider + scope-leak hazard; DEFER pending Steve)",
+      "items": [
+        {
+          "product_ids": [
+            "6707947208755",
+            "7801847447603"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "DIG-4350959-Periwinkle - Sample",
+          "titles": [
+            "Cici's Periwinkle Traditional | Architectural Wallcoverings",
+            "Cici's Periwinkle Wallcovering | DW Bespoke Studios"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7502400847923",
+            "7502401634355"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-240420-Sample",
+          "titles": [
+            "Golden Peaks Majestic Mural (Adrian) Contemporary | Architectural Wallcoverings",
+            "Lavender Mist Peaks Mural (Adrian) Contemporary | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7547203026995",
+            "7548957392947"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "DIG-320255-mural",
+          "titles": [
+            "Royal Lady Frames Gold Mural Pop Art | Architectural Wallcoverings",
+            "Royal Lady Frames Gold Mural Half Drop Pop Art | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7589565300787",
+            "7589588402227"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "DIG-2400093-SAMPLE",
+          "titles": [
+            "Playform Mural Contemporary | Architectural Wallcoverings",
+            "Watercolor Dots Mural Scandinavian | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7663707619379",
+            "7663711354931",
+            "7663711682611"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "DIG-240434-peel-sample-",
+          "titles": [
+            "Rosé Luxe Mural Contemporary | Architectural Wallcoverings",
+            "Soft Nude Gradient Mural Contemporary | Architectural Wallcoverings",
+            "Watercolor Dots Mural Contemporary | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664462233651",
+            "7664488251443"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-2400089-25-pre-Sample",
+          "titles": [
+            "Blushed Marble Mural Contemporary | Architectural Wallcoverings",
+            "Bois Tranquille Ð Mural Panoramique en Grisaille (Adrian) Traditional | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "YES — one colliding product is OUTSIDE the approved-65 (reassign here would touch/relieve a non-65 SKU space)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664462233651",
+            "7664462364723"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-2400089-25-type-2-vinyl-Sample",
+          "titles": [
+            "Blushed Marble Mural Contemporary | Architectural Wallcoverings",
+            "Blush Tide Mural Contemporary | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664488218675",
+            "7664586915891"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-7700743-25-type-2-vinyl-Sample",
+          "titles": [
+            "Cranes in the Cherry Blossom Lake Japonisme | Architectural Wallcoverings",
+            "Geomino 1970's Geometric Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664488284211",
+            "7664489529395",
+            "7774188404787"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-240416-Sample25-type-2-vinyl-2x12",
+          "titles": [
+            "Cerezo trees Blossom Dreamscape Mural (Adrian) Contemporary | Architectural Wallcoverings",
+            "Calm Elegance Watercolor Soft Dreamy Blue Mural Contemporary | Architectural Wallcoverings",
+            "Nocturnal Anthurium Tropical | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "YES — one colliding product is OUTSIDE the approved-65 (reassign here would touch/relieve a non-65 SKU space)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664489529395",
+            "7774188404787"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-240417-25-type-2-vinyl-Sample",
+          "titles": [
+            "Calm Elegance Watercolor Soft Dreamy Blue Mural Contemporary | Architectural Wallcoverings",
+            "Nocturnal Anthurium Tropical | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664490512435",
+            "7664490545203"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-171053-25-type-2-vinyl-Sample",
+          "titles": [
+            "Charlotte's Authentic Vintage 1910's Reproduction blush pink Traditional | Architectural Wallcoverings",
+            "Charlotte's Authentic Vintage 1910's Reproduction black & blush pink Victorian | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664493002803",
+            "7664584884275"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-240407-25-type-2-vinyl-Sample",
+          "titles": [
+            "Minimalist Simple Leaves - Green and Brown | Architectural Wallcoverings",
+            "Fairfield Happy Days 1970's Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664493068339",
+            "7664493101107"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-2400069-25-type-2-vinyl-Sample",
+          "titles": [
+            "Ethereal Dreamy White Clouds Contemporary | Architectural Wallcoverings",
+            "Hand-Drawn White and Green Stripes Contemporary | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664511418419",
+            "7664511451187",
+            "7664513646643",
+            "7664622272563"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-25-25-pre-Sample",
+          "titles": [
+            "Barone's Butterfly East Mural - Blue Chinoiserie | Architectural Wallcoverings",
+            "Barone's Butterfly Up Mural - Blue Contemporary | Architectural Wallcoverings",
+            "Deep Reef Mural - Available In Your Colors Contemporary | Architectural Wallcoverings",
+            "Hideo Bamboo Vintage 1970's Mylar Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "YES — one colliding product is OUTSIDE the approved-65 (reassign here would touch/relieve a non-65 SKU space)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664512073779",
+            "7664512434227"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-40021-25-type-2-vinyl-Sample",
+          "titles": [
+            "Bottles by Jordan Carlyle Contemporary | Architectural Wallcoverings",
+            "Cello Damask - Charcoal Grey Traditional | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664512237619",
+            "7664512663603"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-240416-25-type-2-vinyl-Sample",
+          "titles": [
+            "Boudoir Ladies - Pink - V. 1.0 Art Deco | Architectural Wallcoverings",
+            "Cello Damask - Sepia Beige Traditional | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664512794675",
+            "7664512827443"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-1100-25-type-2-vinyl-Sample",
+          "titles": [
+            "Classic Cherries Jubilee - Red Green White Contemporary | Architectural Wallcoverings",
+            "Classic green floral vintage wallcovering Victorian | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664513646643",
+            "7664586686515",
+            "7664622272563"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-25-25-type-2-vinyl-Sample",
+          "titles": [
+            "Deep Reef Mural - Available In Your Colors Contemporary | Architectural Wallcoverings",
+            "Thug Stripe - Cream Gun Wallcovering Cream Traditional | Architectural Wallcoverings",
+            "Hideo Bamboo Vintage 1970's Mylar Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "YES — one colliding product is OUTSIDE the approved-65 (reassign here would touch/relieve a non-65 SKU space)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664584851507",
+            "7664636100659"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-770089-25-type-2-vinyl-Sample",
+          "titles": [
+            "Fitzwilliam 1970's Pop Art | Architectural Wallcoverings",
+            "Willington 1940's Branches Chinoiserie | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664591568947",
+            "7664592289843"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "-25",
+          "titles": [
+            "Fiona's 1920's Floral Art Deco | Architectural Wallcoverings",
+            "Hilly's Hippo Vintage 1970's on Italiano Grasscloth Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664592814131",
+            "7664592846899"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-977081-25-type-2-vinyl-Sample",
+          "titles": [
+            "Riley'S Rainbow Of Retro Authentic 1970S Design | Architectural Wallcoverings",
+            "Fremont 1970S Fern Mid-Century Modern | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664593338419",
+            "7664593371187"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-5531287-25-type-2-vinyl-Sample",
+          "titles": [
+            "Wanda's Wandering Wisteria Authentic Vintage 1950's Mid-Century Modern | Architectural Wallcoverings",
+            "Wanda's Wandering Wisteria Authentic Vintage 1950's Floral Mid-Century Modern | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664593633331",
+            "7664629514291"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-553801-25-type-2-vinyl-Sample",
+          "titles": [
+            "Rosie's Roses Authentic Vintage 1950's Traditional | Architectural Wallcoverings",
+            "Rosie's Roses 1950's Traditional | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664598614067",
+            "7664616800307"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-762124-25-type-2-vinyl-Sample",
+          "titles": [
+            "Gregorious Gulls Yellow Coastal | Architectural Wallcoverings",
+            "Zepellin Zebras Yellow Traditional Contemporary | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7664638427187",
+            "7664638459955"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "Dig-770064-25-type-2-vinyl-Sample",
+          "titles": [
+            "Hanover 1970's Geometric Mid-Century Modern | Architectural Wallcoverings",
+            "Bailey Bottles of Booze 1970's Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        },
+        {
+          "product_ids": [
+            "7675395145779",
+            "7675395178547"
+          ],
+          "vendor": "DW Bespoke Studio",
+          "example_shared_sku": "AIDIG-4350142-25_Flame_Scarlet_Orange_&_Autumn_Glaze_Orange",
+          "titles": [
+            "Piermont 1940's Retro | Architectural Wallcoverings",
+            "Piermont 1940's Cody Retro | Architectural Wallcoverings"
+          ],
+          "action": "REASSIGN",
+          "why": "distinct DW Bespoke patterns/colorways sharing DIG fragment SKUs across their ~20 variants each; archiving would delete a legitimate distinct product",
+          "scope_leak": "no (all products in approved-65)",
+          "redirect_301": "N/A (REASSIGN — no archive)",
+          "order_ref_flag": "none",
+          "confidence": "DEFER — Bespoke residual is a ~20-variant-per-product mass reassign, wider than the 65, with cross-scope SKU leakage; recommend a separate scoped artifact + a dedicated reassign tool, NOT this batch"
+        }
+      ]
+    }
+  },
+  "flagged_out_of_scope": [
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430015156275",
+        "7432620933171"
+      ],
+      "example_sku": "MTG-70501",
+      "titles": [
+        "Countryside Plaid Leather - Green, Yellow, Leather Wallcovering | Mind the Gap",
+        "Danube Stripe Blue Wallcovering"
+      ],
+      "classification": "reassign",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430015549491",
+        "7433091776563"
+      ],
+      "example_sku": "MTG-60511",
+      "titles": [
+        "Korond Floral Dune - Taupe, Dune Wallcovering | Mind the Gap"
+      ],
+      "classification": "TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430015582259",
+        "7433093644339"
+      ],
+      "example_sku": "MTG-60512",
+      "titles": [
+        "Korond Floral - Indigo Wallcovering | Mind the Gap"
+      ],
+      "classification": "TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430015713331",
+        "7433107046451"
+      ],
+      "example_sku": "MTG-60515",
+      "titles": [
+        "Sarkozi Embroidery - Indigo Wallcovering | Mind the Gap"
+      ],
+      "classification": "TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430015844403",
+        "7433112059955"
+      ],
+      "example_sku": "MTG-60518",
+      "titles": [
+        "Szepviz - Green Wallcovering | Mind the Gap"
+      ],
+      "classification": "TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430015909939",
+        "7433113796659"
+      ],
+      "example_sku": "MTG-60519",
+      "titles": [
+        "Szepviz - Indigo Wallcovering | Mind the Gap"
+      ],
+      "classification": "TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "Mind the Gap",
+      "product_ids": [
+        "7430016172083",
+        "7433117532211"
+      ],
+      "example_sku": "MTG-60526",
+      "titles": [
+        "Szepviz - Brown Wallcovering | Mind the Gap"
+      ],
+      "classification": "TRUE-DUPLICATE (identical titles, created ~1wk apart 2024-09-24 vs 2024-10-01) → likely a re-import; candidate MERGE",
+      "note": "OUTSIDE approved-65 — needs a NEW approval artifact before any action"
+    },
+    {
+      "vendor": "DW Bespoke Studio",
+      "note": "38 additional live-collision SKUs entirely OUTSIDE the approved-65 (DW Bespoke has 257 live-collision SKUs total across 935 active products) — the Bespoke SKU-hygiene problem is far larger than 65 and warrants its own project"
+    }
+  ],
+  "summary": {
+    "batch1_items": 18,
+    "batch2_items_pairs": 26,
+    "merges": 0,
+    "reassigns_batch1": 18,
+    "order_history_flags": [
+      "MTG-403723-Sample"
+    ],
+    "key_finding": "0 true-duplicate MERGES in the approved-65 live. Residual set is REASSIGN-dominant. DW Bespoke (BATCH-2) is wider than 65 with cross-scope SKU leakage → DEFER."
+  }
+}
\ No newline at end of file

← 6213362a auto-save: 2026-07-29T10:07:58 (2 files) — DW-Websites/Grass  ·  back to Designer Wallcoverings  ·  auto-save: 2026-07-29T11:08:21 (1 files) — shopify/scripts/c fd29e8df →