← back to Designer Wallcoverings
TK-10039: cadence-import (daily importer) writes specs to metafields + prose-only body; buildInput now migrates length+repeat metafields first (were body-only)
1fd642ef6b741ba5ebe6beff74a399738a1b6f51 · 2026-07-29 07:34:13 -0700 · Steve
Files touched
M shopify/scripts/cadence/cadence-import.js
Diff
commit 1fd642ef6b741ba5ebe6beff74a399738a1b6f51
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jul 29 07:34:13 2026 -0700
TK-10039: cadence-import (daily importer) writes specs to metafields + prose-only body; buildInput now migrates length+repeat metafields first (were body-only)
---
shopify/scripts/cadence/cadence-import.js | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/shopify/scripts/cadence/cadence-import.js b/shopify/scripts/cadence/cadence-import.js
index 4199afe2..ff31f3e1 100644
--- a/shopify/scripts/cadence/cadence-import.js
+++ b/shopify/scripts/cadence/cadence-import.js
@@ -507,7 +507,9 @@ function buildSampleOnlyInput(vendor, cfg, row, activate) {
if (isFabric) intro = intro
.replace(/Wallcoverings/g,'Fabrics').replace(/wallcoverings/g,'fabrics')
.replace(/Wallcovering/g,'Fabric').replace(/wallcovering/g,'fabric');
- const descriptionHtml = `<p>${intro}</p>${specs.length?`<ul>${specs.join('')}</ul>`:''}`;
+ // specs live in metafields (rendered by product-description-meta.liquid), NEVER a body list (TK-10039)
+ void specs;
+ const descriptionHtml = `<p>${intro}</p>`;
// Metafields — NO cost (there is none). Width/specs where present, brand, sku, pattern, color.
const mf=[]; const m=(ns,k,v,t)=>{ if(v!=null&&v!=='') mf.push({namespace:ns,key:k,type:t,value:String(v)}); };
@@ -655,6 +657,8 @@ function buildInput(vendor, cfg, row, retail, activate) {
if (pattern){ m('global','pattern_name',pattern,SL); m('custom','pattern_name',pattern,SL); }
if (color){ m('custom','color',color,SL); m('global','color',color,SL); m('dwc','color',color,SL); }
if (row.material){ m('global','material',row.material,SL); m('custom','material',row.material,ML); }
+ if (row.roll_length){ m('global','length',row.roll_length,SL); } // was only in the body <ul> — migrate to metafield (TK-10039)
+ if (row.pattern_repeat){ m('global','repeat',row.pattern_repeat,SL); } // was only in the body <ul> — migrate to metafield (TK-10039)
if (row.collection) m('custom','collection_name',row.collection,SL);
m('custom','cost',row.cost.toFixed(2),ND); // REAL cost
m('custom','price_updated_at',TODAY,'date'); // 30-day refresh audit
@@ -677,7 +681,9 @@ function buildInput(vendor, cfg, row, retail, activate) {
// banned-word/Unknown-clean title, and a sample variant. Anything incomplete
// stays DRAFT and is TAGGED Needs-Specs / Needs-Description / Needs-Image so it's
// fixable later — never a broken product on the storefront.
- const descriptionHtml = `<p>${esc(intro)}</p><ul>${specs.join('')}</ul>`;
+ // specs live in metafields (rendered by product-description-meta.liquid), NEVER a body list (TK-10039)
+ void specs;
+ const descriptionHtml = `<p>${esc(intro)}</p>`;
const gate = validateBeforeActivate({
title, vendor, dwSku: row.dw_sku, descriptionHtml, // vendor → INTERNAL guard (registry vendor never activates)
specs: { width: row.width, length: row.roll_length, repeat: row.pattern_repeat, material: row.material, unitOfMeasure: `Priced Per ${soldBy}` },
← c3c42f13 Coordinate by Color feature-launch CC draft: William Morris
·
back to Designer Wallcoverings
·
Coordinate by Color email: embed live how-to GIF (photo.desi 0fe5241f →