[object Object]

← back to Designer Wallcoverings

auto-save: 2026-06-23T17:23:17 (5 files) — shopify/scripts/cadence/cadence-import.js shopify/scripts/cadence/data/cadence-cursor.json vendor-scrapers/china-seas-refresh shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl

d90a2d435a81ec821fb3b575e1e5c603f61feef4 · 2026-06-23 17:23:39 -0700 · Steve Abrams

Files touched

Diff

commit d90a2d435a81ec821fb3b575e1e5c603f61feef4
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Jun 23 17:23:39 2026 -0700

    auto-save: 2026-06-23T17:23:17 (5 files) — shopify/scripts/cadence/cadence-import.js shopify/scripts/cadence/data/cadence-cursor.json vendor-scrapers/china-seas-refresh shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
---
 shopify/scripts/cadence/cadence-import.js          |  10 ++
 shopify/scripts/cadence/data/cadence-cursor.json   |   6 +-
 .../cadence/data/cadence-plan-am-2026-06-24.json   | 182 +++++++++++++++++++++
 .../cadence/data/upload-restore-2026-06-24.jsonl   |   6 +
 4 files changed, 201 insertions(+), 3 deletions(-)

diff --git a/shopify/scripts/cadence/cadence-import.js b/shopify/scripts/cadence/cadence-import.js
index b6cbbd17..82b4fa85 100644
--- a/shopify/scripts/cadence/cadence-import.js
+++ b/shopify/scripts/cadence/cadence-import.js
@@ -75,6 +75,13 @@ const sleep = ms => new Promise(r => setTimeout(r, ms));
 // ---- title-case (same corrected logic as fix-24h-new-skus.js) ----
 const SMALL = new Set(['a','an','and','as','at','but','by','de','del','for','if','in','la','le','nor','of','on','or','per','the','to','und','via','vs','with']);
 const KEEP_UPPER = new Set(['usa','uk','ny','nyc','sf','clj','led','pvc','uv','3d','dna']);
+// Roman-numeral guard (Steve 2026-06-23): the Quadrille house has many series suffixed with a
+// roman numeral — "Bird Toile II", "Wildflowers II", "Carlo II", "Key West II". Without this the
+// title-caser lowercases the 2nd letter of all-caps tokens, mangling "II"→"Ii", "VIII"→"Viii".
+// Match valid roman numerals 1..3999 (the classic regex) so genuine roman numerals stay UPPERCASE
+// while ordinary all-caps words still get normal title-casing.
+const ROMAN_RE = /^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/;
+const isRoman = w => { const u = String(w).toUpperCase(); return u.length > 0 && ROMAN_RE.test(u); };
 const decode = s => String(s||'').replace(/&amp;/gi,'&').replace(/&quot;/gi,'"').replace(/&#39;|&apos;/gi,"'").replace(/&nbsp;/gi,' ');
 const capRuns = w => w.replace(/\p{L}+/gu, (m, off, str) => {
   const prev = str[off - 1];
@@ -94,6 +101,9 @@ function tcWord(w, first, last) {
   if (!w) return w;
   if (/\d/.test(w)) return w;
   const low = w.replace(/[^A-Za-z]/g,'').toLowerCase();
+  // roman-numeral guard — keep multi-letter roman numerals (II, III, IV, VIII, IX, X…) UPPERCASE.
+  // Length>=2 so a lone "I"/"V"/"X" initial isn't force-uppercased; the real Quadrille cases are all 2+.
+  if (low.length >= 2 && isRoman(low)) return w.toUpperCase();
   if (KEEP_UPPER.has(low)) return w.toUpperCase();
   if (SMALL.has(low) && !first) return w.toLowerCase();
   if (last && low.length === 1) return w.toLowerCase();
diff --git a/shopify/scripts/cadence/data/cadence-cursor.json b/shopify/scripts/cadence/data/cadence-cursor.json
index 27534d1c..626e6314 100644
--- a/shopify/scripts/cadence/data/cadence-cursor.json
+++ b/shopify/scripts/cadence/data/cadence-cursor.json
@@ -1,5 +1,5 @@
 {
- "idx": 4,
- "lastSlot": "pm",
- "lastRun": "2026-06-23"
+ "idx": 6,
+ "lastSlot": "am",
+ "lastRun": "2026-06-24"
 }
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
new file mode 100644
index 00000000..91916846
--- /dev/null
+++ b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
@@ -0,0 +1,182 @@
+[
+ {
+  "vendor": "Romo",
+  "dw_sku": "DWRM-240025",
+  "cost": 542.304,
+  "retail": 981.55,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Akata, Ochre Wallcoverings | Romo",
+  "willActivate": true
+ },
+ {
+  "vendor": "Romo",
+  "dw_sku": "DWRM-240027",
+  "cost": 379.5015,
+  "retail": 686.88,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Sisal, Pale Beige Wallcoverings | Romo",
+  "willActivate": true
+ },
+ {
+  "vendor": "Romo",
+  "dw_sku": "DWRM-240029",
+  "cost": 379.5015,
+  "retail": 686.88,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Sisal, Stone Wallcoverings | Romo",
+  "willActivate": true
+ },
+ {
+  "vendor": "Thibaut",
+  "dw_sku": "DWTT-73414",
+  "cost": 46.8,
+  "retail": 84.71,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Gada Paisley, Navy Wallcoverings | Thibaut",
+  "willActivate": true
+ },
+ {
+  "vendor": "Thibaut",
+  "dw_sku": "DWTT-73415",
+  "cost": 46.8,
+  "retail": 84.71,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Gada Paisley, Green Wallcoverings | Thibaut",
+  "willActivate": true
+ },
+ {
+  "vendor": "Thibaut",
+  "dw_sku": "DWTT-73416",
+  "cost": 62.1,
+  "retail": 112.4,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Gibson, Grey Wallcoverings | Thibaut",
+  "willActivate": true
+ },
+ {
+  "vendor": "Zoffany",
+  "dw_sku": "DWZF-187017",
+  "cost": 216,
+  "retail": 390.95,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Spun Silk, Paris Grey Wallcoverings | Zoffany",
+  "willActivate": true
+ },
+ {
+  "vendor": "Zoffany",
+  "dw_sku": "DWZF-187019",
+  "cost": 208,
+  "retail": 376.47,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Moresque Glaze, Indigo Wallcoverings | Zoffany",
+  "willActivate": true
+ },
+ {
+  "vendor": "Zoffany",
+  "dw_sku": "DWZF-187021",
+  "cost": 216,
+  "retail": 390.95,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Kensington Grasscloth, Paris Grey Wallcoverings | Zoffany",
+  "willActivate": true
+ },
+ {
+  "vendor": "Designtex",
+  "dw_sku": "DWDX-220315",
+  "cost": 22,
+  "retail": 39.82,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Pebble, Riverbed Wallcoverings | Designtex",
+  "willActivate": true
+ },
+ {
+  "vendor": "Designtex",
+  "dw_sku": "DWDX-220316",
+  "cost": 22,
+  "retail": 39.82,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Pebble, Cloudburst Wallcoverings | Designtex",
+  "willActivate": true
+ },
+ {
+  "vendor": "Designtex",
+  "dw_sku": "DWDX-220317",
+  "cost": 22,
+  "retail": 39.82,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Pebble, Primp Wallcoverings | Designtex",
+  "willActivate": false
+ },
+ {
+  "vendor": "Newwall",
+  "dw_sku": "DWXW-1005020",
+  "cost": 156,
+  "retail": 282.35,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Uzbek Lilac, Lilac Wallcoverings | Newwall",
+  "willActivate": true
+ },
+ {
+  "vendor": "Newwall",
+  "dw_sku": "DWXW-1005021",
+  "cost": 156,
+  "retail": 282.35,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Uzbek Cream, Cream Wallcoverings | Newwall",
+  "willActivate": true
+ },
+ {
+  "vendor": "Newwall",
+  "dw_sku": "DWXW-1005022",
+  "cost": 156,
+  "retail": 282.35,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Huipil Blue, Blue Wallcoverings | Newwall",
+  "willActivate": true
+ },
+ {
+  "vendor": "Brewster & York",
+  "dw_sku": "DWBR-170673",
+  "cost": 35,
+  "retail": 63.35,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Allison, Blue Wallcoverings | Brewster & York",
+  "willActivate": true
+ },
+ {
+  "vendor": "Brewster & York",
+  "dw_sku": "DWBR-170674",
+  "cost": 69.99,
+  "retail": 126.68,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Allison, Lavender Wallcoverings | Brewster & York",
+  "willActivate": true
+ },
+ {
+  "vendor": "Brewster & York",
+  "dw_sku": "DWBR-170675",
+  "cost": 35,
+  "retail": 63.35,
+  "sample": "4.25",
+  "sampleOnly": false,
+  "title": "Allison, Pink Wallcoverings | Brewster & York",
+  "willActivate": true
+ }
+]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
new file mode 100644
index 00000000..6c7268b2
--- /dev/null
+++ b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
@@ -0,0 +1,6 @@
+{"table":"quadrille_house_catalog","mfr_sku":"307600F-04","dw_sku":"DWQC-600000","shopify_product_id":"7866917519411","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-15-07-571Z","ts":"2026-06-24T00:15:12.852Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307600F-03","dw_sku":"DWQC-600001","shopify_product_id":"7866917552179","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-15-07-571Z","ts":"2026-06-24T00:15:17.138Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307600F-02","dw_sku":"DWQC-600002","shopify_product_id":"7866917584947","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-15-07-571Z","ts":"2026-06-24T00:15:20.794Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307210F-04","dw_sku":"DWQC-600003","shopify_product_id":"7866917617715","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-16-38-713Z","ts":"2026-06-24T00:16:43.636Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307210F-02","dw_sku":"DWQC-600004","shopify_product_id":"7866917650483","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-16-38-713Z","ts":"2026-06-24T00:16:47.419Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"307210F-01","dw_sku":"DWQC-600005","shopify_product_id":"7866917683251","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T00-16-38-713Z","ts":"2026-06-24T00:16:51.059Z"}

← e38bffd8 cadence: harden sample-only desc query against newline/tab c  ·  back to Designer Wallcoverings  ·  cadence: roman-numeral title guard (II/III/IV…) + suppress f bdcb9ec1 →