← 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
M shopify/scripts/cadence/cadence-import.jsM shopify/scripts/cadence/data/cadence-cursor.jsonA shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.jsonA shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
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(/&/gi,'&').replace(/"/gi,'"').replace(/'|'/gi,"'").replace(/ /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 →