← back to Dw Rotation Activator
activator: align leak guard to canonical dw-leak-scanner denylist (add york/brewster/lillian-august/momentum/versa; drop schumacher); cite source (DTD-B)
eb84eed31acb91dcb8ebf5870b0b8ff1550a985b · 2026-07-21 15:38:11 -0700 · steve@designerwallcoverings.com
Files touched
Diff
commit eb84eed31acb91dcb8ebf5870b0b8ff1550a985b
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Tue Jul 21 15:38:11 2026 -0700
activator: align leak guard to canonical dw-leak-scanner denylist (add york/brewster/lillian-august/momentum/versa; drop schumacher); cite source (DTD-B)
---
rotate-activate.js | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/rotate-activate.js b/rotate-activate.js
index e297b2e..fdffded 100644
--- a/rotate-activate.js
+++ b/rotate-activate.js
@@ -225,15 +225,25 @@ function fiveFieldExtra(n) {
// ── PRIVATE-LABEL LEAK GUARD ──────────────────────────────────────────────
// A product must NEVER go customer-facing (DRAFT→ACTIVE) with the upstream SOURCE
-// name in its title or vendor. This is the durable fix for the 2026-07-21 incident
-// where the activator flipped Greenland cork duplicates ACTIVE with "| Greenland"
-// still in the title (vendor="Greenland" should be "Phillipe Romano"). Fail-safe:
-// this can only BLOCK an activation, never cause one. See memory dw-leak-scanner.
+// name in its title or vendor. Durable fix for the 2026-07-21 incident where the
+// activator flipped Greenland cork duplicates ACTIVE with "| Greenland" still in
+// the title (vendor="Greenland" should be "Phillipe Romano"). Fail-safe: this can
+// only BLOCK an activation, never cause one.
+//
+// SELF-CONTAINED COPY of the canonical denylist — kept decoupled by design
+// (DTD verdict B, 2026-07-21: a ~/Projects app must not cross-import a portable
+// ~/.claude/skills dir). CANONICAL SOURCE OF TRUTH:
+// ~/.claude/skills/dw-leak-scanner/denylist.json (+ memory dw-leak-scanner)
+// When that denylist changes, mirror the change here.
+//
// HARD tokens are never a legitimate pattern/color name → checked in title AND vendor.
-// VENDOR-only tokens can appear as a real pattern name (e.g. a "Chesapeake" pattern) →
-// blocked only when they are the VENDOR (the source), not merely a word in the title.
-const PL_LEAK_HARD = ['greenland', 'wallquest', 'command54', 'seabrook', 'nextwall', 'desima', 'carlsten'];
-const PL_LEAK_VENDOR = [...PL_LEAK_HARD, 'momentum', 'versa', 'schumacher', 'chesapeake', 'nicolette mayer'];
+// VENDOR-only tokens can appear as a real pattern/place name (e.g. a "Chesapeake"
+// pattern or a "York"/"Seabrook" motif) → blocked only when they are the VENDOR
+// (the source), never merely a word in the title. ('schumacher' is intentionally
+// omitted — the denylist treats it as a legitimately-shown repped brand, not a leak.)
+const PL_LEAK_HARD = ['wallquest', 'nextwall', 'command54', 'command 54', 'desima', 'carlsten',
+ 'greenland', 'yorkwall', 'lillian august', 'nicolette mayer', 'versa designed surfaces'];
+const PL_LEAK_VENDOR = [...PL_LEAK_HARD, 'chesapeake', 'seabrook', 'brewster', 'york', 'momentum', 'versa'];
function leakGuard(title, vendor) {
const t = (title || '').toLowerCase(), v = (vendor || '').toLowerCase();
const hit = PL_LEAK_HARD.find((x) => t.includes(x)) || PL_LEAK_VENDOR.find((x) => v.includes(x));
← ade810f activator: private-label leak guard — never activate a produ
·
back to Dw Rotation Activator
·
activator: word-boundary leak matching — fixes 'versa' false 3f4f5ae →