← back to York Reprice 2026 08
TK-10058: recover+eyeball 7 settlement-risk — only 2 clean (Malin/Denim, Sheehan/Pearl); 3 color-fidelity fail, 2 no-image (colorway failure mode validated)
8d97b4e5802b0d22e1988b1657bc622e1716481c · 2026-07-30 19:46:03 -0700 · Steve Abrams
Files touched
A RECOVER-7-SETTLEMENT-TK10058.jsonA recover-7-settlement.mjs
Diff
commit 8d97b4e5802b0d22e1988b1657bc622e1716481c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jul 30 19:46:03 2026 -0700
TK-10058: recover+eyeball 7 settlement-risk — only 2 clean (Malin/Denim, Sheehan/Pearl); 3 color-fidelity fail, 2 no-image (colorway failure mode validated)
---
RECOVER-7-SETTLEMENT-TK10058.json | 54 +++++++++++++++++++++++++++++++++++++++
recover-7-settlement.mjs | 32 +++++++++++++++++++++++
2 files changed, 86 insertions(+)
diff --git a/RECOVER-7-SETTLEMENT-TK10058.json b/RECOVER-7-SETTLEMENT-TK10058.json
new file mode 100644
index 0000000..acd5437
--- /dev/null
+++ b/RECOVER-7-SETTLEMENT-TK10058.json
@@ -0,0 +1,54 @@
+[
+ {
+ "mfr": "4120-26838",
+ "title": "Kantera - Chestnut Residential Wallcovering | Jeffrey Stevens",
+ "pattern": "Kantera",
+ "color": "forest green",
+ "current_wrong": "0086869_vita-green-botanical-wallpaper.jpg",
+ "recovered": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0086974_kantera-pink-fabric-texture-wallpaper.jpeg"
+ },
+ {
+ "mfr": "4121-26902",
+ "title": "Helene - Pink Residential Wallcovering | Jeffrey Stevens",
+ "pattern": "Helene",
+ "color": "Pink",
+ "current_wrong": "0066550_sisu-light-blue-floral-geometric-wallpaper.jpg",
+ "recovered": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0087427_helene-taupe-geometric-lines-wallpaper.jpeg"
+ },
+ {
+ "mfr": "4034-72139",
+ "title": "Marilyn - Green Residential Wallcovering | Jeffrey Stevens",
+ "pattern": "Marilyn",
+ "color": "sage green",
+ "current_wrong": "0088893_brentwood-green-palm-leaves-wallpaper-by-scott-living.jpg",
+ "recovered": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0088960_marilyn-black-floral-trail-wallpaper-by-scott-living.jpeg"
+ },
+ {
+ "mfr": "4172-27527",
+ "title": "Malin - Denim Residential Wallcovering | Jeffrey Stevens",
+ "pattern": "Malin",
+ "color": "Denim",
+ "current_wrong": "0113785_hatteras-champagne-palms-wallpaper.jpg",
+ "recovered": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0114051_malin-denim-faux-grasscloth-wallpaper.jpeg"
+ },
+ {
+ "mfr": "4141-27163",
+ "title": "Sheehan - Pearl Residential Wallcovering | Jeffrey Stevens",
+ "pattern": "Sheehan",
+ "color": "Pearl",
+ "current_wrong": "0089191_trevor-moss-leaf-trellis-wallpaper.jpg",
+ "recovered": "https://bhf-cdn.azureedge.net/bhf-blob-prod/0091733_sheehan-pearl-faux-grasscloth-wallpaper.jpeg"
+ },
+ {
+ "mfr": "196-01",
+ "title": "Argent Deep Navy | Jeffrey Stevens",
+ "current_wrong": "0037561_orbit-neutral-floral-wallpaper.jpg",
+ "recovered": null
+ },
+ {
+ "mfr": "196-03",
+ "title": "Argent Eggshell | Jeffrey Stevens",
+ "current_wrong": "0037561_orbit-neutral-floral-wallpaper_494a5f4c-333d-4f0d-8a79-9140e26f5736.jpg",
+ "recovered": null
+ }
+]
\ No newline at end of file
diff --git a/recover-7-settlement.mjs b/recover-7-settlement.mjs
new file mode 100644
index 0000000..53a5ff0
--- /dev/null
+++ b/recover-7-settlement.mjs
@@ -0,0 +1,32 @@
+#!/usr/bin/env node
+// recover-7-settlement.mjs — TK-10058: for the 7 settlement-risk LIVE products, recover the CORRECT
+// image by name-slug from brewster_catalog (their own row is corrupt), download for eyeball. READ-ONLY. $0.
+import fs from 'node:fs'; import { execSync } from 'node:child_process';
+const q=sql=>{fs.writeFileSync('/tmp/_r7.sql',sql);return execSync(`PGPASSWORD=DW2024! /opt/homebrew/opt/postgresql@14/bin/psql -h 127.0.0.1 -U dw_admin -d dw_unified -tA -F'\x1f' -f /tmp/_r7.sql`,{encoding:'utf8'}).trim();};
+const norm=s=>String(s||'').normalize('NFD').replace(/[̀-ͯ]/g,'').toLowerCase();
+const STOP=new Set(['wallpaper','wallcovering','residential','wall','the','and','light','dark','off']);
+const toks=s=>norm(s).replace(/[^a-z0-9]+/g,' ').split(/\s+/).filter(w=>w.length>2&&!STOP.has(w));
+const settle=JSON.parse(fs.readFileSync('LIVE-WRONG-IMAGE-ACTIONABLE-TK10058.json','utf8')).settle;
+// pull authoritative pattern_name+color_name for the 7 mfrs
+const skus=settle.map(s=>`'${s.mfr}'`).join(',');
+const det=new Map();
+for(const line of q(`select upper(trim(mfr_sku))||chr(31)||coalesce(pattern_name,'')||chr(31)||coalesce(color_name,'') from brewster_catalog where upper(trim(mfr_sku)) in (${skus})`).split('\n').filter(Boolean)){
+ const[sku,pat,col]=line.split('\x1f'); if(!det.has(sku))det.set(sku,{pat,col});
+}
+// all filenames -> token set, for recovery
+const allimg=q(`select distinct image_url from brewster_catalog where image_url is not null and image_url<>''`).split('\n').filter(Boolean)
+ .map(u=>({url:u,set:new Set(toks(u.split('/').pop().replace(/^\d+_/,'').replace(/\.[a-z]+$/i,'')))}));
+fs.mkdirSync('/tmp/s7',{recursive:true}); let out=[];
+for(const s of settle){
+ const d=det.get(s.mfr.toUpperCase())||{}; const pt=toks(d.pat), ct=toks(d.col);
+ const hit=allimg.find(f=>pt.length&&pt.every(t=>f.set.has(t))&&(ct.length===0||ct.every(t=>f.set.has(t))))
+ || allimg.find(f=>pt.length&&pt.every(t=>f.set.has(t))); // pattern-only fallback
+ out.push({mfr:s.mfr,title:s.title,pattern:d.pat,color:d.col,current_wrong:s.img,recovered:hit?hit.url:null});
+}
+fs.writeFileSync('RECOVER-7-SETTLEMENT-TK10058.json',JSON.stringify(out,null,1));
+console.log('mfr | pattern/color | CURRENT (wrong) -> RECOVERED');
+out.forEach((r,i)=>console.log(`${i+1}. ${r.mfr} | ${r.pattern}/${r.color} | ${r.current_wrong} -> ${r.recovered?r.recovered.split('/').pop():'*** NONE FOUND ***'}`));
+// download recovered for eyeball
+let n=0; for(const r of out){ n++; if(!r.recovered)continue; try{execSync(`curl -s -A 'Mozilla/5.0' '${r.recovered}' -o '/tmp/s7/${String(n).padStart(2,'0')}_${r.mfr}.jpg'`);}catch(e){} }
+console.log(`\ndownloaded ${execSync("ls /tmp/s7/*.jpg 2>/dev/null | wc -l",{encoding:'utf8'}).trim()} recovered images -> /tmp/s7/`);
+console.log('$0 (local + free CDN fetch)');
← 37c98bc TK-10058 sizing: live impact is BOUNDED — 27 ACTIVE products
·
back to York Reprice 2026 08
·
TK-10058: fix 2 live settlement-risk images (Malin/Denim, Sh 5a9d2ad →