[object Object]

← back to Harlequin Pilot Publish

Harlequin pilot LIVE published: 23/23 Single Roll variants added + verified; restore-map + rollback + ledger

606c45754a1353f93e8f90f6fa3b96e6fb35ec4d · 2026-08-26 09:34:43 -0700 · Steve Abrams

Files touched

Diff

commit 606c45754a1353f93e8f90f6fa3b96e6fb35ec4d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Aug 26 09:34:43 2026 -0700

    Harlequin pilot LIVE published: 23/23 Single Roll variants added + verified; restore-map + rollback + ledger
---
 03-verify.mjs         |  51 ++++++++++
 data/add-results.json | 138 +++++++++++++--------------
 data/verify.json      | 255 ++++++++++++++++++++++++++++++++++++++++++++++++++
 rollback.mjs          |  18 ++++
 4 files changed, 393 insertions(+), 69 deletions(-)

diff --git a/03-verify.mjs b/03-verify.mjs
new file mode 100644
index 0000000..2e69a3f
--- /dev/null
+++ b/03-verify.mjs
@@ -0,0 +1,51 @@
+// FRESH verify each of the 23: Single Roll @ retail AND Sample @ $4.25.
+import fs from 'node:fs';
+import { getProductVariants } from './lib.mjs';
+
+const pilot = JSON.parse(fs.readFileSync(new URL('./data/pilot-23.json', import.meta.url)));
+const located = JSON.parse(fs.readFileSync(new URL('./data/located.json', import.meta.url)));
+const byDw = Object.fromEntries(located.map(l => [l.dw_sku, l]));
+
+const rows = [];
+let pass = 0, fail = 0;
+
+for (const p of pilot) {
+  const loc = byDw[p.dw_sku];
+  const prod = await getProductVariants(loc.productGid);
+  const vs = prod.variants.edges.map(e => e.node);
+
+  const roll = vs.find(v => (v.title || '').toLowerCase() === 'single roll' || (v.sku || '').toUpperCase() === p.dw_sku.toUpperCase());
+  const sample = vs.find(v => (v.sku || '').toUpperCase() === (p.dw_sku + '-SAMPLE').toUpperCase());
+
+  const wantRetail = Number(p.retail).toFixed(2);
+  const rollOk = !!roll && Number(roll.price).toFixed(2) === wantRetail;
+  const sampleOk = !!sample && Number(sample.price).toFixed(2) === '4.25';
+  const verdict = rollOk && sampleOk ? 'PASS' : 'FAIL';
+  if (verdict === 'PASS') pass++; else fail++;
+
+  rows.push({
+    dw_sku: p.dw_sku, handle: loc.handle,
+    roll_id: roll?.id?.split('/').pop() || null, roll_price: roll?.price || null, roll_ok: rollOk,
+    sample_id: sample?.id?.split('/').pop() || null, sample_price: sample?.price || null, sample_ok: sampleOk,
+    verdict,
+  });
+  await new Promise(r => setTimeout(r, 250));
+}
+
+fs.writeFileSync(new URL('./data/verify.json', import.meta.url), JSON.stringify(rows, null, 2));
+
+// Print table
+console.log('DW SKU'.padEnd(12), 'ROLL id'.padEnd(16), 'ROLL$'.padEnd(9), 'OK', ' SAMPLE id'.padEnd(16), 'SMP$'.padEnd(6), 'OK', ' VERDICT');
+for (const r of rows) {
+  console.log(
+    r.dw_sku.padEnd(12),
+    String(r.roll_id).padEnd(16),
+    String(r.roll_price).padEnd(9),
+    (r.roll_ok ? 'Y' : 'N'),
+    String(r.sample_id).padEnd(16),
+    String(r.sample_price).padEnd(6),
+    (r.sample_ok ? 'Y' : 'N'),
+    r.verdict,
+  );
+}
+console.log(`\nPASS ${pass}/23   FAIL ${fail}/23`);
diff --git a/data/add-results.json b/data/add-results.json
index 0b24fa2..bd0fc14 100644
--- a/data/add-results.json
+++ b/data/add-results.json
@@ -1,140 +1,140 @@
 [
   {
     "dw_sku": "DWHF-70127",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166048819,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70128",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166081587,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70129",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166310963,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70132",
-    "action": "WOULD-ADD",
-    "price": "981.00",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166343731,
+    "price": "981.00"
   },
   {
     "dw_sku": "DWHF-70131",
-    "action": "WOULD-ADD",
-    "price": "981.00",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166376499,
+    "price": "981.00"
   },
   {
     "dw_sku": "DWHF-70130",
-    "action": "WOULD-ADD",
-    "price": "981.00",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166409267,
+    "price": "981.00"
   },
   {
     "dw_sku": "DWHF-70134",
-    "action": "WOULD-ADD",
-    "price": "208.14",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166474803,
+    "price": "208.14"
   },
   {
     "dw_sku": "DWHF-70135",
-    "action": "WOULD-ADD",
-    "price": "208.14",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166507571,
+    "price": "208.14"
   },
   {
     "dw_sku": "DWHF-70133",
-    "action": "WOULD-ADD",
-    "price": "208.14",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166540339,
+    "price": "208.14"
   },
   {
     "dw_sku": "DWHF-70138",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166573107,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70137",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166736947,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70136",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166835251,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70139",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166900787,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70140",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166933555,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70141",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166966323,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70143",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782166999091,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70142",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167031859,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70144",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167064627,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70145",
-    "action": "WOULD-ADD",
-    "price": "269.68",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167097395,
+    "price": "269.68"
   },
   {
     "dw_sku": "DWHF-70146",
-    "action": "WOULD-ADD",
-    "price": "924.89",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167130163,
+    "price": "924.89"
   },
   {
     "dw_sku": "DWHF-70147",
-    "action": "WOULD-ADD",
-    "price": "924.89",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167162931,
+    "price": "924.89"
   },
   {
     "dw_sku": "DWHF-70148",
-    "action": "WOULD-ADD",
-    "price": "334.84",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167195699,
+    "price": "334.84"
   },
   {
     "dw_sku": "DWHF-70149",
-    "action": "WOULD-ADD",
-    "price": "334.84",
-    "option": "Size=Single Roll"
+    "action": "ADDED",
+    "variant_id": 44782167228467,
+    "price": "334.84"
   }
 ]
\ No newline at end of file
diff --git a/data/verify.json b/data/verify.json
new file mode 100644
index 0000000..532950d
--- /dev/null
+++ b/data/verify.json
@@ -0,0 +1,255 @@
+[
+  {
+    "dw_sku": "DWHF-70127",
+    "handle": "dwhf-70127-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166048819",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438303584307",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70128",
+    "handle": "dwhf-70128-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166081587",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438304043059",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70129",
+    "handle": "dwhf-70129-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166310963",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438304567347",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70132",
+    "handle": "dwhf-70132-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166343731",
+    "roll_price": "981.00",
+    "roll_ok": true,
+    "sample_id": "41438305910835",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70131",
+    "handle": "dwhf-70131-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166376499",
+    "roll_price": "981.00",
+    "roll_ok": true,
+    "sample_id": "41438305550387",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70130",
+    "handle": "dwhf-70130-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166409267",
+    "roll_price": "981.00",
+    "roll_ok": true,
+    "sample_id": "41438305091635",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70134",
+    "handle": "dwhf-70134-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166474803",
+    "roll_price": "208.14",
+    "roll_ok": true,
+    "sample_id": "41438306861107",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70135",
+    "handle": "dwhf-70135-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166507571",
+    "roll_price": "208.14",
+    "roll_ok": true,
+    "sample_id": "41438307188787",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70133",
+    "handle": "dwhf-70133-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166540339",
+    "roll_price": "208.14",
+    "roll_ok": true,
+    "sample_id": "41438306402355",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70138",
+    "handle": "dwhf-70138-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166573107",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438308728883",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70137",
+    "handle": "dwhf-70137-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166736947",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438308171827",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70136",
+    "handle": "dwhf-70136-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166835251",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438307582003",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70139",
+    "handle": "dwhf-70139-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166900787",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438309154867",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70140",
+    "handle": "dwhf-70140-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166933555",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438309515315",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70141",
+    "handle": "dwhf-70141-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166966323",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438309908531",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70143",
+    "handle": "dwhf-70143-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782166999091",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438310924339",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70142",
+    "handle": "dwhf-70142-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167031859",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438310334515",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70144",
+    "handle": "dwhf-70144-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167064627",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438311415859",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70145",
+    "handle": "dwhf-70145-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167097395",
+    "roll_price": "269.68",
+    "roll_ok": true,
+    "sample_id": "41438311874611",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70146",
+    "handle": "dwhf-70146-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167130163",
+    "roll_price": "924.89",
+    "roll_ok": true,
+    "sample_id": "41438312300595",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70147",
+    "handle": "dwhf-70147-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167162931",
+    "roll_price": "924.89",
+    "roll_ok": true,
+    "sample_id": "41438312726579",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70148",
+    "handle": "dwhf-70148-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167195699",
+    "roll_price": "334.84",
+    "roll_ok": true,
+    "sample_id": "41438313119795",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  },
+  {
+    "dw_sku": "DWHF-70149",
+    "handle": "dwhf-70149-sample-designer-wallcoverings-los-angeles",
+    "roll_id": "44782167228467",
+    "roll_price": "334.84",
+    "roll_ok": true,
+    "sample_id": "41438313611315",
+    "sample_price": "4.25",
+    "sample_ok": true,
+    "verdict": "PASS"
+  }
+]
\ No newline at end of file
diff --git a/rollback.mjs b/rollback.mjs
new file mode 100644
index 0000000..034befd
--- /dev/null
+++ b/rollback.mjs
@@ -0,0 +1,18 @@
+// Reverse the pilot: DELETE every Single Roll variant recorded in the restore map.
+// Dry-run by default; pass --apply to execute. Restores each product to its prior
+// single-Sample-variant state.
+import fs from 'node:fs';
+import { rest } from './lib.mjs';
+
+const APPLY = process.argv.includes('--apply');
+const MAP = process.env.HOME + '/.claude/yolo-queue/executed-reversible/harlequin-pilot-restore-map.json';
+const m = JSON.parse(fs.readFileSync(MAP));
+
+for (const e of m.entries) {
+  if (e.change !== 'ADDED_VARIANT') continue;
+  if (!APPLY) { console.log('WOULD-DELETE', e.dw_sku, 'variant', e.variant_id); continue; }
+  const r = await rest(`products/${e.product_id}/variants/${e.variant_id}.json`, 'DELETE');
+  console.log(e.dw_sku, 'delete variant', e.variant_id, '->', r.status);
+  await new Promise(res => setTimeout(res, 400));
+}
+console.log(APPLY ? 'ROLLBACK APPLIED' : 'DRY-RUN (pass --apply to execute)');

← 6312072 Harlequin pilot publish scaffold: locate 23 + idempotent Sin  ·  back to Harlequin Pilot Publish  ·  Part A: untrack 23 pilot Harlequin Sample variants (reversib 1270a58 →