← back to Designer Wallcoverings
Zoffany title audit (2026-06-21): clean redundant colorway on DWZF-187374; investigate Pompadour Print dup pair
54abca22170142f56492080818174da75eb36a86 · 2026-06-21 13:47:21 -0700 · steve@designerwallcoverings.com
Files touched
A shopify/scripts/data/today-audit-2026-06-21/zoffany-fix-title.jsA shopify/scripts/data/today-audit-2026-06-21/zoffany-investigate.jsA shopify/scripts/data/today-audit-2026-06-21/zoffany-peers.js
Diff
commit 54abca22170142f56492080818174da75eb36a86
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Sun Jun 21 13:47:21 2026 -0700
Zoffany title audit (2026-06-21): clean redundant colorway on DWZF-187374; investigate Pompadour Print dup pair
---
.../today-audit-2026-06-21/zoffany-fix-title.js | 29 +++++++++++++++
.../today-audit-2026-06-21/zoffany-investigate.js | 41 ++++++++++++++++++++++
.../data/today-audit-2026-06-21/zoffany-peers.js | 22 ++++++++++++
3 files changed, 92 insertions(+)
diff --git a/shopify/scripts/data/today-audit-2026-06-21/zoffany-fix-title.js b/shopify/scripts/data/today-audit-2026-06-21/zoffany-fix-title.js
new file mode 100644
index 00000000..3d4bbc63
--- /dev/null
+++ b/shopify/scripts/data/today-audit-2026-06-21/zoffany-fix-title.js
@@ -0,0 +1,29 @@
+const https=require("https"),fs=require("fs"),os=require("os");
+const APPLY=process.argv.includes("--apply");
+const env=fs.readFileSync(os.homedir()+"/Projects/secrets-manager/.env","utf8");
+const TOKEN=(env.match(/^SHOPIFY_ADMIN_TOKEN=(.*)$/m)||[])[1].replace(/['"]/g,"").trim();
+const STORE="designer-laboratory-sandbox.myshopify.com",API="2024-10";
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q,v={}){return new Promise((res,rej)=>{const b=JSON.stringify({query:q,variables:v});
+const r=https.request({host:STORE,path:`/admin/api/${API}/graphql.json`,method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Access-Token":TOKEN,"Content-Length":Buffer.byteLength(b)}},x=>{let d="";x.on("data",c=>d+=c);x.on("end",()=>{try{res(JSON.parse(d))}catch(e){rej(d)}})});r.on("error",rej);r.write(b);r.end();});}
+async function gqlR(q,v={},t=5){for(let i=0;i<t;i++){let r;try{r=await gql(q,v)}catch(e){r={errors:[{message:String(e).slice(0,120)}]}}if(r&&!r.errors)return r;await sleep(1500*(i+1));}return gql(q,v);}
+const M=`mutation($input:ProductInput!){productUpdate(input:$input){product{id title}userErrors{field message}}}`;
+// Single in-scope edit: remove the redundant colorway baked into the pattern name.
+// Match the canonical sibling DWZF-187036 + the today Zoffany convention: "Pattern - Color wallcovering | Zoffany"
+const EDIT={
+ gid:"gid://shopify/Product/7865417138227",
+ sku:"DWZF-187374",
+ before:"French Marble Empire Grey/ Perfect White - Empire Grey / Perfect White wallcovering | Zoffany",
+ after:"French Marble - Empire Grey / Perfect White wallcovering | Zoffany",
+};
+(async()=>{
+ console.log(APPLY?"🔴 LIVE":"DRY-RUN");
+ console.log(`SKU ${EDIT.sku}`);
+ console.log("BEFORE:",EDIT.before);
+ console.log("AFTER :",EDIT.after);
+ if(!APPLY){console.log("(dry-run, no write)");return;}
+ const r=await gqlR(M,{input:{id:EDIT.gid,title:EDIT.after}});
+ const ue=r.data?.productUpdate?.userErrors||[];
+ if(ue.length){console.log("ERROR",JSON.stringify(ue));process.exit(1);}
+ console.log("OK ->",r.data.productUpdate.product.title);
+})();
diff --git a/shopify/scripts/data/today-audit-2026-06-21/zoffany-investigate.js b/shopify/scripts/data/today-audit-2026-06-21/zoffany-investigate.js
new file mode 100644
index 00000000..0b823efa
--- /dev/null
+++ b/shopify/scripts/data/today-audit-2026-06-21/zoffany-investigate.js
@@ -0,0 +1,41 @@
+const https=require("https"),fs=require("fs"),os=require("os");
+const env=fs.readFileSync(os.homedir()+"/Projects/secrets-manager/.env","utf8");
+const TOKEN=(env.match(/^SHOPIFY_ADMIN_TOKEN=(.*)$/m)||[])[1].replace(/['"]/g,"").trim();
+const STORE="designer-laboratory-sandbox.myshopify.com",API="2024-10";
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q,v={}){return new Promise((res,rej)=>{const b=JSON.stringify({query:q,variables:v});
+const r=https.request({host:STORE,path:`/admin/api/${API}/graphql.json`,method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Access-Token":TOKEN,"Content-Length":Buffer.byteLength(b)}},x=>{let d="";x.on("data",c=>d+=c);x.on("end",()=>{try{res(JSON.parse(d))}catch(e){rej(d)}})});r.on("error",rej);r.write(b);r.end();});}
+async function gqlR(q,v={},t=5){for(let i=0;i<t;i++){let r;try{r=await gql(q,v)}catch(e){r={errors:[{message:String(e).slice(0,120)}]}}if(r&&!r.errors)return r;await sleep(1500*(i+1));}return gql(q,v);}
+const SKUS=["DWZF-187037","DWZF-187385","DWZF-187374"];
+const MF_KEYS=[["custom","color"],["custom","real_color_name"],["global","Color-Way"],["dwc","color"],["custom","manufacturer_sku"],["dwc","manufacturer_sku"],["global","Color"],["global","width"]];
+(async()=>{
+ const out=[];
+ for(const sku of SKUS){
+ const q=`query($q:String!){productVariants(first:5,query:$q){nodes{id sku price displayName inventoryItem{id}
+ product{id legacyResourceId handle title status vendor tags createdAt
+ featuredImage{url} images(first:20){nodes{url altText}}
+ variants(first:25){nodes{sku title price}}
+ metafields(first:60){nodes{namespace key value}}}}}}`;
+ const r=await gqlR(q,{q:`sku:${sku}`});
+ const vn=r.data?.productVariants?.nodes||[];
+ const match=vn.find(v=>v.sku===sku)||vn[0];
+ if(!match){out.push({sku,FOUND:false});continue;}
+ const p=match.product;
+ const mf={};
+ for(const m of p.metafields.nodes){mf[`${m.namespace}.${m.key}`]=m.value;}
+ out.push({sku,FOUND:true,
+ productId:p.legacyResourceId,gid:p.id,handle:p.handle,title:p.title,status:p.status,vendor:p.vendor,
+ createdAt:p.createdAt,
+ variants:p.variants.nodes.map(v=>({sku:v.sku,title:v.title,price:v.price})),
+ featuredImage:p.featuredImage?.url||null,
+ imageCount:p.images.nodes.length,
+ imageUrls:p.images.nodes.map(i=>i.url),
+ mfr_sku:mf["custom.manufacturer_sku"]||mf["dwc.manufacturer_sku"]||null,
+ color_custom:mf["custom.color"]||null,real_color:mf["custom.real_color_name"]||null,
+ colorway_global:mf["global.Color-Way"]||null,color_dwc:mf["dwc.color"]||null,color_global:mf["global.Color"]||null,
+ width:mf["global.width"]||null,
+ tags:p.tags});
+ }
+ fs.writeFileSync("/tmp/zoffany-investigate.json",JSON.stringify(out,null,2));
+ console.log(JSON.stringify(out,null,2));
+})();
diff --git a/shopify/scripts/data/today-audit-2026-06-21/zoffany-peers.js b/shopify/scripts/data/today-audit-2026-06-21/zoffany-peers.js
new file mode 100644
index 00000000..1b63e3d9
--- /dev/null
+++ b/shopify/scripts/data/today-audit-2026-06-21/zoffany-peers.js
@@ -0,0 +1,22 @@
+const https=require("https"),fs=require("fs"),os=require("os");
+const env=fs.readFileSync(os.homedir()+"/Projects/secrets-manager/.env","utf8");
+const TOKEN=(env.match(/^SHOPIFY_ADMIN_TOKEN=(.*)$/m)||[])[1].replace(/['"]/g,"").trim();
+const STORE="designer-laboratory-sandbox.myshopify.com",API="2024-10";
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+function gql(q,v={}){return new Promise((res,rej)=>{const b=JSON.stringify({query:q,variables:v});
+const r=https.request({host:STORE,path:`/admin/api/${API}/graphql.json`,method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Access-Token":TOKEN,"Content-Length":Buffer.byteLength(b)}},x=>{let d="";x.on("data",c=>d+=c);x.on("end",()=>{try{res(JSON.parse(d))}catch(e){rej(d)}})});r.on("error",rej);r.write(b);r.end();});}
+async function gqlR(q,v={},t=5){for(let i=0;i<t;i++){let r;try{r=await gql(q,v)}catch(e){r={errors:[{message:String(e).slice(0,120)}]}}if(r&&!r.errors)return r;await sleep(1500*(i+1));}return gql(q,v);}
+(async()=>{
+ const out=[];let cursor=null;
+ while(true){
+ const q=`query($c:String){products(first:50,after:$c,query:"vendor:Zoffany created_at:>='2026-06-21'"){pageInfo{hasNextPage endCursor}
+ nodes{title handle variants(first:1){nodes{sku}}}}}`;
+ const r=await gqlR(q,{c:cursor});
+ if(r.errors){console.error(JSON.stringify(r.errors).slice(0,300));break;}
+ const pg=r.data.products;
+ for(const n of pg.nodes)out.push({sku:n.variants.nodes[0]?.sku,title:n.title});
+ if(!pg.pageInfo.hasNextPage)break;cursor=pg.pageInfo.endCursor;
+ }
+ console.log("Zoffany products created today:",out.length);
+ console.log(JSON.stringify(out,null,1));
+})();
← 2b88a21b Remove banned standalone Wallpaper tag from 21 FallingStar S
·
back to Designer Wallcoverings
·
Archive confirmed-duplicate Zoffany DWZF-187385 (-1 dup-hand 959ae442 →