← 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
A scripts/tk10002-null-sample/build-residual-plan.jsA scripts/tk10002-null-sample/order-ref-scan.jsA scripts/tk10002-null-sample/rederive-live.jsA scripts/tk10002-null-sample/rederive-pr.jsA scripts/tk10002-null-sample/tk10002-residual-plan.json
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 →