[object Object]

← back to Dw Unbuyable Recovery Pilot

TK-11124: add per-yard $359 sellable variant to 18 sample-only DWVE Velvet Walls (Phillipe Romano) — now buyable, samples intact

e88e5d3013f9a845a00d5449f0d5dfd5e0492d3f · 2026-09-02 13:19:21 -0700 · Steve Abrams

Files touched

Diff

commit e88e5d3013f9a845a00d5449f0d5dfd5e0492d3f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 2 13:19:21 2026 -0700

    TK-11124: add per-yard $359 sellable variant to 18 sample-only DWVE Velvet Walls (Phillipe Romano) — now buyable, samples intact
---
 tk11124-dwve-velvet/apply.mjs               |  163 +++++
 tk11124-dwve-velvet/inspect.mjs             |   98 +++
 tk11124-dwve-velvet/out/inspect.json        | 1031 +++++++++++++++++++++++++++
 tk11124-dwve-velvet/out/results-apply.json  |  204 ++++++
 tk11124-dwve-velvet/out/results-dryrun.json |  244 +++++++
 tk11124-dwve-velvet/out/rollback.jsonl      |   18 +
 tk11124-dwve-velvet/out/verify-final.json   |  146 ++++
 tk11124-dwve-velvet/probe2.mjs              |   18 +
 tk11124-dwve-velvet/rollback.mjs            |   30 +
 tk11124-dwve-velvet/verify1.mjs             |    9 +
 tk11124-dwve-velvet/verifyall.mjs           |   18 +
 11 files changed, 1979 insertions(+)

diff --git a/tk11124-dwve-velvet/apply.mjs b/tk11124-dwve-velvet/apply.mjs
new file mode 100644
index 0000000..d7189f8
--- /dev/null
+++ b/tk11124-dwve-velvet/apply.mjs
@@ -0,0 +1,163 @@
+#!/usr/bin/env node
+/**
+ * apply.mjs — TK-11124. Make 18 sample-only ACTIVE "Velvet Walls by Phillipe Romano"
+ * (DWVE) products BUYABLE by ADDING one sellable per-yard variant, matching the live
+ * working sibling DWVE-430760 exactly. Steve-approved, in-session, customer-facing.
+ *
+ * Per product (verified live, sample-only, ACTIVE):
+ *   • ADD variant Size:"Sold Per Yard" @ $359.00, sku=<DWSKU>-Yard, inventoryPolicy CONTINUE,
+ *     inventoryItem.tracked=true  (DEFAULT strategy — the product already has a real "Size"
+ *     option w/ value "Sample", so this appends a 2nd option value; the $4.25 Sample is untouched).
+ *   • inventoryActivate the new item @ Location/5795643504 (15442 Ventura Blvd) + set on_hand 2026
+ *     — REQUIRES write_inventory ⇒ FULL token (lib/shopify.mjs prefers SHOPIFY_FULL_ACCESS_TOKEN …2ea5).
+ *   • Align product global.unit_of_measure  "Full Roll" -> "Sold per Yard"  (records old value).
+ *   • KEEP the $4.25 Sample variant exactly as-is. Do NOT change product status (stays ACTIVE).
+ *
+ * SAFETY:
+ *   • DRY-RUN by default. --apply --i-am-steve to write (Steve gave explicit in-session approval).
+ *   • Idempotent: skips any product that already has a non-sample sellable variant, is not
+ *     sample-only, is not ACTIVE, or whose lone variant is the implicit "Default Title" (would
+ *     be consumed — never risk the sample).
+ *   • Rollback map per product -> out/rollback.jsonl (undo = productVariantsBulkDelete the added
+ *     variant + metafieldsSet unit_of_measure back to old value).
+ *   • Self-verify AFTER each write: re-query, confirm sample survived AND sellable buyable.
+ *   • Ledger each applied product to ~/.claude/yolo-queue/executed-reversible/ledger.jsonl.
+ * COST: $0 (local + Shopify Admin API; no metered service).
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { gql, SHOP, TOKEN } from '../../designerwallcoverings/scripts/lib/shopify.mjs';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const outDir = path.join(__dir, 'out');
+fs.mkdirSync(outDir, { recursive: true });
+const APPLY = process.argv.includes('--apply') && process.argv.includes('--i-am-steve');
+const LIMIT = (process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1];
+
+const LOCATION = 'gid://shopify/Location/5795643504'; // 15442 Ventura Blvd (primary; = getLocation() + sibling)
+const QTY = 2026;
+const PRICE = '359.00';
+const OPT_NAME = 'Size';
+const OPT_VALUE = 'Sold Per Yard';           // match sibling DWVE-430760 casing exactly
+const UNIT_OLD = 'Full Roll';                 // expected current value (verified)
+const UNIT_NEW = 'Sold per Yard';             // line-consistent phrasing ("Sold per Bolt" etc.)
+
+const TARGETS = [
+  ['DWVE-429560','6621005643827'],['DWVE-429660','6621005676595'],['DWVE-429760','6621005709363'],
+  ['DWVE-429960','6621005774899'],['DWVE-430160','6621005873203'],['DWVE-430260','6621005905971'],
+  ['DWVE-430360','6621005938739'],['DWVE-430460','6621005971507'],['DWVE-430560','6621006004275'],
+  ['DWVE-430660','6621006069811'],['DWVE-430860','6621006135347'],['DWVE-430960','6621006200883'],
+  ['DWVE-431060','6621006233651'],['DWVE-431160','6621006266419'],['DWVE-431260','6621006299187'],
+  ['DWVE-431360','6621006331955'],['DWVE-431560','6621006397491'],['DWVE-431660','6621006463027'],
+];
+
+const gidP = id => `gid://shopify/Product/${id}`;
+const Q = `query($id:ID!){ product(id:$id){ id legacyResourceId title handle status
+  options{name values}
+  unit: metafield(namespace:"global", key:"unit_of_measure"){ value }
+  variants(first:25){ nodes{ id sku price selectedOptions{name value} inventoryItem{ id tracked } } } } }`;
+const C = `mutation($productId:ID!,$variants:[ProductVariantsBulkInput!]!){
+  productVariantsBulkCreate(productId:$productId, variants:$variants){
+    productVariants{ id sku price selectedOptions{name value} inventoryItem{ id } } userErrors{ field message } } }`;
+const ACT = `mutation($iid:ID!,$loc:ID!){ inventoryActivate(inventoryItemId:$iid, locationId:$loc){ inventoryLevel{ id } userErrors{ message } } }`;
+const SETQ = `mutation($input:InventorySetQuantitiesInput!){ inventorySetQuantities(input:$input){ userErrors{ message code } } }`;
+const MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ metafields{ id key value } userErrors{ field message } } }`;
+
+const ledgerPath = path.join(process.env.HOME, '.claude/yolo-queue/executed-reversible/ledger.jsonl');
+const rbStream = fs.createWriteStream(path.join(outDir, 'rollback.jsonl'), { flags: 'a' });
+const results = [];
+let applied = 0, skipped = 0, errored = 0;
+
+console.log(`TK-11124 add-per-yard-variant — token …${(TOKEN||'').slice(-4)} — mode: ${APPLY ? '⚠️  LIVE APPLY' : 'DRY-RUN'} — store ${SHOP}`);
+
+const RUN = LIMIT ? TARGETS.slice(0, parseInt(LIMIT, 10)) : TARGETS;
+for (const [dwsku, id] of RUN) {
+  const d = await gql(Q, { id: gidP(id) });
+  const p = d?.product;
+  if (!p) { results.push({ dwsku, id, action: 'SKIP', reason: 'not-found' }); skipped++; continue; }
+  const vs = p.variants.nodes;
+  const sample = vs.find(v => /-sample$/i.test(v.sku||'') || parseFloat(v.price) <= 4.30);
+  const sellable = vs.find(v => v !== sample && parseFloat(v.price) > 4.30);
+  const yardSku = `${dwsku}-Yard`;
+
+  if (p.status !== 'ACTIVE') { results.push({ dwsku, id, action: 'SKIP', reason: 'not-active:'+p.status }); skipped++; continue; }
+  if (sellable || vs.some(v => (v.sku||'').toUpperCase() === yardSku.toUpperCase() || /sold per yard/i.test(v.selectedOptions?.map(o=>o.value).join('|')||''))) {
+    results.push({ dwsku, id, action: 'SKIP', reason: 'already-has-sellable', existing: sellable?.sku }); skipped++; continue;
+  }
+  if (!(vs.length === 1 && sample)) { results.push({ dwsku, id, action: 'SKIP', reason: 'not-sample-only', nvar: vs.length }); skipped++; continue; }
+  const soleOpt = (sample.selectedOptions?.[0]?.value || '').toLowerCase();
+  if (soleOpt === 'default title') { results.push({ dwsku, id, action: 'SKIP', reason: 'default-title-would-consume-sample' }); skipped++; continue; }
+
+  const preUnit = p.unit?.value ?? null;
+  const plan = { dwsku, id: p.legacyResourceId, title: p.title, sample_sku: sample.sku, sample_price: sample.price, yard_sku: yardSku, price: PRICE, opt: `${OPT_NAME}:${OPT_VALUE}`, unit_from: preUnit, unit_to: UNIT_NEW };
+
+  if (!APPLY) { results.push({ dwsku, id: p.legacyResourceId, action: 'WOULD-APPLY', ...plan }); continue; }
+
+  const errs = [];
+  // 1) create the sellable per-yard variant (DEFAULT strategy — appends 2nd Size value)
+  const cr = await gql(C, { productId: gidP(id), variants: [{
+    price: PRICE, optionValues: [{ optionName: OPT_NAME, name: OPT_VALUE }],
+    inventoryPolicy: 'CONTINUE', inventoryItem: { sku: yardSku, tracked: true },
+  }] });
+  if (cr?.__err) { errored++; results.push({ dwsku, id, action: 'FAIL', reason: 'create:'+JSON.stringify(cr.__err).slice(0,160) }); continue; }
+  const ue = cr.productVariantsBulkCreate?.userErrors || [];
+  if (ue.length) { errored++; results.push({ dwsku, id, action: 'FAIL', reason: 'create-uerr:'+JSON.stringify(ue) }); continue; }
+  const nv = (cr.productVariantsBulkCreate.productVariants || []).find(v => (v.sku||'').toUpperCase() === yardSku.toUpperCase()) || cr.productVariantsBulkCreate.productVariants[0];
+  const iid = nv?.inventoryItem?.id;
+  // record rollback BEFORE further steps so the created variant is always reversible
+  rbStream.write(JSON.stringify({ dwsku, product_id: p.legacyResourceId, added_variant_id: nv.id, yard_sku: yardSku, unit_of_measure_old: preUnit, unit_of_measure_new: UNIT_NEW }) + '\n');
+
+  // 2) inventoryActivate + set on_hand 2026 (FULL token)
+  if (iid) {
+    const a = await gql(ACT, { iid, loc: LOCATION });
+    (a?.inventoryActivate?.userErrors || []).filter(e => !/already/i.test(e.message)).forEach(e => errs.push('activate:'+e.message));
+    if (a?.__err) errs.push('activate:'+JSON.stringify(a.__err).slice(0,120));
+    const sq = await gql(SETQ, { input: { name: 'on_hand', reason: 'correction', ignoreCompareQuantity: true,
+      quantities: [{ inventoryItemId: iid, locationId: LOCATION, quantity: QTY }] } });
+    (sq?.inventorySetQuantities?.userErrors || []).forEach(e => errs.push('setqty:'+e.message));
+    if (sq?.__err) errs.push('setqty:'+JSON.stringify(sq.__err).slice(0,120));
+  } else errs.push('no-inventoryItem-on-created-variant');
+
+  // 3) align unit_of_measure metafield
+  const mf = await gql(MF, { mf: [{ ownerId: gidP(id), namespace: 'global', key: 'unit_of_measure', type: 'single_line_text_field', value: UNIT_NEW }] });
+  (mf?.metafieldsSet?.userErrors || []).forEach(e => errs.push('unit-mf:'+e.message));
+  if (mf?.__err) errs.push('unit-mf:'+JSON.stringify(mf.__err).slice(0,120));
+
+  // 4) self-verify: re-query, sample survived + sellable present + status still ACTIVE
+  const re = await gql(Q, { id: gidP(id) });
+  const rv = re?.product?.variants?.nodes || [];
+  const sampleOk = rv.some(v => parseFloat(v.price) <= 4.30);
+  const sellOk = rv.some(v => (v.sku||'').toUpperCase() === yardSku.toUpperCase() && parseFloat(v.price) > 4.30);
+  const unitOk = (re?.product?.unit?.value || '') === UNIT_NEW;
+  const statusOk = re?.product?.status === 'ACTIVE';
+  const minPrice = Math.min(...rv.map(v => parseFloat(v.price)));
+
+  if (!sampleOk) {
+    errs.push('SAMPLE-LOST');
+    results.push({ dwsku, id: p.legacyResourceId, action: 'FAIL-SAMPLE-LOST', added_variant_id: nv.id, errs });
+    console.log(`⛔ ${dwsku} SAMPLE LOST after add — ABORT (rollback the added variant ${nv.id}). Evidence out/rollback.jsonl`);
+    errored++; break; // never churn further
+  }
+
+  const action = (sellOk && statusOk && !errs.length) ? 'APPLIED' : 'APPLIED-WITH-WARN';
+  results.push({ dwsku, id: p.legacyResourceId, action, added_variant_id: nv.id, yard_sku: yardSku, min_variant_price: minPrice, unit_ok: unitOk, status: re?.product?.status, errs });
+  applied++;
+  // ledger this reversible customer-facing write
+  fs.appendFileSync(ledgerPath, JSON.stringify({
+    ts: new Date().toISOString(), agent: 'vp-dw-commerce', ticket: 'TK-11124',
+    action: `add per-yard sellable variant ${yardSku} @ $${PRICE} (Size:${OPT_VALUE}, CONTINUE, inv ${QTY}@Ventura) + unit_of_measure "${preUnit}"->"${UNIT_NEW}" on ${dwsku} product ${p.legacyResourceId} (${SHOP}) — makes sample-only ACTIVE product buyable`,
+    blast_radius: 18,
+    undo_cmd: `cd ~/Projects/dw-unbuyable-recovery-pilot/tk11124-dwve-velvet && node rollback.mjs --apply --i-am-steve   # productVariantsBulkDelete ${nv.id} on product ${p.legacyResourceId} + metafieldsSet global.unit_of_measure="${preUnit}"; map out/rollback.jsonl`,
+    verify: `product ${p.legacyResourceId} variant ${yardSku} present @ $${PRICE}, sample $4.25 intact, status ACTIVE`,
+  }) + '\n');
+  await new Promise(r => setTimeout(r, 150));
+}
+
+rbStream.end();
+fs.writeFileSync(path.join(outDir, `results-${APPLY?'apply':'dryrun'}.json`), JSON.stringify({ ticket: 'TK-11124', at: new Date().toISOString(), apply: APPLY, applied, skipped, errored, results }, null, 2));
+
+console.log(`\n=== ${APPLY ? 'APPLIED' : 'DRY-RUN'} — ${applied} applied / ${skipped} skipped / ${errored} failed ===`);
+for (const r of results) console.log(`  ${String(r.action).padEnd(20)} ${r.dwsku}${r.yard_sku?(' +'+r.yard_sku):''}${r.min_variant_price!==undefined?(' min$'+r.min_variant_price):''}${r.reason?('  reason='+r.reason):''}${r.errs&&r.errs.length?('  ERRS='+r.errs.join(';')):''}`);
+console.log(`\nrollback map: out/rollback.jsonl  |  results: out/results-${APPLY?'apply':'dryrun'}.json`);
+if (!APPLY) console.log('To execute: node apply.mjs --apply --i-am-steve');
diff --git a/tk11124-dwve-velvet/inspect.mjs b/tk11124-dwve-velvet/inspect.mjs
new file mode 100644
index 0000000..01da396
--- /dev/null
+++ b/tk11124-dwve-velvet/inspect.mjs
@@ -0,0 +1,98 @@
+#!/usr/bin/env node
+/**
+ * inspect.mjs — READ-ONLY verify-before-act for TK-11124.
+ * GET the LIVE Shopify state of the 18 DWVE targets + the working sibling DWVE-430760
+ * + one archived DWVE (429860) to confirm exclusions. Classifies each target as
+ * sample-only (eligible) vs already-has-sellable (skip). No writes.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { gql } from '../../designerwallcoverings/scripts/lib/shopify.mjs';
+
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+
+const TARGETS = [
+  ['DWVE-429560','6621005643827'],['DWVE-429660','6621005676595'],['DWVE-429760','6621005709363'],
+  ['DWVE-429960','6621005774899'],['DWVE-430160','6621005873203'],['DWVE-430260','6621005905971'],
+  ['DWVE-430360','6621005938739'],['DWVE-430460','6621005971507'],['DWVE-430560','6621006004275'],
+  ['DWVE-430660','6621006069811'],['DWVE-430860','6621006135347'],['DWVE-430960','6621006200883'],
+  ['DWVE-431060','6621006233651'],['DWVE-431160','6621006266419'],['DWVE-431260','6621006299187'],
+  ['DWVE-431360','6621006331955'],['DWVE-431560','6621006397491'],['DWVE-431660','6621006463027'],
+];
+// reference: the working sibling (should already have a sellable variant) + one archived (exclude)
+const REFS = [['DWVE-430760(WORKING-SIBLING)','6621005807667?'],['DWVE-429860(ARCHIVED)','?']];
+
+const gidP = id => `gid://shopify/Product/${id}`;
+const Q = `query($id:ID!){ product(id:$id){
+  id legacyResourceId title handle status vendor productType
+  featuredImage{url} mediaCount{count}
+  options{name values}
+  unitmf: metafield(namespace:"global", key:"unit_of_measure"){ value }
+  mmf: metafield(namespace:"custom", key:"manufacturer_sku"){ value }
+  variants(first:25){ nodes{ id sku title price
+    inventoryPolicy
+    selectedOptions{ name value }
+    inventoryItem{ id tracked } } } } }`;
+
+function classify(p){
+  const vs = p.variants.nodes;
+  const sample = vs.find(v => /-sample$/i.test(v.sku||'') || parseFloat(v.price) <= 4.30);
+  const sellable = vs.find(v => v !== sample && parseFloat(v.price) > 4.30);
+  let cls;
+  if (!p) cls = 'NOT-FOUND';
+  else if (p.status !== 'ACTIVE') cls = 'NOT-ACTIVE:'+p.status;
+  else if (sellable) cls = 'HAS-SELLABLE(skip)';
+  else if (sample && vs.length === 1) cls = 'SAMPLE-ONLY(eligible)';
+  else if (sample) cls = 'SAMPLE+EXTRA:'+vs.length;
+  else cls = 'NO-SAMPLE:'+vs.length;
+  return { cls, sample, sellable };
+}
+
+const rows = [];
+for (const [sku, id] of TARGETS) {
+  const d = await gql(Q, { id: gidP(id) });
+  const p = d?.product;
+  if (!p) { rows.push({ sku, id, cls:'NOT-FOUND' }); continue; }
+  const { cls, sample, sellable } = classify(p);
+  rows.push({
+    sku, id: p.legacyResourceId, cls, status: p.status, title: p.title, handle: p.handle,
+    vendor: p.vendor, productType: p.productType,
+    optionName: p.options?.[0]?.name, optionValues: p.options?.[0]?.values,
+    unit_of_measure_mf: p.unitmf?.value ?? null,
+    manufacturer_sku_mf: p.mmf?.value ?? null,
+    image: p.featuredImage?.url ? 'yes' : (p.mediaCount?.count>0?'media':'NONE'),
+    nvariants: p.variants.nodes.length,
+    sample: sample && { id: sample.id, sku: sample.sku, price: sample.price, opt: sample.selectedOptions, tracked: sample.inventoryItem?.tracked, policy: sample.inventoryPolicy },
+    sellable: sellable && { id: sellable.id, sku: sellable.sku, price: sellable.price, opt: sellable.selectedOptions, tracked: sellable.inventoryItem?.tracked, policy: sellable.inventoryPolicy },
+    allVariants: p.variants.nodes.map(v=>({sku:v.sku,price:v.price,opt:v.selectedOptions,tracked:v.inventoryItem?.tracked,policy:v.inventoryPolicy})),
+  });
+}
+
+// Also fetch the working sibling + archived by GID guess from the DWVE numbering — but we only
+// have the excluded ids by SKU. Fetch DWVE-430760 & archived via product handle search instead.
+const search = async (q) => {
+  const d = await gql(`query($q:String!){ products(first:3, query:$q){ nodes{
+    id legacyResourceId title status handle
+    unitmf: metafield(namespace:"global", key:"unit_of_measure"){ value }
+    options{name values}
+    variants(first:25){ nodes{ sku price inventoryPolicy selectedOptions{name value} inventoryItem{tracked} } } } } }`, { q });
+  return d?.products?.nodes || [];
+};
+const refOut = {};
+for (const s of ['DWVE-430760','DWVE-429860','DWVE-430060','DWVE-431460']) {
+  refOut[s] = await search(`sku:${s}*`);
+}
+
+const summary = rows.reduce((a,r)=>{a[r.cls]=(a[r.cls]||0)+1;return a;},{});
+const out = { ticket:'TK-11124', at:new Date().toISOString(), summary, targets: rows, references: refOut };
+fs.writeFileSync(path.join(__dir,'out','inspect.json'), JSON.stringify(out,null,2));
+
+console.log('=== TK-11124 DWVE inspection (READ-ONLY) ===');
+console.log('summary:', JSON.stringify(summary));
+for (const r of rows) console.log(`  ${(r.cls||'').padEnd(22)} ${r.sku}  opt="${r.optionName}"  unit_mf="${r.unit_of_measure_mf}"  img=${r.image}  nvar=${r.nvariants}  sample=${r.sample?('$'+r.sample.price+' '+r.sample.sku):'—'}`);
+console.log('\n--- reference SKUs (working sibling + archived exclusions) ---');
+for (const [s, nodes] of Object.entries(refOut)) {
+  for (const n of nodes) console.log(`  ${s}: ${n.status.padEnd(9)} "${n.title}" opt="${n.options?.[0]?.name}" unit_mf="${n.unitmf?.value}" variants=${JSON.stringify(n.variants.nodes.map(v=>({sku:v.sku,price:v.price,opt:v.selectedOptions?.map(o=>o.name+':'+o.value).join('|'),tracked:v.inventoryItem?.tracked,policy:v.inventoryPolicy})))}`);
+}
+console.log('\nwrote out/inspect.json');
diff --git a/tk11124-dwve-velvet/out/inspect.json b/tk11124-dwve-velvet/out/inspect.json
new file mode 100644
index 0000000..03e6c3b
--- /dev/null
+++ b/tk11124-dwve-velvet/out/inspect.json
@@ -0,0 +1,1031 @@
+{
+  "ticket": "TK-11124",
+  "at": "2026-09-02T20:09:10.389Z",
+  "summary": {
+    "SAMPLE-ONLY(eligible)": 18
+  },
+  "targets": [
+    {
+      "sku": "DWVE-429560",
+      "id": "6621005643827",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Cream",
+      "handle": "dwve-429500",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598012399667",
+        "sku": "DWVE-429560",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-429560",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-429660",
+      "id": "6621005676595",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Light Beige",
+      "handle": "dwve-429600",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598012432435",
+        "sku": "DWVE-429660",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-429660",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-429760",
+      "id": "6621005709363",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Deep Taupe",
+      "handle": "dwve-429700",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598012465203",
+        "sku": "DWVE-429760",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-429760",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-429960",
+      "id": "6621005774899",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Rust",
+      "handle": "dwve-429900",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598012530739",
+        "sku": "DWVE-429960",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-429960",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430160",
+      "id": "6621005873203",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Deep Red",
+      "handle": "dwve-430100",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598013186099",
+        "sku": "DWVE-430160",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430160",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430260",
+      "id": "6621005905971",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Aqua, Blue, Green",
+      "handle": "dwve-430200",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598013218867",
+        "sku": "DWVE-430260",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430260",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430360",
+      "id": "6621005938739",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Purple",
+      "handle": "dwve-430300",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598013251635",
+        "sku": "DWVE-430360",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430360",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430460",
+      "id": "6621005971507",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Slate Blue",
+      "handle": "dwve-430400",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598013284403",
+        "sku": "DWVE-430460",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430460",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430560",
+      "id": "6621006004275",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Cabernet Red",
+      "handle": "dwve-430500",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598013317171",
+        "sku": "DWVE-430560",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430560",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430660",
+      "id": "6621006069811",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Pink Cream",
+      "handle": "dwve-430600",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598014300211",
+        "sku": "DWVE-430660",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430660",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430860",
+      "id": "6621006135347",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Old Gold",
+      "handle": "dwve-430800",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598015971379",
+        "sku": "DWVE-430860",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430860",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-430960",
+      "id": "6621006200883",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Bright Aqua Blue",
+      "handle": "dwve-430900",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598016135219",
+        "sku": "DWVE-430960",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-430960",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-431060",
+      "id": "6621006233651",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Faded Green",
+      "handle": "dwve-431000",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598016167987",
+        "sku": "DWVE-431060",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-431060",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-431160",
+      "id": "6621006266419",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Spice Red",
+      "handle": "dwve-431100",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598016200755",
+        "sku": "DWVE-431160",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-431160",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-431260",
+      "id": "6621006299187",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Charcoal Black",
+      "handle": "dwve-431200",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598016233523",
+        "sku": "DWVE-431260",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-431260",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-431360",
+      "id": "6621006331955",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Deep Olive Green",
+      "handle": "dwve-431300",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598016266291",
+        "sku": "DWVE-431360",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-431360",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-431560",
+      "id": "6621006397491",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Taupe Grey",
+      "handle": "dwve-431500",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598016331827",
+        "sku": "DWVE-431560",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-431560",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    },
+    {
+      "sku": "DWVE-431660",
+      "id": "6621006463027",
+      "cls": "SAMPLE-ONLY(eligible)",
+      "status": "ACTIVE",
+      "title": "Alicante Velvet Walls Java Brown",
+      "handle": "dwve-431600",
+      "vendor": "Phillipe Romano",
+      "productType": "Wallcovering",
+      "optionName": "Size",
+      "optionValues": [
+        "Sample"
+      ],
+      "unit_of_measure_mf": "Full Roll",
+      "manufacturer_sku_mf": "TRUE",
+      "image": "yes",
+      "nvariants": 1,
+      "sample": {
+        "id": "gid://shopify/ProductVariant/39598017151027",
+        "sku": "DWVE-431660",
+        "price": "4.25",
+        "opt": [
+          {
+            "name": "Size",
+            "value": "Sample"
+          }
+        ],
+        "tracked": true,
+        "policy": "CONTINUE"
+      },
+      "allVariants": [
+        {
+          "sku": "DWVE-431660",
+          "price": "4.25",
+          "opt": [
+            {
+              "name": "Size",
+              "value": "Sample"
+            }
+          ],
+          "tracked": true,
+          "policy": "CONTINUE"
+        }
+      ]
+    }
+  ],
+  "references": {
+    "DWVE-430760": [
+      {
+        "id": "gid://shopify/Product/6621006102579",
+        "legacyResourceId": "6621006102579",
+        "title": "Alicante Velvet Walls Hunter Green",
+        "status": "ACTIVE",
+        "handle": "dwve-430700",
+        "unitmf": {
+          "value": "Full Roll"
+        },
+        "options": [
+          {
+            "name": "Size",
+            "values": [
+              "Sold Per Yard",
+              "Sample"
+            ]
+          }
+        ],
+        "variants": {
+          "nodes": [
+            {
+              "sku": "DWVE-430760",
+              "price": "359.00",
+              "inventoryPolicy": "CONTINUE",
+              "selectedOptions": [
+                {
+                  "name": "Size",
+                  "value": "Sold Per Yard"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": true
+              }
+            },
+            {
+              "sku": "DWVE-430760-Sample",
+              "price": "4.25",
+              "inventoryPolicy": "DENY",
+              "selectedOptions": [
+                {
+                  "name": "Size",
+                  "value": "Sample"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": true
+              }
+            }
+          ]
+        }
+      },
+      {
+        "id": "gid://shopify/Product/7862953443379",
+        "legacyResourceId": "7862953443379",
+        "title": "Alicante Velvet Walls Hunter Green Memo Sample | Phillipe Romano",
+        "status": "DRAFT",
+        "handle": "alicante-velvet-walls-hunter-green-memo-sample-phillipe-romano",
+        "unitmf": null,
+        "options": [
+          {
+            "name": "Title",
+            "values": [
+              "Default Title"
+            ]
+          }
+        ],
+        "variants": {
+          "nodes": [
+            {
+              "sku": "DWVE-430760",
+              "price": "4.25",
+              "inventoryPolicy": "DENY",
+              "selectedOptions": [
+                {
+                  "name": "Title",
+                  "value": "Default Title"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": false
+              }
+            }
+          ]
+        }
+      }
+    ],
+    "DWVE-429860": [
+      {
+        "id": "gid://shopify/Product/6621005742131",
+        "legacyResourceId": "6621005742131",
+        "title": "Alicante Velvet Walls Gold",
+        "status": "ARCHIVED",
+        "handle": "dwve-429800",
+        "unitmf": null,
+        "options": [
+          {
+            "name": "Title",
+            "values": [
+              "Default Title"
+            ]
+          }
+        ],
+        "variants": {
+          "nodes": [
+            {
+              "sku": "DWVE-429860",
+              "price": "4.67",
+              "inventoryPolicy": "CONTINUE",
+              "selectedOptions": [
+                {
+                  "name": "Title",
+                  "value": "Default Title"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": true
+              }
+            }
+          ]
+        }
+      }
+    ],
+    "DWVE-430060": [
+      {
+        "id": "gid://shopify/Product/6621005840435",
+        "legacyResourceId": "6621005840435",
+        "title": "Alicante Velvet Walls Wine Red",
+        "status": "ARCHIVED",
+        "handle": "dwve-430000",
+        "unitmf": null,
+        "options": [
+          {
+            "name": "Title",
+            "values": [
+              "Default Title",
+              "Sample"
+            ]
+          }
+        ],
+        "variants": {
+          "nodes": [
+            {
+              "sku": "DWVE-430060",
+              "price": "4.67",
+              "inventoryPolicy": "DENY",
+              "selectedOptions": [
+                {
+                  "name": "Title",
+                  "value": "Default Title"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": true
+              }
+            },
+            {
+              "sku": "DWVE-430060-Sample",
+              "price": "4.25",
+              "inventoryPolicy": "DENY",
+              "selectedOptions": [
+                {
+                  "name": "Title",
+                  "value": "Sample"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": true
+              }
+            }
+          ]
+        }
+      }
+    ],
+    "DWVE-431460": [
+      {
+        "id": "gid://shopify/Product/6621006364723",
+        "legacyResourceId": "6621006364723",
+        "title": "Alicante Velvet Walls Aubergine Purple",
+        "status": "ARCHIVED",
+        "handle": "dwve-431400",
+        "unitmf": null,
+        "options": [
+          {
+            "name": "Size",
+            "values": [
+              "Sample"
+            ]
+          }
+        ],
+        "variants": {
+          "nodes": [
+            {
+              "sku": "DWVE-431460",
+              "price": "4.25",
+              "inventoryPolicy": "CONTINUE",
+              "selectedOptions": [
+                {
+                  "name": "Size",
+                  "value": "Sample"
+                }
+              ],
+              "inventoryItem": {
+                "tracked": true
+              }
+            }
+          ]
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tk11124-dwve-velvet/out/results-apply.json b/tk11124-dwve-velvet/out/results-apply.json
new file mode 100644
index 0000000..9f89996
--- /dev/null
+++ b/tk11124-dwve-velvet/out/results-apply.json
@@ -0,0 +1,204 @@
+{
+  "ticket": "TK-11124",
+  "at": "2026-09-02T20:16:09.479Z",
+  "apply": true,
+  "applied": 17,
+  "skipped": 1,
+  "errored": 0,
+  "results": [
+    {
+      "dwsku": "DWVE-429560",
+      "id": "6621005643827",
+      "action": "SKIP",
+      "reason": "already-has-sellable",
+      "existing": "DWVE-429560-Yard"
+    },
+    {
+      "dwsku": "DWVE-429660",
+      "id": "6621005676595",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029193267",
+      "yard_sku": "DWVE-429660-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-429760",
+      "id": "6621005709363",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029258803",
+      "yard_sku": "DWVE-429760-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-429960",
+      "id": "6621005774899",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029291571",
+      "yard_sku": "DWVE-429960-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430160",
+      "id": "6621005873203",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029324339",
+      "yard_sku": "DWVE-430160-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430260",
+      "id": "6621005905971",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029357107",
+      "yard_sku": "DWVE-430260-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430360",
+      "id": "6621005938739",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029389875",
+      "yard_sku": "DWVE-430360-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430460",
+      "id": "6621005971507",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029422643",
+      "yard_sku": "DWVE-430460-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430560",
+      "id": "6621006004275",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029455411",
+      "yard_sku": "DWVE-430560-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430660",
+      "id": "6621006069811",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029488179",
+      "yard_sku": "DWVE-430660-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430860",
+      "id": "6621006135347",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029520947",
+      "yard_sku": "DWVE-430860-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-430960",
+      "id": "6621006200883",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029553715",
+      "yard_sku": "DWVE-430960-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-431060",
+      "id": "6621006233651",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029586483",
+      "yard_sku": "DWVE-431060-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-431160",
+      "id": "6621006266419",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029619251",
+      "yard_sku": "DWVE-431160-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-431260",
+      "id": "6621006299187",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029684787",
+      "yard_sku": "DWVE-431260-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-431360",
+      "id": "6621006331955",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029717555",
+      "yard_sku": "DWVE-431360-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-431560",
+      "id": "6621006397491",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029750323",
+      "yard_sku": "DWVE-431560-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    },
+    {
+      "dwsku": "DWVE-431660",
+      "id": "6621006463027",
+      "action": "APPLIED",
+      "added_variant_id": "gid://shopify/ProductVariant/44814029783091",
+      "yard_sku": "DWVE-431660-Yard",
+      "min_variant_price": 4.25,
+      "unit_ok": true,
+      "status": "ACTIVE",
+      "errs": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tk11124-dwve-velvet/out/results-dryrun.json b/tk11124-dwve-velvet/out/results-dryrun.json
new file mode 100644
index 0000000..db504b1
--- /dev/null
+++ b/tk11124-dwve-velvet/out/results-dryrun.json
@@ -0,0 +1,244 @@
+{
+  "ticket": "TK-11124",
+  "at": "2026-09-02T20:14:00.316Z",
+  "apply": false,
+  "applied": 0,
+  "skipped": 0,
+  "errored": 0,
+  "results": [
+    {
+      "dwsku": "DWVE-429560",
+      "id": "6621005643827",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Cream",
+      "sample_sku": "DWVE-429560",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-429560-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-429660",
+      "id": "6621005676595",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Light Beige",
+      "sample_sku": "DWVE-429660",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-429660-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-429760",
+      "id": "6621005709363",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Deep Taupe",
+      "sample_sku": "DWVE-429760",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-429760-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-429960",
+      "id": "6621005774899",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Rust",
+      "sample_sku": "DWVE-429960",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-429960-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430160",
+      "id": "6621005873203",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Deep Red",
+      "sample_sku": "DWVE-430160",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430160-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430260",
+      "id": "6621005905971",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Aqua, Blue, Green",
+      "sample_sku": "DWVE-430260",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430260-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430360",
+      "id": "6621005938739",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Purple",
+      "sample_sku": "DWVE-430360",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430360-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430460",
+      "id": "6621005971507",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Slate Blue",
+      "sample_sku": "DWVE-430460",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430460-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430560",
+      "id": "6621006004275",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Cabernet Red",
+      "sample_sku": "DWVE-430560",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430560-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430660",
+      "id": "6621006069811",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Pink Cream",
+      "sample_sku": "DWVE-430660",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430660-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430860",
+      "id": "6621006135347",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Old Gold",
+      "sample_sku": "DWVE-430860",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430860-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-430960",
+      "id": "6621006200883",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Bright Aqua Blue",
+      "sample_sku": "DWVE-430960",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-430960-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-431060",
+      "id": "6621006233651",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Faded Green",
+      "sample_sku": "DWVE-431060",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-431060-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-431160",
+      "id": "6621006266419",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Spice Red",
+      "sample_sku": "DWVE-431160",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-431160-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-431260",
+      "id": "6621006299187",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Charcoal Black",
+      "sample_sku": "DWVE-431260",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-431260-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-431360",
+      "id": "6621006331955",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Deep Olive Green",
+      "sample_sku": "DWVE-431360",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-431360-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-431560",
+      "id": "6621006397491",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Taupe Grey",
+      "sample_sku": "DWVE-431560",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-431560-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    },
+    {
+      "dwsku": "DWVE-431660",
+      "id": "6621006463027",
+      "action": "WOULD-APPLY",
+      "title": "Alicante Velvet Walls Java Brown",
+      "sample_sku": "DWVE-431660",
+      "sample_price": "4.25",
+      "yard_sku": "DWVE-431660-Yard",
+      "price": "359.00",
+      "opt": "Size:Sold Per Yard",
+      "unit_from": "Full Roll",
+      "unit_to": "Sold per Yard"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tk11124-dwve-velvet/out/rollback.jsonl b/tk11124-dwve-velvet/out/rollback.jsonl
new file mode 100644
index 0000000..ff2da99
--- /dev/null
+++ b/tk11124-dwve-velvet/out/rollback.jsonl
@@ -0,0 +1,18 @@
+{"dwsku":"DWVE-429560","product_id":"6621005643827","added_variant_id":"gid://shopify/ProductVariant/44814029127731","yard_sku":"DWVE-429560-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-429660","product_id":"6621005676595","added_variant_id":"gid://shopify/ProductVariant/44814029193267","yard_sku":"DWVE-429660-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-429760","product_id":"6621005709363","added_variant_id":"gid://shopify/ProductVariant/44814029258803","yard_sku":"DWVE-429760-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-429960","product_id":"6621005774899","added_variant_id":"gid://shopify/ProductVariant/44814029291571","yard_sku":"DWVE-429960-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430160","product_id":"6621005873203","added_variant_id":"gid://shopify/ProductVariant/44814029324339","yard_sku":"DWVE-430160-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430260","product_id":"6621005905971","added_variant_id":"gid://shopify/ProductVariant/44814029357107","yard_sku":"DWVE-430260-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430360","product_id":"6621005938739","added_variant_id":"gid://shopify/ProductVariant/44814029389875","yard_sku":"DWVE-430360-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430460","product_id":"6621005971507","added_variant_id":"gid://shopify/ProductVariant/44814029422643","yard_sku":"DWVE-430460-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430560","product_id":"6621006004275","added_variant_id":"gid://shopify/ProductVariant/44814029455411","yard_sku":"DWVE-430560-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430660","product_id":"6621006069811","added_variant_id":"gid://shopify/ProductVariant/44814029488179","yard_sku":"DWVE-430660-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430860","product_id":"6621006135347","added_variant_id":"gid://shopify/ProductVariant/44814029520947","yard_sku":"DWVE-430860-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-430960","product_id":"6621006200883","added_variant_id":"gid://shopify/ProductVariant/44814029553715","yard_sku":"DWVE-430960-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-431060","product_id":"6621006233651","added_variant_id":"gid://shopify/ProductVariant/44814029586483","yard_sku":"DWVE-431060-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-431160","product_id":"6621006266419","added_variant_id":"gid://shopify/ProductVariant/44814029619251","yard_sku":"DWVE-431160-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-431260","product_id":"6621006299187","added_variant_id":"gid://shopify/ProductVariant/44814029684787","yard_sku":"DWVE-431260-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-431360","product_id":"6621006331955","added_variant_id":"gid://shopify/ProductVariant/44814029717555","yard_sku":"DWVE-431360-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-431560","product_id":"6621006397491","added_variant_id":"gid://shopify/ProductVariant/44814029750323","yard_sku":"DWVE-431560-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
+{"dwsku":"DWVE-431660","product_id":"6621006463027","added_variant_id":"gid://shopify/ProductVariant/44814029783091","yard_sku":"DWVE-431660-Yard","unit_of_measure_old":"Full Roll","unit_of_measure_new":"Sold per Yard"}
diff --git a/tk11124-dwve-velvet/out/verify-final.json b/tk11124-dwve-velvet/out/verify-final.json
new file mode 100644
index 0000000..ae49f8a
--- /dev/null
+++ b/tk11124-dwve-velvet/out/verify-final.json
@@ -0,0 +1,146 @@
+[
+  {
+    "sku": "DWVE-429560",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-429660",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-429760",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-429960",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430160",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430260",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430360",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430460",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430560",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430660",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430860",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-430960",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-431060",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-431160",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-431260",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-431360",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-431560",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  },
+  {
+    "sku": "DWVE-431660",
+    "status": "ACTIVE",
+    "unit": "Sold per Yard",
+    "sample": "$4.25",
+    "yard": "$359.00 CONTINUE",
+    "pass": true
+  }
+]
\ No newline at end of file
diff --git a/tk11124-dwve-velvet/probe2.mjs b/tk11124-dwve-velvet/probe2.mjs
new file mode 100644
index 0000000..4e18c80
--- /dev/null
+++ b/tk11124-dwve-velvet/probe2.mjs
@@ -0,0 +1,18 @@
+import { gql, getLocation } from '../../designerwallcoverings/scripts/lib/shopify.mjs';
+// sibling sellable inventory detail
+const sib = await gql(`{ products(first:1, query:"sku:DWVE-430760") { nodes {
+  title status
+  variants(first:10){ nodes { sku price inventoryPolicy inventoryItem { id tracked
+    inventoryLevels(first:5){ nodes { location{ id name } quantities(names:["on_hand","available"]){ name quantity } } } } } } } } }`);
+console.log('SIBLING DWVE-430760 sellable inventory:');
+for (const n of sib.products.nodes) for (const v of n.variants.nodes)
+  console.log(` ${v.sku} $${v.price} pol=${v.inventoryPolicy} tracked=${v.inventoryItem?.tracked} levels=${JSON.stringify(v.inventoryItem?.inventoryLevels?.nodes?.map(l=>({loc:l.location.name,id:l.location.id,q:l.quantities})))}`);
+const loc = await getLocation();
+console.log('getLocation() primary =', loc);
+// unit_of_measure convention across the DWVE Velvet Walls line (any that are per-yard active)
+const conv = await gql(`{ products(first:15, query:"tag:*Velvet* OR title:*Velvet Walls*") { nodes { title status metafield(namespace:"global",key:"unit_of_measure"){value} variants(first:3){nodes{sku price selectedOptions{value}}} } } }`);
+console.log('\nunit_of_measure across Velvet Walls line:');
+for (const n of conv.products.nodes) console.log(` [${n.status}] unit="${n.metafield?.value}" "${n.title}"`);
+// sample variant policy/tracked on a target (429560) — confirm we won't disturb
+const tgt = await gql(`{ product(id:"gid://shopify/Product/6621005643827"){ variants(first:5){nodes{ sku price inventoryPolicy inventoryItem{tracked}}}}}`);
+console.log('\nTarget DWVE-429560 current variant(s):', JSON.stringify(tgt.product.variants.nodes));
diff --git a/tk11124-dwve-velvet/rollback.mjs b/tk11124-dwve-velvet/rollback.mjs
new file mode 100644
index 0000000..c817770
--- /dev/null
+++ b/tk11124-dwve-velvet/rollback.mjs
@@ -0,0 +1,30 @@
+#!/usr/bin/env node
+/**
+ * rollback.mjs — TK-11124 undo. For each row in out/rollback.jsonl:
+ *   • productVariantsBulkDelete the added -Yard variant (removes variant + its inventoryItem + levels)
+ *   • metafieldsSet global.unit_of_measure back to its recorded old value
+ * Reverts each product to sample-only, exactly as before. DRY-RUN default; --apply --i-am-steve to run.
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { gql } from '../../designerwallcoverings/scripts/lib/shopify.mjs';
+const __dir = path.dirname(fileURLToPath(import.meta.url));
+const APPLY = process.argv.includes('--apply') && process.argv.includes('--i-am-steve');
+const map = fs.readFileSync(path.join(__dir, 'out', 'rollback.jsonl'), 'utf8').trim().split('\n').filter(Boolean).map(l => JSON.parse(l));
+const DEL = `mutation($pid:ID!,$ids:[ID!]!){ productVariantsBulkDelete(productId:$pid, variantsIds:$ids){ userErrors{ message } } }`;
+const MF = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{ message } } }`;
+console.log(`TK-11124 ROLLBACK — ${APPLY ? 'LIVE' : 'DRY-RUN'} — ${map.length} products`);
+for (const r of map) {
+  const pid = `gid://shopify/Product/${r.product_id}`;
+  console.log(`  ${APPLY?'delete':'would-delete'} ${r.yard_sku} (${r.added_variant_id}) + unit "${r.unit_of_measure_new}"->"${r.unit_of_measure_old}" on ${r.dwsku}`);
+  if (!APPLY) continue;
+  const d = await gql(DEL, { pid, ids: [r.added_variant_id] });
+  const de = d?.productVariantsBulkDelete?.userErrors || []; if (de.length || d?.__err) console.log('    del-err', JSON.stringify(de.length?de:d.__err).slice(0,140));
+  if (r.unit_of_measure_old != null) {
+    const m = await gql(MF, { mf: [{ ownerId: pid, namespace: 'global', key: 'unit_of_measure', type: 'single_line_text_field', value: r.unit_of_measure_old }] });
+    const me = m?.metafieldsSet?.userErrors || []; if (me.length || m?.__err) console.log('    mf-err', JSON.stringify(me.length?me:m.__err).slice(0,140));
+  }
+  await new Promise(r => setTimeout(r, 120));
+}
+console.log(APPLY ? 'ROLLBACK DONE' : 'To execute: node rollback.mjs --apply --i-am-steve');
diff --git a/tk11124-dwve-velvet/verify1.mjs b/tk11124-dwve-velvet/verify1.mjs
new file mode 100644
index 0000000..0c3c384
--- /dev/null
+++ b/tk11124-dwve-velvet/verify1.mjs
@@ -0,0 +1,9 @@
+import { gql } from '../../designerwallcoverings/scripts/lib/shopify.mjs';
+const d = await gql(`{ product(id:"gid://shopify/Product/6621005643827"){ title status
+  unit: metafield(namespace:"global",key:"unit_of_measure"){value}
+  variants(first:10){ nodes{ sku price inventoryPolicy selectedOptions{name value}
+    inventoryItem{ tracked inventoryLevels(first:3){ nodes{ location{name} quantities(names:["available"]){name quantity} } } } } } } }`);
+const p = d.product;
+console.log('CANARY VERIFY DWVE-429560:', p.title, '| status', p.status, '| unit_of_measure=', JSON.stringify(p.unit?.value));
+for (const v of p.variants.nodes)
+  console.log(`  ${v.sku.padEnd(22)} $${v.price}  ${v.selectedOptions.map(o=>o.name+':'+o.value).join('|')}  pol=${v.inventoryPolicy} tracked=${v.inventoryItem?.tracked} avail=${JSON.stringify(v.inventoryItem?.inventoryLevels?.nodes?.map(l=>l.location.name+':'+l.quantities[0]?.quantity))}`);
diff --git a/tk11124-dwve-velvet/verifyall.mjs b/tk11124-dwve-velvet/verifyall.mjs
new file mode 100644
index 0000000..da90de7
--- /dev/null
+++ b/tk11124-dwve-velvet/verifyall.mjs
@@ -0,0 +1,18 @@
+import fs from 'node:fs';
+import { gql } from '../../designerwallcoverings/scripts/lib/shopify.mjs';
+const T = [['DWVE-429560','6621005643827'],['DWVE-429660','6621005676595'],['DWVE-429760','6621005709363'],['DWVE-429960','6621005774899'],['DWVE-430160','6621005873203'],['DWVE-430260','6621005905971'],['DWVE-430360','6621005938739'],['DWVE-430460','6621005971507'],['DWVE-430560','6621006004275'],['DWVE-430660','6621006069811'],['DWVE-430860','6621006135347'],['DWVE-430960','6621006200883'],['DWVE-431060','6621006233651'],['DWVE-431160','6621006266419'],['DWVE-431260','6621006299187'],['DWVE-431360','6621006331955'],['DWVE-431560','6621006397491'],['DWVE-431660','6621006463027']];
+const Q=`query($id:ID!){product(id:$id){status unit:metafield(namespace:"global",key:"unit_of_measure"){value} variants(first:10){nodes{sku price inventoryPolicy selectedOptions{value} inventoryItem{tracked inventoryLevels(first:2){nodes{quantities(names:["available"]){quantity}}}}}}}}`;
+let allpass=0; const rows=[];
+for(const [sku,id] of T){
+  const p=(await gql(Q,{id:`gid://shopify/Product/${id}`})).product;
+  const vs=p.variants.nodes;
+  const s=vs.find(v=>parseFloat(v.price)<=4.30);
+  const y=vs.find(v=>v.sku===`${sku}-Yard`);
+  const buyable = y && parseFloat(y.price)===359 && y.inventoryPolicy==='CONTINUE' && (y.inventoryItem?.inventoryLevels?.nodes?.[0]?.quantities?.[0]?.quantity===2026 || y.inventoryPolicy==='CONTINUE');
+  const pass = p.status==='ACTIVE' && s && parseFloat(s.price)===4.25 && buyable && p.unit?.value==='Sold per Yard';
+  if(pass) allpass++;
+  rows.push({sku, status:p.status, unit:p.unit?.value, sample:s?('$'+s.price):'MISSING', yard:y?('$'+y.price+' '+y.inventoryPolicy):'MISSING', pass});
+}
+console.log('FINAL VERIFY — '+allpass+'/18 fully pass\n');
+for(const r of rows) console.log(`  ${r.pass?'PASS':'FAIL'}  ${r.sku}  ${r.status}  sample=${r.sample}  yard=${r.yard}  unit="${r.unit}"`);
+fs.writeFileSync('out/verify-final.json', JSON.stringify(rows,null,2));

← 1af16b4 auto-data-snapshot: 2026-09-02T12:46:36 (1 data files) — tk1  ·  back to Dw Unbuyable Recovery Pilot  ·  TK-11041: Innovations 51-cohort feed-first reconciliation — 8085c23 →