[object Object]

← back to All Designerwallcoverings

all.: add greenland to BANNED (private-label leak) + drop rows whose image/url path leaks a banned mill (china /img/greenland fix)

47d2616a8258440a356a2e98f101480c893c2aca · 2026-08-10 16:16:41 -0700 · steve

Files touched

Diff

commit 47d2616a8258440a356a2e98f101480c893c2aca
Author: steve <steve@designerwallcoverings.com>
Date:   Mon Aug 10 16:16:41 2026 -0700

    all.: add greenland to BANNED (private-label leak) + drop rows whose image/url path leaks a banned mill (china /img/greenland fix)
---
 scripts/crawl-microsites.js | 9 +++++++--
 server.js                   | 2 +-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/scripts/crawl-microsites.js b/scripts/crawl-microsites.js
index 19ffac0..05d1d9a 100644
--- a/scripts/crawl-microsites.js
+++ b/scripts/crawl-microsites.js
@@ -35,7 +35,7 @@ const SAMPLE_PER_SITE = 24;          // products carried per site into the merge
 const MERGED_CAP = 4000;             // hard ceiling on the merged products array
 
 // Standing rule: banned upstream/private-label names never ship on a public surface.
-const BANNED = /brewster|york|wallquest|wall\s*quest|newwall|new\s*wall\b|command\s*54|justin\s*david|nicolette\s*mayer|seabrook|chesapeake|nextwall|desima|carlsten/i;
+const BANNED = /brewster|york|wallquest|wall\s*quest|newwall|new\s*wall\b|command\s*54|justin\s*david|nicolette\s*mayer|seabrook|chesapeake|nextwall|desima|carlsten|greenland/i;
 // Display scrub: never surface the word "Wallpaper" where the house uses "Wallcovering".
 const clean = (s) => (s == null ? s : String(s)
   .replace(/\bWallpapers\b/gi, 'Wallcoverings').replace(/\bWallpaper\b/gi, 'Wallcovering'));
@@ -304,7 +304,12 @@ function buildFeedResult(arr, host, reportedTotal, truncated) {
   const products = arr
     .filter((p) => !BANNED.test(p.title || '') && !BANNED.test(p.vendor || '') && !BANNED.test((p.tags || []).join(' ')))
     .slice(0, SAMPLE_PER_SITE)
-    .map((p) => normalizeRow(p, host));
+    .map((p) => normalizeRow(p, host))
+    // Defense-in-depth: a private-label name can hide in the image PATH or store URL
+    // (e.g. china.dw serves cork art at /img/greenland/…). The field-level filter above
+    // only checks title/vendor/tags, so drop any normalized row whose image/url leaks a
+    // banned mill — the surface is customer-facing (Steve: "Greenland" never front-facing).
+    .filter((p) => !BANNED.test(p.image || '') && !BANNED.test(p.url || ''));
   return { has: true, count: reportedTotal != null ? reportedTotal : arr.length, truncated: !!truncated, handles, products };
 }
 
diff --git a/server.js b/server.js
index b582a74..8b71b5a 100644
--- a/server.js
+++ b/server.js
@@ -84,7 +84,7 @@ const cleanMfr = (raw) => String(raw || '').split(/--|·|;|\bMUST\b|\bQUOTE\b/i)
 // HARD front-facing rule (same list build-data.py enforced for the vendor directory):
 // banned upstream/private-label source names never ship on this public surface — rows
 // whose vendor OR title leaks one are excluded (their products surface under the label).
-const BANNED = /brewster|york|wallquest|wall\s*quest|newwall|new\s*wall\b|command\s*54|justin\s*david|nicolette\s*mayer|seabrook|chesapeake|nextwall|desima|carlsten/i;
+const BANNED = /brewster|york|wallquest|wall\s*quest|newwall|new\s*wall\b|command\s*54|justin\s*david|nicolette\s*mayer|seabrook|chesapeake|nextwall|desima|carlsten|greenland/i;
 
 // ── INTERNAL lines — deliberately NEVER front-facing (permanent), distinct from Staged ────────────
 // The durable registry lives in the shopify repo (config/internal-lines.json). A product whose

← fca6523 all.: register phillipe-romano brand (Greenland cork private  ·  back to All Designerwallcoverings  ·  microsites.html: add list/grid toggle + per-field on/off men 95446fa →