← back to Designer Wallcoverings
snapshot before /code-review ultra — TK-11786 review fixes (Shopify guards, cadence-import, scrapers, health checks)
d9142ec0e76107d10af099a2cf28b005cc2e7222 · 2026-09-22 15:04:49 -0700 · Steve
Files touched
M DW-Agents/dw-agents/ecosystem.config.cjsM DW-Programming/ImportNewSkufromURL/add-sample-variant-schumacher.tsM DW-Programming/ImportNewSkufromURL/app/api/create-product/route.tsM DW-Programming/ImportNewSkufromURL/app/api/import/sku/route.tsM DW-Programming/ImportNewSkufromURL/lib/banned-words.tsM DW-Programming/ImportNewSkufromURL/lib/scrapers/fabricut-stroheim-new-products-scraper.tsM DW-Programming/ImportNewSkufromURL/lib/scrapers/farrow-ball-new-products-scraper.tsM DW-Programming/ImportNewSkufromURL/lib/scrapers/schumacher-new-products-scraper.tsM DW-Programming/ImportNewSkufromURL/lib/scrapers/zuber-new-products-scraper.tsM DW-Programming/ImportNewSkufromURL/scripts/enrichment-health-check.jsM DW-Programming/ImportNewSkufromURL/scripts/scraper-healthcheck.tsM DW-Programming/anna-french-shopify-push.jsM DW-Programming/as-creation-shopify-push.jsM DW-Programming/hollywood-shopify-push.jsM DW-Programming/push-maya-romanoff-to-shopify.jsM DW-Programming/push-versa-specs-to-shopify.jsA DW-Programming/verification/tk11241/apply-plan.cjsA DW-Programming/verification/tk11241/check-image-liveness.cjsA DW-Programming/verification/tk11241/collect-plan.cjsA DW-Programming/verification/tk11241/complete-plan.cjsA DW-Programming/verification/tk11241/kaolin-vendor.htmlA DW-Programming/verification/tk11241/verify.cjsA DW-Programming/verification/tk11485-p2/__tests__/filename-proves-sku.test.cjsA DW-Programming/verification/tk11485-p2/apply-plan.cjsA DW-Programming/verification/tk11485-p2/check-image-liveness.cjsA DW-Programming/verification/tk11485-p2/collect-plan.cjsA DW-Programming/verification/tk11485-p3/__tests__/filename-proves-sku.test.cjsA DW-Programming/verification/tk11485-p3/apply-plan.cjsA DW-Programming/verification/tk11485-p3/check-image-liveness.cjsA DW-Programming/verification/tk11485-p3/collect-plan.cjsA DW-Programming/verification/tk11485-p4/__tests__/filename-proves-sku.test.cjsA DW-Programming/verification/tk11485-p4/apply-plan.cjsA DW-Programming/verification/tk11485-p4/check-image-liveness.cjsA DW-Programming/verification/tk11485-p4/collect-plan.cjsA DW-Programming/verification/tk11485-p5/apply-plan.cjsA DW-Programming/verification/tk11485-p5/check-image-liveness.cjsA DW-Programming/verification/tk11485-p6/apply-plan.cjsA DW-Programming/verification/tk11485-p6/check-image-liveness.cjsA DW-Programming/verification/tk11485-p7/apply-plan.cjsA DW-Programming/verification/tk11485-p7/check-image-liveness.cjsA DW-Programming/verification/tk11485/apply-plan.cjsA DW-Programming/verification/tk11485/check-image-liveness.cjsA DW-Programming/verification/tk11485/collect-plan.cjsM scripts/push-mfr-to-shopify.jsA shopify/scripts/_superseded/artmura-title-fix.jsA shopify/scripts/_superseded/romo-drilldown.jsA shopify/scripts/_superseded/romo-lookup.jsM shopify/scripts/cadence/cadence-import.jsM shopify/scripts/dwvs-import-catalog-only.jsA shopify/scripts/tk12015-relabel-greenland.mjsM shopify/scripts/wolf-gordon-shopify-push.js
Diff
commit d9142ec0e76107d10af099a2cf28b005cc2e7222
Author: Steve <steve@designerwallcoverings.com>
Date: Tue Sep 22 15:04:49 2026 -0700
snapshot before /code-review ultra — TK-11786 review fixes (Shopify guards, cadence-import, scrapers, health checks)
---
DW-Agents/dw-agents/ecosystem.config.cjs | 29 +-
.../add-sample-variant-schumacher.ts | 9 +-
.../app/api/create-product/route.ts | 5 +-
.../app/api/import/sku/route.ts | 5 +-
.../ImportNewSkufromURL/lib/banned-words.ts | 16 +
.../fabricut-stroheim-new-products-scraper.ts | 30 +-
.../scrapers/farrow-ball-new-products-scraper.ts | 5 +-
.../scrapers/schumacher-new-products-scraper.ts | 54 +-
.../lib/scrapers/zuber-new-products-scraper.ts | 51 +
.../scripts/enrichment-health-check.js | 73 +-
.../scripts/scraper-healthcheck.ts | 18 +-
DW-Programming/anna-french-shopify-push.js | 3 +
DW-Programming/as-creation-shopify-push.js | 7 +
DW-Programming/hollywood-shopify-push.js | 5 +
DW-Programming/push-maya-romanoff-to-shopify.js | 3 +
DW-Programming/push-versa-specs-to-shopify.js | 3 +
DW-Programming/verification/tk11241/apply-plan.cjs | 73 +
.../verification/tk11241/check-image-liveness.cjs | 29 +
.../verification/tk11241/collect-plan.cjs | 67 +
.../verification/tk11241/complete-plan.cjs | 54 +
.../verification/tk11241/kaolin-vendor.html | 3074 ++++++++++++++++++++
DW-Programming/verification/tk11241/verify.cjs | 129 +
.../__tests__/filename-proves-sku.test.cjs | 47 +
.../verification/tk11485-p2/apply-plan.cjs | 77 +
.../tk11485-p2/check-image-liveness.cjs | 29 +
.../verification/tk11485-p2/collect-plan.cjs | 86 +
.../__tests__/filename-proves-sku.test.cjs | 47 +
.../verification/tk11485-p3/apply-plan.cjs | 77 +
.../tk11485-p3/check-image-liveness.cjs | 29 +
.../verification/tk11485-p3/collect-plan.cjs | 86 +
.../__tests__/filename-proves-sku.test.cjs | 41 +
.../verification/tk11485-p4/apply-plan.cjs | 77 +
.../tk11485-p4/check-image-liveness.cjs | 29 +
.../verification/tk11485-p4/collect-plan.cjs | 91 +
.../verification/tk11485-p5/apply-plan.cjs | 77 +
.../tk11485-p5/check-image-liveness.cjs | 29 +
.../verification/tk11485-p6/apply-plan.cjs | 77 +
.../tk11485-p6/check-image-liveness.cjs | 29 +
.../verification/tk11485-p7/apply-plan.cjs | 77 +
.../tk11485-p7/check-image-liveness.cjs | 29 +
DW-Programming/verification/tk11485/apply-plan.cjs | 77 +
.../verification/tk11485/check-image-liveness.cjs | 29 +
.../verification/tk11485/collect-plan.cjs | 67 +
scripts/push-mfr-to-shopify.js | 13 +-
shopify/scripts/_superseded/artmura-title-fix.js | 55 +
shopify/scripts/_superseded/romo-drilldown.js | 317 ++
shopify/scripts/_superseded/romo-lookup.js | 363 +++
shopify/scripts/cadence/cadence-import.js | 47 +-
shopify/scripts/dwvs-import-catalog-only.js | Bin 10132 -> 10137 bytes
shopify/scripts/tk12015-relabel-greenland.mjs | 111 +
shopify/scripts/wolf-gordon-shopify-push.js | Bin 23475 -> 24055 bytes
51 files changed, 5808 insertions(+), 47 deletions(-)
diff --git a/DW-Agents/dw-agents/ecosystem.config.cjs b/DW-Agents/dw-agents/ecosystem.config.cjs
index a1004243..f14df00d 100644
--- a/DW-Agents/dw-agents/ecosystem.config.cjs
+++ b/DW-Agents/dw-agents/ecosystem.config.cjs
@@ -8,6 +8,27 @@
* Restart all: pm2 restart all
*/
+// TK-11786 (review 2026-09-16): the agent env blocks read `process.env.ANTHROPIC_API_KEY || ''`.
+// The `|| ''` fallback means a missing key produces NO startup error — the agents boot fine and
+// then 401 on every Anthropic call at runtime (a silent outage). We WARN (not throw) here so a
+// keyless boot is visible in `pm2 logs`, without aborting the whole ecosystem file on reload
+// (a throw in this module would stop EVERY app defined below, not just the AI agents). The real
+// fix is exporting ANTHROPIC_API_KEY in the prod environment before `pm2 reload`.
+// TK-11857 R (review 2026-09-18): the SAME silent-outage class applies to EVERY secret the env
+// blocks below read as `process.env.X || ''` — a missing SLACK_BOT_TOKEN or SHOPIFY_ADMIN_TOKEN
+// also boots fine and then fails only at the first API call. Warn on all three (still WARN, not
+// throw — a throw here aborts the WHOLE ecosystem file, not just the agent missing a key).
+const REQUIRED_ENV = {
+ ANTHROPIC_API_KEY: 'the AI agents (purchasing/marketing/trend-research) will 401 on every Anthropic call',
+ SLACK_BOT_TOKEN: 'Slack notifications from the vendor-command-center will silently fail',
+ SHOPIFY_ADMIN_TOKEN: 'Shopify reads/writes will 401 (SHOPIFY_ACCESS_TOKEN resolves empty)',
+};
+for (const [k, consequence] of Object.entries(REQUIRED_ENV)) {
+ if (!process.env[k]) {
+ console.warn(`⚠️ [ecosystem] ${k} is not set — ${consequence} at runtime until it is exported in the prod environment before \`pm2 reload\`.`);
+ }
+}
+
module.exports = {
apps: [
{
@@ -42,7 +63,7 @@ module.exports = {
NODE_ENV: 'production',
PORT: 9879,
NODE_OPTIONS: '--import tsx',
- SLACK_BOT_TOKEN: 'xoxb-3958182050256-9814366234406-HiR1ybK6HT8JViWDEpjXpmsq',
+ SLACK_BOT_TOKEN: (process.env.SLACK_BOT_TOKEN || ''),
SHOPIFY_STORE_DOMAIN: 'designer-laboratory-sandbox.myshopify.com',
SHOPIFY_ACCESS_TOKEN: (process.env.SHOPIFY_ADMIN_TOKEN || '')
},
@@ -89,7 +110,7 @@ module.exports = {
NODE_ENV: 'production',
PORT: 9880,
NODE_OPTIONS: '--import tsx',
- ANTHROPIC_API_KEY: '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'
+ ANTHROPIC_API_KEY: (process.env.ANTHROPIC_API_KEY || '')
},
error_file: '/root/DW-Agents/logs/purchasing-error.log',
out_file: '/root/DW-Agents/logs/purchasing-out.log',
@@ -111,7 +132,7 @@ module.exports = {
NODE_OPTIONS: '--import tsx',
SHOPIFY_STORE_DOMAIN: 'designer-laboratory-sandbox.myshopify.com',
SHOPIFY_ACCESS_TOKEN: (process.env.SHOPIFY_ADMIN_TOKEN || ''),
- ANTHROPIC_API_KEY: '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'
+ ANTHROPIC_API_KEY: (process.env.ANTHROPIC_API_KEY || '')
},
error_file: '/root/DW-Agents/logs/marketing-error.log',
out_file: '/root/DW-Agents/logs/marketing-out.log',
@@ -150,7 +171,7 @@ module.exports = {
NODE_ENV: 'production',
PORT: 9883,
NODE_OPTIONS: '--import tsx',
- ANTHROPIC_API_KEY: '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'
+ ANTHROPIC_API_KEY: (process.env.ANTHROPIC_API_KEY || '')
},
error_file: '/root/DW-Agents/logs/trend-research-error.log',
out_file: '/root/DW-Agents/logs/trend-research-out.log',
diff --git a/DW-Programming/ImportNewSkufromURL/add-sample-variant-schumacher.ts b/DW-Programming/ImportNewSkufromURL/add-sample-variant-schumacher.ts
index ec0ffe1e..9227ad1f 100644
--- a/DW-Programming/ImportNewSkufromURL/add-sample-variant-schumacher.ts
+++ b/DW-Programming/ImportNewSkufromURL/add-sample-variant-schumacher.ts
@@ -177,9 +177,12 @@ async function addSampleVariant(productId: string, productTitle: string): Promis
`;
// ---- PRICE-INTEGRITY GATE (TK-11403) — BEFORE the variant price write ----
- // This site only writes a Sample variant at $4.25; the shared assertion
- // guards Class A (sample must == $4.25). FAIL-SAFE: never throws out of the
- // path; a real violation blocks the write, an infra error just proceeds.
+ // This site only writes a Sample variant at the vendor-declared sample price.
+ // The shared assertion guards Class A by BAND, not equality (TK-11447): the
+ // sample must sit within [sampleFloor, sampleCeiling] and not below the
+ // vendor-declared floor, and a $0/negative orderable variant is a hard block.
+ // FAIL-SAFE: never throws out of the path; a real violation blocks the write,
+ // an infra error just proceeds.
// TK-11403: per-vendor declared sample price (default $4.25). Same value gates AND is written.
const sampleFloor = resolveSampleFloor(VENDOR);
// Single source of truth for the Sample variant's inventory tracking, so the
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/create-product/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/create-product/route.ts
index 5a5ae6a0..b89b512e 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/create-product/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/create-product/route.ts
@@ -4,7 +4,7 @@ import { ProductDTO, ProductDTOSchema } from '@/lib/types';
import { getVendorByUrl } from '@/lib/vendors-config';
import { recordVendorImport } from '@/lib/vendor-import-tracker';
import { persistScrapedProduct, recordShopifyResult, findByMfrSku } from '@/lib/persist-scraped-product';
-import { cleanWallpaper, validateTitle } from '@/lib/banned-words';
+import { cleanWallpaper, validateTitle, scanPublicLeak } from '@/lib/banned-words';
export const maxDuration = 60;
export const dynamic = 'force-dynamic';
@@ -49,6 +49,9 @@ export async function POST(request: NextRequest): Promise<NextResponse<CreateRes
if (typeof (productDTO as any).name === 'string') (productDTO as any).name = cleanWallpaper((productDTO as any).name);
try {
validateTitle(productDTO.title);
+ // TK-12015 — universal real-vendor leak scan (parity with cadence pushOne()).
+ scanPublicLeak({ title: productDTO.title, vendor: (productDTO as any).vendor,
+ bodyHtml: (productDTO as any).bodyHtml, tags: (productDTO as any).tags });
} catch (gateErr: any) {
console.warn(`⛔ create-product banned-word gate: ${gateErr.message}`);
return NextResponse.json({ success: false, error: gateErr.message }, { status: 400 });
diff --git a/DW-Programming/ImportNewSkufromURL/app/api/import/sku/route.ts b/DW-Programming/ImportNewSkufromURL/app/api/import/sku/route.ts
index 6761f708..d397b2fe 100644
--- a/DW-Programming/ImportNewSkufromURL/app/api/import/sku/route.ts
+++ b/DW-Programming/ImportNewSkufromURL/app/api/import/sku/route.ts
@@ -381,13 +381,16 @@ export async function POST(request: NextRequest): Promise<NextResponse<PreviewRe
const url = new URL(request.url);
let sourceUrl = url.searchParams.get('source');
const quickScan = url.searchParams.get('quick') === 'true'; // Quick scan parameter
- const privateLabel = url.searchParams.get('privateLabel') === 'true'; // Private label parameter
+ // TK-12015: accept privateLabel from BOTH the query string AND the JSON body, so a
+ // body-only caller (the scrape-router before its client fix) still private-labels.
+ let privateLabel = url.searchParams.get('privateLabel') === 'true'; // Private label parameter
const stream = url.searchParams.get('stream') === 'true'; // Streaming mode for category pages
let forceProduct = url.searchParams.get('forceProduct') === 'true';
if (!sourceUrl) {
const body = await request.json().catch(() => ({}));
sourceUrl = body.source;
+ if (body.privateLabel === true || body.privateLabel === 'true') privateLabel = true;
if (body.forceProduct === true || body.mode === 'product') forceProduct = true;
}
diff --git a/DW-Programming/ImportNewSkufromURL/lib/banned-words.ts b/DW-Programming/ImportNewSkufromURL/lib/banned-words.ts
index 0bf1aed9..06b6955f 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/banned-words.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/banned-words.ts
@@ -72,3 +72,19 @@ export function validateTitle(title: string | null | undefined): string {
if (/\bwallpapers?\b/i.test(t)) throw new Error(`BLOCKED: title contains banned word "Wallpaper" — use "Wallcovering" ("${t}")`);
return t;
}
+
+// TK-12015 — real private-label upstream / trade-parent names that must NEVER be customer-facing.
+export const REAL_VENDOR_DENYLIST: Array<[RegExp, string]> = [
+ [/Brewster\s*&(?:amp;)*\s*York/i,'Brewster & York'],[/\bBrewster\b/i,'Brewster'],
+ [/\bYork Wallcoverings?\b/i,'York Wallcoverings'],[/\bby York\b/i,'by York'],[/\byorkwall\b/i,'yorkwall'],
+ [/\bWall ?Quest\b/i,'WallQuest'],[/\bChesapeake\b/i,'Chesapeake'],[/\bNext ?Wall\b/i,'NextWall'],
+ [/\bSeabrook\b/i,'Seabrook'],[/\bCommand ?54\b/i,'Command54'],[/\bDesima\b/i,'Desima'],[/\bCarlsten\b/i,'Carlsten'],
+ [/\bGreenland\b/i,'Greenland'],[/\bMomentum\b/i,'Momentum'],[/\bVersa\b/i,'Versa'],[/\bRigo\b/i,'Rigo'],[/\bTokiwa\b/i,'Tokiwa'],
+];
+/** Throws if any banned real-vendor term survives in a customer-facing field. */
+export function scanPublicLeak(p: { title?: string; vendor?: string; bodyHtml?: string; tags?: string[]; }): void {
+ const fields: Array<[string,string|undefined]> = [['title',p.title],['vendor',p.vendor],['bodyHtml',p.bodyHtml]];
+ for (const t of (p.tags||[])) fields.push(['tag',t]);
+ for (const [fn,val] of fields) if (val) for (const [re,term] of REAL_VENDOR_DENYLIST)
+ if (re.test(val)) throw new Error(`BLOCKED: ${fn} contains banned vendor term "${term}"`);
+}
diff --git a/DW-Programming/ImportNewSkufromURL/lib/scrapers/fabricut-stroheim-new-products-scraper.ts b/DW-Programming/ImportNewSkufromURL/lib/scrapers/fabricut-stroheim-new-products-scraper.ts
index d1071cc0..02bd8b19 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/scrapers/fabricut-stroheim-new-products-scraper.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/scrapers/fabricut-stroheim-new-products-scraper.ts
@@ -9,6 +9,7 @@
* Mirrors the proven logic in Skills/fabricut-stroheim/catalog.skill.ts.
*/
import * as dotenv from 'dotenv';
+import { fetchViaBrowserbase, isBotWall } from '../browserbase-connect';
// Load environment variables
dotenv.config({ path: '.env.local' });
@@ -49,18 +50,25 @@ export async function scrapeFabricutStroheimNewProducts(params?: ScrapeParams):
console.log('🎨 Scraping Fabricut - Stroheim new-products from:', targetUrl);
try {
- const res = await fetch(targetUrl, {
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125 Safari/537.36',
- 'Accept': 'text/html,application/xhtml+xml'
- },
- signal: AbortSignal.timeout(45000)
- });
- if (!res.ok) {
- console.error(`❌ Fabricut - Stroheim returned HTTP ${res.status}`);
- return [];
+ // Direct fetch first; fabricut.com serves an anti-bot 403 to datacenter IPs, so
+ // fall back to the Browserbase stealth browser when walled (2026-09-22, Steve-approved).
+ let html = '';
+ try {
+ const res = await fetch(targetUrl, {
+ headers: {
+ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125 Safari/537.36',
+ 'Accept': 'text/html,application/xhtml+xml'
+ },
+ signal: AbortSignal.timeout(45000)
+ });
+ html = res.ok ? await res.text() : String(res.status);
+ } catch (e: any) {
+ console.log(`⚠️ Direct fetch failed (${e?.message}) — trying Browserbase`);
+ }
+ if (!html || isBotWall(html)) {
+ console.log('🛡️ Fabricut anti-bot wall detected → Browserbase');
+ html = await fetchViaBrowserbase(targetUrl, { waitForSelector: '[data-sku]' });
}
- const html = await res.text();
// PDP anchors: /stroheim/wallcovering/<sku>/<pattern-slug>/<color-slug>
const pdp = new Map<string, { href: string; pattern: string; color: string }>();
diff --git a/DW-Programming/ImportNewSkufromURL/lib/scrapers/farrow-ball-new-products-scraper.ts b/DW-Programming/ImportNewSkufromURL/lib/scrapers/farrow-ball-new-products-scraper.ts
index 4e11b1c1..6bface5a 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/scrapers/farrow-ball-new-products-scraper.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/scrapers/farrow-ball-new-products-scraper.ts
@@ -162,7 +162,10 @@ export async function scrapeFarrowBallNewProducts(
// --- 2) Harvest pattern slugs ---
const slugs: string[] = [];
- const slugRe = /href="https:\/\/www\.farrow-ball\.com\/us\/wallpaper\/([a-z0-9-]+)"/g;
+ // Allow an optional ?sku=… query string: F&B listing anchors changed from
+ // /us/wallpaper/<slug> to /us/wallpaper/<slug>?sku=… (2026-09), which broke the
+ // old slug-must-end-in-quote regex → 0 slugs → 0 products.
+ const slugRe = /href="https:\/\/www\.farrow-ball\.com\/us\/wallpaper\/([a-z0-9-]+)(?:\?[^"]*)?"/g;
let sm: RegExpExecArray | null;
while ((sm = slugRe.exec(listHtml)) !== null) {
const slug = sm[1];
diff --git a/DW-Programming/ImportNewSkufromURL/lib/scrapers/schumacher-new-products-scraper.ts b/DW-Programming/ImportNewSkufromURL/lib/scrapers/schumacher-new-products-scraper.ts
index 2710bf16..c706ef3a 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/scrapers/schumacher-new-products-scraper.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/scrapers/schumacher-new-products-scraper.ts
@@ -104,6 +104,53 @@ function parseNextData(html: string, fallbackUrl: string, maxResults: number): S
return products;
}
+/**
+ * App Router (2026-09): schumacher.com moved off __NEXT_DATA__ to Next.js App
+ * Router, so the product payload now lives in self.__next_f flight chunks as
+ * escaped JSON — "products":{"content":[...]}. Extract that array via escaped
+ * bracket-matching, unescape, parse. Same output shape as parseNextData.
+ */
+function parseFlightData(html: string, fallbackUrl: string, maxResults: number): SchumacherProduct[] {
+ const key = '\\"products\\":{\\"content\\":[';
+ const at = html.indexOf(key);
+ if (at < 0) return [];
+ const start = html.indexOf('[', at + key.length - 1);
+ let i = start, depth = 0, inStr = false, esc = false;
+ for (; i < html.length; i++) {
+ const c = html[i];
+ if (esc) { esc = false; continue; }
+ if (c === '\\') { esc = true; continue; }
+ if (inStr) { if (c === '"') inStr = false; continue; }
+ if (c === '"') { inStr = true; continue; }
+ if (c === '[') depth++;
+ else if (c === ']') { depth--; if (depth === 0) break; }
+ }
+ if (depth !== 0) return [];
+ let arr: any[];
+ try { arr = JSON.parse(html.slice(start, i + 1).replace(/\\"/g, '"').replace(/\\\\/g, '\\')); }
+ catch { return []; }
+ const products: SchumacherProduct[] = [];
+ for (const p of arr) {
+ if (products.length >= maxResults) break;
+ const sku = String(p.itemNumber || p.id || '').trim();
+ const name = titleCase(p.name);
+ if (!sku || !name) continue;
+ const color = titleCase(p.colorName);
+ const image = p.imageUrl || (p.images && p.images[0] && (p.images[0].largeUrl || p.images[0].thumbnailUrl)) || '';
+ products.push({
+ title: `${name}${color ? ' - ' + color : ''}`,
+ name, pattern: name, sku, code: sku,
+ url: sku ? `https://schumacher.com/${sku}` : fallbackUrl,
+ vendor: 'Schumacher', vendor_id: 'schumacher',
+ category: p?.category?.name ? titleCase(p.category.name) : 'Wallcovering',
+ collection: p?.collection?.name ? titleCase(p.collection.name) : 'Schumacher Collection',
+ source: 'next-flight-ssr', image, color: color || undefined,
+ extracted_at: new Date().toISOString(),
+ });
+ }
+ return products;
+}
+
export async function scrapeSchumacherNewProducts(params?: ScrapeParams): Promise<SchumacherProduct[]> {
const { url, maxResults = 20 } = params || {};
const targetUrl = url || DEFAULT_URL;
@@ -121,9 +168,12 @@ export async function scrapeSchumacherNewProducts(params?: ScrapeParams): Promis
});
if (res.ok) {
html = await res.text();
- const direct = parseNextData(html, targetUrl, maxResults);
+ // __NEXT_DATA__ (legacy) first, then App Router flight-data (current).
+ let direct = parseNextData(html, targetUrl, maxResults);
+ let via = '__NEXT_DATA__';
+ if (direct.length < 3) { const fd = parseFlightData(html, targetUrl, maxResults); if (fd.length > direct.length) { direct = fd; via = '__next_f flight-data'; } }
if (direct.length >= 3) {
- console.log(`✅ Extracted ${direct.length} Schumacher products via direct __NEXT_DATA__`);
+ console.log(`✅ Extracted ${direct.length} Schumacher products via direct ${via}`);
return direct;
}
console.log(`⚠️ Direct feed yielded ${direct.length} (<3) products — checking bot wall…`);
diff --git a/DW-Programming/ImportNewSkufromURL/lib/scrapers/zuber-new-products-scraper.ts b/DW-Programming/ImportNewSkufromURL/lib/scrapers/zuber-new-products-scraper.ts
index 745fb2db..f149f44d 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/scrapers/zuber-new-products-scraper.ts
+++ b/DW-Programming/ImportNewSkufromURL/lib/scrapers/zuber-new-products-scraper.ts
@@ -72,6 +72,13 @@ const CATALOG_PAGES = [
'https://www.zuber.fr/fr/catalogues/decors-panoramiques-1',
];
+// Sitemap-first fallback (added 2026-09-22): the /fr/catalogues/* grid pages
+// restructured and stopped emitting the /fr/<cat>/<slug> product-card anchors
+// (healthcheck went to 0 products). The sitemap.xml is the authoritative, complete
+// product list — a plain XML GET, no browser, no Browserbase.
+const SITEMAP = 'https://www.zuber.fr/sitemap.xml';
+const PRODUCT_CATS = ['papiers-peints', 'revetements', 'revetements-muraux', 'decors-panoramiques', 'panneaux-decoratifs'];
+
const ORIGIN = 'https://www.zuber.fr';
function abs(u: string): string {
@@ -175,6 +182,33 @@ function parseCatalog(html: string, collection: string): ZuberProduct[] {
return out;
}
+/** Sitemap-first product discovery — robust to the catalogue-grid restructuring. */
+function parseSitemap(xml: string): ZuberProduct[] {
+ const out: ZuberProduct[] = [];
+ const seen = new Set<string>();
+ const re = new RegExp(`<loc>(https://www\\.zuber\\.fr/fr/(?:${PRODUCT_CATS.join('|')})/[a-z0-9-]+)</loc>`, 'gi');
+ let m: RegExpExecArray | null;
+ while ((m = re.exec(xml)) !== null) {
+ const href = m[1];
+ if (seen.has(href)) continue;
+ seen.add(href);
+ const parts = href.split('/').filter(Boolean);
+ const slug = parts.pop() || '';
+ const cat = parts.pop() || '';
+ const name = decode(slug.replace(/[-_]+/g, ' ')).replace(/\b\w/g, (c) => c.toUpperCase());
+ if (!name) continue;
+ out.push({
+ title: name, name, pattern: name,
+ sku: `ZUB-${slug}`.toUpperCase(), code: slug, url: href,
+ vendor: 'Zuber', vendor_id: 'zuber', category: 'wallcovering',
+ collection: cat.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()),
+ source: 'sitemap', color: name, image: '',
+ extracted_at: new Date().toISOString(),
+ });
+ }
+ return out;
+}
+
export async function scrapeZuberNewProducts(params?: ScrapeParams): Promise<ZuberProduct[]> {
const { url, maxResults = 20 } = params || {};
const maxProducts = maxResults;
@@ -208,6 +242,23 @@ export async function scrapeZuberNewProducts(params?: ScrapeParams): Promise<Zub
if (all.length >= maxProducts) break;
}
+ // Fallback: catalogue-grid pages restructured (2026-09) → 0 product anchors.
+ // The sitemap is the authoritative, complete product list (plain XML, no browser).
+ if (all.length === 0) {
+ console.log('🗺️ Catalogue grids yielded 0 — falling back to sitemap.xml');
+ try {
+ const xml = await fetchHtml(SITEMAP);
+ const sm = parseSitemap(xml);
+ console.log(` 📦 Parsed ${sm.length} product URLs from sitemap`);
+ for (const p of sm) {
+ if (seenUrls.has(p.url)) continue;
+ seenUrls.add(p.url);
+ all.push(p);
+ if (all.length >= maxProducts) break;
+ }
+ } catch (e: any) { console.log(` ⚠️ Sitemap fallback failed: ${e?.message}`); }
+ }
+
const result = all.slice(0, maxProducts);
console.log(`\n✅ Successfully extracted ${result.length} Zuber products`);
if (result.length > 0) {
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/enrichment-health-check.js b/DW-Programming/ImportNewSkufromURL/scripts/enrichment-health-check.js
index a9b468f0..9f36e3f3 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/enrichment-health-check.js
+++ b/DW-Programming/ImportNewSkufromURL/scripts/enrichment-health-check.js
@@ -18,9 +18,42 @@
* Run by launchd daily. Exits 0 = healthy, 1 = alert raised, 2 = fatal.
* node scripts/enrichment-health-check.js [--quiet]
*/
-const { execSync } = require('child_process');
+const { execSync, execFileSync } = require('child_process');
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
-const CNCP = 'http://127.0.0.1:3333/api/parking-lot';
+// Shared CNCP sender — the single correct alert path (correct /api/parking-lot endpoint,
+// verified 2xx, auto delivery-receipt). A bare fetch/curl exits 0 on 401/404/500, so a
+// broken alert arm would be invisible; routing through the sender makes a failed send a
+// finding. TK-11766 / F5.
+const CNCP_SENDER = path.join(os.homedir(), '.claude', 'skills', '_shared', 'cncp_post.sh');
+
+// Fleet-health heartbeat. Every run (healthy, alert, or fatal) rewrites this with a top-level
+// verdict/status in the PASS/WARN/FAIL vocabulary. cron-fire-canary points its liveness at this
+// artifact (ARTIFACT_OVERRIDES) instead of the exit code — previously the job had NO artifact, so
+// the canary fell back to the exit code and misread this monitor's DESIGNED "exit 1 = alert raised"
+// as a "fires-but-crashes" crash (TK-11290). Absolute path via __dirname so launchd's cwd (/) is
+// irrelevant. PASS = pipeline healthy; WARN = a health alert was raised (stall/coverage/bridge/
+// push — the monitor ran fine and is signalling); FAIL = the watchdog itself could not run its
+// checks (e.g. cannot reach Kamatera). A crash BEFORE this line leaves the artifact stale, so
+// cron-fire-canary still catches a real death via its staleness branch — nothing is masked.
+const HEARTBEAT = path.join(__dirname, '..', 'data', 'enrichment-health', 'latest.json');
+function writeHeartbeat(verdict, alerts, extra = {}) {
+ try {
+ fs.mkdirSync(path.dirname(HEARTBEAT), { recursive: true });
+ fs.writeFileSync(HEARTBEAT, JSON.stringify({
+ skill: 'enrichment-health',
+ verdict, status: verdict, // fleet-health-rollup vocabulary (PASS/WARN/FAIL)
+ checked_at: new Date().toISOString(),
+ alerts,
+ ...extra,
+ }, null, 2));
+ } catch (e) {
+ // never let heartbeat-writing failure change the monitor's own verdict/exit
+ console.error('[health] heartbeat write failed:', e.message);
+ }
+}
const STALE_HOURS = 48; // enrichment_tracking untouched this long => stalled
const ORPHAN_THRESHOLD = 200; // this many un-enqueued new SKUs => bridge broken
const READY_UNPUSHED_THRESHOLD = 5000;
@@ -47,15 +80,20 @@ function kq(sql) {
).trim();
}
-async function postAlert(note) {
+// Returns true ONLY on a verified 2xx from the shared sender; false on any non-delivery.
+// The caller records this into the heartbeat's alert_delivered so a silent send failure
+// surfaces instead of hiding. SKILL points the auto-receipt at this monitor's data dir.
+function postAlert(note) {
try {
- await fetch(CNCP, {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ url: 'http://localhost:3333', note }),
+ execFileSync('/bin/bash', [CNCP_SENDER, note], {
+ stdio: ['ignore', 'ignore', 'inherit'],
+ timeout: 15000,
+ env: { ...process.env, SKILL: path.join(__dirname, '..') },
});
+ return true;
} catch (e) {
- console.error('[health] CNCP post failed:', e.message);
+ console.error('[health] CNCP alert NOT delivered:', e.message);
+ return false;
}
}
@@ -70,7 +108,13 @@ async function postAlert(note) {
'FROM enrichment_tracking'
);
if (stale === 'never' || Number(stale) > STALE_HOURS) {
- alerts.push(`full-monte AI enrichment (phase3) STALLED — last advance ${stale}h ago (threshold ${STALE_HOURS}h). The Kamatera phase-3 cron is likely dead or its GEMINI_API_KEY unset.`);
+ // NOTE (TK-11290, verified 2026-09-15): the phase-3 crons DO run daily (09/10/11 UTC, tiers
+ // 1/2/3) and the catalog is ~97% enriched, so a >48h gap is usually NOT a dead cron — it is a
+ // caught-up pipeline whose remaining work drips out under the FREE Gemini daily quota (the runs
+ // exit cleanly on "5 consecutive 429s — free quota exhausted"). Order the likely causes by
+ // real frequency so no one chases a dead cron first. The per-vendor COVERAGE check (#4) is the
+ // authoritative "a vendor is genuinely dark with a real backlog" signal.
+ alerts.push(`full-monte AI enrichment (phase3) not advancing — last advance ${stale}h ago (threshold ${STALE_HOURS}h). Most likely: free-Gemini daily quota exhausted (429) throttling the drip on a ~97%-enriched catalog. Less likely: the phase-3 cron (0 9/10/11 * * * UTC) is dead, or GEMINI_API_KEY is unset on Kamatera. See COVERAGE (#4) for whether any vendor is genuinely dark.`);
}
// 2. Bridge broken? new on-Shopify SKUs with no enrichment row.
@@ -110,19 +154,24 @@ async function postAlert(note) {
}
const stamp = new Date().toISOString();
+ const metrics = { phase3_stale_h: stale, orphans, ready_unpushed: unpushed, dark_vendors: dark.length };
if (alerts.length) {
const note = `⚠️ ENRICHMENT HEALTH ALERT (${stamp}): ` + alerts.join(' || ');
if (!quiet) console.error(note);
- await postAlert(note);
+ const alert_delivered = postAlert(note); // post first so the heartbeat records real delivery
+ writeHeartbeat('WARN', alerts, { ...metrics, alert_delivered }); // monitor ran fine and is signalling — WARN, not a crash
process.exit(1);
}
+ writeHeartbeat('PASS', [], metrics);
if (!quiet) console.log(`[health] OK ${stamp} — pipeline fresh, bridge intact, push advancing, all tiers covered.`);
process.exit(0);
-})().catch(async (e) => {
+})().catch((e) => {
// The watchdog itself failing (e.g. can't ssh to Kamatera) must NOT be silent — that's
// the exact "nobody noticed for a month" failure mode this tool exists to prevent.
const note = `⚠️ ENRICHMENT WATCHDOG DEGRADED (${new Date().toISOString()}): ${e.message} — likely cannot reach Kamatera (ssh/psql) or it is down. The monitor could not run its checks; verify the pipeline manually.`;
console.error('[health] FATAL', e.message);
- try { await postAlert(note); } catch (_) { /* last-resort: at least exit non-zero */ }
+ let alert_delivered = false;
+ try { alert_delivered = postAlert(note); } catch (_) { /* last-resort: at least exit non-zero */ }
+ writeHeartbeat('FAIL', [note], { fatal: e.message, alert_delivered }); // the watchdog itself could not run — real FAIL
process.exit(2);
});
diff --git a/DW-Programming/ImportNewSkufromURL/scripts/scraper-healthcheck.ts b/DW-Programming/ImportNewSkufromURL/scripts/scraper-healthcheck.ts
index 86c77d51..167d5342 100644
--- a/DW-Programming/ImportNewSkufromURL/scripts/scraper-healthcheck.ts
+++ b/DW-Programming/ImportNewSkufromURL/scripts/scraper-healthcheck.ts
@@ -31,6 +31,13 @@ function loadStatus(): any {
// Not real external vendors — the DW store itself (returns 0 products by design).
// Excluded so they don't pollute the broken count every run (2026-07-13).
const NON_VENDOR = new Set(['designer-wallcoverings']);
+// Vendor sites that are dead/moved to a non-catalog page — not fixable at any price
+// (Steve-approved discontinue 2026-09-22, scraper-audit only; catalog products untouched).
+// Skipped from testing + stamped 'discontinued' so they stop polluting the broken count.
+const DISCONTINUED = new Set(['kirkby-design', 'zoffany', 'versace-home']);
+// Temporarily paused vendors — do not scrape for now (Steve, 2026-09-22). Skipped from
+// testing + stamped 'paused' so they don't scrape and don't show as broken.
+const PAUSED = new Set(['spoonflower']);
function loadVendorUrls(): Array<{ id: string; url: string }> {
const out: Array<{ id: string; url: string }> = [];
@@ -39,7 +46,7 @@ function loadVendorUrls(): Array<{ id: string; url: string }> {
const i = l.indexOf('|');
const id = i > 0 ? l.slice(0, i) : l;
const url = i > 0 ? l.slice(i + 1).trim() : '';
- if (NON_VENDOR.has(id)) return; // DW store itself, not a scrapeable vendor
+ if (NON_VENDOR.has(id) || DISCONTINUED.has(id) || PAUSED.has(id)) return; // DW store / dead / paused
// Only vendors that have a real scraper to exercise.
if (fs.existsSync(path.join(SCRAPER_DIR, `${id}-new-products-scraper.ts`))) out.push({ id, url });
});
@@ -74,6 +81,13 @@ async function main() {
const status = loadStatus();
status.scrapers = status.scrapers || {};
+ // Stamp discontinued vendors once (they're skipped from testing above).
+ for (const id of Array.from(DISCONTINUED)) {
+ status.scrapers[id] = { ...status.scrapers[id], status: 'discontinued', lastTested: new Date().toISOString().slice(0, 10), productsImported: 0, notes: 'discontinued 2026-09-22: vendor site dead/moved (not fixable) — scraper-audit only, catalog products untouched' };
+ }
+ for (const id of Array.from(PAUSED)) {
+ status.scrapers[id] = { ...status.scrapers[id], status: 'paused', lastTested: new Date().toISOString().slice(0, 10), notes: 'paused 2026-09-22: do not scrape for now (Steve)' };
+ }
const vendors = loadVendorUrls().slice(0, process.env.HC_MAX ? parseInt(process.env.HC_MAX, 10) : undefined);
const today = new Date().toISOString().slice(0, 10);
const regressions: any[] = [];
@@ -103,7 +117,7 @@ async function main() {
if (!prevWorking && wasOk) { recovered.push({ id, count: r.count }); console.log(`[healthcheck] ✅ RECOVERED ${id}: ${r.count}`); }
// Persist per-vendor (keep classification for alias/house-brand untouched).
const cls = status.scrapers[id]?.status || '';
- if (!/alias|house-brand|unresolved/.test(cls)) {
+ if (!/alias|house-brand|unresolved|discontinued|paused/.test(cls)) {
status.scrapers[id] = {
...status.scrapers[id],
status: wasOk ? 'verified' : 'broken',
diff --git a/DW-Programming/anna-french-shopify-push.js b/DW-Programming/anna-french-shopify-push.js
index 1d651e40..2a4cf049 100644
--- a/DW-Programming/anna-french-shopify-push.js
+++ b/DW-Programming/anna-french-shopify-push.js
@@ -17,6 +17,7 @@
const { Pool } = require('pg');
const https = require('https');
const fs = require('fs');
+const { assertNoPublicLeak } = require(require('path').join(process.env.HOME, 'Projects/_shared/leak-guard/leak-guard.cjs')); // TK-12032 fail-closed private-label leak guard
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
@@ -320,6 +321,8 @@ async function createProduct(row, dryRun) {
}
};
+ assertNoPublicLeak(productData, { context: `anna-french ${row.mfr_sku}` }); // TK-12032: abort before Shopify write if a banned term survives in a customer-facing field
+
if (dryRun) {
stats.created++;
console.log(` [DRY] ${row.mfr_sku} → ${title}`);
diff --git a/DW-Programming/as-creation-shopify-push.js b/DW-Programming/as-creation-shopify-push.js
index cc6c9cab..54ee4b00 100644
--- a/DW-Programming/as-creation-shopify-push.js
+++ b/DW-Programming/as-creation-shopify-push.js
@@ -31,6 +31,7 @@
const { Pool } = require('pg');
const https = require('https');
+const { assertNoPublicLeak } = require(require('path').join(process.env.HOME, 'Projects/_shared/leak-guard/leak-guard.cjs')); // TK-12032 fail-closed private-label leak guard
const pool = new Pool({
connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
@@ -436,6 +437,12 @@ async function queueProducts(limit, dryRun) {
continue;
}
+ // TK-12032: abort before enqueue if a banned/real-vendor term survives in a customer-facing field
+ try {
+ assertNoPublicLeak(jobs.createPayload, { context: `as-creation ${row.mfr_sku}` });
+ assertNoPublicLeak(jobs.followUp, { context: `as-creation followup ${row.mfr_sku}` });
+ } catch (e) { errors++; console.error(` ⛔ LEAK GUARD ${row.mfr_sku}: ${e.message}`); continue; }
+
if (dryRun) {
const mfCount = jobs.createPayload.variables.input.metafields.length;
console.log(` [DRY] ${row.dw_sku} | ${row.mfr_sku}`);
diff --git a/DW-Programming/hollywood-shopify-push.js b/DW-Programming/hollywood-shopify-push.js
index 8411fb72..63b1fcd6 100644
--- a/DW-Programming/hollywood-shopify-push.js
+++ b/DW-Programming/hollywood-shopify-push.js
@@ -32,6 +32,7 @@
const { Pool } = require('pg');
const https = require('https');
const fs = require('fs');
+const { assertNoPublicLeak } = require(require('path').join(process.env.HOME, 'Projects/_shared/leak-guard/leak-guard.cjs')); // TK-12032 fail-closed private-label leak guard (Momentum/Versa must never reach a customer-facing field)
const pool = new Pool({
connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
@@ -392,6 +393,10 @@ async function queueProducts(limit, dryRun) {
continue;
}
+ // TK-12032: abort before enqueue if the real vendor (Momentum/Versa) survives in a customer-facing field
+ try { assertNoPublicLeak(payload, { context: `hollywood ${row.mfr_sku}` }); }
+ catch (e) { errors++; console.error(` ⛔ LEAK GUARD ${row.mfr_sku}: ${e.message}`); continue; }
+
// TK-10815 IDEMPOTENCY GUARD (Fabricut-class, queue variant): before ENQUEUEING, check whether
// this product's handle already exists live in Shopify. Re-running this enqueue script (or two
// overlapping runs) would otherwise re-queue products already live and Quinn would POST a dup →
diff --git a/DW-Programming/push-maya-romanoff-to-shopify.js b/DW-Programming/push-maya-romanoff-to-shopify.js
index bf128b66..c76d96f6 100644
--- a/DW-Programming/push-maya-romanoff-to-shopify.js
+++ b/DW-Programming/push-maya-romanoff-to-shopify.js
@@ -11,6 +11,7 @@
const { Pool } = require('pg');
const fs = require('fs');
+const { assertNoPublicLeak } = require(require('path').join(process.env.HOME, 'Projects/_shared/leak-guard/leak-guard.cjs')); // TK-12032 fail-closed private-label leak guard
// Node 22 has native fetch — no import needed
const CONFIG = {
@@ -435,6 +436,8 @@ async function main() {
}
};
+ assertNoPublicLeak(payload, { context: `maya-romanoff ${p.mfr_sku}` }); // TK-12032: abort before Shopify write if a banned term survives in a customer-facing field
+
// Push to Shopify with retry
let retries = 0;
let success = false;
diff --git a/DW-Programming/push-versa-specs-to-shopify.js b/DW-Programming/push-versa-specs-to-shopify.js
index c5a675c9..b14a4332 100644
--- a/DW-Programming/push-versa-specs-to-shopify.js
+++ b/DW-Programming/push-versa-specs-to-shopify.js
@@ -7,6 +7,7 @@
const { Client } = require('pg');
const https = require('https');
+const { assertNoPublicLeak } = require(require('path').join(process.env.HOME, 'Projects/_shared/leak-guard/leak-guard.cjs')); // TK-12032 fail-closed private-label leak backstop (belt-and-suspenders behind stripBrand)
const DB_URL = (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified');
const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
@@ -280,6 +281,8 @@ async function updateProduct(row) {
}
};
+ assertNoPublicLeak(variables, { context: `versa-specs ${row.mfr_sku}` }); // TK-12032: abort before write if the real vendor brand (Versa/Momentum) survived stripBrand into a customer-facing field/metafield
+
const result = await graphql(mutation, variables);
// Check metafield errors
diff --git a/DW-Programming/verification/tk11241/apply-plan.cjs b/DW-Programming/verification/tk11241/apply-plan.cjs
new file mode 100644
index 00000000..c1e2dc66
--- /dev/null
+++ b/DW-Programming/verification/tk11241/apply-plan.cjs
@@ -0,0 +1,73 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const receipt = { ticket: 'TK-11241', at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11241/check-image-liveness.cjs b/DW-Programming/verification/tk11241/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11241/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11241/collect-plan.cjs b/DW-Programming/verification/tk11241/collect-plan.cjs
new file mode 100644
index 00000000..ddcb40af
--- /dev/null
+++ b/DW-Programming/verification/tk11241/collect-plan.cjs
@@ -0,0 +1,67 @@
+// One-time read-only repair planner. Reuses the production browser extractor;
+// never connects to PostgreSQL. Input is the approved canonical before snapshot.
+const fs = require('node:fs');
+const path = require('node:path');
+const crypto = require('node:crypto');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const dir = path.join(__dirname, 'production');
+const rows = JSON.parse(fs.readFileSync(path.join(dir, 'targets.json')));
+const cachePath = path.join(dir, 'vendor-observations.json');
+const observations = fs.existsSync(cachePath) ? JSON.parse(fs.readFileSync(cachePath)) : {};
+const resultPath = path.join(dir, 'plan.json');
+const canonical = u => { try { const url = new URL(u); return url.origin === 'https://www.versadesignedsurfaces.com' ? url.href : null; } catch { return null; } };
+const key = r => canonical(r.product_url);
+const pattern = r => { try { return new URL(r.product_url).pathname.replace(/\/[^/]+\/?$/, ''); } catch { return ''; } };
+
+(async () => {
+ const browser = await chromium.launch({ headless: true });
+ try {
+ let fetched = 0;
+ async function visit(row) {
+ const url = key(row);
+ if (!url || observations[url]?.sku === row.mfr_sku.toUpperCase()) return;
+ const response = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!response.ok) { console.log('FETCH_FAIL', row.id, response.status); return; }
+ if (response.url.replace(/\/$/, '') !== url.replace(/\/$/, '')) {
+ console.log('REDIRECT', row.id, response.url); return;
+ }
+ const html = await response.text();
+ const page = await browser.newPage();
+ try {
+ await page.route('**/*', route => route.abort());
+ await page.setContent(html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, ''), { waitUntil: 'domcontentloaded' });
+ const data = await page.evaluate(extractVersaColorways, { pageUrl: url });
+ if (data.main.sku !== row.mfr_sku.toUpperCase()) throw new Error('SKU mismatch');
+ const evidence = { fetched_from: url, fetched_at: new Date().toISOString(), html_sha256: crypto.createHash('sha256').update(html).digest('hex') };
+ for (const cw of data.colorways) observations[cw.url] = { ...cw, ...evidence };
+ fs.writeFileSync(cachePath, JSON.stringify(observations, null, 2) + '\n');
+ fetched++;
+ console.log('PAGE', fetched, row.id, data.main.sku, data.colorways.length, data.main.imgSrc ? 'swatch' : 'NULL');
+ } finally { await page.close(); }
+ await new Promise(resolve => setTimeout(resolve, 350));
+ }
+ // One page usually proves all siblings; then fetch any missing exact row URLs.
+ const first = [...new Map(rows.map(row => [pattern(row), row])).values()];
+ for (const batch of [first, rows]) {
+ let next = 0;
+ await Promise.all(Array.from({ length: 3 }, async () => {
+ while (next < batch.length) {
+ const row = batch[next++];
+ try { await visit(row); } catch (e) { console.log('ERROR', row.id, e.message); }
+ }
+ }));
+ }
+ const plan = [], unresolved = [];
+ for (const row of rows) {
+ const item = observations[key(row)];
+ if (!item || item.sku !== row.mfr_sku.toUpperCase()) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url }); continue; }
+ const color_name = item.colorName || (/^#[0-9a-f]{3,8}$/i.test(row.color_name || '') ? null : row.color_name);
+ plan.push({ id: row.id, sku: row.mfr_sku, before: { image_url: row.image_url, all_images: row.all_images, color_name: row.color_name },
+ after: { image_url: item.imgSrc, all_images: JSON.stringify(item.imgSrc ? [item.imgSrc] : []), color_name },
+ evidence: { url: item.url, fetched_from: item.fetched_from, fetched_at: item.fetched_at, html_sha256: item.html_sha256 } });
+ }
+ fs.writeFileSync(resultPath, JSON.stringify({ generated_at: new Date().toISOString(), approved_scope: 'TK-11241 ungate and run', plan, unresolved }, null, 2) + '\n');
+ console.log('PLAN', JSON.stringify({ ready: plan.length, unresolved: unresolved.length, null_images: plan.filter(p => !p.after.image_url).length, null_colors: plan.filter(p => !p.after.color_name).length }));
+ } finally { await browser.close(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11241/complete-plan.cjs b/DW-Programming/verification/tk11241/complete-plan.cjs
new file mode 100644
index 00000000..295cb0a7
--- /dev/null
+++ b/DW-Programming/verification/tk11241/complete-plan.cjs
@@ -0,0 +1,54 @@
+// Resolve stale URLs only through observed exact-SKU vendor links. No SKU writes.
+const fs = require('node:fs');
+const path = require('node:path');
+const crypto = require('node:crypto');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const doc = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const before = JSON.parse(fs.readFileSync(path.join(dir, 'before.json')));
+ const observations = JSON.parse(fs.readFileSync(path.join(dir, 'vendor-observations.json')));
+ const currentRoutes = {
+ 64: 'carrina/msc/inv-msc2603-364',
+ 3376: 'nielson/mni/inv-mni6904-355',
+ 3380: 'cayman/mcy/inv-mcy4205-333',
+ 846: 'panama-linen-a121-usa/a121-866-259',
+ };
+ const browser = await chromium.launch({ headless: true });
+ try {
+ const unresolved = [];
+ for (const missing of doc.unresolved) {
+ const row = before.find(r => r.id === missing.id);
+ let candidates = Object.values(observations).filter(o => o.sku === row.mfr_sku.toUpperCase());
+ if (currentRoutes[row.id]) {
+ const url = 'https://www.versadesignedsurfaces.com/north-america/products/product-detail/' + currentRoutes[row.id];
+ const response = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!response.ok || response.url !== url) throw new Error('Unexpected current route for ' + row.id);
+ const html = await response.text();
+ const page = await browser.newPage();
+ try {
+ await page.route('**/*', route => route.abort());
+ await page.setContent(html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, ''), { waitUntil: 'domcontentloaded' });
+ const data = await page.evaluate(extractVersaColorways, { pageUrl: url });
+ // Row 846's persisted product_url already names the same complete SKU;
+ // its stored mfr_sku omits only the vendor collection suffix -259.
+ const expected = row.id === 846 ? 'A121-866-259' : row.mfr_sku.toUpperCase();
+ if (data.main.sku !== expected) throw new Error('SKU mismatch for ' + row.id);
+ candidates = [{ ...data.main, fetched_from: url, fetched_at: new Date().toISOString(), html_sha256: crypto.createHash('sha256').update(html).digest('hex') }];
+ } finally { await page.close(); }
+ }
+ if (candidates.length !== 1) { unresolved.push({ ...missing, reason: candidates.length ? 'Ambiguous vendor identity' : 'No valid vendor URL/identity; original query URL returns 404' }); continue; }
+ const item = candidates[0];
+ doc.plan.push({ id: row.id, sku: row.mfr_sku,
+ before: { image_url: row.image_url, all_images: row.all_images, color_name: row.color_name },
+ after: { image_url: item.imgSrc, all_images: JSON.stringify(item.imgSrc ? [item.imgSrc] : []), color_name: item.colorName },
+ evidence: { url: item.url, fetched_from: item.fetched_from, fetched_at: item.fetched_at, html_sha256: item.html_sha256,
+ identity: row.id === 846 ? 'Existing stored URL proves same A121-866 core with numeric collection suffix; mfr_sku unchanged' : 'Exact existing SKU found in current vendor colorway links; mfr_sku unchanged' } });
+ }
+ doc.unresolved = unresolved;
+ doc.plan.sort((a,b) => a.id - b.id);
+ fs.writeFileSync(path.join(dir, 'plan.json'), JSON.stringify(doc, null, 2) + '\n');
+ console.log(JSON.stringify({ ready: doc.plan.length, unresolved, null_images: doc.plan.filter(r => !r.after.image_url).length },null,2));
+ } finally { await browser.close(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11241/kaolin-vendor.html b/DW-Programming/verification/tk11241/kaolin-vendor.html
new file mode 100644
index 00000000..de8dcce6
--- /dev/null
+++ b/DW-Programming/verification/tk11241/kaolin-vendor.html
@@ -0,0 +1,3074 @@
+<!DOCTYPE html>
+<html lang="en-US">
+<head>
+ <meta charset="utf-8">
+
+<!--
+ This website is powered by TYPO3 - inspiring people to share!
+ TYPO3 is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.
+ TYPO3 is copyright 1998-2026 of Kasper Skaarhoj. Extensions are copyright of their respective owners.
+ Information and contribution at https://typo3.org/
+-->
+
+
+<title>Kaolin Earthen | Versa Wallcovering | Versa Designed Surfaces</title>
+<meta name="generator" content="TYPO3 CMS">
+
+<link rel="stylesheet" href="/_assets/07d0a465f98edc0af823532f8bdd8abc/Libraries/Basiclightbox/basicLightbox.min.css?1788444593" media="all">
+
+<link href="/_assets/vite/assets/styles-main.css?b=1789083790" rel="stylesheet" >
+
+
+
+
+
+
+
+
+
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="handheldfriendly" content="True">
+ <meta name="mobileoptimized" content="320">
+
+ <!-- Google Tag Manager -->
+
+ <!-- End Google Tag Manager -->
+
+
+
+ <!-- TODO: convert these to proper asset inclusion -->
+
+
+ <link
+ rel="stylesheet"
+ href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css"
+ />
+
+
+ <link rel="icon" type="image/png" href="/_assets/static/graphics/favicon/favicon-96x96.png" sizes="96x96" />
+ <link rel="icon" type="image/svg+xml" href="/_assets/static/graphics/favicon/favicon.svg" />
+ <link rel="shortcut icon" href="/_assets/static/graphics/favicon/favicon.ico" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/_assets/static/graphics/favicon/apple-touch-icon.png" />
+ <meta name="apple-mobile-web-app-title" content="Versa" />
+ <link rel="manifest" href="/_assets/static/graphics/favicon/site.webmanifest" />
+
+<link rel="canonical" href="https://www.versadesignedsurfaces.com/north-america/products/product-detail/kaolin-afv29-usa/avf29-128">
+
+</head>
+<body id="page-5" class="page page--5" data-current-region="north-america">
+
+<!-- Google Tag Manager (noscript) -->
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KBDSZX2V"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+<!-- End Google Tag Manager (noscript) -->
+
+
+
+<div class="page-header__region-notice">
+ <span class="page-header__region-notice-line-1">You are viewing from North America. </span>
+ <span class="page-header__region-notice-line-2">Not correct? <a href="javascript:document.getElementById('region-selector').setAttribute('style', 'display: block');" data-fancybox data-src="#region_language_selector">Change your region.</a></span>
+</div>
+<div class="page-header__wrap" x-data="{mobileMenuOpen: false}">
+ <div class="mobile-masthead">
+
+
+
+
+ <h3 class="mobile-masthead__title"><a class="mobile-masthead__title-link" href="/">
+ <span class="mobile-masthead__title-text">Versa Designed Surfaces</span>
+
+ <img class="mobile-masthead__title-image" src="/_assets/static/graphics/logos/versa_logo_black.svg" />
+
+ </a></h3>
+ <button class="mobile-menu__trigger" @click.prevent="mobileMenuOpen = true">
+ <span class="mobile-menu__trigger-bar"></span>
+ <span class="mobile-menu__trigger-bar"></span>
+ <span class="mobile-menu__trigger-bar"></span>
+ </button>
+ </div>
+ <header class="page-header" :class="{ 'open': mobileMenuOpen }">
+ <nav class="utility-menu">
+ <ul class="utility-menu__list">
+ <li class="utility-menu__item utility-menu__item--region">
+ <a class="utility-menu__link" href="javascript:document.getElementById('region-selector').setAttribute('style', 'display: block');" data-fancybox data-src="#region_language_selector">
+ <span class="utility-menu__globe-icon"><svg class="icon icon--globe-icon" id="Group_368" data-name="Group 368" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22" height="22" viewBox="0 0 22 22">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_801" data-name="Rectangle 801" width="22" height="22" fill="none" stroke="#767676" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_367" data-name="Group 367" clip-path="url(#clip-path)">
+ <circle id="Ellipse_10" data-name="Ellipse 10" cx="10" cy="10" r="10" transform="translate(1 1)" fill="none" stroke="#767676" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_264" data-name="Path 264" d="M11,1a14.5,14.5,0,0,0,0,20A14.5,14.5,0,0,0,11,1" fill="none" stroke="#767676" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_10" data-name="Line 10" x2="20" transform="translate(1 11)" fill="none" stroke="#767676" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg></span>
+ <span class="utility-menu__region-language-wrap">
+ <span class="utility-menu__region">North America | </span>
+ <span class="utility-menu__language" id="current-language-name">English</span>
+ </span>
+ </a>
+ </li> <!-- end .utility-menu__item -->
+ <li class="utility-menu__item">
+ <a href="/north-america/company/contact" class="utility-menu__link utility-menu__item--distributor">Find a Distributor</a>
+ </li> <!-- end .utility-menu__item -->
+ <li class="utility-menu__item">
+ <a href="/north-america/partner-portal" class="utility-menu__link utility-menu__item--portal"><svg class="icon icon--portal-person" id="Group_366" data-name="Group 366" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="20" viewBox="0 0 18 20">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_800" data-name="Rectangle 800" width="18" height="20" fill="none" stroke="#767676" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_365" data-name="Group 365" clip-path="url(#clip-path)">
+ <circle id="Ellipse_9" data-name="Ellipse 9" cx="5" cy="5" r="5" transform="translate(4 1)" fill="none" stroke="#767676" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_263" data-name="Path 263" d="M17,19A8,8,0,0,0,1,19" fill="none" stroke="#767676" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+Partner Portal</a>
+ </li> <!-- end .utility-menu__item -->
+ <li class="utility-menu__item utility-menu__item--close-menu">
+ <button class="utility-menu__item-close-button" @click="mobileMenuOpen = false">Close Menu</button>
+ </li> <!-- end .utility-menu__item -->
+ </ul> <!-- end .utility-menu__list -->
+ </nav> <!-- end .utility-menu -->
+
+ <h3 class="page-header__title"><a class="page-header__title-link" href="/">
+ <span class="page-header__title-text">Versa Designed Surfaces</span>
+
+ <img class="page-header__title-image" src="/_assets/static/graphics/logos/versa_logo_black.svg" />
+
+ </a></h3>
+
+
+ <div class="global-menu__wrap">
+ <nav class="global-menu">
+ <ul class="global-menu__list">
+
+
+ <li
+ class="global-menu__item global-menu__item--with-submenu"
+ :class="open && 'open'"
+ @close-menus.window="closeMenu()"
+ x-data="{
+ open: false,
+ toggleMenu() {
+ this.open ? this.closeMenu() : this.openMenu();
+ },
+ openMenu() {
+ // Close other menus before opening.
+ $dispatch('close-menus');
+ this.open = true;
+ },
+ closeMenu() {
+ this.open = false;
+ }
+ }"
+ >
+ <a class="global-menu__link" href="" @click.prevent.stop="toggleMenu()">Products
+ <svg class="icon icon--nav-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_374" data-name="Group 374" transform="translate(10.246 6.123) rotate(180)">
+ <g id="Group_373" data-name="Group 373" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+</svg>
+
+ </a>
+
+ <div
+ class="global-submenu"
+ @mouseleave="closeMenu()"
+ @click.outside="closeMenu()"
+ >
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">Explore Products</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/all-products">
+
+ All product search
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/customs">
+
+ Customs
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/digital-studio">
+
+ Digital Studio
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">Brands</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/brands/versa-wallcovering">
+
+ Versa Wallcovering
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/brands/invinci-wallcovering">
+
+ Invinci Wallcovering
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/brands/volterra-wallcovering">
+
+ Volterra Wallcovering
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/digital-studio">
+
+ Digital Studio
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">Technologies</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/technologies/circon">
+
+ Circon
+ <span class="global-submenu__link-description">Bio-sourced, carbon neutral, recyclable</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/categories/evo">
+
+ Evo
+ <span class="global-submenu__link-description">PVC-free</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/customs#c311">
+
+ Fusion
+ <span class="global-submenu__link-description">Integrated design</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/sustainability#c112">
+
+ Second-Look
+ <span class="global-submenu__link-description">Recycled wallcovering</span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">Categories</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/categories/vinyl">
+
+ Vinyl
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/technologies/circon">
+
+ Bio-sourced Vinyl
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/categories/evo">
+
+ PVC-free
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/categories/wall-protection">
+
+ Wall Protection
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/categories/performance">
+
+ Performance
+ <span class="global-submenu__link-description">Brief descriptive line goes here</span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+ <div class="global-submenu__title-spacer"></div>
+ <div class="ce-container">
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c13 frame-textpic margin-top--none frame-header-size--h100">
+ <div class="frame__inner-wrap">
+
+ <a id="c13"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="ce-textpic ce-gallery-center ce-gallery-above">
+
+
+
+
+ <div class="ce-gallery" data-ce-columns="1" data-ce-images="1">
+
+
+
+
+
+
+<figure class="image">
+
+ <a href="/north-america/products/technologies/circon">
+
+ <img loading="lazy" data-sizes="auto" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_e65793542c.jpg 200w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_6933c1f45a.jpg 300w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_371a8395d1.jpg 480w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7c572dc27.jpg 600w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_2c49e66949.jpg 768w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7a1604369.jpg 1024w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_ecd29cb43a.jpg 1440w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_9fd1d0db24.jpg 1920w" />
+
+
+
+
+ </a>
+
+
+</figure>
+
+
+
+
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+ <div class="ce-bodytext">
+
+ <p class="body-text-medium"><a href="/north-america/products/technologies/circon">Circon: Discover the Technology</a></p>
+ </div>
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c13 -->
+
+
+
+ </div>
+
+ </div>
+
+ </div>
+ </li>
+
+
+
+
+ <li class="global-menu__item">
+
+
+
+
+<a class="global-menu__link" href="/north-america/sustainability">
+ Sustainability
+</a>
+
+ </li>
+
+
+
+ <li class="global-menu__item">
+
+
+
+
+<a class="global-menu__link" href="/north-america/innovation">
+ Innovation
+</a>
+
+ </li>
+
+
+
+ <li
+ class="global-menu__item global-menu__item--with-submenu"
+ :class="open && 'open'"
+ @close-menus.window="closeMenu()"
+ x-data="{
+ open: false,
+ toggleMenu() {
+ this.open ? this.closeMenu() : this.openMenu();
+ },
+ openMenu() {
+ // Close other menus before opening.
+ $dispatch('close-menus');
+ this.open = true;
+ },
+ closeMenu() {
+ this.open = false;
+ }
+ }"
+ >
+ <a class="global-menu__link" href="" @click.prevent.stop="toggleMenu()">Resources
+ <svg class="icon icon--nav-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_374" data-name="Group 374" transform="translate(10.246 6.123) rotate(180)">
+ <g id="Group_373" data-name="Group 373" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+</svg>
+
+ </a>
+
+ <div
+ class="global-submenu"
+ @mouseleave="closeMenu()"
+ @click.outside="closeMenu()"
+ >
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">General</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/resources">
+
+ Resources Home
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/wallcovering-calculator">
+
+ Wallcovering Calculator
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/resources/warranty">
+
+ Warranty
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/product-use-advisory">
+
+ Product Use Advisory
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/contact#c170">
+
+ Ask a Question
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">Downloads</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/resources/product-declarations-epds-hpds">
+
+ Product Declarations - EPDs & HPDs
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/resources/hanging-instructions">
+
+ Hanging Instructions
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/resources/care-maintenance">
+
+ Care & Maintenance
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/resources/cleaning-disinfection">
+
+ Cleaning & Disinfecting
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+ <div class="global-submenu__title-spacer"></div>
+ <div class="ce-container">
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c242 frame-shortcut frame-header-size--default">
+ <div class="frame__inner-wrap">
+
+ <a id="c242"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c13 frame-textpic margin-top--none frame-header-size--h100">
+ <div class="frame__inner-wrap">
+
+ <a id="c13"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="ce-textpic ce-gallery-center ce-gallery-above">
+
+
+
+
+ <div class="ce-gallery" data-ce-columns="1" data-ce-images="1">
+
+
+
+
+
+
+<figure class="image">
+
+ <a href="/north-america/products/technologies/circon">
+
+ <img loading="lazy" data-sizes="auto" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_e65793542c.jpg 200w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_6933c1f45a.jpg 300w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_371a8395d1.jpg 480w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7c572dc27.jpg 600w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_2c49e66949.jpg 768w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7a1604369.jpg 1024w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_ecd29cb43a.jpg 1440w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_9fd1d0db24.jpg 1920w" />
+
+
+
+
+ </a>
+
+
+</figure>
+
+
+
+
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+ <div class="ce-bodytext">
+
+ <p class="body-text-medium"><a href="/north-america/products/technologies/circon">Circon: Discover the Technology</a></p>
+ </div>
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c13 -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c242 -->
+
+
+
+ </div>
+
+ </div>
+
+ </div>
+ </li>
+
+
+
+
+ <li
+ class="global-menu__item global-menu__item--with-submenu"
+ :class="open && 'open'"
+ @close-menus.window="closeMenu()"
+ x-data="{
+ open: false,
+ toggleMenu() {
+ this.open ? this.closeMenu() : this.openMenu();
+ },
+ openMenu() {
+ // Close other menus before opening.
+ $dispatch('close-menus');
+ this.open = true;
+ },
+ closeMenu() {
+ this.open = false;
+ }
+ }"
+ >
+ <a class="global-menu__link" href="" @click.prevent.stop="toggleMenu()">Inspiration
+ <svg class="icon icon--nav-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_374" data-name="Group 374" transform="translate(10.246 6.123) rotate(180)">
+ <g id="Group_373" data-name="Group 373" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+</svg>
+
+ </a>
+
+ <div
+ class="global-submenu"
+ @mouseleave="closeMenu()"
+ @click.outside="closeMenu()"
+ >
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">Inspiration</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/inspiration/lookbooks">
+
+ Lookbooks
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/digital-studio">
+
+ Digital Studio
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/digital-studio#c352">
+
+ Digital Inspiration Gallery
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/products/customs/customs-contact">
+
+ Start a Custom
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+ <div class="global-submenu__title-spacer"></div>
+ <div class="ce-container">
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c243 frame-shortcut frame-header-size--default">
+ <div class="frame__inner-wrap">
+
+ <a id="c243"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c13 frame-textpic margin-top--none frame-header-size--h100">
+ <div class="frame__inner-wrap">
+
+ <a id="c13"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="ce-textpic ce-gallery-center ce-gallery-above">
+
+
+
+
+ <div class="ce-gallery" data-ce-columns="1" data-ce-images="1">
+
+
+
+
+
+
+<figure class="image">
+
+ <a href="/north-america/products/technologies/circon">
+
+ <img loading="lazy" data-sizes="auto" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCADIAMgDASIAAhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAABQYEBwACAwEI/8QAUhAAAQMDAgMEBgUGCAwFBQAAAQIDBAAFERIhBjFBE1FhcQcUIoGh0TJCkbHBFRYjcpXhJDREUoKSlNIIFyYzQ1RVYoWi8PE1NoSywkZTY3WD/8QAGgEAAgMBAQAAAAAAAAAAAAAAAwQBAgUABv/EADIRAAIBAgQDBwMEAgMAAAAAAAABAgMRBBIhMQVBURMUFZGhsdEiYXEGMlLwgeFCkvH/2gAMAwEAAhEDEQA/APlrh9iMzNVInN/oRFyPZ1ZVkA+/mPfUq53F2RHLQaQ02v6CQgZSO7bwrWXKCLWi2IQlOgh2QofSWrOceQHTvya7PhpBXoUlY0JUPhmkXrLM0Hu0sqDfAlohvOMqmvKRqTrSEEFOOnn/ANqt7j6FHjeiWSpjToVKijIHP26r7gb8nlLSVJLbiEBAIUCkjuI5jzqyvSkhCPRA92ZOkSYuR0B7SvL8Qqylj6Cd/wB8fdHpMPBQwFT8Mqd1aG4rK1EAFI/GjtvlsO2xltDOheP86D7XPp50tS8GBGSeRTijVjbCYDatYKSCAMeJFeuqq8UecpuzdwgH2RBeYClF3BJ1Hn5UJbUkrDefaP0R31vHfZk291SmgmQzlJOTvjqKjQkqcukcjPsAqPkKFCOWVgs5JxujZDji1La06va5Ab86sHgzsI1sbXLQpxx/KVhYyQgHHWlm2MIddeXpQkAqBVgc6ZoCEfk1twrCQlOSc9M5qalmrA1e92b8Pr9VclMug+y5tnOcb4+GKZL29p4ZjSEI1bKwD3a6XHpTTgYIAS6G9Cz34Jx8DTBclD80beSN+ePPNZuIhmkmOUpWsa8Oypku3NtaiWitWG+h3z76O2ya/Gbcb9XWqM4kkLS2fZyOee6onCyYzFj9bdaS0pDiiVHoMjeuFnuC4bU+G88DEdUv1Q5zpBzt5E8h099ZUsOnKT+426l9LEpNwDT8dgJBTIXozn6J2waC3yDMcnSEBBCdR9vpjv76lWxpUi7RgfoxyXF56Y5D7a7yJsVqTPdlrwlg68YzkY3x3mtTCxyRQlXf1uwuKjOsWINagsB1ajgY3OKR70whDvrbasF7IcGfrJPP3gin6VMbXYe3bWGg4gqb1ncE8h51XtyC1oCskbnHn1rTg7PUVs2cJDYVYEkjYuKz76JcFQAWFOa0FCXNwRudhtQ58vItwivNFtCPaUpQI69/vonY3DHtkkNHTzIIPXTV6msbHQ3uGbd6nIkzIT7WH45JSoKOFJ3I947qXVAvXi2Nj6Rms/8AvFaSLk8jcLPb5BK+p8fwqdDbZZvkR8uDAlNBtJ6e0nPmaB2dm2Fz/TZlwemaNaW7a+5d5qWYyXtaUlX01AkgY677+6vkziuRbl3BxVv7QsnOpSuZ/wCvtq6P8Ki8RvzkFmw5qjjtFp1+zle4yOewxXzzKeJyBskdM7CsT9NYN08Mqjb15ch7jOKzSVNcjQrbAx2Q3yM71lbN65RSzEaSt0Aq0hQyrG+w6nwrK9PdLdmEWdxNabTJ4qfcYR2bhIeCGV41YOFpB8Rgj7KlcSWCDbYbS7owzGlqBCChehb7ecatO4StO2pPvqv4Mm5InQbi8p0toONSNz1PLngmnb/GI5Ks6+GZ9qgzLap31jtlMAS+2IG4e5hPPbFY9TD1oOCi7pb9R+lUjJSb0bGHhCx2tdwhqTJW2+tOUJJwVDvx3eIp+9LNvLHoklJCTqMuKBvz/SVW3DYcfk25lkJQ60pfZnUAFIxzHjy25VZHpJcmJ9FEj1gHaXExq3/0leexil3/AA7cv+S9zdoTz4CppbRlKPa+ybQ+nQhBCRkY3oo0VJs4DZKSFbEHHWh89wPMhDwAGocvCtGJi0tmC0kFskdmRzT1x417lxbPMqSW5JZcK5jLPQrCV+Ioq2hiCCsuanF52647qBgORrqyJGUK1pO/WiPZh+U88hRwlOoDHPGKjIkc5tkuS24mI6NZ0Smy5gbbjfFHodyb/I7UbQVlTKcqJwBsDmlizpcfnKjl3CBqVhath34ohGbU04hoyh2TYSgltORgAZ86pOOli8Hd3GaPGWv1NvfMjceG+M/jR26sKtduU+XS+hrSEgjGxOKCz5DalxXGVAo0HSRyxnlWS55ELWhztEkjmcjnSfZ5g7m1Ya7ZLZlcKSVAltJUchexTuOfnQJUhJuTDQcGhLyCCPMUDiypMm5tssKUhUjDa0gnCh4+HWpnE8c2adBcS52qHVbKIxpKSCfvqscMoyJdbRjneL1HiOrix2Uh5xeta8YGT18TS7cZsSQ0gIcQZRCm5CcHJz18a1Ej124OOOpQVKaVjHTCTilpE2M3fAJJKk5IUlB35fOjQp9AVzR2UTEjo7JxSg0B7I25kVl4ZTHYiIIyUklWep2JrpODTiW3I/6FtxzskJWvkrc8/Gol0EtlDTcspJGdCtWTjbnRWlujot7Mi3aV28N1t1KUpUnBIoVFn+ooVGZGtp1PfulR2z+6pLSFzIsxKlYLSgEK8M9a5x7alLjTjqtWFjONhsc799MJK2oBt30IlwU80pC3tSNQyCrbNFopEvia3aHNvWWt/HWKi8RKcmRsJQNTSi4Mc9ON/nXvDTpVxJbUgfyprf8ApCqSX0Nkp3lYtL/CM4Oaut5cvKXhHeaaUgjSB2qskgqUe7lXy5LtUkhRTpOFbIORt378/vr6d9N8TiyZeXpDcRqOwhat5ElPZKAPdz37vuqlb7Ghy3coY9RkkaVhLnax1qHcsbp8NQ99ea/T9adPDqEpX/GtjX4pTU5KUVZ+4kQbfKbkJeKEYQQd8HB8vCsqYQI8jX2yFICsKTq327jyNZXopNvUxMvUmwXY8Zz9L2mFkgDOw8KYjamnYSZgYKnwoKQopUkKGcHrjahSIy3uE0y3Q24+lZ0OIyCEjkFdCfIcuZ3oyLiqHwy2hS3m33HQptHZZTkc874x7sHelazbayvW9glJ73DtlhqRLiR5mppcclCMAqSkczvjI3J599WL6RUONeiiWlUlTyPW4pSSc4yvpVb8PS5c91kqlrUo89JwcjmNzseXnTXxdLmr4CnQHHO3R6xELahzPt75NefxcJSxVHXaUfdHocPJd1qJdH7FdstKk25K1KwvXjJHOpluiIjyW3yCopBIPLpjlXim/V4TTaRqKCCfHvqdDk9vdExw2EtBnUk9TmvYNnnLbMhXZDshxmSACWDheO4nn7j99T7EFPSHkkDAYV+FayD2b77TYxlJQQetSuFlMtSX1vq0J7PG43JzXN6HWs7gaEy6u7kHUpB1Y2pmfSzBiRH5TK+xKyl7TsoA5wfGvOFojgviFnAQdePHY1PvxeTcXkO+1GQpKgkgEA4GD9pqsmnIslJKxvco7UN9hMcqLa0at1Z61tZGknh58vpCm3JOUg+YGftryww3ruw6A92ZZdShokZAQdzt1PdRl+MyplNkiLRqGyTnIGNzkjqaCouNwkpqVkdIkFcX1ZbTaWzk4TvscbE+NDLtGM1C2HFlDjQU80VHmpO6s+YzXSG9Jf4ptynnlHDLjejoFDnt38t684g7RV2cQ2pKkhOElB5DG48+dT+3Uqk27EfhlRdvQBUThtfM+GPxoCiCqRxGnQpIWXCnB6nBovYlPwpa5Qjl1IQUA4OATjnjyrpaoqVX9Eg7udt7Qz9EkGrZkrs6zb/BBvrKURF2l0kLVhfaJGQM/wDaoUt9c2OEBKlqiJAWobkg7DxJ2ovxiGk3B1BQdZZTggeBobwqvSmc8ElS0pSrnzxk1ZRvEhzyu/M5phqiWl9KwQ84orUOo7hXFc5JfgRm2QEuElaj0IHIe/rXR24PqeE15BKUK1JQnYHyqC+6l2WzKYSQkSNQSrmMg5G3jVra6lb6aHtzWmPNGgbjc+Oah8LKCeJreVEJ0yG+f6wqUpLk2aFOgYCcnAxgDpXnDjEdV1iKeUAv1poJ3x9cVST+l/gvl1RYXp7XxE1xD2bsguxX1L7BmMVAgj+eefXpVEXRqc64EzXCykkDSTjHXl1r6x9Md2iW79BI7NLz6lJaKk7A56npvgV8sXx9dxkuvPoUzoUUlGkAp35YrzH6fqSlQSy2S59TX4pCEXfNq+QuzmEJJaS8lQ54HInv86yusi3SVoDzCQWyPZUTnfPI45HmfdWV6iL03MBv7jfZriy5aGY0uMhsMN9j6ukk9N1nG+Vb9fwrjeIzKYK5URC20hCdKdZIBCvpAK3AHLuqDbUocaeA9la9TmT/ADhud/H78UxBDZ4dUl9ZSt9rCE9QCcknwHxJwORrNlHs5XXUYU83I34NlrZisuiHqUo5OEk5I3BHdkH4U88VqSfR1MntxuyX6xG59/aVXNl7YtrQypSUp0aSn3jNNFzkLHA0+MpThT28dRKunt7UhiKN8RTkv5R90auFqvu84/Z+wsMS3GXBIdQXCcggnGx7qkQVqbltPtY/zakjV7iKiXIhERhw5IKBy99TbfIck25qOpCeyA6Dc799eke1zGWrsF4MZcpMqS57WhskHvP/AGozZ4VtMFKn1J7cnUdyD4CoNlksMwHoRQGypJKVZ+kTUyApBkswwD2juez7jjpQl+6wWV8lzW0SF2++OOzChMBLykpcxlQByEnbpUviBL0qfMET9MwEJUVNjUMaRvkdKFuRprz70ZKVkhZBB2Gx7+VO/CjabLw/GSY6S+6pS39/q6iAM/8AXWrtJK/MFm5XFvhh5IstxbD4Q4op0BJ3zpro8xJt8JqQ0+pDi/bQtB3TvjFR7dFctkqbHcaISXA42NsFCslJ+z7qNcRtOHhCC+2kJcUF4HP6/Kok/qsTHa5EbhS5FtZvToBQhSytQI1HIKTgeeNqI8OwkyWZkwtrCUNKbSFpxklO5+z76F8KR5EyE0lTh1lxQSFHkc93Sj9sauSIS5MdIdguIUVAuDA5gkb7EUvN7/YNFdHuRbRK9Ut/YJYCgokqOrBJNLk1SIt7kXhhwGSlwLDSj7OcAEHv60YLy0zoTKACiQ52axjvxgjxrnO4cdduchJdQGtRxgnVy5csZotJ/SilVWkzrDat99C7zMbUywoBhLalbhY5nI+FKEFLkS43KGHSEIWWwUkbgKOPhT/brMWOHkNsqUrS64rCu843pbvUWNpalNgB9YU06B9bScpV54Vj3URSWqBWbsDbu2lPDrb/ADSla05A/VoRbphXbHY6GEFKlnKiMqxgU0zo4PBDSsf6ZR+0kUN4btrBguvpWsdm6dtscga66y/5LL92oJgOMRFrbUnT2n18/Co9qcQ3ereFHAVLaA89aaIMLCZs2FIZRhCyWXCkZOd9PuoTbWi7fLY33zGj7gsE1WfMvHWJbH+ETbTLuS5Mm6BMJOUdhkbLJ226jr1r5+utxjxJQbt8d+ShP+ccWNAVv9UDkPPNX56a3HW7u62yy28hxSlZcb1kY7gaoe/OKVkyHVr66QQB3cq89wSMlQinsavE6cHJvmDhOjuPAxmXGkqI1taskjO+DWVGdQ1hS2U7AbhStxt4Vlb+S+xh5YPca4zcIQELCtWXBkDmgDOoEd2OtTUetTnHHEhBCjuO7fkB3UAjSkP6klrSjGlSxzIBJ2PTOwz4UQhvtNpDKHOzUr2VHuGfjnl5UlKDX5CKaTTDLTcpHZNNbbE7EAkeJozfXQrguWOzwpSo5JJySNfWofDsZ1c/tEu+suJc1vApIOkjuPfjwpj4qtqjwTNdABK34+lWnGxcrPqTSrU4v+S9zUwt3Qm/s/YRbigfk6Jnlpwfso3w3DZFuaeyoEgpwTtuSKCSg4yygylakJISMbgUbjaXuHgEKBSVbHw1V6JvQy0ugSsMkuWWVFlNoS+0khtZSAXEg8/P7+dT+HIipN/iL05THQpxR+A+JpetS1LvUNhWClL6QQeRFPbEq3WwFmKkqlOKKljPf0J6eAFUa+rMWcrRyIKW1EYt3CVMkJaYYUtLmVYx1BP4Dvom4xG/NxqSv6KEagQOeTt99LlyjMrtqnGnO0E1hRdSFghLo3x4USYujq+Ho8NplPZKjIClEaiQUg+6guVo3fUnJeVkBrq/2zUZCk7tILerv9okD40Wu6G3ODbYy2pC30gKKAckA5510dtCQbc07hAkp1OE7aQT8ql8S26Pb7U6/a1F1wFJQ3qC9tQBG2/I1SM3LQvKKjY34ZAhcJuSJCBltxZVpAJxkUFtUhNtXPbDilxri4rs28Y7NStk4Heevu7qNWuYy/wpNYlJSzJR7brAVlQSSnBHePupWcU2q8x0jV2fbtqSD5ipTbWU6yTuFLNbHHLy248hSW4S1a8jbtMbJ8cc6nNz40CZdHnmlPOsguNJTzVtuPDzqTxBd5DUr8nsN6E5ClOczvvt3ULduEaU1HgaHEyWNSFqUBhxCue/v5GptlSRW7k22TGLhFc4WQp1wMuyGSoNt5JST3eGaT58JaorbqgcLUUoI7xj51NYVK9QiNhltRSyEFS143ClD8KPcRMIiRba2zj9FkgjfJ2JPjvUTbjJl6eWyFi7Q58GylibgRGE6iEkEHf7Tuai28Mu2Cb6utKkHUBp6HTRPiOc87bnm5Kg40pOCNIBINJbtxdiqLEL2WH0dmtojbPLI8fGjxjm/IHNZAu6KcbIYyc7HOaKxUxIl6iuDZ1cloJSOg1p5DoKE8RQ5EAsuSE4DgwMHO/PB8alxCiXxJAOFJHrDQ8/bBq8kstyFJuRZ3pkdgszpL0t146yoJSAcfaNxXz3elxlOurjNOkKzpS4nUQc9/dX0j6TbSmYqQVuBsKUSCdsnfavn+9x22Vq0KVgczyB99ed4NJKmkbfE4t6igo4cKUNqS5jmgEZ2rKK6O0ZaU0h1QcUoKA31AHoKyt/Mefk9SVaoapKU6H8oUE7acAp1Zzv0zTAxY8NNqejnJOArkDgnHwxU2yMx40UzZbiAl5YZJUDuSNsdwFNHCsKfc5648JaXI7ThQ8OYVjYY2wR8qyMRjMt3skNUcI5uze+3+zbg6yKhz4a1LQlqUFNhwJ9oKTuAVdxG4p39KUMRfRhNfQ4CfWovtD9eiHCtmMFpcKQlYcbdKW0lQwQeRGeW3d3Vz9OKmovo2dtqWnTIlyGFtaUEpVoUCoZ7wDnyzWG8R2uLpWd/qXubsaXYYOaemnl/WUFLfKmgl7205GxrVie8lRioUSy6QdBHIju7q5RkIXbkB5WDrIBzvXV5pEdbS0I30kgnc17nRHmtWE47ggXqIt1QIK0rBSdiM4604RFMSZcmS4C2rsytAz1GBVXz1qkuxmHFFY9vIx0x86aOEJSkvepynCW32FCMo89X80/HFCnPWxVTSnlY4cMqiKva0yZAYaUFEqAzkjpRduNEQ+gockPx2dCU76NSUgDl05VXFoanKuTi4aj2iApY6jAGSCD0xViybq7bbRaJL0Jt9akpd7EjZ5teQQO4hQ/6zQKkrTyp7oOpxuk1qNF4lMT1xJDCtgk7Hmk55EUNuDiXLQqVFJ0BwIUcfROdwa3u063IXFfYS0wwpvJUAEgnP39KK8Mx2W+HXiXGlKdkBwt6gVBBISCRzGd6QVdRvmG5U9ItCpAtku6XaJ7CtK1hCnQPZHfUvju2x7VNt0i2rJbccKHATqKVJIO1WULOlh2IjWhEhaVFKds4A5jvxnn40EvtjQ8h2NKSlI7MuMqHNK07gjzwR76JHGRur7AsjYBgapN0cLiwtxxlwbjf6JpWjXBmHxSkKZD5StQLahgfR/7Gm/hiHi+hZTyaX8Rj8arF7WOJ56mnC3JamuN6VAkZ6c/DHL3VZV4pNsFXmqFnLYdbk5HXEbnyEtxG3HuxcKEHQ2DnCiPPmfGuV7ju21mOwqUH2laijCcBPLlvyNLb12UuEu2yUKLDhCnSTg5zvjw/fU9qW9dYhjsJDnqSQG05wVBW2keWOtFtmimtwlOS/df6SLEb9bt11RIUrs0u4bV1Tk5IHwqB+SmGFMSNCnCHR7SgM5G+1EHtUZqXbELSpYRqWlOMqdWc/BIAHvoO7fJUibAZUEMsAkOjGMqA69w60xCV9EBlazf3B3E3b3JpbJVlaVF1CcdQDlI91QOHXFL4jtyenrDf/uFEOIX+zngtgDA1BXQ5oVw0sN8SwCvIAkNjbrlQAojf0NEJapn0D6VJTMKKW3Wm1u7hKdGrlXzPxnPfkynUvANp06UNAjbBySAK+sPSZDtjDD7swaygkjff9xr5l4qchS5ZMaKwlsHOyRqz3k8zXluBNSWxv8AE19C1ArURXqMcIX2aSn2sH2iDuR5bCsryUt1ZCUSVaE+1hZzn34+FZW/aa5nm5U1cxSpEGUIM9rPq6yC2VZAV3Z7qtH0cuLbsPrTUp5kuLUpKi6UoB5AkJBJ2GMDOMVU0p+Z6xIQtD0qS66syVlBwk5woAdMfuotwndpEa76ECVD7AJCG1qV9HJwRnGPd1NJYvCPEQyrQ0cLjHB6n0Vw/HkulC5anlhWFNuIIU04PBQAPuUAagelHjLhSd6PrpbI92iOzoj7XZtocytKg4ASD1xk/GhhlTeIeGjbk3Rxh0FK23U9FDcZHMg8j76QJ0kjiCPbbxCYc7FCm3mVpCgg5BCknngjke6s+nwWXaRqVJbPS3/g7iMeqlJ04LdcxEmyUvID6B7ZV7SU9DzB9/Oo6Lwsuk9mFkcvb2x86tV3hjhpmBImwbJFU+GlrQFFRGoAkbE0pQb1aHoeiVwtbXG3UgqLGWyTjn4GvSwUpK0TDcXFJNi9bJDk29oCIyitDZSUBJynrkjupqvavU7dAaTFcbmtISt0bAowdj7xg1zZlcLtPJfask5t5AIbWJRBTnmAc8q2uNygvKVJg25xmXlJ7Z2QXMAdMeQoc6FWck7ApUk3e5ysPETNumKmutOJCQoEHGBqBG/hTjdr/FiRLWy6FrLWWWQggjQrKsjvyeXvrhHh2a4xg7Js8LtHEAOpLeM/urrKstimNNtPW1tSGwAkJcWAAOQ2PKl6tDtZJt7BnCpmUr7ApHEDkd5V2lhwOsRXPVIykEpbfWUhKu4kJKtz3Gn30JxLZd57iZMlTTq2QkE7KXuCTvuoZAA6c6XItjsrMRcREElhakrLan3CMjkRvtjwojBt9qYJLNvYbWSCXPaLhI5HUTn40piMA6ieV2b9v7cYoznCSlLW2v8Akuq2GIjiKGt91ZdQ05HysEHKATjfw+2kDjv0hx2r3Li2+3PTltrS0kZ05J2wM4wM53O3KljiW6TLfLtQajiS1KWvtcp2AA23PXnjyorabtFjOLkxIMdp50YcV2QVq5c857hSMeG1Uldp2+7Q7KunK8dAe56SIlqubqGbasPadKO0dTrOQDsBkdNjmkqDeIl54qusy3uKUh99EkBWdlEDUkjpuDkdKfLlGs9zkesTLRBcXjkGQlOe/SnAzud8Zrg5b7QHg+m0QQ6kbKDQB/efGtClhnGFnv8AkRxUJYhNN+gv8eOohvNlhrWhxsJyeQ1DUM9eh+NKkHiS72YKC4yWi4faWk6ht1we78abOLOIkQCpKI0eQUtjUhaAUp3AGR5Zpfk3KNPKXHrVDKhyKFOII8NlUzg8JVjTUU72F5Q7OOW5GsnEj1yvDSJMOKJa19mZKSpHakHJyBtuMe0O/ltQR+7yrjxIuO2gpjtuqbSlK8pCNW+VD6ROwzRb1G1l0uIs0VKjncOvdf6dcjJajOGJFjxIyEoCSEM5OOf0lZPxpmOCkm7f3qUcm93qRpDbiJgSVkttjA3wB4Ad1T+FXownw+1AUsy2sZGfrpxTxwzGsi7TGU/aob7/AGY1rdb1EnvOa7Sm7fbJMeR+S4MJlLyVFTUZGrYg7Z58qopZY5XyGowloOPpQvztyfmw2IS5DTCtKnG1aklRJGnOBk+R6VQl/wCwiuOId1MOBecABaTnpqSefSrkv/H7l8WqNBbMJojBeSMOu+GoDYHuGKQPSK9BtvqYTbe1lyY6nXgGwnA1EJOM4BOCTgY2ztmsnAYeeGp2SNHGVVV52K4S9JLfaRltyVlzQWSPbz5Zz76yo0+Nc7LeW33oTsVzOWwRlCs89KgSFDHcSKytyLjJXWpju6dmO/o5OLanUorUpS9ZUrOo7k5z41Kv7bJ4dbuAbQHYhQoqCeaDgKB7+efdR3hjgLi6CyETIrC1BROoSEciOVdpnAfFb/Dsy3pgMFx+OWk5koxkjvpOlCXaSbW4/UnHs4pPke8ET09o2hGlOrI9k7Ejeo3pEZYb42gywMKkwilwjnlB9n4KxUrgngXjO3iMm4wYwLJGoplpOoe4ZorP9H3FVy4oRd5kmEY6Gi0mOlC9gTnOqmbaC99QTHlIYgvHtdSUIUVZ6bdaqu2kJjN5UnBHd0q5b16OOI50N2I1cYsVtxJQQhhSjg8/rCld30T3JGWk8QQ21I9kpVFXtj30WhJQvcHVTlawmdqkHZQ511K9TK9KvaCTimdPokvinMK4ktaUd4YcJ+z99EInojlIUC5xawc8wmErf7V+dMdvHqC7KRpa3giM2M8kgURblpHWirPo8bCEp/OVeRtkQx/eru36OmFc+KZA8oaf71IWsNXbBjMtGeYohHdCiD8RUxPozZI24vkp8fUUn/5VHu3BqLBGE2RxsvsAvSpK4IA5Z/nnfANVlKKROqVwFxw8hV/4dSFEqCXlYHIj2fjU1uSMbn41KtViHGcyEY0hiOiHHU4Jqka1OIUcJJSDkE5Bwem+d6YE+ilsjLnGjoP/AOO3AfeuhQqRZaDc1dIWkzEp+sK9cmAoO9M3+KeH040mZ8YKP71a/wCKdog6ONnMdyrcP79WzxLZWUVxG+49e5YKiQUJTg/risjuhIAKsVbVz9Byn5HbM8bR9ROSHLeoZ5dy6hn0GPgZPHEIbZ/8PX/fprD14QjZsBXpSlK6QhRXUk/S+ygcl4i8SBn62B9gq1FehaXHVqa45gah0MBwf/KoVw9EUdtxdwl8dwWVYBcxBX2YIHeVZ5Uw8XT6gewn0BvDU3XAWjtuzW2gFKgM4xQi63ZEzi9uN2oUBFUsAdCSM/cafLB6Gr2uKmTbeLLZNZVu24llYIB3xkKP2Gh030AccKv4vUe82dx0Yw2UuIBTjBHI86zks10Ot5WmD48lqBAW+8AUJBWQUHn4HNcbhcJT9kWuQ5qW7pUR0SMjCR3DpijvFfok9JU6GiLDg2tScjtFCekEgEbe0BXaf6KvSC7EDKLPHJGnP8Oa6EeNVcJZUXU45hM42Zbeiww0gISiSSUNgJB9kjPd3b1lOF/9E3H86I2hqzsFSHSveW13Hx8ayq0KUsiTFsZNuq3HYlN357SBrVnJ69OVdBf5GM9ooeyPrdaRhxDZQc/lV/8As4+VbjiSygf+KvH/ANOPlU97l09BzuK6jyjiGR2qwHl41Aj2uhAPzp59G9xclyyHXCtJSchRyKo9HEljzn8qvcsfxcfKnz0ZX2K7IcdYXcJcXQpB9XZCVFexAztgb99VeNcdZJk9wvsy2brNixwe0cbRnkCcZqpL7dFvXue42l1KS+dOUEHAAGcY99Opeuj4V6hbodpCgQHnv4Q/5932k0tO8DXJ99x+TxvdFuuKKlH1VkZJ8MUtPHSltoMU8DGP7gOm4PattfT6p6Z+dbtz3wpJ9vbT9U9M/OiiuDHGU6nOObmgDvjM/KhU2PaIS+zf9Id0KuoRDZVQu+T5P3+A3c6YVhQ7u+wlxCEBJKSNbyEkgY6E56VNFuvWokJY+kkj+Et8hjx86p7iW7uQLu5GtF+flxEoQUuvNIQokjcYA6UNHEN1PO6fBHyo6qVZK9wTw9NOxe3qN6CMEM8j/KEdx8fGqn9Ldo4tHFX5Si26ZLjOIRoMVwOaFJG+QDsfGgieIrkOd0+CflXVPEVy6XIf1UfKphVqwlfcieGpzjYcPRZF4plTG0mxyLe0jCluyFpZBA+rg4znuq0Rbr7pIIZ3x/Km+/PfVAp4kun+1B9iPlXp4juf+1R/VR8qipWqVHfYmlhadNWL8VbeIN8BjfH8qb7/ADrRVs4jIICY+4x/G2/71US3xBdFHa5D+qj5UVtk66ynAF3hLaepwj5UF1Zx5hFh4MsidcLjCmrjyApLrRwoJ9ochyI2I5UPfvkhJ3WsbY+iaZ7d6PJcu2RZaON7g2HmUuaBEZUE5GcA45b1pJ9GU5QP+W9xP/omflQljKl916/AXulGwiy+I3UD2nVbf7ppVvHEhfeEdx4htxxOrVkAgEd9WHePRdP0KKeL7go46xGh+FVBxpwlxLZJ3bOz1TG0HKFqbTjyIHKmKVftPplL3+AM8PGGsVfy+SwLBNk2u6hyM+4hDqVBQSsgHlzxTb+c0oJ3dWSAM+0etUvwlxPFZc7C7PPwlJThvQntUE56bbeVM/52WIHe9Sf7KP7tHp1p0VlaF6uGhVlmTLF/OeSkK/TLyNvpHurY8USDqHaryM49o95qujxbYP8AbUn+yj+7W3528P8A+2pP9lH92id8n/EH3CPUsJXFMkuNjtVhK0qB9o9MEH4msqvhxbw6cZvErbl/Bh8qyo75Pod3BdRjFxf6R7T+zmflW4ub6d/V7T+z2flX0AeGOFs4/MSwfZXo4V4ZUMjgCxY/UOK854xh+j8h/JU6eq+SgE3eQDkM2gf8PZ+VTI/E91jp0MPW9pPPCIbaR8KvMcK8NAbcBWD3CvDw1wwOfAlhHuz91Q+L4fmn5HZKnT1XyUmOML7/AK5F/siK9/O69Y3mRffERV2DhnhnGRwHYyO/RXo4a4azj8w7F/VrvFsN0fkdkqdPVfJRznFF1X9N+CoeMJB/CuSr9LV9JNrPnb2vlV6jh3hrO3AVj/q11Tw1w5jP5i2ED9WuXFsN0fkznCouXqvkoI3iQo57GzHztjXyrE3V4/6Gy/s1n5VfyeG+Gyf/ACNYf6tenhzhwHbgWxH+jVvFsP8AfyZGSfT1XyUILo8R/FrL+zWflW4ukj/VbMf+GM/Kr1Ng4cA34FsfuTXrfD/DqvocCWM+4VHi+H+/kzuzqdPVfJRqblJ6Q7Mf+GM/KuguMr/UbL+zWflV4fm/w+Dj8xbKD5VsqxWJIyrgazpHjt+NT4th/v5Mjs6nT1XyUk3cpo/klm/ZzPyrsi73NB9hizp8rezVyizcP9OCrNWwsliIBHBVnP8A151Hi2HfJ+TJ7OquXqvkqZHFnEzaAhMiGlIGABFbwB9tbfnfxOR/GYf9lRVtfkKxYH+Rtmz3YNeCxWYnbgmzH313iuG6PyZ2Wp09V8lTHiriRQ3egnziN1xcv95cBDn5MUDzBhNGrhTw/aCMjgqzVouyWdJ34Js9d4rh+j/6s5RqPb3XyU169MUd4llJ/wD17Pyr31yb/qVk/ZzPyq4Ta7EnY8GWgHyrw22wp/8Ao2z+/au8Yw/R+TJ7Kq+XqvkqD16cB/ErJ+zWflWflCf/AKnZP2az8qt0wLCdvzOs3214bdYAd+C7P7hmu8Zw/R+TO7Gt09V8lRG5T8/xOx/s1n5VlW7+T7Cnc8F2gDvrKjxnDffyZKoVv4+q+SqRx1cEDBcUNuewrs1x7PAyH3FHl9JI+40lyobCBsps4/3zUVCGwv2EhX9E1prg9AE+JT6FkJ4+uJSDls47wfmKmw+PbmvKe1jkc8KRn8ardlSiMIbjD9ZvNTo5cSglWjl9WP8AvqfCKJV8Qk+SLDVxtPUcqEVZxgEoHzriri25LGErYT3hCcfjVby5DwOexAHQkYB92ahu3BwIP6KGB7iah8JpExx76ItU8WzWE6lSI2e9eNvtNeN8ZzQrJlsLHPZaMfCqfdkpVseyBJ3w2BXMtMOAqW8jHisiu8Jok9/l0RcL3GaykldwjDp7QCfjUU8YrOCw6lxRHLXjbv3FU8Y0cuYDrenHR7H4V07CLpCSpawOgkK2/wCWreEUWQuIzXItpPGNwSrQltA1Hq9+6vG+OJqHP0S+zIODoUrf51VKI0AEK9VWo46vkg/8td2Y8XkEqT5SVD8K7wiic+JT6ItqLxrK1aXHzk9FJ+Zrq5xm4on+EtZ8UY+ANV7a7Yw+rdajnqRq+ON6JucPMYJS6rHd+6hy4XRuWjjptXsNyeNm0H9LNij+gSfiawcbMghSHYqz0Jzj4Uhv2NhG+x2/+4RQqVamQo6itHiJWAPtFFjwqg+QOWPqItY8fShnBgY7uzUMeROajuccy1HJcaT3FDST8cVV7MYITgy1FI75IP3ipLUOKd1SgCevaZ+6ofDaC5Exxk/6iw1cazl5BkuY/wB1KM/dUeRxuUpKVT3UOd+kg/Kk9q3xDuZLJx/OWr5UPuQgRF5BiOjuQpRP2HFUXC8PJ7F3jqkV/ocXuOHlHAmuEeKs717+eclKCPW3cHlpJqvfWmHD7MdDW3MJPzrdqQhJyNBPeEnH2g0TwWj0KeKTH5HG07USi5SEnGwPOozvG0xxw+sXCWnnuWiPxpS9aBSAplpXjlXzrqmRFO5itk4+q6vPxNEjwij0KPicxnTxYSM/lSUrxCRtWUruvxnD7cVrHi6omsq3hNHoV8TqdTy5O+1grQB51DLzOMaVK8l/ura8RgpeXHcDuTQ5bCEpCkPHHcVCm4bCs46hBK2wM6FD+lmpDrpRCJQpQ/V2NCEPNoHtOCpbzkVy2ry6mgzbuglJJJgeZKQknWF6u4neo3r7IG5cHlg1GkM2xSzqkuJP62BQ90xG1lKStaR1DhGadtcWvYLie1nSC7nxVgV0TISpJwVE+AJoJ28QEfwcnzeNeuyAE5ZBa8A4aq46llMMNuNhWSFp/wD5iuyZLAOntUH/AJaWO3dWfbWj8a7s6epST471fKiuZjSzIZ5JW0fJz50SgvoKgQ4lXgHBmk5lKcjKds91MNlDeoZQo0Ko7IJBX3LB4eytQIUf6+fwpid7RLe2rlQnhRA0I0MIHjnJpjkNqDe+3wrJqV3mNGFJZRVuUhbZO6v61AXJjhdOtRSnvBFH79FcIUoBJz3qpFnRXEyDre0b8hvTuHqOSFa8Eg0qfGxgvP57ggEffW4lN4AR2mT3pTS0pp5pWC7keWKlNPKSnHagDzos9QcRgS6rQc4G3XFLl1SpySo4yT3VL9YIT/nt+/VQmf8ApFqIfJP61dSgk7k1J6GrLGk829XUdalsLAVg4z5UH0K/nk/GpMUrKwMqI7qZbshVK7C7ziQn6JPkQPwqC5KwfZ2PioV5MQoJ3Ss+QzQtaUE+20tOORO1dTlc6pGwVQ84tYISnz1CsoN2ccq3be1d5WCKyjARjuE2KrJS7k+BzQpVySn6PZ/1ayspSEUkNSm7kN65FS91NjwCRUhUvVCIJQM9etZWUKtpYNR1A6p7qFYSpojxQKjSF9sSpSUE94FZWU0thZ7kYaQrBA99dFJZcOxGfAVlZUkEiLa23BqUsJHnUz1KIjGmQkHr7VZWVJB3RGbBBQ8Fe+jtlbSXEgmsrKBVWgeluWlwq2gNIwFD30zOoHZ5/CsrK85Xk1M26STiK/EKBpOXQPIVXd4Wwhw5cCznkRWVlaOCk2J4qKQMVMYG3ZNn+ka5iUlewjIPlk1lZWmhBmOOLWNIjobHfUZyG0Valym0+WaysoiVgTdzomPG0Z/KAGOgFbsNtJUCZhP9A1lZUS2JjubT1xU/ypQ2+ug0uzTHJOZaf+YVlZVaGxavucYBt3akSFLdHTS6RWVlZTIqf//Z" srcset="/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_e65793542c.jpg 200w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_6933c1f45a.jpg 300w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_371a8395d1.jpg 480w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7c572dc27.jpg 600w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_2c49e66949.jpg 768w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7a1604369.jpg 1024w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_ecd29cb43a.jpg 1440w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_9fd1d0db24.jpg 1920w" />
+
+
+
+
+ </a>
+
+
+</figure>
+
+
+
+
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+ <div class="ce-bodytext">
+
+ <p class="body-text-medium"><a href="/north-america/products/technologies/circon">Circon: Discover the Technology</a></p>
+ </div>
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c13 -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c243 -->
+
+
+
+ </div>
+
+ </div>
+
+ <div class="global-submenu__column">
+
+ <div class="global-submenu__title-spacer"></div>
+ <div class="ce-container">
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c240 frame-shortcut frame-header-size--default">
+ <div class="frame__inner-wrap">
+
+ <a id="c240"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c240 -->
+
+
+
+ </div>
+
+ </div>
+
+ </div>
+ </li>
+
+
+
+
+ <li
+ class="global-menu__item global-menu__item--with-submenu"
+ :class="open && 'open'"
+ @close-menus.window="closeMenu()"
+ x-data="{
+ open: false,
+ toggleMenu() {
+ this.open ? this.closeMenu() : this.openMenu();
+ },
+ openMenu() {
+ // Close other menus before opening.
+ $dispatch('close-menus');
+ this.open = true;
+ },
+ closeMenu() {
+ this.open = false;
+ }
+ }"
+ >
+ <a class="global-menu__link" href="" @click.prevent.stop="toggleMenu()">Company
+ <svg class="icon icon--nav-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_374" data-name="Group 374" transform="translate(10.246 6.123) rotate(180)">
+ <g id="Group_373" data-name="Group 373" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+</svg>
+
+ </a>
+
+ <div
+ class="global-submenu"
+ @mouseleave="closeMenu()"
+ @click.outside="closeMenu()"
+ >
+
+ <div class="global-submenu__column">
+
+
+ <h4 class="global-submenu__title">About The Company</h4>
+
+ <hr class="global-submenu__rule">
+
+
+
+ <ul class="global-submenu__link-list">
+
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/about">
+
+ About Versa
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/history">
+
+ History
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/contact#c169">
+
+ Global Footprint
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/inspiration/projects#c169">
+
+ Projects
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/careers">
+
+ Careers
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/contact#c170">
+
+ Contact
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+ <li class="global-submenu__item">
+
+
+
+
+<a class="global-submenu__link" href="/north-america/company/contact">
+
+ Find a Distributor
+ <span class="global-submenu__link-description"></span>
+
+</a>
+
+ </li>
+
+
+ </ul>
+
+
+ </div>
+
+ <div class="global-submenu__column">
+
+ <div class="global-submenu__title-spacer"></div>
+ <div class="ce-container">
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c245 frame-shortcut frame-header-size--default">
+ <div class="frame__inner-wrap">
+
+ <a id="c245"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c13 frame-textpic margin-top--none frame-header-size--h100">
+ <div class="frame__inner-wrap">
+
+ <a id="c13"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="ce-textpic ce-gallery-center ce-gallery-above">
+
+
+
+
+ <div class="ce-gallery" data-ce-columns="1" data-ce-images="1">
+
+
+
+
+
+
+<figure class="image">
+
+ <a href="/north-america/products/technologies/circon">
+
+ <img loading="lazy" data-sizes="auto" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_e65793542c.jpg 200w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_6933c1f45a.jpg 300w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_371a8395d1.jpg 480w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7c572dc27.jpg 600w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_2c49e66949.jpg 768w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_d7a1604369.jpg 1024w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_ecd29cb43a.jpg 1440w,/fileadmin/_processed_/d/1/csm_Samba_ABS06-357_Denim_RGB_9fd1d0db24.jpg 1920w" />
+
+
+
+
+ </a>
+
+
+</figure>
+
+
+
+
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+ <div class="ce-bodytext">
+
+ <p class="body-text-medium"><a href="/north-america/products/technologies/circon">Circon: Discover the Technology</a></p>
+ </div>
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c13 -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c245 -->
+
+
+
+ </div>
+
+ </div>
+
+ </div>
+ </li>
+
+
+
+ </ul>
+ </nav>
+ <div class="global-menu__search-wrap">
+ <div class="page-header__search">
+ <form class="page-header__search-form" method="get" action="/north-america/products/all-products">
+ <input class="page-header__search-input" type="text" id="q" name="q" placeholder="Product Search" />
+ <button class="page-header__search-submit" type="submit"><img class="page-header__search-submit-image" src="/_assets/static/graphics/icons/search-icon.svg" alt="Search" /></button>
+ </form>
+ </div>
+
+ <a href="javascript:document.getElementById('cart-flyout').setAttribute('style', 'display: block');" class="page-header__cart-trigger">
+ <span class="page-header__cart-trigger-text">Cart</span>
+ <svg class="icon icon--cart-icon" id="Group_360" data-name="Group 360" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22.04" height="21.95" viewBox="0 0 22.04 21.95">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_797" data-name="Rectangle 797" width="22.04" height="21.95" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_359" data-name="Group 359" clip-path="url(#clip-path)">
+ <circle id="Ellipse_6" data-name="Ellipse 6" cx="1" cy="1" r="1" transform="translate(5.95 18.95)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <circle id="Ellipse_7" data-name="Ellipse 7" cx="1" cy="1" r="1" transform="translate(16.95 18.95)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_260" data-name="Path 260" d="M1,1H3L5.66,13.42a2,2,0,0,0,2,1.58h9.78a2,2,0,0,0,1.95-1.57L21.04,6H4.07" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+
+ </a>
+ <section class="cart" id="cart-flyout" style="display: none">
+
+
+
+
+
+
+
+
+
+ <div class="frame frame-c11 frame-versa_cart frame-header-size--h100">
+ <div class="frame__inner-wrap">
+
+ <a id="c11"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div data-cart-contents x-data>
+ <template x-teleport=".page-header__cart-trigger">
+
+ <span></span>
+
+ </template>
+
+
+ <div class="cart__empty-text">Cart is empty</div>
+ <a href="/north-america/products/all-products" class="cart__search-products button">Search for Products</a>
+
+ <a class="button-outline" href="javascript:document.getElementById('cart-flyout').setAttribute('style', 'display: none');">Close cart</a>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div><!-- end .frame__inner-wrap -->
+ </div> <!-- end .frame-c11 -->
+
+
+
+ </section>
+
+ </div>
+ </div> <!-- end .global-menu__wrap -->
+ </header> <!-- end .page-header -->
+</div> <!-- end .page-header__wrap -->
+
+
+
+
+ <main class="content-block content-block-1 ce-container">
+
+
+
+
+
+
+
+
+
+ <a id="c6"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="product-detail ce-container">
+
+ <div
+ class="frame__inner-wrap"
+ x-data="{
+ showBackToResults() {
+ return document.referrer.includes('/products/all-products');
+ }
+ }"
+ x-show="showBackToResults"
+ >
+ <a onclick="history.back();" class="product-detail__back-link">
+ <img class="product-detail__back-link-arrow" src="/_assets/static/graphics/arrows/back_to_results_arrow.svg" alt="Back to Results" />Back to Results</a>
+ </div> <!-- end .frame__inner-wrap" -->
+ <div class="frame">
+ <div class="frame__inner-wrap">
+ <div class="product-detail__inner-wrap">
+ <div class="product-detail__column product-detail__column--images">
+
+ <div class="product-detail__colorway-image-wrap">
+ <div class="product-detail__colorway-image-inner-wrap">
+ <img class="product-detail__colorway-image" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_3208d5cef8.jpg 56w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_5b12c3edca.jpg 200w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_39c9cec7bb.jpg 400w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_a2c7e6c92b.jpg 700w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_d4d39aa9b8.jpg 1000w" />
+ <a class="product-detail__zoom-trigger" data-fancybox href="/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_4f312e286a.jpg">
+ <svg class="icon icon--zoom" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="36" viewBox="0 0 36 36">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_874" data-name="Rectangle 874" width="20" height="20" fill="none" stroke="#000" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_485" data-name="Group 485" transform="translate(-896 -1763)">
+ <circle id="Ellipse_21" data-name="Ellipse 21" cx="18" cy="18" r="18" transform="translate(896 1763)" fill="#fff" opacity="0.702"/>
+ <g id="Group_482" data-name="Group 482" transform="translate(904 1771)">
+ <g id="Group_481" data-name="Group 481" clip-path="url(#clip-path)">
+ <path id="Path_303" data-name="Path 303" d="M13,1h6V7" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_304" data-name="Path 304" d="M7,19H1V13" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_112" data-name="Line 112" x1="7" y2="7" transform="translate(12 1)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_113" data-name="Line 113" y1="7" x2="7" transform="translate(1 12)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+ </g>
+</svg>
+
+ </a>
+ </div>
+ <div class="product-detail__colorway-image-title" data-wg-notranslate>Earthen</div>
+ </div> <!-- end .product-detail__colorway-image-wrap" -->
+
+
+ <img class="product-detail__featured-photo" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/0/2/csm_Kaolin_AVF29_472_Ambrosia_install_ALT_rgb_6f988027a8.jpg 56w,/fileadmin/_processed_/0/2/csm_Kaolin_AVF29_472_Ambrosia_install_ALT_rgb_7de7031928.jpg 200w,/fileadmin/_processed_/0/2/csm_Kaolin_AVF29_472_Ambrosia_install_ALT_rgb_b39587e1c1.jpg 400w,/fileadmin/_processed_/0/2/csm_Kaolin_AVF29_472_Ambrosia_install_ALT_rgb_631476f79b.jpg 700w,/fileadmin/_processed_/0/2/csm_Kaolin_AVF29_472_Ambrosia_install_ALT_rgb_f66b9e2018.jpg 1000w" />
+
+ <img class="product-detail__featured-photo" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/4/9/csm_Kaolin_AVF29_472_Ambrosia_install_card_rgb_35132a63ba.jpg 56w,/fileadmin/_processed_/4/9/csm_Kaolin_AVF29_472_Ambrosia_install_card_rgb_de4f9ae169.jpg 200w,/fileadmin/_processed_/4/9/csm_Kaolin_AVF29_472_Ambrosia_install_card_rgb_b67a1c00fe.jpg 400w,/fileadmin/_processed_/4/9/csm_Kaolin_AVF29_472_Ambrosia_install_card_rgb_16a6cc00d3.jpg 700w,/fileadmin/_processed_/4/9/csm_Kaolin_AVF29_472_Ambrosia_install_card_rgb_3bbf19d2dc.jpg 1000w" />
+
+ </div> <!-- end .product-detail__column--images -->
+ <div class="product-detail__column product-detail__column--info">
+ <div class="product-detail__pattern-title-block-wrap">
+ <div class="product-detail__pattern-title-block">
+ <h1 class="product-detail__pattern-title" data-wg-notranslate>Kaolin
+
+
+ </h1>
+
+
+
+
+ <ul class="product-detail__pattern-general-spec-list">
+
+
+ <li class="product-detail__pattern-general-spec-item product-detail__pattern-general-spec-item--brand" data-wg-notranslate>Versa Wallcovering</li>
+
+ <li class="product-detail__pattern-general-spec-item" data-wg-notranslate>Type II 20 oz. | evo® PVC-free</li>
+ <li class="product-detail__pattern-general-spec-item">Manufactured in USA</li>
+ </ul>
+
+ </div> <!-- end .product-detail__pattern-title-block -->
+
+
+ <div class="product-detail__colorway-image-wrap product-detail__colorway-image-wrap--mobile">
+ <div class="product-detail__colorway-image-inner-wrap">
+ <img class="product-detail__colorway-image" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_3208d5cef8.jpg 56w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_5b12c3edca.jpg 200w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_39c9cec7bb.jpg 400w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_a2c7e6c92b.jpg 700w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_d4d39aa9b8.jpg 1000w" />
+ <a class="product-detail__zoom-trigger" data-fancybox href="/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_4f312e286a.jpg">
+ <svg class="icon icon--zoom" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="36" viewBox="0 0 36 36">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_874" data-name="Rectangle 874" width="20" height="20" fill="none" stroke="#000" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_485" data-name="Group 485" transform="translate(-896 -1763)">
+ <circle id="Ellipse_21" data-name="Ellipse 21" cx="18" cy="18" r="18" transform="translate(896 1763)" fill="#fff" opacity="0.702"/>
+ <g id="Group_482" data-name="Group 482" transform="translate(904 1771)">
+ <g id="Group_481" data-name="Group 481" clip-path="url(#clip-path)">
+ <path id="Path_303" data-name="Path 303" d="M13,1h6V7" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_304" data-name="Path 304" d="M7,19H1V13" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_112" data-name="Line 112" x1="7" y2="7" transform="translate(12 1)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_113" data-name="Line 113" y1="7" x2="7" transform="translate(1 12)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+ </g>
+</svg>
+
+ </a>
+ </div>
+ <div class="product-detail__colorway-image-title" data-wg-notranslate>Earthen</div>
+ </div> <!-- end .product-detail__colorway-image-wrap--mobile" -->
+
+ </div> <!-- end .product-detail__pattern-title-block-wrap -->
+ <ul class="product-detail__colorway-grid">
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-472">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-472-Ambrosia.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/6/6/csm_Kaolin_AVF29-472-Ambrosia_6d653c7876.jpg 166w,/fileadmin/_processed_/6/6/csm_Kaolin_AVF29-472-Ambrosia_d41db1299c.jpg 80w,/fileadmin/_processed_/6/6/csm_Kaolin_AVF29-472-Ambrosia_6d653c7876.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Ambrosia</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-472</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-695">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-695-Brushed_Bronze.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/7/e/csm_Kaolin_AVF29-695-Brushed_Bronze_fe532f4816.jpg 166w,/fileadmin/_processed_/7/e/csm_Kaolin_AVF29-695-Brushed_Bronze_68dc5a84a5.jpg 80w,/fileadmin/_processed_/7/e/csm_Kaolin_AVF29-695-Brushed_Bronze_fe532f4816.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Brushed Bronze</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-695</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-240">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-240-Celadon.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/3/3/csm_Kaolin_AVF29-240-Celadon_5c774b1997.jpg 166w,/fileadmin/_processed_/3/3/csm_Kaolin_AVF29-240-Celadon_4f6f6dc781.jpg 80w,/fileadmin/_processed_/3/3/csm_Kaolin_AVF29-240-Celadon_5c774b1997.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Celadon</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-240</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-801">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-801-Cinder.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/f/c/csm_Kaolin_AVF29-801-Cinder_7dc741d3bf.jpg 166w,/fileadmin/_processed_/f/c/csm_Kaolin_AVF29-801-Cinder_3dd8abc614.jpg 80w,/fileadmin/_processed_/f/c/csm_Kaolin_AVF29-801-Cinder_7dc741d3bf.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Cinder</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-801</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway selected">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-128">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-128-Earthen.jpg" width="166" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCADIAMgDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAwQAAgUBBv/EAD8QAAICAQMCBAQDBQcEAgIDAAECAxEEABIhBTETIkFRFGFxgTKRoSNCscHwBhUkM1LR4WJykvFDojSDssLS/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECBP/EABwRAQEBAQEAAwEAAAAAAAAAAAARASExAhJRQf/aAAwDAQACEQMRAD8A9d0qOJ0hiV4h8M867JhRBL9yS3f00SXFmxcvqSmcTQDFZ9+4OrBmN0bPqdTGxY5lmnlZVeYyN5SybbbgAnv+VaP1FAz57507kDFSqQdtxo0t1dD2vXM6Vekxq2AYUiiYOoUNS3d8kVYB+ZGm8aIY+MsawzRSdlZo0pyRXPbj29edJ9Hw4J4pJUkj8MHa/hJYZPtwDfF176ZysKNcdSsk7M624fHYCvagv8NVNW2Z7SgyQ4amto3yrsIrvwpJJ9r1GxsoTeFIMR7Ubf2igV7f5d99cTHVI4kEXiBgCUGPRAojkmM3/HRZMaCOIyVLC181Ai3683HzoOeHlxLEdmMu00fDyFbd7f8Ax6W3CDPjmsQzAsVqQd9p7fsx3r2Pvo0qYhj3OsoIG0fsUF/mn66BMcYZmM8pPhrKrMZNhccHitvNaaYL0FZm6W8kMBdyJWYblAYnvZ23+XGs0rljoyjMIwxLkWQwA4AHqB/Xz1p4qrL0jJ+HlkVQJWUgJudbIPl22OP/AFWkIZ8Jumrjyh5FEgkVGIDAbQOeATyDqLjvSpcUh4YeoPI1DzKl+vuUOn5ZfhXCr4rTTve0KPMfr4de2hxpjY8W7wpdoWliDxv87/D30VJMHKRY2Sfwn5j8OOiH5u6FEj00HZMmV9wnx8pbAv8AZMxNdqAi0aPJMeM0rrk2DwPDYN+fg/z1JsHDSIRgSvYAVXiVaH0C3qsGDA0L4640LxswOyQbSaPcWn1oaqMaeeWUB1SRVrjxUYWP/AX6d9Gbqd5Zii3o0UJDA0N3l7iyK/LRZ4MJ8UeDBLHJGhunpiBxZoAA8d7OqZJxz1AwNSZDYKNCZWX2Nj8VGxqSK5gPmL1DAJmCloY78Xb5gCeAQ11etOfIkxpnaaRY/Mu5UlC89zQ3/wAtZeJJiR9TheKIoGRORHVEE/8AV5SPetaGb4rySZEJZ4kIUu0nB44F+Ivr/DV4mux5uMW3rjgbeQzbttfcnQsrL6ckvEeMVNeZedp/6iOdEkyY3lLJnMxHDRswB7duW0rlLAiRytl41KNwUwh9p4PNHQMnq0EYiZZIBYorta+3zIP/AK12XJWbH8KKMSH91S3b3NEkX/DSyNiyLMz5iyKeSCm1uOAAbA9ddVY3ctESSAtbZAA1evLHn66AL/3lhPLJjpjRxqU2oUXdVmySF4o9j/HRUyczKghaNIw5ls7u1+J+Ktnb+ho0Ryo3mgiEJZ0JAl2Ek36cV+djSZjaKOFJooTGmQAymOPcRu5JCrde1anQ3BKyZpRdzv41OAisGo+5Fcc6ml8TJKzyrEYoC8hYgpHTD0/EBtoe9HU06bjmPDO7TR/s32AgRq3lbzd7I++rvDO8mbYiRjhpuAjI7lgCLHt9tcGPG0mZJK08TSEMu1vKOSbHlHr76nUI8rHGS75T+HPhpQUgOBuPPPH8tUcwcGVIQD1HJjK2GCsu1RfNArz3rTEeE8jWs0cgQklXhUbR6cbBf00njhYYIpMeTMa1Khiynkn29taKGHazvPmeID3WWIWNIbpRsMCQFRjKwHc4O4e558P56K4zMZFQtiJSggjDYCj2P+WQdHj+GRCglzwPX9tASPagePXXJZopk3ifOZyOQ8sFenzv07VpCuJJPPHsYYz1Q3+FW75UVGk8vDyIsrxsnHw/D8RQreFHYF9+3GmcmEMrH+8sxKo148QHfn8J1l5sEVlU6lLZZSGecEiiDwCw+f11PqY1FE0WDOPhYZYQhVDsSrJ7kg9tA3RmNRB06MMlLQRQFNcmu/31Z4ivSt8PV3eUYgPMgNng1wTX10nhHObqHw8edJKjjcHM1ptqqNHg/b2vVg1EEKup/ZrIw3X4NFz+QsdtEmwlyMZJ2jx2hJBBMAZCPQ8A9/meNAyxJJCseW8qMqlFC5ZYsPf0N6WiwoseMzwZeRjOAtnxxRB+RH66A3w2MwUrj4u4EbnXBXuR6WvP5apFhNGwCQYzsCeTjxgH7cGtH3SiRQnUppVum/xS0T960u6ybTfU55JGbgDIHHyC7vT30gNk9Px5IZZZcSOVu9AR0pH8hpfqAeCXDlmix3K4xVY9o5HHFg+XhvpoOXjSRq8hyZzS+QB1ax7cv99cyofGXEyjkXNtcKCACtIvfzEE38tATJWSLJwWRDiR7HBjBuqYGyL9ef8AbTnUlbIDymRIyxs7oiFv0Nhq0vLHkZOL0uVEjpIHl2nhFYtzwKs9vl30WRp3IMYwXd1IjWRQefXafUfL3GrwquO7q3jbC52EAbvLd9wC3Gu5scshUR7lK2ZDLufcD/0huP56dwZ0xoWGZ4ezlW8Ol59iCeK0GaSaWPbBnKhsWUK9vS/PfHtqQLwY3R4cj9pMsLNSxhgLDCvQtYBOncTHSWRmGZ4MaJwqQRsGYngDvu1MbPlSbxSQUaPaD5QQP/L/AJ0DH8EzyyPP4ZiBMZmcqVJPYA2K+ehQ+o4PR2gY5WdlQSEWskcJU0Ksik8x+WhviKcVJsbNhgk8ZCRJI4BaxR9L+mpPlY1umXjNkPJZcxv4qxivXnyn14HpqdUPTC+PHLk5IVZI08soKkADk8/rqbgZwZ7nz8efOwXn8Us+wqwkN8/i7VxqanTf7mabPx/iPECyHctqxNnuaP6fnqavAtNDhNK2RAcgRSWFNsoPqeCo964OpnjGC5aQSZnmx0Yjc59wRZPa/T9NWzw+TGwSNEdSW3iPZu4HuP56CRN/iTKiA/CIpo8PRIPYd/rq3Ewbp/w/wzxI3UKIBAJIo38zxo02PjNJHGUlMjcEeMhH0vxDXOh9KCpvdkjj2rYEcZLL87r2+etCRZ3yMcqZHibkb4mJIr23dtKdZ0sskJeJQd4AsSZC7Qb42n1/PXB1HOlhSTdjxqewAjYXfr5u+mxGwbIIXcBxQiICmvrxpePGyWwI9rL6H8Bvv/3aipMZPEHjsPHY2doChvv4g1ndQeEZsDlMtTZLXJXAIPDBzrTy4DBGDLBFGSb2NFJZH2NfPQ86Od8nDWKWOICE7pFMgF8c0CORdaRc0s/UYGxzC6yLGYf8xZnLA1xR30eflq/iR4+S6ww5DRoPKDkbzz6jm+dDycfOFgMoiWHcbJsL2vvfy41dpshjNO77yT5WCNGrDtQB5A+4v56iH5M0PIr7JY22mw0zE/8A1Y1+mrdRTDmxYvExsh3Lgm5H7Hv68g6Bh5GQ0pilVd1GiR5a79+T76YhmyHjBebFbzgi94I/Mgflq8TpaPHwfHkhGPIqLR3AhfythpiDCw4YlMkGWshPmCyWe/8A3aodwkdR1DBBKUAVP4b7D9p+ur488rzStF1XBYNJyApF1xY/aGhpxbpPOw4UUusmVs5O6RwSPyJ0LIDwr07JaaYIJSoJKbTcQAPIJ57aY6rkzoZFLRqRf7Qvd/IHedLjMOVD0xZ8zDdA6MAZSGS1KmwOPSzpw6plOcbpnS0gj2uGMTx7+XUkVYoccfr7ackkxlEcUj4cYUcjwrCevawL783oO+DIyOlsCMzI+JYGja7VXtVf0fXRxLktAz4mM6LuLRjxBGxHzXaSRoO4BwpJGCzYbLZZV2rZbgXW/j66DLIphdU+FEiMWVjEpVvYXur7fLWxhz50mMVyGAs8rx29OTVaET1RlbZFVNYImVgRzyePnpPwpWF90se6TDaNuAHxkoH5+bXJpQjGGR8FdqFmljNAG/wnng1XbjVUbqkuejGV38Ibigl2gcdhyP10N53EsbtOYmZR+PMUlzdiravfivTQRYJMmaJseXpz/jtSQ9kr2NHtzocpecY0D4TSPK6ndFJtWMAWQCG/Q+mqZMuPP1GNN746AM0s3xytsXab5V/p31ciM/DtB1eINDKTTTsOKAHZq9dTRcjJXqGWkQkVQfLRJc81yTd2PbU0PFyZB1WWESK8hmDeXJYAXRqhf3u61NQHyMqnbxXhDyRgkCM96U967/y12aeOePLWZYI5RiB08I2SCxN2Bz9NKSfDo8JOdjZCGGmCybmj/CKPPHbWkuNCMmeA5OPuHT1ragPBYnk1f9dtbQhjHMnhiqUItMFCpe78xp6SF3yIFabKNfiAxSP6+usvGkhkwwhM8ZXi1j5HpXA+v5a2DJ/+MDLK5WwDbHiv+3Q3AlxoqyGD5FhSAGjYG67j212KOIBPEwxJwCT591e5441En2QyBmydnpsVhwOf9Py0OSfGRI3MWWb/AAho2ph39RzqA+WsDwxmPHok0Kkft+WknzPg8yJykklKqfjKkAkEitnPYc6ZyTjPgJJ8PtAYkgwcn/68/wBcaWxmMXUA2NjFA6nnaAoqru0HfStL/wCCifHypmIkbFHeIjgX67R9O2mM/Kgz4JCuRGTttQFdeAxsCxzyedITTzZPTsUwPAhEZZVeNRVH2K8HvosscydWMLOtkNSQ0ONoPB2Cx/V6iRfpgkPUGZktFXykQsR+oPOplz4cbKPEEUim6VXUnv6cc/TVcNHfqUZLgV5lCj0r1FUR9taCqYZ73iQKTZKgKTfFHjgeor01cGfD1XBeaUfGSNHQ2lw1n5Vvv31fDzoWLMGUqWPALqav338a0U2jeu+NSygmgO/3Y/LV2fOWKJjPweALXnnjsP150GV1psXIjIlmgltSFBlZiR6CrP56r0EdOHTMWEnFL/EKh8Rt1AluNpN+g41qdWQtC+4qxFWGYEX8vW9IQrN42O0eRBGiZMO5SVLBafnsdIfxmQnGgmgiOTEzo7E7oETwwb9fXWnm5mBksuzMjJVSzlaUsfW69/y0nNHNPJFOgxJ4MfMEfi7LUD1sm/U/prRyo4pceJkfFDx3/mgEVZ7AEenz1ItAi6njov7P4ebxOwotR+x54s99WzMjp88TRXCkgAEh8IlSf/I/0RoqYsLTgQYuNuI7+EQfrYUkc6i4gWJ0lR2U8teNfI7G650KW8fpqbTFlY3m8p/YNQX2/HxyLu/tq0eQsaiOP4MM4Di4Vdu/p+0/rnXY5JY5ijRKsSrwTDs/Ohom6VJFeC5I3BZlJkVm57rzW3TMQhlZkiZ7x464bukclkxEIfKbNhzf001DPjNgiQvjhPEjk3mYqCOBfJ/30J8h/GRcokPb2I5XIA2twea9vbtoDda24c8UUcUzUsZSRVCA+Uki7Oi+mseRH6v1RpFllZZTsMbeVuQOTzepoeNn45edcjEhTbNdKu5VJr1I5/rtqabp46kMeRmRpkYaRqY9pMaqAw4PfdZ/IaspxR/aLJhIjMaIqoIYkCldhq+efy1TIzvCVIJ4xFI2D4gkVRe07a/ev1rT26MZs088zmMmCOOMEMy8EWeaAv17861NZZuJBjeAUOOkgDgncqhhZ7H2v01q4cGO0Ct4JUoSDW08VX+nWTjZDEqVhaXabkKwqS3e/r/LWl01ZDjIqQywpbbd6KSRQrn97UzNXdWlEBRwMXJUInNIl36emhzPjtFixmHLAXk2wG6vn66PKcgb28CUiv3olHNHt68arHPMfhmkWyoBIaKOiPe77aqXAsyLGECscXJIZvxMoax8uLvWVkDFSaJklzBHuYN5AQPUcVxzrdzHPgGQFVCjlhEKP0F6yMthJjy7I/DoEszIY77c8VzqLgsghm/s8ZVkmUIkhBIAZgW4P4vnfI+2lJRAeqY+PkGeWVWVWlZgOGXn17dv101irPkf2fnxosmUkY0pjVWN7gf+75dtWlgkl69jZR+Jkx/BSQjcCVa6Cgbvb0Pb76FSocbOiVIpAu40XawD8juPP++mpY8KZY0d3QhgzFXO096NDVMmfEbqyBJXZNpNqLo1yKB4N+/56ZyG3IhjVGDOCV43A/1eiUpNjYRyJw2XIGUV3ck/XjUiwMFRGY58ktY7ggC/YbdHMQRpiUZyOGLNZX5dyAddpQ0I8DcUNVRqz7n76RaFm4cYQqcjJBb8BA8vFXZr9dZYgxsZgZxLK6TgtMEXuQas3wAO3bW3kxsYmjZV2l+7Gt3oKN9h9dZ3UIJMaFZYpZ1Ekykk0yrSkV+IHv8A++dIUlNtEEqQyyDGGR4rhYrerNep40/lt0/IyIguVwqhQqRsQaHfvRPGlciTKkx8yVHaRnmVKcgUu82a8T1Py/hrQmeSEJDJMoDCr8SzwBXAY8en89Cqv4KEPJHkCJuFAgo1/PSz5auXjglzSB6NGCT68cGvTTmIgXKcDFmMtWwaRVI/NhoruixFzijc52t4sqkfbk3oUkmWVj8YZEt3t/C4r6AL30GHMjl3g5AKgHd4gayLuxaaK64bTxo6uhY8hNgBPyG0fnq+TFgs4KxZTEAL/mRAdq7gai0vExiMWVGiM+/dRDqDYP25+egyrkSSq5kMyeOrEgoALqwfn9e2i5CY4ycTcXYeLSk5CN4YI/0gaWeOYwTfDyBju53EG6UenrzWkGrh46HJnt1kBZaVPDIPHrf9fXU0CNZny5jLKGZo422q7ULQffb861NIik0kOR1fpsk6iP8AwvgmyfNSAcD2sE166WzY58br2RD1OaOSSoxvs0x38Hn+WmsbGy0fDzZjFIXls0igKNrV6H14+2i9a+Om64xeBlRoYVoOXsWSTZFCwD9NaKpjeB+1k8eKRQLKtGx4BIB7fX37ab6ejb3dZowu8f8Ax0Aa44/20omKyOmQFWGQksN53Cia73wOf+NNRZcwmMcrREl78j8cDvQa+dKUSfF3mTZK6Nt3WFIQk/U99B8GaIxlptwryEH8X5NpqJ5pYzHDEu0qFAYtQ4vsW0B26hGquCCoNbQStex4fjm9NRZonw4n3vvVh5Lsqx9uW5PPb5aSw4TlZSRWf2qFKLNW1uBfmsH56Y6nkZvhbsxyiL5jtm2/mC+s7Mzmi+FEM00dLto5IYn5/i4v6ffWdawx0uWaHpZicTnwFk3RKRv7n8RLivbt8q51IcmZOrTzZU7QkyDekbE0dvb8fA/rjSuRKz9Pmmy8jKa4/JuyKbdso0dxsdrH8NFid4uppIvjKWYBfEkCg3waG+79ONQPtPEMzxRkxOu87Y2c7h6GyHP66tKV+ILpLAFLWN03fnvR1aLxy86J4rbmvjIDE/IkufprngmESIvTZg70EK5ic+3F/wDPOtIK4A8XxZ8Va5NWwHNcd69uTrmQ8cc6RvLAzd9visGAN8gAG9LTLntPSYWRCwW9oylI4P299XWXKmgCPhZIQNzUw9Dz+/oi+yTIdbhGUylrMMpNA+4J/wB9JZ0+DL03KwfEWDIeaFQXbng8gWeO2mHk2eK/w2VF6FjLHX5b9DmljlwZdkrECaMqxyVtqJsDzX2+2qtZ2QsM8cyjMM7JOvhMsqAoNxu97fPv+etLbhu8TrLHlSFghDPCzoO3J7UPlpb4WRsPKEuWyssqyBFdfIDXmJLjt786dxpdqNEskzlUF7/DO75qSx7/AE1ByFYt4Mkr2SbaIxCqvjkj09edVafGklbwsvMPBKoVgI+R7n0/jomNDM+C7gosTjkeDGTfyIOgyY48YXEsnhjykYyGjXat1nU9MEEUU0vm8VySR+CH1X22AmtB/u7zWwlcdwNsQ5+lV9++qmJopbMS88uhiAoV8l45PcHRVSOPHPio67eRVAX86F/noEsjH2ZmKWimjdpRbbUbaeaPHa9SaAxB5XinjtmiUEe6/wDdx9ddypIpcrGGKVdg68DzV/xqxTJXpsxUKT591saBC9iAfb30UbwV+KVSucrjHiBCAmNmCjgjaQeOdTUjmlx5HRtjqlAKrWewqrBrihqakwrOlxMVOozHD6iHgOVHuTY4MXDfPk389aziFTntNPK3h4ihDJ2uiB3buf8AfWXnOMXKgDQx1LPyFP7oNGluvftZ0cxdPhzMoYKmYrKQdyAbBXYDgXuPc+nOtIvh5MMZUOyJvoxskpJJ9bAWx/PTUvU8dopYkcyS7izBVYEAfb/bQVgxEhc5Ad33eTzFDQPpdX/zrkcOw754laLcdqliApocWCSf00ICcqNthbJgAJO+p6W67UHH/vXUlieGaSTJiRATt8/m7e++1vWoGx1QJ8OTvS12zHyj56FjwQSgrG5AvzM0zPXpwDx+mpBnpmRjwxH1GLw9377tx7EnxBWh5xibMw3OXFHGrEipu/bn8Rrn+etbqsHw8A8N44QtW7GyBfJ7cnWD1HHOTl4xkyhlecAKmMrcH6rTaNZrWz5epN0pJmeJVbmRpG3NZHcbqobb1SXL+I6lg/DT+PMYC7kINyDexAIs13HsdIdYwIzKFc87EVRJhEIvDDmkHPHy0WeONMjp5STHlibFFIuIwA5YWAVProjdYSrbfDme5AlghPQWKvk/Xj6aVfHVkZTHmRyWKHiAmh6+v66XxsZmwJWOLkREUdzQRiufmovQJsOeONViGUILDPePHe7kAgLya5F6qG3xH2GRc+fcDtJY7TXfttB08V8HEAjlyQC1kbomPb+esvExjM7ErIw7eK6EfLnTcmMsUCrGlUS25Vok17E+n0vQByZeqzboonyVJ7qCg8vqSUcD870LBmzoMFYo1zJmOQCu87hVHsLvv66rl4ki5MfizIULLZaOm7X6NWlZIZBNkYkDvMDOo3utBrBPB3EiqPpzqKZX489OlixsaTzyIjtkJRN+98VwP56awXkeFEfHVGhQo2xqoL3qh2I9dZzTZcWDlRz5UL4ytG0jLjkM9qeAGBAquTXOmsHDgmQFROCE3sBEinuKq4+b1A4BMXMSwH1pDcvcg9+wP00GXEzHnYDESRl7FUVaNdrY1Wo8RFGA5AUmgHRF2nvXCH870J3y/GAizs5FWuQRX17caqGoJcpX2v0kBQKV1jjsn159edFEuWBUWEiSXZR4vz5HGsrLg6nvRVfPkSNrY7jY9aAWvrzq8ODlSHwxP1JZWPBsC77X3OnhBslpp8uF2xIlYuvIRuTYJvi9V8RXjkEsBWN3pTTLwaBvgH7nSmUowhGazGYkK5JFFrv/AE9x30k82GemZmMvjNEZFAIO3sFNHyH+vTUv6srdycaIZVyzM9kKNxIW9o4vnjnU1n9TmhjzI0hiEybibdQRyqg+WuRxVk6mm7pguQ/WVGJFkrJMRKfCkVnEZ5JNgC7v76vnR4+Q2W0PTh4rZIQsmM7h7C2K9Ob7970KKOOSPBOO0kL+M+wTwhghFn0FntelupdUkly5I4MiOMfE7j4aMHNIKBvv29v9tXhjRw4MjyrGkj+UqVUFiv5gH34vVpumZMyqZpJgFYjaYpBYrvyNUxpTADNB07JnLqOfDUAni/n+urP1DqeXNveFGW6AKr7V6f8AGrsOjRdOVUYI+R3BtYH8v1JHJ1JOmOypMIMoKCAdzNZ+e3v76u0/UJPKFEUdAUGVaH15Pr+uoWyykgXb4akFkEwF0f8At0S6FPgtHO4lx8h09XeK2IB7f8ay+rQq7wtjwBSJRtXwHY3fNbbHA9LOtLqGXmKtyISqtt8Qzc/KyK/jpXqGZmBY/wBg3iLIoVhN+zLe5O7tqauDZYyoFQTRzFhGEUriMW7n3Ti657n56QkjyI4+mucWeceATHvjY1Tnk1H6Wdakj58sEcglRnZghfxgtNQ8oJ7k2ffWbnGX4LpU4eADzqgY0LsVZ9T78/loNjGgWbp8hlwIzLYCyjBewfUj9n9tK/D5cUdLBGATyXwdo+teH+ur4bn4aadvBjIUbLIKkV7Dn6WdVkmyGxkYZKKQRt2sPLzx/PTg7Bj9biVFdjETf4Mfjn6KK/PTsAzTjmKdsmIUy0mGSCOfdDoaYuUoBfIV8dx5nGWxo/PnVjiM+M8gOMWQE+d7sdu/J0iUDws1Z38PIMyLVb8RwRxzRCjSUsucMt4zBjoBIpEscEpPIrsRt9ex1oZGNLHJM3xMC0gBRWoMK7cpZPvpPHGWhZx1SMR+Im2EkfMfhoXWi0PAxj8N1QzZODAzwxPfhUKG4cj055Nf8aB0lRFJG7S4pt+G8Yxmq+YoH9NOYWPJn5WHPIIGWnjLSAIWY7gRt5J+x0v0ZoznnFhlj3KPMhWyTx2Iv5VpmFMQvLDLKi5OJ4jPRZZtwbj1BP6/prpkzYyhlfDfit65DpR44ujq0uNnfFlwY9vdd++7HobUfp31yXHz9+1sV3Di6uPg+3KknSFTYmVILeYyIxLFc1iDzz2A/PRJfAgNPk4fmIILTSMT+nOrjAkkxqPTnQLxZZTYHrdH5+mm4MPNhBiXBjQBje+Q2R3N0oH5aRKyM+RrikONCE3jzGbgm+1svHGo2Xiyxyx/3eXHnJMKKyny/TkV2NV7aczcTK8EzzqERHSkEzsDzfYACuPXV5+mZWPP1XGjyo4sdSW3CIBvMPLzfpWm5urcIz5RfqfTVQRoskcJYOQtOVFljVm/6GpokeDnQ9XxZWaRog4TfGa8u0c8Gx66mp1NUSOKT4Fp8RLdm864xO6w3Fldd6h0/Dlm/vOCVE8AqDjFT+LYtmxz2FV7+uhNhynpXTJoJWcMoUVAhs+b1AJ0PqWZPD0l8dHdcgshLvihgOBfNGvvrUGpErhGaXAZw5UUQSEHyrue93XOmcVIFhV8fHKuZDUaMF9b7izrLxoWMKSxyZ0ch4JVAbse239NVeNZceAtLK8niMOUXj0v/LP5asG0/wAOmRJK3xBBSgASps9+PYe/11R1xFg3N4gZuNvjAgUe/b21noDH4pR3PkAVTED3+XgVrvToRPayJIxHmF43Cnir/ZD19tQhjrZw5I1pEZbAUsAePU2SKr5n10jkv06BWypIXWAZCbHTJWMn5AB+99jxo3UYY3m8BQJTYDEq6A/Kwg0tjwy4kVLmQxBpNzDhgv3eu+s1RWlxMjIWFnnjYyAt5rZbAssd9MfmOdJ55x8dMcSZEbSJI5EalQ7Lf4u9Vx276Zy0nWdhaPApUKxet4NV3kHt3+ukZg64OOVpIvGk5oNwWP8A1dx9T9NBtdNlxMhWK5kSGgu4utH5d++gZTdO8ORpsrewagBIaIPfsRzqnTkUz0YHnbaD5YlIB/1eZhequrRK6qfLusoY08w+gvVBWPREHheDJJZskZDfnd/pobQ9KhEsiTzCiRRCvu/M6MCniJeDEu9dtOGF/IUOT9tSTJLRS474mNGijaSyNur5bgNVAZhjR3LUcpZLvwowRwK5vjj1rWdeO7oxUpGsqEyjwiFX2NMDfrxrUgeFoZWTBwQARzVmvcA6QCRRyZQBxpWDodoiQlQeRR8v8PrqVWjJjmPPxZk6khEce5gAB2P4vxexHres/pZWaP4uPp2PMu7bZKh+9cG+O2msFMdsn4t5DJIW2mJ3AVOA1KA4rsSaJ0l0WOdZFBbG4H4WAXvZsruon+Oqh5pGVJJFxEj8OUNsllUqPzcaPFkpJMiSxwAON3+bFRr/APYdFlx1XJZy2NKm0LtAVf8A+3++iOYFLRw48IUryhkU38+DxegWnSLMj3fGwbiQBHvUOefw8Fh/HXYZMAq+7MxmkHHlY2tj32C9Xb4JHZ06eZPCG7aGAA96qyT+Wj9OPjYr7+m5MPnFEzOu8VzVC/z1KPPZPxUmJPPAMcxWEAacgnmrPA/jprIbBWPqmTkZczzPI6RxFn3kVQPBsfehq3WpnrIHgvGoVSqFvxe4PHPYe2nuvZs0U+erYYZShUEKzUxDd+LGkUpBHFPI23NkuNo1CNKwL0oBPDCjz66mjdPaWQS/ELLAjkPvUuVBCigTtu/y++ppdAExMMtgnEzZI0ki/wAp1JABVr/dAF9+/r2Gkuo4OQiuDJEVVwTKW7A16Vz+umMSNGlwpGhmiMEBDA+QkAH3FEc+h0lmSNMJnxpnkiV0NhYythRY+16umNTHwpW4LQkqOFKqQ3Haqq9Wx1X4PGifwQGcgsY1BBrkHj10rDttnOayE2Dtgvv70NHxsuJsfGiyHeURkio0AI9PX2GiXXY48TxpY2eJAygcpQPbsfDOrYO3HQZEexdljfe1q9vwcaYxGx3TJ4yAWiWioWkJNcn2+R0HIixY8cIZcl+Odmyrv3Hp8tWFMdSiw3RXjyY4ZDZqX6em1fprDni+JmIfLwHyvEWizOoc33DKBQ79x9tbfUBirMvhS5oXndez0A9AOD3/AE1i50iHLxkdsxUPJoAkmx2A76bmmNnqUWXF1BCGgyoyAWhslSKok8rz9tZ2bi5EHScdXxDClkUrFeAfXm+O/f10x1SCNsiZo58jawU3ICrHy3zSivz0iMjIyOj4mQ2SUk8QjYJHBK0Kocn7/LUhTfSlilAZJ4WohQzFu33NaZmimjdkkwcKQgAEbjZHtQse2h9Hkt4/DyFhkfkIzsQKuzQYc6vMJhNI0ecdpJD7sxwD39OQD99IdFWOKTKiEvSsNgACxCtuP/1F64+S3h5KR9Kxyx5pWK8D93kD767Aua2UhXqKQKF525DX/wDx1WNsmJ5BHnOjFv2hOQxsXXfYdOFWgzZJenZMSdIyMZgVYOVUqbPb0/O9ItlQxmXLnxWnmJjA20bF8+vp2/nrUyJHfHmj/vCcWBW55GUH052jWCZc0xZJnzkeFUVvKeSwNnuvA+h0g1XGJBJ8R02aJZu8kIl/Zs1eY7N9A+51j9Ly5JoleT4KW2J3MlsOR7NzpzxJ2NP4ieLESHjYDcAeAffvoPSpIJcRYsggL6c1x9SNA3IIHZXMuAhJIZZFNsfSx/zpqAyvJ/h4+nkWAdkn8RuFaXORCjRiJsaMX5QXAIr6r99KSyCTIBZsKQjnzIhr344vRHpYsTJaDI8bDhao7UCQoB8qBPvpbGxs+O2/uvECuVVN0h8pA5J8tnWaGwh5GxC7MOSi0T/1Cr/TVsBI4nGzAydx7ErxXv8AgOquAf2k6d1LFhSSbBwvDZwCImctz70vbt9NO5GP1MTZESPjDKB7szMtcg+45FevHvpb+2MWH4KHFwJSxIYyNjkCh3/dHP6aYEGJkLlzlJ/LISD4JsdyeKI+2oVXpmB/aiXLfZBhO7C3dmWipA45UgdvTU1bpUWB8XIytkt5AiKYGbdam+StVdjvWpqAOzqJMYmyTkf4Ysq+EoXYasfhu7vjQ1MywNj/ABexRkRFV8QAmxRbhuw440EY8ePLjrAZIAYVZidt3XuKocdj+WqTJ8RDmZKFbhalDbRtraQTTXyT6DVqnnyJsSaSCV1Wl/E2R5uRxxuJOnMbqExx4422sNxrarEEfn6VpDFaZI1aKePxGXvvKqD6jlx9tOTRZEEUSTSoGDlm3OxBP2Y6ZqbBRNIqShowFcjaELAn7lu2k8k5TxKnhPIqmwTEP/8AWjTxpLJIi5qKh/1lwB61+MAfz0Mw7UqPqOAETud5F8/9+lOHc2aRcNScKQAOCWlxUCgevIf+udYkswWeKXwo5jtAVXgXb39AGPrxWvQTlkhIl6p09Uvt4zA/mZNYcUGJJ1GNj1rHYE7aLsdt+x3EffQyL9VkxsjKEuSJoGJUbANqCgPQD399K5apH/Z/EQFDly2A5QmRUA967c9v46vMb6lKmNOgiE5CuzK+5tvzH69tU6r8RFiYCyhAzx7iDEo4sC+w54vUrTT6RkRnw1mml2kUSchgb9hyND6hLhySyRvLKyh+yZdkDnud2i9DV1wsqWEblQKvlx15s9rsfnq8uRm/EzhpmUbqAVAAo+m4kHRnxMdcJmZzNnGRV5CO1V72fT6a7j4ODLjSeE+YFIBIEi88+vF/7a7GcmWEqmRLyP8AQp+vpoaQyR/EeLNlhQAEG9aY7gark9vStCrSrjxtPB4efMa/Gu0kWPcL+ukf7vxThTsRlSs5MaJLExC+53KtgfLjt30yMaY5eXJjNIYHj2uKBN1e7aBXb176yIIIIG8NJZSGYD9tGQe/vtIHb10VovFixZwiIV9+OwCgm1IJrapFXfHNfXXOjQZv92kt05t7KNkhKWv1BH31xxiYUu+WCSQNA9ySsdp5PlC0e3zrU6WuNJiofETwioIWSI/l/l6qU/8ACzMVMkE8alQJAZIiHFc/rzpeZc6GUeFGzxtwGeWLyj5BR/HXXxunbEMckRO2lAx3II9+I+ftqyiaJVSObG2kHyrjSgg3XqnfUKSl+OLgtA5jJpSGVjYF9gO/21QTTKaGMp7WfADXYNdl/qtPTygoBHlAdu0Utt8uV/qtcXNMaxvJ8Q43D8MHYgH94rzpAh/acsMaISYr8lVAMbDgd6tQNTIlLwyl8EskUzMYjCGVaHYWnt6nk8DXeq5M+QyxzrlTwlfEAVFRg18WSAeP11zrGTkoMyOScXJYMKKrgkjizQP6aa1hgeEAkadFZUkYOI0x7pfZv2fz7i9TRslc5ZVjnmgkmCqtRJdA9h+A9vXvWprJcVWOTEy8Rmi/bNj00g4BO0dj66t0/DfJTrEgaOVvCfaDIxNlFby0dvcevI9NBME6ZsnjdShmBh3lVb8NgCuTz+eg9Jx8zxZGjZ3hZxINriPnZQJsduDxWt/Vmq9Ow2lKRzRH8IJAnNjjknnT8eHFMaRQU9d0it2+ln01m9HSdHmhlxZN8ZdXMYuz9AnI0+scvIXGljZyCdyhePnx6aQ1HgaXKXIVEK338Xj50CRX11cRKEbxBClNf+cOB/56sqTR5Pg+CpBXlmCqL/TV0bqUMD+EkBYMANxA9fXn/fSFcyVQRVNMBXIUZZoj6FzX6ax8FG+IijxsvbIJAx3uCD99xv7emvQZM/UHKLJ8JKDQaqU2L9zzrPx/iJcxXixVMpcAEyoaP09PXTcM+QOVDE3V58SKcK6Sm+xUeUXXHvZ59NK5wmyEwQ+SSVxhS+FtLeY81WtFpop+t5G6DEeYuQRI5G1qH+m7/PSGa7SDAeXH8ywC/BF9zwLPpWpuLWp0eGOPp+TJ4K7t61uQg/M8a4JHRpgzgEncb3LvNfIk++q9KlRVnCYjKeBSgkgD6Cv/AFq8/UjEx29PlJNDysRz72V/9aRKviZMalXmdCSRu2yP27floPxWGY51YxzGzsXxn8vPGj42fAV82BOrUOTIP48auuXE8QUY+RT1QSVCTz7XqwKxZEPicJCr7QdrZEnH/T/xpOKczZMpAwwysFG+V2J78UB7/PT75nS4Mh4kl6kpI/dlBYN9340kkuJkQOkMHUGHxURd5Cne+xprN3qUWzZJZFSIzRRipNpV9xs36N/xpbpcpkxBjZEWQ5Tkyuo4444Bqta+NFAMDNkbHmkdVKRWfOS3Pl54Fjv8tZ0GRDFhJHMnUI9q8RsC275g2aGi0WLNxYkTcy+R+xi5/Qk6HJNBJMV+HmSNSSgXHYE89idFgx8d4l3xTPtsACMWDx37m/noT4+Oj7YsKeQ8b18NDRr0476vqOSmAbKxMxgrDZEEZSfvu4vS8kYnnVpsWao68lnbX2F6t8M6bR8Bllz/AJiK1BSeboAXx6avMRGA2OkqM+0sApskD1A4PvqRRutBmWGJsBoHLDYXL0ORZHkHy0l1pJVzciMNAZGak3Jsa9oJ/dHFjtV6b6zOXlwXkXKkWORPM0ZVUJIBP4QNI/2hN5uXkpk4qZEp5ZX3FlKjzGzQsCtDG91bE+HyoysFNKwMSSefeNvPdfrXfU1OrvWfDG+di5cviKUkE34R2HN2AK5HOpqbiXVJZojljxfgvGXDRgxlW1sAA8+laU6OZJsnJjxcjGcL4e4hEN/j4PloG/a9TU1ukLYyZBmlEoxo2eRmIPh77v08hOtBI8iOMZEnUEiG4WFdV/lqams1dxeRy2SjS9YpitKW2Aj1oEkao5Ztyt1GAtYoXG1368PqamtMxdg7yIs0qyqO+xEHp8m/qtZoSCHPCpHPQYBtjKDXrxXOpqai5gjTLB1OSfEZ/BB3VMyB6Kj/AKv5XrnVFyfHwmKoyyY6sgMqleG9G/L6ampqasM9Piy3OSWgEbLzRdGHz9P10SdssQkrLBEhNC3iAIHpZX+epqaZpuJHP1BXYnIwwvYIrpd+vbvq8T9TMLLH8KUNHdI6KAfys6mpq1I7vz4opZJ5cSSTeodYlS7ruDf01lxZk0eJkR0m9sqMqpUFmNiv3v4Xqams6pyfB6hk5OZknHbH/wAIfCiKfhIYm6s9tA6bNJlYAmklc2K3CKNlFkXRZ/4DU1NRKOqmV9y4+TMAaW8ZCB8wAx5+mrLj5SpKYocyBm81/DkAfe9TU1ocyESVo1bKmlZSN1xsbIB9j8/fSzR1OhJyB4SAKy45rnt3fmtTU1KvgnUJJzlQI2NkhI2UvccdXd3y3fgaHnHp0mLkbockElr2yINxr1/ac9/pqamqH8vE6TJu2zPhxxnw4XaZWbjmuJAPU8dxqamppuxfjnH/2Q==" srcset="/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_3ff35a275b.jpg 166w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_57f8c09934.jpg 80w,/fileadmin/_processed_/9/7/csm_Kaolin_AVF29-128-Earthen_3ff35a275b.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Earthen</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-128</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-082">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-082-Frosted_Glass.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/5/3/csm_Kaolin_AVF29-082-Frosted_Glass_6782002ba6.jpg 166w,/fileadmin/_processed_/5/3/csm_Kaolin_AVF29-082-Frosted_Glass_c0b58c96ee.jpg 80w,/fileadmin/_processed_/5/3/csm_Kaolin_AVF29-082-Frosted_Glass_6782002ba6.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Frosted Glass</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-082</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-163">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-163-Gypsum.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/0/b/csm_Kaolin_AVF29-163-Gypsum_27c70e2be8.jpg 166w,/fileadmin/_processed_/0/b/csm_Kaolin_AVF29-163-Gypsum_b3210fb81e.jpg 80w,/fileadmin/_processed_/0/b/csm_Kaolin_AVF29-163-Gypsum_27c70e2be8.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Gypsum</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-163</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-316">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-316-Slate.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/1/6/csm_Kaolin_AVF29-316-Slate_386651cdd7.jpg 166w,/fileadmin/_processed_/1/6/csm_Kaolin_AVF29-316-Slate_f4d099801d.jpg 80w,/fileadmin/_processed_/1/6/csm_Kaolin_AVF29-316-Slate_386651cdd7.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Slate</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-316</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-877">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-877-Stoneware.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/f/d/csm_Kaolin_AVF29-877-Stoneware_7cdde669e7.jpg 166w,/fileadmin/_processed_/f/d/csm_Kaolin_AVF29-877-Stoneware_65ed011788.jpg 80w,/fileadmin/_processed_/f/d/csm_Kaolin_AVF29-877-Stoneware_7cdde669e7.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Stoneware</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-877</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-784">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-784-Sunglow.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/b/4/csm_Kaolin_AVF29-784-Sunglow_04b8de7528.jpg 166w,/fileadmin/_processed_/b/4/csm_Kaolin_AVF29-784-Sunglow_63f6a7c6ed.jpg 80w,/fileadmin/_processed_/b/4/csm_Kaolin_AVF29-784-Sunglow_04b8de7528.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Sunglow</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-784</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-731">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-731-Taffeta.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/1/b/csm_Kaolin_AVF29-731-Taffeta_aaccfff1da.jpg 166w,/fileadmin/_processed_/1/b/csm_Kaolin_AVF29-731-Taffeta_67aa62a27e.jpg 80w,/fileadmin/_processed_/1/b/csm_Kaolin_AVF29-731-Taffeta_aaccfff1da.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Taffeta</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-731</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ <li class="product-detail__colorway">
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/avf29-859">
+
+
+
+
+ <div class="product-detail__colorway-thumbnail-wrap">
+ <img class="product-detail__colorway-thumbnail" data-full-size="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-859-Wisteria.jpg" width="166" src="data:image/jpeg;base64,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" srcset="/fileadmin/_processed_/7/4/csm_Kaolin_AVF29-859-Wisteria_7aab38254f.jpg 166w,/fileadmin/_processed_/7/4/csm_Kaolin_AVF29-859-Wisteria_441dc3bec7.jpg 80w,/fileadmin/_processed_/7/4/csm_Kaolin_AVF29-859-Wisteria_7aab38254f.jpg 166w" />
+ </div>
+
+ <div class="product-detail__colorway-header">
+ <div class="product-detail__colorway-title" data-wg-notranslate>Wisteria</div>
+ <div class="product-detail__colorway-sku" data-wg-notranslate>AVF29-859</div>
+
+
+
+
+
+ </div> <!-- end .product-detail__colorway-header -->
+ </a> <!-- end .product-detail__colorway-link -->
+ </li> <!-- end .product-detail__colorway -->
+
+ </ul> <!-- end .product-detail__colorway-grid -->
+
+ <button class="button" type="button" hx-post="/north-america/products/product-detail?tx_versa_productdetail%5Baction%5D=addToCart&tx_versa_productdetail%5Bcolorway%5D=5376&tx_versa_productdetail%5Bcontroller%5D=ProductDetail&tx_versa_productdetail%5Bpattern%5D=633&cHash=d9e1947a7b82c0c91fd16fbebd5d770f" hx-target="[data-cart-contents]" hx-select="[data-cart-contents]" hx-swap="outerHTML">
+ Add <span data-wg-notranslate>Earthen</span> to sample cart
+ </button>
+ <div class="product-detail__sample-restriction">Samples are for the trade only.</div>
+
+ <div class="product-detail__pattern-description">
+
+ </div>
+ <div class="product-detail__info-wrap">
+ <div x-data="{ expanded: true }">
+ <h2 class="product-detail__info-title" @click.prevent="expanded = !expanded">
+ Product Specifications
+ <span class="product-detail__info-trigger" :class="expanded ? 'product-detail__info-trigger--expanded' : 'product-detail__info-trigger--collapsed'">
+ <svg class="filter-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_373" data-name="Group 373" transform="translate(0 0)" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+
+ </span>
+ </h2>
+ <div x-show="expanded" x-collapse>
+ <table class="product-detail__info-table product-detail__info-table--product-specs">
+
+
+ <tr class="product-detail__info-table-row">
+ <th>Collection</th>
+ <td data-wg-notranslate>Versa 20 oz. Evo® PVC-free</td>
+ </tr>
+
+ <tr class="product-detail__info-table-row">
+ <th>Weight</th>
+ <td data-wg-notranslate>20 oz. (452 gr/m²)</td>
+ </tr>
+
+ <tr class="product-detail__info-table-row">
+ <th>Content</th>
+ <td data-wg-notranslate>PVC-free</td>
+ </tr>
+ <tr class="product-detail__info-table-row">
+ <th>Width</th>
+ <td data-wg-notranslate>52/54" (132/137 cm)</td>
+ </tr>
+
+ <tr class="product-detail__info-table-row">
+ <th>Backing</th>
+ <td data-wg-notranslate>Osnaburg</td>
+ </tr>
+ <tr class="product-detail__info-table-row">
+ <th>Installation</th>
+ <td data-wg-notranslate>Non-Reverse Hang/Alignment Required</td>
+ </tr>
+
+ <tr class="product-detail__info-table-row">
+ <th>Pattern Repeat</th>
+ <td data-wg-notranslate>
+ V: 24" H: 51"
+ </td>
+ </tr>
+
+
+ <tr class="product-detail__info-table-row">
+ <th>Fire Safety</th>
+ <td data-wg-notranslate>Class A - ASTM E84 (GRC), NFPA 101 Life Safety Code, CAN/ULC S102, Euroclass EN13501 (B-s1,d0)</td>
+ </tr>
+
+ </table>
+
+ </div>
+ </div>
+
+
+ <div x-data="{ expanded: false }">
+ <h2 class="product-detail__info-title" @click.prevent="expanded = !expanded">
+ Sustainability
+ <span class="product-detail__info-trigger" :class="expanded ? 'product-detail__info-trigger--expanded' : 'product-detail__info-trigger--collapsed'">
+ <svg class="filter-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_373" data-name="Group 373" transform="translate(0 0)" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+
+ </span>
+ </h2>
+ <div x-show="expanded" x-collapse>
+ <ul class="product-detail__info-list">
+
+ <li class="product-detail__info-list-item">
+
+ Health Product Declaration (HPD)
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Recyclable
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Free of Phthlates, Formaldehyde, Heavy Metals (RoHS), PBDEs (Brominated Flame Retardants)
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Prop 65 Compliant
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Meets California Section 01350 Indoor Air Quality (Low VOC)
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Aggressive Manufacturing Materials Recovery and Reuse Program
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Environmental Product Declaration (EPD)
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ 20% Post-industrial Recycled Content
+
+ </li>
+
+ </ul>
+ </div>
+ </div>
+
+
+
+ <div x-data="{ expanded: false }">
+ <h2 class="product-detail__info-title" @click.prevent="expanded = !expanded">
+ Performance
+ <span class="product-detail__info-trigger" :class="expanded ? 'product-detail__info-trigger--expanded' : 'product-detail__info-trigger--collapsed'">
+ <svg class="filter-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_373" data-name="Group 373" transform="translate(0 0)" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+
+ </span>
+ </h2>
+ <div x-show="expanded" x-collapse>
+ <ul class="product-detail__info-list">
+
+ <li class="product-detail__info-list-item">
+
+ Versa Permavent Microventing Available
+
+ </li>
+
+ <li class="product-detail__info-list-item">
+
+ Assure Surface Protection Available
+
+ </li>
+
+ </ul>
+ </div>
+ </div>
+
+
+ <div x-data="{ expanded: false }">
+
+ <h2 class="product-detail__info-title" @click.prevent="expanded = !expanded">
+ Material Estimator
+ <span class="product-detail__info-trigger" :class="expanded ? 'product-detail__info-trigger--expanded' : 'product-detail__info-trigger--collapsed'">
+ <svg class="filter-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_373" data-name="Group 373" transform="translate(0 0)" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+
+ </span>
+ </h2>
+ <div x-show="expanded" x-collapse>
+ <div class="estimator">
+ <p class="estimator__contact">Contact customer service for exact yardage</p>
+ <form
+ @submit.prevent="showCalculations=true"
+ data-material-width-label="52/54" (132/137 cm)"
+ data-material-width-value="52"
+ x-data="{
+ perimeter: null,
+ height: null,
+ verticalRepeat: null,
+ materialWidth: $el.getAttribute('data-material-width-value') ?? null,
+ materialWidthLabel: $el.getAttribute('data-material-width-label') ?? null,
+ waste: 10,
+ showCalculations: false,
+ measure: 'imperial',
+
+ hasPresetMaterialWidth() {
+ return this.materialWidth && this.materialWidthLabel;
+ },
+
+ materialWidthInCentimeters() {
+ return this.materialWidth * 2.54;
+ },
+
+ totalSquareFeet() {
+ let totalHeight = this.height + (this.verticalRepeat / 12);
+ return (this.perimeter * totalHeight) * (1 + (this.waste / 100));
+ },
+
+ totalSquareMeters() {
+ let totalHeight = this.height + (this.verticalRepeat / 100);
+ return (this.perimeter * totalHeight) * (1 + (this.waste / 100));
+ },
+
+ totalSquareFeetRounded() {
+ return Math.ceil(this.totalSquareFeet());
+ },
+
+ totalSquareMetersRounded() {
+ return Math.ceil(this.totalSquareMeters());
+ },
+
+ totalSquareYardsRounded() {
+ return Math.ceil(this.totalSquareFeet() / 9);
+ },
+
+ totalLinearYardsRounded() {
+ return Math.ceil(this.totalSquareFeet() / (this.materialWidth / 12 * 3));
+ },
+
+ totalLinearMetersRounded() {
+ return Math.ceil(this.totalSquareMeters() / (this.materialWidthInCentimeters() / 100));
+ },
+
+
+ getFeetMeasure() {
+ if (this.measure === 'metric') {
+ return 'm';
+ } else {
+ return 'ft';
+ }
+ },
+
+ getInchesMeasure() {
+ if (this.measure === 'metric') {
+ return 'cm';
+ } else {
+ return 'in';
+ }
+ }
+ }">
+
+ <div class="estimator__field-wrap estimator__field-wrap--units">
+ <span class="estimator__label-text">Measured In:</span>
+ <label class="estimator__label" data-wg-notranslate>
+ <input class="estimator__field" type="radio" value="imperial" x-model="measure" /> feet / inches
+ </label>
+ <label class="estimator__label" data-wg-notranslate>
+ <input class="estimator__field" type="radio" value="metric" x-model="measure" /> meters / centimeters
+ </label>
+ </div> <!-- end .estimator__field-wrap -->
+ <div class="estimator__field-wrap">
+ <label class="estimator__label"><span class="estimator__label-text">Material Width:</span>
+ <span x-show="hasPresetMaterialWidth()">
+ <span x-text="materialWidthLabel"></span>
+ </span>
+ <span x-show="!hasPresetMaterialWidth()">
+ <input class="estimator__input" type="number" x-model.number="materialWidth" @change="showCalculations=false" required /> <span data-wg-notranslate x-text="getInchesMeasure" />
+ </span>
+ </label>
+ </div><!-- end .estimator__field-wrap -->
+ <div class="estimator__field-wrap">
+ <label class="estimator__label"><span class="estimator__label-text">Perimeter:</span>
+ <input class="estimator__input" type="number" x-model.number="perimeter" @change="showCalculations=false" required /> <span data-wg-notranslate x-text="getFeetMeasure" />
+ </label>
+ </div>
+
+ <div class="estimator__field-wrap">
+ <label class="estimator__label"><span class="estimator__label-text">Height:</span>
+ <input class="estimator__input" type="number" x-model.number="height" @change="showCalculations=false" required /> <span data-wg-notranslate x-text="getFeetMeasure" />
+ </label>
+ </div><!-- end .estimator__field-wrap -->
+
+ <div class="estimator__field-wrap">
+ <label class="estimator__label"><span class="estimator__label-text">Vertical repeat:</span>
+ <input class="estimator__input" type="number" x-model.number="verticalRepeat" @change="showCalculations=false" /> <span data-wg-notranslate x-text="getInchesMeasure" />
+ </label>
+ </div><!-- end .estimator__field-wrap -->
+
+ <div class="estimator__field-wrap">
+ <label class="estimator__label"><span class="estimator__label-text">Waste:</span>
+ <input class="estimator__input" type="number" x-model.number="waste" @change="showCalculations=false" /> %
+ </label>
+ </div><!-- end .estimator__field-wrap -->
+
+ <button class="button estimator__submit" type="submit">Calculate</button>
+
+ <div x-show="showCalculations">
+ <br>
+ <strong>YOU NEED:</strong>
+ <ul x-show="measure == 'metric'">
+ <li>approx. <span x-text="totalSquareMetersRounded"></span> sq. m.</li>
+ <li>approx. <span x-text="totalLinearMetersRounded"></span> linear m.</li>
+ </ul>
+ <ul x-show="measure !== 'metric'">
+ <li>approx. <strong x-text="totalSquareFeetRounded"></strong> sq. ft.</li>
+ <li>approx. <strong x-text="totalSquareYardsRounded"></strong> sq. yd.</li>
+ <li>approx. <strong x-text="totalLinearYardsRounded"></strong> linear yd.</li>
+ </ul>
+ </div>
+ </form>
+</div> <!-- end .estimator -->
+
+ </div>
+ </div>
+
+
+ <div x-data="{ expanded: false }">
+ <h2 class="product-detail__info-title" @click.prevent="expanded = !expanded">
+ Downloads
+ <span class="product-detail__info-trigger" :class="expanded ? 'product-detail__info-trigger--expanded' : 'product-detail__info-trigger--collapsed'">
+ <svg class="filter-caret" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.246" height="6.123" viewBox="0 0 10.246 6.123">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_809" data-name="Rectangle 809" width="10.246" height="6.123" transform="translate(0 0)" fill="none"/>
+ </clipPath>
+ </defs>
+ <g id="Group_373" data-name="Group 373" transform="translate(0 0)" clip-path="url(#clip-path)">
+ <path id="Path_290" data-name="Path 290" d="M9.246,5.123,5.123,1,1,5.123" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+
+ </span>
+ </h2>
+ <div x-show="expanded" x-collapse>
+ <ul class="product-detail__info-list product-detail__info-list--downloads">
+
+ <li class="product-detail__info-list-item">
+ <a class="product-detail__download-link" href="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Specifications/Kaolin_AVF29_Specification.pdf" target="_blank"><span class="download-icon-wrap"><svg id="Group_516" class="icon icon--download" data-name="Group 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_876" data-name="Rectangle 876" width="20" height="20" fill="none" stroke="#000" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_508" data-name="Group 508" clip-path="url(#clip-path)">
+ <path id="Path_306" data-name="Path 306" d="M19,13v4a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V13" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_307" data-name="Path 307" d="M5,8l5,5,5-5" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_121" data-name="Line 121" y1="12" transform="translate(10 1)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+</span>Complete Specifications</a>
+ </li>
+
+
+ <li class="product-detail__info-list-item">
+ <a class="product-detail__download-link" id="thumbnail-image-download-" href="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Thumbnails/Kaolin_AVF29-128-Earthen.jpg" target="_blank"><span class="download-icon-wrap"><svg id="Group_516" class="icon icon--download" data-name="Group 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_876" data-name="Rectangle 876" width="20" height="20" fill="none" stroke="#000" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_508" data-name="Group 508" clip-path="url(#clip-path)">
+ <path id="Path_306" data-name="Path 306" d="M19,13v4a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V13" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_307" data-name="Path 307" d="M5,8l5,5,5-5" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_121" data-name="Line 121" y1="12" transform="translate(10 1)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+</span>Thumbnail image</a>
+ </li>
+
+
+
+
+
+ <li class="product-detail__info-list-item">
+ <a class="product-detail__download-link" id="room-image-download-0" href="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Install/Kaolin_AVF29_472_Ambrosia_install_ALT_rgb.jpg" target="_blank">
+ <span class="download-icon-wrap"><svg id="Group_516" class="icon icon--download" data-name="Group 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_876" data-name="Rectangle 876" width="20" height="20" fill="none" stroke="#000" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_508" data-name="Group 508" clip-path="url(#clip-path)">
+ <path id="Path_306" data-name="Path 306" d="M19,13v4a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V13" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_307" data-name="Path 307" d="M5,8l5,5,5-5" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_121" data-name="Line 121" y1="12" transform="translate(10 1)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+</span>Installation photo 1
+ </a>
+ </li>
+
+
+
+
+
+ <li class="product-detail__info-list-item">
+ <a class="product-detail__download-link" id="room-image-download-1" href="/fileadmin/products/Versa_Wallcovering/Kaolin_AVF29/Install/Kaolin_AVF29_472_Ambrosia_install_card_rgb.jpg" target="_blank">
+ <span class="download-icon-wrap"><svg id="Group_516" class="icon icon--download" data-name="Group 516" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20" viewBox="0 0 20 20">
+ <defs>
+ <clipPath id="clip-path">
+ <rect id="Rectangle_876" data-name="Rectangle 876" width="20" height="20" fill="none" stroke="#000" stroke-width="1"/>
+ </clipPath>
+ </defs>
+ <g id="Group_508" data-name="Group 508" clip-path="url(#clip-path)">
+ <path id="Path_306" data-name="Path 306" d="M19,13v4a2,2,0,0,1-2,2H3a2,2,0,0,1-2-2V13" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <path id="Path_307" data-name="Path 307" d="M5,8l5,5,5-5" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ <line id="Line_121" data-name="Line 121" y1="12" transform="translate(10 1)" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+</svg>
+</span>Installation photo 2
+ </a>
+ </li>
+
+
+
+ </ul>
+ </div>
+ </div>
+
+
+ </div> <!-- end .product-detail__info-wrap -->
+ </div> <!-- end .product-detail__column--info -->
+ </div> <!-- end .product-detail__inner-wrap -->
+ </div>
+ </div> <!-- end .frame -->
+
+
+</div> <!-- end .product-detail -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </main> <!-- end .content-block-1 -->
+
+
+
+<div class="page-footer__wrap">
+ <footer class="page-footer">
+ <section class="page-footer__content">
+ <h3 class="page-footer__title">
+ <span class="page-footer__title-text">Versa Designed Surfaces</span>
+ <img class="page-footer__logo" src="/_assets/static/graphics/logos/versa_logo_mark_white.svg" />
+ </h3>
+
+ <div class="page-footer__column page-footer__column--1">
+ <h4 class="page-footer__menu-title">Services</h4>
+
+ <ul class="page-footer__menu">
+
+ <li class="page-footer__menu-item">
+
+
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/company/contact#c170">
+ Contact Us
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/company/contact#c466">
+ Find a Distributor
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/resources">
+ Resources
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ </ul>
+
+ </div> <!-- end .page-footer__column -->
+
+ <div class="page-footer__column page-footer__column--2">
+ <h4 class="page-footer__menu-title">Brands</h4>
+
+ <ul class="page-footer__menu">
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/brands/versa-wallcovering">
+ Versa Wallcovering
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/brands/invinci-wallcovering">
+ Invinci Wallcovering
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/brands/volterra-wallcovering">
+ Volterra Wallcovering
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/digital-studio">
+ Digital Studio
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ </ul>
+
+ </div> <!-- end .page-footer__column -->
+
+ <div class="page-footer__column page-footer__column--3">
+ <h4 class="page-footer__menu-title">Categories</h4>
+
+ <ul class="page-footer__menu">
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/categories/vinyl">
+ Vinyl
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/technologies/circon">
+ Bio-sourced Vinyl
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/categories/evo">
+ PVC-free
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/categories/wall-protection">
+ Wall Protection
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/categories/performance">
+ Performance
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ <li class="page-footer__menu-item">
+
+
+
+
+<a class="page-footer__menu-link" href="/north-america/products/digital-studio">
+ Digital Studio
+</a>
+
+ </li> <!-- end .page-footer__menu-item -->
+
+ </ul>
+
+ </div> <!-- end .page-footer__column -->
+
+ <div class="page-footer__column page-footer__column--4">
+ <h4 class="page-footer__menu-title">Stay up to date with Versa!</h4>
+
+
+
+
+
+
+
+
+
+
+ <a id="c342"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+ <form class="page-footer__newsletter-form">
+ <input class="page-footer__newsletter-email" type="email" placeholder="Email Address" />
+ <input class="page-footer__newsletter-submit" type="submit" value="Subscribe" />
+</form>
+<div id="newsletter-signup-message" class="page-footer__newsletter-confirm"></div>
+<div class="cf-turnstile" id="turnstile-newsletter" data-sitekey="0x4AAAAAABvvemrE3ytCQc5E" data-theme="light" data-appearance="execute"></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div> <!-- end .page-footer__column -->
+
+ <div class="page-footer__column page-footer__column--5">
+ <h4 class="page-footer__menu-title">Follow Us</h4>
+
+
+
+
+
+
+
+
+
+
+ <a id="c15"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="page-footer__social-link-wrap">
+ <a class="page-footer__social-link footer__social-link--instagram" href="https://www.instagram.com/versadesignedsurfaces/" target="_blank">
+ <span class="page-footer__social-link-text">instagram</span>
+ <img class="page-footer__social-link-icon" src="/_assets/static/graphics/icons/instagram.svg" />
+ </a>
+ <a class="page-footer__social-link footer__social-link--x" href="https://www.linkedin.com/company/versadesignedsurfaces/" target="_blank">
+ <span class="page-footer__social-link-text">LinkedIn</span>
+ <img class="page-footer__social-link-icon" src="/_assets/static/graphics/icons/linkedin.png" />
+ </a>
+ </a>
+ <a class="page-footer__social-link footer__social-link--facebook" href="https://www.facebook.com/versadesignedsurfaces" target="_blank">
+ <span class="page-footer__social-link-text">Facebook</span>
+ <img class="page-footer__social-link-icon" src="/_assets/static/graphics/icons/facebook.svg" />
+ </a>
+ </a>
+</div> <!-- end .page-footer__social-link-wrap -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </div> <!-- end .page-footer__column -->
+
+ </section> <!-- end .page-footer__content -->
+ <div class="page-footer__legal">
+ © Versa Designed Surfaces | <a href="/north-america/privacy-policy" class="utility-menu__link utility-menu__item--distributor">Privacy Policy</a>
+ </div>
+ </footer> <!-- end .page-footer -->
+</div> <!-- end .page-footer__wrap -->
+
+<div id="region_language_selector"
+ style="display: none;"
+ @submit.prevent="submit()"
+ x-data="{
+ // Option 1: Official API. Not ready at page load
+ // originalLanguage: Weglot.getCurrentLang() ?? 'en',
+ // selectedLanguage: Weglot.getCurrentLang() ?? 'en',
+
+ // Option 2: Read from Local Storage directly
+ originalLanguage: window.localStorage.getItem('wglang') ?? 'en',
+ selectedLanguage: window.localStorage.getItem('wglang') ?? 'en',
+
+ originalRegion: document.querySelector('body').getAttribute('data-current-region') ?? 'north-america',
+ selectedRegion: document.querySelector('body').getAttribute('data-current-region') ?? 'north-america',
+
+ submit() {
+ if (this.originalLanguage !== this.selectedLanguage) {
+ // Option 1: official API, changes language immediately.
+ // Weglot.switchTo(this.selectedLanguage);
+
+ // Option 2: Set local storage directly. Change not reflected until page reload.
+ window.localStorage.setItem('wglang', this.selectedLanguage);
+ }
+
+ if ((this.originalRegion !== this.selectedRegion) || (this.originalLanguage !== this.selectedLanguage)){
+ window.location.href = '/' + this.selectedRegion;
+ }
+ }
+ }"
+>
+ <form class="region-select__form">
+ <h2 class="region-select__header">Language & Region</h2>
+ <div class="region-select__column-group">
+ <div class="region-select__column region-select__column--1">
+ <p>The language selected will translate the site in that language.</p>
+ <p>Choose a region to see localized content and product availability.</p>
+ </div> <!-- end .region-select__column--1 -->
+ <div class="region-select__column region-select__column--2">
+ <fieldset class="region-select__language-selector">
+ <legend class="region-select__selector-title">Language</legend>
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedLanguage === 'en' }">
+ <span class="form__item-label-text">English</span>
+ <input class="form__item-field" type="radio" name="language" value="en" x-model="selectedLanguage" />
+ </label>
+ </div> <!-- end .form__item -->
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedLanguage === 'es' }">
+ <span class="form__item-label-text">Spanish</span>
+ <input class="form__item-field" type="radio" name="language" value="es" x-model="selectedLanguage" />
+ </label>
+ </div> <!-- end .form__item -->
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedLanguage === 'fr' }">
+ <span class="form__item-label-text">French</span>
+ <input class="form__item-field" type="radio" name="language" value="fr" x-model="selectedLanguage" />
+ </label>
+ </div> <!-- end .form__item -->
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedLanguage === 'de' }">
+ <span class="form__item-label-text">German</span>
+ <input class="form__item-field" type="radio" name="language" value="de" x-model="selectedLanguage" />
+ </label>
+ </div> <!-- end .form__item -->
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedLanguage === 'zh-tw' }">
+ <span class="form__item-label-text">Mandarin</span>
+ <input class="form__item-field" type="radio" name="language" value="zh-tw" x-model="selectedLanguage" />
+ </label>
+ </div> <!-- end .form__item -->
+ </fieldset> <!-- end .region-select__language-selector -->
+ <fieldset class="region-select__region-selector">
+ <legend class="region-select__selector-title">Region</legend>
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">Europe</span>
+ <input class="form__item-field" type="radio" name="region" value="europe" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">Middle East</span>
+ <input class="form__item-field" type="radio" name="region" value="middle-east" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">Africa</span>
+ <input class="form__item-field" type="radio" name="region" value="africa" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">Asia</span>
+ <input class="form__item-field" type="radio" name="region" value="asia" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">Oceania</span>
+ <input class="form__item-field" type="radio" name="region" value="oceania" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">South America</span>
+ <input class="form__item-field" type="radio" name="region" value="south-america" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ <div class="form__item">
+ <label class="form__item-label" :class="{ 'form__item-label--selected': selectedRegion === $el.querySelector('input').value }">
+ <span class="form__item-label-text">North America</span>
+ <input class="form__item-field" type="radio" name="region" value="north-america" x-model="selectedRegion"/>
+ </label>
+ </div> <!-- end .form__item -->
+
+ </fieldset> <!-- end .region-select__region-select -->
+ </div> <!-- end .rregion-select__column--2 -->
+ </div> <!-- end .region-select__column-group -->
+ <button type="submit" class="region-select__submit button" value="Submit">Submit</button>
+ <a class="button-outline" data-fancybox-close >Cancel</a>
+ </form> <!-- end .region-select -->
+</div> <!-- end #region_language_selector -->
+
+
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/DW-Programming/verification/tk11241/verify.cjs b/DW-Programming/verification/tk11241/verify.cjs
new file mode 100644
index 00000000..ccfa52bd
--- /dev/null
+++ b/DW-Programming/verification/tk11241/verify.cjs
@@ -0,0 +1,129 @@
+const assert = require('node:assert/strict');
+const fs = require('node:fs');
+const path = require('node:path');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const listing = require('../../scrape-versa-evo-pvcfree');
+const legacy = require('../../versa-evo-pvcfree-scraper');
+const enrichment = require('../../versa-evo-enrich');
+const pageUrl = 'https://www.versadesignedsurfaces.com/north-america/products/product-detail/kaolin-afv29-usa/avf29-128';
+const checks = [];
+function check(name, run) { run(); checks.push({ name, verdict: 'PASS' }); }
+
+(async () => {
+ const browser = await chromium.launch({ headless: true });
+ try {
+ const page = await browser.newPage();
+ // Captured real vendor HTML, with all external requests blocked for repeatability.
+ await page.route('**/*', route => route.request().isNavigationRequest()
+ ? route.fulfill({ contentType: 'text/html', body: fs.readFileSync(path.join(__dirname, 'kaolin-vendor.html'), 'utf8') })
+ : route.abort());
+ const data = await listing.scrapeDetailPage(page, pageUrl);
+ check('Real scraper browser boundary: Kaolin Earthen with absolute SKU swatch', () => {
+ assert(data); assert.equal(data.main.colorName, 'Earthen');
+ assert.match(data.main.imgSrc, /^https:\/\/www\.versadesignedsurfaces\.com\/fileadmin\/.+AVF29-128-Earthen/);
+ });
+ check('Live HTML siblings: real labels, unique same-pattern swatches, no shared installs', () => {
+ assert(data.colorways.length > 5);
+ assert.equal(data.colorways.find(c => c.sku === 'AVF29-472').colorName, 'Ambrosia');
+ for (const cw of data.colorways) {
+ assert(cw.colorName && !cw.colorName.startsWith('#'));
+ assert(cw.imgSrc && cw.imgSrc.startsWith('https://'));
+ assert(!/install|room|data:|base64/i.test(cw.imgSrc));
+ }
+ assert.equal(new Set(data.colorways.map(c => c.imgSrc)).size, data.colorways.length);
+ });
+ const link = (sku, img, extra = '') => `<a class="product-detail__colorway-link" href="/north-america/products/product-detail/kaolin-afv29-usa/${sku}"><span class="product-detail__colorway-title">${extra || 'Celadon'}</span><img class="product-detail__colorway-thumbnail" ${img}></a>`;
+ const fixture = `<div class="product-detail"><div class="product-detail__colorway-image-title">#d1cfcb</div>
+ <img class="product-detail__featured-photo" src="/fileadmin/Kaolin_AVF29_128_install.jpg">
+ ${link('avf29-240', 'src="data:image/png;base64,AAAA" srcset="fileadmin/Kaolin_AVF29-240.jpg 80w,/fileadmin/Kaolin_AVF29-240-large.jpg 800w"')}
+ ${link('avf29-472', 'data-src="//www.versadesignedsurfaces.com/fileadmin/Kaolin_AVF29-472.jpg"')}
+ ${link('avf29-888', 'src="https://www.versadesignedsurfaces.com/data:image/jpeg;base64,AAAA"')}
+ ${link('avf29-777', 'src="/fileadmin/Kaolin_AVF29-128.jpg"')}
+ ${link('avf29-666', 'src="/fileadmin/Kaolin_AVF29-666-install.jpg"')}
+ ${link('avf29-555', 'src="fileadmin/Kaolin_AVF29-555_Mushroom.jpg"')}
+ ${link('avf29-444', 'src="javascript:alert(1)"')}
+ <a class="product-detail__colorway-link" href="/north-america/products/product-detail/other-pattern/avf29-333">Other pattern</a>
+ <a class="product-detail__colorway-link" href="https://other.example/north-america/products/product-detail/kaolin-afv29-usa/avf29-222">Other host</a>
+ </div>`;
+ await page.setContent(fixture);
+ const negative = await page.evaluate(extractVersaColorways, { pageUrl });
+ check('Missing swatch fails closed despite matching room photo; HEX is not a name', () => {
+ assert.equal(negative.main.imgSrc, null); assert.equal(negative.main.colorName, null);
+ });
+ check('Relative, protocol-relative, lazy srcset resolve; largest width preferred', () => {
+ assert.equal(negative.colorways.find(c => c.sku === 'AVF29-240').imgSrc, 'https://www.versadesignedsurfaces.com/fileadmin/Kaolin_AVF29-240-large.jpg');
+ assert.equal(negative.colorways.find(c => c.sku === 'AVF29-472').imgSrc, 'https://www.versadesignedsurfaces.com/fileadmin/Kaolin_AVF29-472.jpg');
+ assert.equal(negative.colorways.find(c => c.sku === 'AVF29-555').imgSrc, 'https://www.versadesignedsurfaces.com/fileadmin/Kaolin_AVF29-555_Mushroom.jpg');
+ });
+ check('Wrong SKU, placeholders, room shots and unsafe schemes are rejected', () => {
+ for (const sku of ['888', '777', '666', '444']) assert.equal(negative.colorways.find(c => c.sku === 'AVF29-' + sku).imgSrc, null);
+ assert(!negative.colorways.find(c => c.sku === 'AVF29-333' || c.sku === 'AVF29-222'));
+ });
+ for (const image of [data.main.imgSrc, null]) {
+ const p = { mfr_sku: 'AVF29-128', pattern_name: 'Kaolin', color_name: 'Earthen', image_url: image, product_url: pageUrl };
+ for (const [name, run] of [['listing', db => listing.upsertProduct(p, db)], ['legacy', db => legacy.upsertProduct(db, p)]]) {
+ const captured = [];
+ await run({ query: async (sql, values) => { captured.push({ sql, values }); return { rows: [{ is_insert: true }] }; } });
+ check(`${name} SQL boundary: ${image ? 'absolute swatch' : 'NULL replaces stale image'} and JSON array`, () => {
+ assert.equal(captured.length, 1);
+ const { sql, values } = captured[0];
+ assert.match(sql, /image_url = EXCLUDED\.image_url,/);
+ assert.match(sql, /all_images = EXCLUDED\.all_images,/);
+ assert.equal(values[name === 'listing' ? 16 : 14], image);
+ assert.deepEqual(JSON.parse(values.at(-1)), image ? [image] : []);
+ const placeholders = [...sql.matchAll(/\$(\d+)/g)].map(m => Number(m[1]));
+ assert.equal(Math.max(...placeholders), values.length);
+ });
+ }
+ }
+ for (const imageUrl of [data.main.imgSrc, null]) {
+ const captured = [];
+ const db = { query: async (sql, values) => { captured.push({ sql, values }); return { rows: [] }; } };
+ await enrichment.updateProduct(db, { id: 11241, color_name: '#d1cfcb', image_url: 'data:image/png;base64,AAAA' }, { colorName: 'Earthen', imageUrl });
+ check(`Enrichment SQL boundary: HEX replaced and ${imageUrl ? 'swatch' : 'NULL'} saved without fallback`, () => {
+ assert.equal(captured.length, 1);
+ assert.deepEqual(captured[0].values, ['Earthen', imageUrl, JSON.stringify(imageUrl ? [imageUrl] : []), 11241]);
+ assert.match(captured[0].sql, /WHERE id = \$4/);
+ });
+ }
+ await enrichment.updateProduct({ query: async () => { throw new Error('Unnecessary update'); } },
+ { id: 11241, color_name: 'Earthen', image_url: data.main.imgSrc }, { colorName: null, imageUrl: null });
+ checks.push({ name: 'Enrichment preserves already verified data when no new fields are available', verdict: 'PASS' });
+ for (const [sku, route, filename] of [
+ ['INV-MER1206-338', 'euchari-inv-mer-usa', 'Euchari_INV-MER1206-Birch.jpg'],
+ ['INV-MHN1804-347', 'mahina/mhn', 'Mahina_MHN1804-Cavern.jpg'],
+ ['MSL1020-686', 'imprint-686-usa', 'Imprint_MSL1020-North_Sea.jpg'],
+ ['BLP-5968-635', 'bella-palma-635-usa', 'Bella_Palma_BLP_5968-Bayou_Mylar.jpg'],
+ ]) {
+ await page.setContent(`<div class="product-detail"><div class="product-detail__colorway-image-title">Vendor label</div><img class="product-detail__colorway-image" src="/fileadmin/${filename}"></div>`);
+ const result = await page.evaluate(extractVersaColorways, { pageUrl: `https://www.versadesignedsurfaces.com/north-america/products/product-detail/${route}/${sku.toLowerCase()}` });
+ check(`Current vendor SKU convention ${sku} yields its attributable swatch`, () => {
+ assert.equal(result.main.imgSrc, 'https://www.versadesignedsurfaces.com/fileadmin/' + filename);
+ });
+ }
+ const { spawnSync } = require('node:child_process');
+ for (const script of ['scrape-versa-evo-pvcfree.js', 'versa-evo-pvcfree-scraper.js', 'versa-evo-enrich.js']) {
+ const result = spawnSync(process.execPath, [path.resolve(__dirname, '../..', script)], { encoding: 'utf8' });
+ check(`${script}: direct invocation refuses writes without --apply`, () => {
+ assert.equal(result.status, 1); assert.match(result.stderr, /explicit Steve approval/);
+ });
+ }
+ await page.setContent('<html><body>Not a product page</body></html>');
+ await assert.rejects(page.evaluate(extractVersaColorways, { pageUrl }), /identity\/markup missing/);
+ checks.push({ name: 'Invalid detail page throws before any catalog update', verdict: 'PASS' });
+ const proof = {
+ ticket: 'TK-11241', intent: 'Vendor HTML to attributable swatch/color to SQL payload', risk_tier: 'R1',
+ environment: 'Local Chromium; captured vendor HTML; recording SQL adapter (no DB connection)',
+ timestamp: new Date().toISOString(), checks, vendor_page: pageUrl,
+ source_sha256: Object.fromEntries(['lib/versa-colorway-extraction.js', 'scrape-versa-evo-pvcfree.js', 'versa-evo-pvcfree-scraper.js', 'versa-evo-enrich.js'].map(file => [file, require('node:crypto').createHash('sha256').update(fs.readFileSync(path.resolve(__dirname, '../..', file))).digest('hex')])),
+ source: 'kaolin-vendor.html captured by curl from vendor on 2026-09-10',
+ commands: ['node verification/tk11241/verify.cjs'],
+ live_catalog: 'NOT RUN: requires Steve approval; no persisted production-state claim',
+ cleanup: 'Browser closed; fixture and evidence retained; no database, Shopify, Slack or remote writes',
+ verdict: 'PASS for local code; production refresh approval pending'
+ };
+ fs.writeFileSync(path.join(__dirname, 'e2e-proof.json'), JSON.stringify(proof, null, 2) + '\n');
+ console.log(JSON.stringify({ passed: checks.length, colorways: data.colorways.length, swatch: data.main.imgSrc }, null, 2));
+ } finally { await browser.close(); }
+})().catch(error => { console.error(error); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p2/__tests__/filename-proves-sku.test.cjs b/DW-Programming/verification/tk11485-p2/__tests__/filename-proves-sku.test.cjs
new file mode 100644
index 00000000..a2bc5ee0
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p2/__tests__/filename-proves-sku.test.cjs
@@ -0,0 +1,47 @@
+// Negative test for filenameProvesSku (TK-11769 / F3, p2/p3 form).
+// Zero-dependency: runs with plain `node`. No jest/ts-jest exists in this repo, so
+// this exercises the ACTUAL shipped predicate by extracting it from collect-plan.cjs
+// and evaluating it in isolation — it tests the real code, not a copy.
+//
+// The fault it guards: an UNANCHORED substring match lets the FULL stored SKU
+// `A184-428` match a filename for the LONGER prefix-sibling SKU `A184-4280`,
+// proving a swatch for the WRONG product; and an empty stored SKU makes
+// file.includes('') prove EVERY swatch. Against the pre-fix predicate this test
+// goes RED; against the anchored predicate it goes GREEN.
+// Run: node __tests__/filename-proves-sku.test.cjs
+// Prove RED against HEAD: COLLECT_PLAN_SRC=<head-extract> node __tests__/filename-proves-sku.test.cjs
+const fs = require('node:fs');
+const path = require('node:path');
+
+// Testability seam (CLAUDE.md TK-11431 amendment 3): default to the real sibling
+// file; an override lets the RED-then-GREEN proof point at the pre-fix source.
+const srcPath = process.env.COLLECT_PLAN_SRC || path.join(__dirname, '..', 'collect-plan.cjs');
+const source = fs.readFileSync(srcPath, 'utf8');
+const start = source.indexOf('const filenameProvesSku');
+const end = source.indexOf('\n};', start);
+if (start === -1 || end === -1) { console.error('FAIL: could not locate filenameProvesSku in ' + srcPath); process.exit(1); }
+const body = source.slice(start, end + 3);
+// eslint-disable-next-line no-new-func
+const filenameProvesSku = new Function(`${body}\nreturn filenameProvesSku;`)();
+
+// p2/p3 match on the FULL stored SKU (no collection-suffix strip, unlike p4).
+const cases = [
+ // [imgSrc, storedSku, expectProven, label]
+ ['https://cdn.example.com/swatch/A184-4280_thumb.jpg', 'A184-428', false, 'prefix-sibling must be REFUSED (full SKU A184-428 must not match A184-4280)'],
+ ['https://cdn.example.com/swatch/A184-428_thumb.jpg', 'A184-428', true, 'legit swatch carrying the full SKU must PROVE'],
+ ['https://cdn.example.com/swatch/a184-428-colorway.jpg', 'A184-428', true, 'case-insensitive full SKU must PROVE'],
+ ['https://cdn.example.com/swatch/A184_428_thumb.jpg', 'A184-428', true, 'underscore-normalized full SKU must PROVE'],
+ ['https://cdn.example.com/swatch/A185-004_thumb.jpg', 'A184-428', false, 'unrelated sibling must be REFUSED'],
+ ['https://cdn.example.com/swatch/ANYTHING-999.jpg', '', false, 'empty stored SKU must REFUSE everything (file.includes("") proves all)'],
+];
+
+let failed = 0;
+for (const [img, sku, expect, label] of cases) {
+ const got = filenameProvesSku(img, sku);
+ const ok = got === expect;
+ if (!ok) failed++;
+ console.log(`${ok ? 'PASS' : 'FAIL'}: ${label} (expected ${expect}, got ${got})`);
+}
+
+if (failed) { console.error(`\n${failed} case(s) failed — predicate is unanchored/incorrect.`); process.exit(1); }
+console.log('\nAll cases passed — predicate anchors on non-digit boundaries and guards the empty key.');
diff --git a/DW-Programming/verification/tk11485-p2/apply-plan.cjs b/DW-Programming/verification/tk11485-p2/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p2/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p2/check-image-liveness.cjs b/DW-Programming/verification/tk11485-p2/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p2/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p2/collect-plan.cjs b/DW-Programming/verification/tk11485-p2/collect-plan.cjs
new file mode 100644
index 00000000..363c35bc
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p2/collect-plan.cjs
@@ -0,0 +1,86 @@
+// One-time read-only repair planner. Reuses the production browser extractor;
+// never connects to PostgreSQL. Input is the approved canonical before snapshot.
+const fs = require('node:fs');
+const path = require('node:path');
+const crypto = require('node:crypto');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const dir = path.join(__dirname, 'production');
+const rows = JSON.parse(fs.readFileSync(path.join(dir, 'targets.json')));
+const cachePath = path.join(dir, 'vendor-observations.json');
+const observations = fs.existsSync(cachePath) ? JSON.parse(fs.readFileSync(cachePath)) : {};
+const resultPath = path.join(dir, 'plan.json');
+const canonical = u => { try { const url = new URL(u); return url.origin === 'https://www.versadesignedsurfaces.com' ? url.href : null; } catch { return null; } };
+const skuMatches = (pageSku, storedSku) => {
+ const a = String(pageSku || '').toUpperCase(), b = String(storedSku || '').toUpperCase();
+ return a === b || new RegExp('^' + b.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '-[0-9]{2,4}$').test(a);
+};
+// COMPENSATING GUARD (TK-11485 phase 2): the relaxation above gives up one identity
+// check, so the swatch filename must independently carry the row's exact stored SKU.
+const filenameProvesSku = (imgSrc, storedSku) => {
+ if (!imgSrc) return false;
+ const norm = v => String(v).toUpperCase().replace(/_/g, '-');
+ const key = norm(storedSku);
+ if (!key) return false; // an empty key must never prove any swatch
+ const file = norm(decodeURIComponent(String(imgSrc).replace(/^.*\//, '')));
+ // Anchor the stored SKU on a non-digit (or string) boundary both sides so key
+ // A184-428 cannot match the LONGER prefix-sibling SKU A184-4280 (TK-11769 / F3).
+ const esc = s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp('(^|[^0-9])' + esc(key) + '([^0-9]|$)').test(file);
+};
+const key = r => canonical(r.product_url);
+const pattern = r => { try { return new URL(r.product_url).pathname.replace(/\/[^/]+\/?$/, ''); } catch { return ''; } };
+
+(async () => {
+ const browser = await chromium.launch({ headless: true });
+ try {
+ let fetched = 0;
+ async function visit(row) {
+ const url = key(row);
+ if (!url || (observations[url] && skuMatches(observations[url].sku, row.mfr_sku))) return;
+ const response = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!response.ok) { console.log('FETCH_FAIL', row.id, response.status); return; }
+ if (response.url.replace(/\/$/, '') !== url.replace(/\/$/, '')) {
+ console.log('REDIRECT', row.id, response.url); return;
+ }
+ const html = await response.text();
+ const page = await browser.newPage();
+ try {
+ await page.route('**/*', route => route.abort());
+ await page.setContent(html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, ''), { waitUntil: 'domcontentloaded' });
+ const data = await page.evaluate(extractVersaColorways, { pageUrl: url });
+ if (!skuMatches(data.main.sku, row.mfr_sku)) throw new Error('SKU mismatch');
+ const evidence = { fetched_from: url, fetched_at: new Date().toISOString(), html_sha256: crypto.createHash('sha256').update(html).digest('hex') };
+ for (const cw of data.colorways) observations[cw.url] = { ...cw, ...evidence };
+ fs.writeFileSync(cachePath, JSON.stringify(observations, null, 2) + '\n');
+ fetched++;
+ console.log('PAGE', fetched, row.id, data.main.sku, data.colorways.length, data.main.imgSrc ? 'swatch' : 'NULL');
+ } finally { await page.close(); }
+ await new Promise(resolve => setTimeout(resolve, 350));
+ }
+ // One page usually proves all siblings; then fetch any missing exact row URLs.
+ const first = [...new Map(rows.map(row => [pattern(row), row])).values()];
+ for (const batch of [first, rows]) {
+ let next = 0;
+ await Promise.all(Array.from({ length: 3 }, async () => {
+ while (next < batch.length) {
+ const row = batch[next++];
+ try { await visit(row); } catch (e) { console.log('ERROR', row.id, e.message); }
+ }
+ }));
+ }
+ const plan = [], unresolved = [];
+ for (const row of rows) {
+ const item = observations[key(row)];
+ if (!item || !skuMatches(item.sku, row.mfr_sku)) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url }); continue; }
+ const proven = filenameProvesSku(item.imgSrc, row.mfr_sku);
+ if (item.imgSrc && !proven) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url, reason: 'swatch filename does not carry stored SKU' }); continue; }
+ const color_name = item.colorName || (/^#[0-9a-f]{3,8}$/i.test(row.color_name || '') ? null : row.color_name);
+ plan.push({ id: row.id, sku: row.mfr_sku, before: { image_url: row.image_url, all_images: row.all_images, color_name: row.color_name },
+ after: { image_url: item.imgSrc, all_images: JSON.stringify(item.imgSrc ? [item.imgSrc] : []), color_name },
+ evidence: { url: item.url, fetched_from: item.fetched_from, fetched_at: item.fetched_at, html_sha256: item.html_sha256 } });
+ }
+ fs.writeFileSync(resultPath, JSON.stringify({ generated_at: new Date().toISOString(), approved_scope: 'TK-11241 ungate and run', plan, unresolved }, null, 2) + '\n');
+ console.log('PLAN', JSON.stringify({ ready: plan.length, unresolved: unresolved.length, null_images: plan.filter(p => !p.after.image_url).length, null_colors: plan.filter(p => !p.after.color_name).length }));
+ } finally { await browser.close(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p3/__tests__/filename-proves-sku.test.cjs b/DW-Programming/verification/tk11485-p3/__tests__/filename-proves-sku.test.cjs
new file mode 100644
index 00000000..a2bc5ee0
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p3/__tests__/filename-proves-sku.test.cjs
@@ -0,0 +1,47 @@
+// Negative test for filenameProvesSku (TK-11769 / F3, p2/p3 form).
+// Zero-dependency: runs with plain `node`. No jest/ts-jest exists in this repo, so
+// this exercises the ACTUAL shipped predicate by extracting it from collect-plan.cjs
+// and evaluating it in isolation — it tests the real code, not a copy.
+//
+// The fault it guards: an UNANCHORED substring match lets the FULL stored SKU
+// `A184-428` match a filename for the LONGER prefix-sibling SKU `A184-4280`,
+// proving a swatch for the WRONG product; and an empty stored SKU makes
+// file.includes('') prove EVERY swatch. Against the pre-fix predicate this test
+// goes RED; against the anchored predicate it goes GREEN.
+// Run: node __tests__/filename-proves-sku.test.cjs
+// Prove RED against HEAD: COLLECT_PLAN_SRC=<head-extract> node __tests__/filename-proves-sku.test.cjs
+const fs = require('node:fs');
+const path = require('node:path');
+
+// Testability seam (CLAUDE.md TK-11431 amendment 3): default to the real sibling
+// file; an override lets the RED-then-GREEN proof point at the pre-fix source.
+const srcPath = process.env.COLLECT_PLAN_SRC || path.join(__dirname, '..', 'collect-plan.cjs');
+const source = fs.readFileSync(srcPath, 'utf8');
+const start = source.indexOf('const filenameProvesSku');
+const end = source.indexOf('\n};', start);
+if (start === -1 || end === -1) { console.error('FAIL: could not locate filenameProvesSku in ' + srcPath); process.exit(1); }
+const body = source.slice(start, end + 3);
+// eslint-disable-next-line no-new-func
+const filenameProvesSku = new Function(`${body}\nreturn filenameProvesSku;`)();
+
+// p2/p3 match on the FULL stored SKU (no collection-suffix strip, unlike p4).
+const cases = [
+ // [imgSrc, storedSku, expectProven, label]
+ ['https://cdn.example.com/swatch/A184-4280_thumb.jpg', 'A184-428', false, 'prefix-sibling must be REFUSED (full SKU A184-428 must not match A184-4280)'],
+ ['https://cdn.example.com/swatch/A184-428_thumb.jpg', 'A184-428', true, 'legit swatch carrying the full SKU must PROVE'],
+ ['https://cdn.example.com/swatch/a184-428-colorway.jpg', 'A184-428', true, 'case-insensitive full SKU must PROVE'],
+ ['https://cdn.example.com/swatch/A184_428_thumb.jpg', 'A184-428', true, 'underscore-normalized full SKU must PROVE'],
+ ['https://cdn.example.com/swatch/A185-004_thumb.jpg', 'A184-428', false, 'unrelated sibling must be REFUSED'],
+ ['https://cdn.example.com/swatch/ANYTHING-999.jpg', '', false, 'empty stored SKU must REFUSE everything (file.includes("") proves all)'],
+];
+
+let failed = 0;
+for (const [img, sku, expect, label] of cases) {
+ const got = filenameProvesSku(img, sku);
+ const ok = got === expect;
+ if (!ok) failed++;
+ console.log(`${ok ? 'PASS' : 'FAIL'}: ${label} (expected ${expect}, got ${got})`);
+}
+
+if (failed) { console.error(`\n${failed} case(s) failed — predicate is unanchored/incorrect.`); process.exit(1); }
+console.log('\nAll cases passed — predicate anchors on non-digit boundaries and guards the empty key.');
diff --git a/DW-Programming/verification/tk11485-p3/apply-plan.cjs b/DW-Programming/verification/tk11485-p3/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p3/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p3/check-image-liveness.cjs b/DW-Programming/verification/tk11485-p3/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p3/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p3/collect-plan.cjs b/DW-Programming/verification/tk11485-p3/collect-plan.cjs
new file mode 100644
index 00000000..363c35bc
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p3/collect-plan.cjs
@@ -0,0 +1,86 @@
+// One-time read-only repair planner. Reuses the production browser extractor;
+// never connects to PostgreSQL. Input is the approved canonical before snapshot.
+const fs = require('node:fs');
+const path = require('node:path');
+const crypto = require('node:crypto');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const dir = path.join(__dirname, 'production');
+const rows = JSON.parse(fs.readFileSync(path.join(dir, 'targets.json')));
+const cachePath = path.join(dir, 'vendor-observations.json');
+const observations = fs.existsSync(cachePath) ? JSON.parse(fs.readFileSync(cachePath)) : {};
+const resultPath = path.join(dir, 'plan.json');
+const canonical = u => { try { const url = new URL(u); return url.origin === 'https://www.versadesignedsurfaces.com' ? url.href : null; } catch { return null; } };
+const skuMatches = (pageSku, storedSku) => {
+ const a = String(pageSku || '').toUpperCase(), b = String(storedSku || '').toUpperCase();
+ return a === b || new RegExp('^' + b.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '-[0-9]{2,4}$').test(a);
+};
+// COMPENSATING GUARD (TK-11485 phase 2): the relaxation above gives up one identity
+// check, so the swatch filename must independently carry the row's exact stored SKU.
+const filenameProvesSku = (imgSrc, storedSku) => {
+ if (!imgSrc) return false;
+ const norm = v => String(v).toUpperCase().replace(/_/g, '-');
+ const key = norm(storedSku);
+ if (!key) return false; // an empty key must never prove any swatch
+ const file = norm(decodeURIComponent(String(imgSrc).replace(/^.*\//, '')));
+ // Anchor the stored SKU on a non-digit (or string) boundary both sides so key
+ // A184-428 cannot match the LONGER prefix-sibling SKU A184-4280 (TK-11769 / F3).
+ const esc = s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp('(^|[^0-9])' + esc(key) + '([^0-9]|$)').test(file);
+};
+const key = r => canonical(r.product_url);
+const pattern = r => { try { return new URL(r.product_url).pathname.replace(/\/[^/]+\/?$/, ''); } catch { return ''; } };
+
+(async () => {
+ const browser = await chromium.launch({ headless: true });
+ try {
+ let fetched = 0;
+ async function visit(row) {
+ const url = key(row);
+ if (!url || (observations[url] && skuMatches(observations[url].sku, row.mfr_sku))) return;
+ const response = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!response.ok) { console.log('FETCH_FAIL', row.id, response.status); return; }
+ if (response.url.replace(/\/$/, '') !== url.replace(/\/$/, '')) {
+ console.log('REDIRECT', row.id, response.url); return;
+ }
+ const html = await response.text();
+ const page = await browser.newPage();
+ try {
+ await page.route('**/*', route => route.abort());
+ await page.setContent(html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, ''), { waitUntil: 'domcontentloaded' });
+ const data = await page.evaluate(extractVersaColorways, { pageUrl: url });
+ if (!skuMatches(data.main.sku, row.mfr_sku)) throw new Error('SKU mismatch');
+ const evidence = { fetched_from: url, fetched_at: new Date().toISOString(), html_sha256: crypto.createHash('sha256').update(html).digest('hex') };
+ for (const cw of data.colorways) observations[cw.url] = { ...cw, ...evidence };
+ fs.writeFileSync(cachePath, JSON.stringify(observations, null, 2) + '\n');
+ fetched++;
+ console.log('PAGE', fetched, row.id, data.main.sku, data.colorways.length, data.main.imgSrc ? 'swatch' : 'NULL');
+ } finally { await page.close(); }
+ await new Promise(resolve => setTimeout(resolve, 350));
+ }
+ // One page usually proves all siblings; then fetch any missing exact row URLs.
+ const first = [...new Map(rows.map(row => [pattern(row), row])).values()];
+ for (const batch of [first, rows]) {
+ let next = 0;
+ await Promise.all(Array.from({ length: 3 }, async () => {
+ while (next < batch.length) {
+ const row = batch[next++];
+ try { await visit(row); } catch (e) { console.log('ERROR', row.id, e.message); }
+ }
+ }));
+ }
+ const plan = [], unresolved = [];
+ for (const row of rows) {
+ const item = observations[key(row)];
+ if (!item || !skuMatches(item.sku, row.mfr_sku)) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url }); continue; }
+ const proven = filenameProvesSku(item.imgSrc, row.mfr_sku);
+ if (item.imgSrc && !proven) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url, reason: 'swatch filename does not carry stored SKU' }); continue; }
+ const color_name = item.colorName || (/^#[0-9a-f]{3,8}$/i.test(row.color_name || '') ? null : row.color_name);
+ plan.push({ id: row.id, sku: row.mfr_sku, before: { image_url: row.image_url, all_images: row.all_images, color_name: row.color_name },
+ after: { image_url: item.imgSrc, all_images: JSON.stringify(item.imgSrc ? [item.imgSrc] : []), color_name },
+ evidence: { url: item.url, fetched_from: item.fetched_from, fetched_at: item.fetched_at, html_sha256: item.html_sha256 } });
+ }
+ fs.writeFileSync(resultPath, JSON.stringify({ generated_at: new Date().toISOString(), approved_scope: 'TK-11241 ungate and run', plan, unresolved }, null, 2) + '\n');
+ console.log('PLAN', JSON.stringify({ ready: plan.length, unresolved: unresolved.length, null_images: plan.filter(p => !p.after.image_url).length, null_colors: plan.filter(p => !p.after.color_name).length }));
+ } finally { await browser.close(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p4/__tests__/filename-proves-sku.test.cjs b/DW-Programming/verification/tk11485-p4/__tests__/filename-proves-sku.test.cjs
new file mode 100644
index 00000000..4c4caf51
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p4/__tests__/filename-proves-sku.test.cjs
@@ -0,0 +1,41 @@
+// Negative test for filenameProvesSku (TK-11766 / F3).
+// Zero-dependency: runs with plain `node`. No jest/ts-jest exists in this repo, so
+// this exercises the ACTUAL shipped predicate by extracting it from collect-plan.cjs
+// and evaluating it in isolation — it tests the real code, not a copy.
+//
+// The fault it guards: an UNANCHORED substring match lets core `A184-428` match a
+// filename for the LONGER prefix-sibling SKU `A184-4280`, proving a swatch for the
+// WRONG product. Against the pre-fix predicate this test goes RED; against the
+// anchored predicate it goes GREEN. Run: node __tests__/filename-proves-sku.test.cjs
+const fs = require('node:fs');
+const path = require('node:path');
+
+const source = fs.readFileSync(path.join(__dirname, '..', 'collect-plan.cjs'), 'utf8');
+const start = source.indexOf('const filenameProvesSku');
+const end = source.indexOf('\n};', start);
+if (start === -1 || end === -1) { console.error('FAIL: could not locate filenameProvesSku in collect-plan.cjs'); process.exit(1); }
+const body = source.slice(start, end + 3);
+// eslint-disable-next-line no-new-func
+const filenameProvesSku = new Function(`${body}\nreturn filenameProvesSku;`)();
+
+// storedSku carries the trailing collection suffix (-282) that the vendor swatch
+// filename omits; the core-strip reduces 'A184-428-282' -> core 'A184-428'.
+const cases = [
+ // [imgSrc, storedSku, expectProven, label]
+ ['https://cdn.example.com/swatch/A184-4280_thumb.jpg', 'A184-428-282', false, 'prefix-sibling must be REFUSED (core A184-428 must not match A184-4280)'],
+ ['https://cdn.example.com/swatch/A184-428_thumb.jpg', 'A184-428-282', true, 'legit swatch carrying the core must PROVE'],
+ ['https://cdn.example.com/swatch/a184-428-colorway.jpg', 'A184-428-282', true, 'case-insensitive core must PROVE'],
+ ['https://cdn.example.com/swatch/A185-004_thumb.jpg', 'A184-428-282', false, 'unrelated sibling must be REFUSED'],
+ ['https://cdn.example.com/swatch/ANYTHING-999.jpg', '-282', false, 'empty core (all-suffix SKU) must REFUSE everything'],
+];
+
+let failed = 0;
+for (const [img, sku, expect, label] of cases) {
+ const got = filenameProvesSku(img, sku);
+ const ok = got === expect;
+ if (!ok) failed++;
+ console.log(`${ok ? 'PASS' : 'FAIL'}: ${label} (expected ${expect}, got ${got})`);
+}
+
+if (failed) { console.error(`\n${failed} case(s) failed — predicate is unanchored/incorrect.`); process.exit(1); }
+console.log('\nAll cases passed — predicate anchors on non-digit boundaries.');
diff --git a/DW-Programming/verification/tk11485-p4/apply-plan.cjs b/DW-Programming/verification/tk11485-p4/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p4/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p4/check-image-liveness.cjs b/DW-Programming/verification/tk11485-p4/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p4/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p4/collect-plan.cjs b/DW-Programming/verification/tk11485-p4/collect-plan.cjs
new file mode 100644
index 00000000..db92208b
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p4/collect-plan.cjs
@@ -0,0 +1,91 @@
+// One-time read-only repair planner. Reuses the production browser extractor;
+// never connects to PostgreSQL. Input is the approved canonical before snapshot.
+const fs = require('node:fs');
+const path = require('node:path');
+const crypto = require('node:crypto');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const dir = path.join(__dirname, 'production');
+const rows = JSON.parse(fs.readFileSync(path.join(dir, 'targets.json')));
+const cachePath = path.join(dir, 'vendor-observations.json');
+const observations = fs.existsSync(cachePath) ? JSON.parse(fs.readFileSync(cachePath)) : {};
+const resultPath = path.join(dir, 'plan.json');
+const canonical = u => { try { const url = new URL(u); return url.origin === 'https://www.versadesignedsurfaces.com' ? url.href : null; } catch { return null; } };
+const skuMatches = (pageSku, storedSku) => {
+ const a = String(pageSku || '').toUpperCase(), b = String(storedSku || '').toUpperCase();
+ return a === b || new RegExp('^' + b.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '-[0-9]{2,4}$').test(a);
+};
+// COMPENSATING GUARD (TK-11485 phase 2): the relaxation above gives up one identity
+// check, so the swatch filename must independently carry the row's exact stored SKU.
+const filenameProvesSku = (imgSrc, storedSku) => {
+ // TK-11514 FIX: vendor swatch filenames carry the SKU CORE (A184-428) and omit the
+ // trailing numeric COLLECTION suffix (-282) that the catalog stores. Requiring the
+ // full stored SKU rejected 261 rows whose correct swatch existed. Matching the core
+ // still discriminates: A185-004 does not contain A184-428, so a swapped sibling
+ // image is still refused.
+ if (!imgSrc) return false;
+ const norm = v => String(v).toUpperCase().replace(/_/g, '-');
+ const core = norm(storedSku).replace(/-[0-9]{2,4}$/, '');
+ if (!core) return false; // an empty core (all-suffix SKU) must never prove any swatch
+ const file = norm(decodeURIComponent(String(imgSrc).replace(/^.*\//, '')));
+ // Anchor the core on a non-digit (or string) boundary both sides so core A184-428
+ // cannot match the LONGER prefix-sibling SKU A184-4280 (TK-11766).
+ const esc = s => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp('(^|[^0-9])' + esc(core) + '([^0-9]|$)').test(file);
+};
+const key = r => canonical(r.product_url);
+const pattern = r => { try { return new URL(r.product_url).pathname.replace(/\/[^/]+\/?$/, ''); } catch { return ''; } };
+
+(async () => {
+ const browser = await chromium.launch({ headless: true });
+ try {
+ let fetched = 0;
+ async function visit(row) {
+ const url = key(row);
+ if (!url || (observations[url] && skuMatches(observations[url].sku, row.mfr_sku))) return;
+ const response = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!response.ok) { console.log('FETCH_FAIL', row.id, response.status); return; }
+ if (response.url.replace(/\/$/, '') !== url.replace(/\/$/, '')) {
+ console.log('REDIRECT', row.id, response.url); return;
+ }
+ const html = await response.text();
+ const page = await browser.newPage();
+ try {
+ await page.route('**/*', route => route.abort());
+ await page.setContent(html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, ''), { waitUntil: 'domcontentloaded' });
+ const data = await page.evaluate(extractVersaColorways, { pageUrl: url });
+ if (!skuMatches(data.main.sku, row.mfr_sku)) throw new Error('SKU mismatch');
+ const evidence = { fetched_from: url, fetched_at: new Date().toISOString(), html_sha256: crypto.createHash('sha256').update(html).digest('hex') };
+ for (const cw of data.colorways) observations[cw.url] = { ...cw, ...evidence };
+ fs.writeFileSync(cachePath, JSON.stringify(observations, null, 2) + '\n');
+ fetched++;
+ console.log('PAGE', fetched, row.id, data.main.sku, data.colorways.length, data.main.imgSrc ? 'swatch' : 'NULL');
+ } finally { await page.close(); }
+ await new Promise(resolve => setTimeout(resolve, 350));
+ }
+ // One page usually proves all siblings; then fetch any missing exact row URLs.
+ const first = [...new Map(rows.map(row => [pattern(row), row])).values()];
+ for (const batch of [first, rows]) {
+ let next = 0;
+ await Promise.all(Array.from({ length: 3 }, async () => {
+ while (next < batch.length) {
+ const row = batch[next++];
+ try { await visit(row); } catch (e) { console.log('ERROR', row.id, e.message); }
+ }
+ }));
+ }
+ const plan = [], unresolved = [];
+ for (const row of rows) {
+ const item = observations[key(row)];
+ if (!item || !skuMatches(item.sku, row.mfr_sku)) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url }); continue; }
+ const proven = filenameProvesSku(item.imgSrc, row.mfr_sku);
+ if (item.imgSrc && !proven) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url, reason: 'swatch filename does not carry stored SKU' }); continue; }
+ const color_name = item.colorName || (/^#[0-9a-f]{3,8}$/i.test(row.color_name || '') ? null : row.color_name);
+ plan.push({ id: row.id, sku: row.mfr_sku, before: { image_url: row.image_url, all_images: row.all_images, color_name: row.color_name },
+ after: { image_url: item.imgSrc, all_images: JSON.stringify(item.imgSrc ? [item.imgSrc] : []), color_name },
+ evidence: { url: item.url, fetched_from: item.fetched_from, fetched_at: item.fetched_at, html_sha256: item.html_sha256 } });
+ }
+ fs.writeFileSync(resultPath, JSON.stringify({ generated_at: new Date().toISOString(), approved_scope: 'TK-11241 ungate and run', plan, unresolved }, null, 2) + '\n');
+ console.log('PLAN', JSON.stringify({ ready: plan.length, unresolved: unresolved.length, null_images: plan.filter(p => !p.after.image_url).length, null_colors: plan.filter(p => !p.after.color_name).length }));
+ } finally { await browser.close(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p5/apply-plan.cjs b/DW-Programming/verification/tk11485-p5/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p5/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p5/check-image-liveness.cjs b/DW-Programming/verification/tk11485-p5/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p5/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p6/apply-plan.cjs b/DW-Programming/verification/tk11485-p6/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p6/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p6/check-image-liveness.cjs b/DW-Programming/verification/tk11485-p6/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p6/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p7/apply-plan.cjs b/DW-Programming/verification/tk11485-p7/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p7/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485-p7/check-image-liveness.cjs b/DW-Programming/verification/tk11485-p7/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485-p7/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485/apply-plan.cjs b/DW-Programming/verification/tk11485/apply-plan.cjs
new file mode 100644
index 00000000..3ae3610c
--- /dev/null
+++ b/DW-Programming/verification/tk11485/apply-plan.cjs
@@ -0,0 +1,77 @@
+// TK-11241 approved one-time canonical repair. Never inserts or remaps SKUs.
+// Executed under TK-11485 (child of TK-11241) as the DTD Option-D local re-run vs Mac2 versa_catalog;
+// TK-11241 stays the authorizing/scope ticket. The per-run execution ticket is recorded in each receipt
+// (execution_ticket) and in production/execution-ticket.json. Emitted receipts are left byte-unchanged.
+const fs = require('node:fs');
+const path = require('node:path');
+const assert = require('node:assert/strict');
+const { Client } = require('pg');
+const dir = path.join(__dirname, 'production');
+const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+const liveness = JSON.parse(fs.readFileSync(path.join(dir, 'image-liveness.json')));
+const ids = process.argv.find(arg => arg.startsWith('--ids='))?.slice(6).split(',').map(Number);
+const mode = process.argv.includes('--rehearse') ? 'rehearse' : process.argv.includes('--apply') ? 'apply' : null;
+const plan = ids ? document.plan.filter(r => ids.includes(r.id)) : document.plan;
+if (!mode || !plan.length || plan.length > 500 || (ids && plan.length !== ids.length)) throw new Error('Require --rehearse or approved --apply, and 1..500 exact planned rows');
+const fields = row => ({ image_url: row.image_url, all_images: row.all_images, color_name: row.color_name });
+const equal = (a,b) => JSON.stringify(fields(a)) === JSON.stringify(fields(b));
+const db = new Client({ connectionString: process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified' });
+(async () => {
+ await db.connect();
+ await db.query('BEGIN');
+ try {
+ await db.query("SET LOCAL lock_timeout = '5s'");
+ await db.query("SET LOCAL statement_timeout = '30s'");
+ const identity = (await db.query('SELECT current_database() AS db, host(inet_server_addr()) AS host')).rows[0];
+ assert.equal(identity.db, 'dw_unified');
+ // Host pin (TK-11485 review 2026-09-15): current_database() checks only the NAME, and BOTH
+ // Mac2 and Kamatera have a database named dw_unified. A misconfigured DATABASE_URL pointed at
+ // the wrong host would pass the name check and write to the wrong canonical copy. A unix-socket
+ // connection is inherently local (inet_server_addr() IS NULL); a TCP connection MUST be loopback.
+ // Anything else is a remote (non-canonical) dw_unified — refuse before any write.
+ assert(identity.host === null || identity.host === '127.0.0.1' || identity.host === '::1',
+ 'Refusing write: server host ' + identity.host + ' is not local (loopback/socket) — DATABASE_URL points at a non-canonical dw_unified');
+ const changed = [], skipped = [];
+ for (const row of plan) {
+ if (row.after.image_url) {
+ assert(liveness[row.after.image_url]?.ok, 'Image lacks HTTP/MIME verification');
+ assert(Date.now() - Date.parse(liveness[row.after.image_url].checked_at) < 24 * 3600 * 1000, 'Stale image proof');
+ }
+ assert.deepEqual(JSON.parse(row.after.all_images), row.after.image_url ? [row.after.image_url] : []);
+ assert(!/^#[0-9a-f]{3,8}$/i.test(row.after.color_name || ''), 'HEX color');
+ const before = (await db.query('SELECT id,mfr_sku,image_url,all_images,color_name,updated_at FROM versa_catalog WHERE id=$1 FOR UPDATE', [row.id])).rows[0];
+ assert(before && before.mfr_sku === row.sku, 'Row/SKU identity drift');
+ if (equal(before, row.after)) { skipped.push(row.id); continue; }
+ assert(equal(before, row.before), 'Before-value drift for id ' + row.id);
+ const params = [row.after.image_url, row.after.all_images, row.after.color_name, row.id];
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=NOW() WHERE id=$4 RETURNING id,image_url,all_images,color_name,updated_at', params);
+ assert.equal(result.rowCount, 1);
+ assert(equal(result.rows[0], row.after));
+ changed.push({ id: row.id, before, after: result.rows[0] });
+ }
+ if (mode === 'rehearse') {
+ // Exercise the reverse SQL with the very same locked rows, then roll back
+ // the whole rehearsal so no catalog values/timestamps persist.
+ for (const row of changed) {
+ const b = row.before;
+ const result = await db.query('UPDATE versa_catalog SET image_url=$1,all_images=$2,color_name=$3,updated_at=$4 WHERE id=$5 RETURNING image_url,all_images,color_name', [b.image_url,b.all_images,b.color_name,b.updated_at,b.id]);
+ assert(equal(result.rows[0], b));
+ }
+ await db.query('ROLLBACK');
+ } else {
+ // Durable undo record precedes commit. Its presence alone does not claim
+ // completion; the separate receipt below records successful COMMIT.
+ if (changed.length) fs.writeFileSync(path.join(dir, 'undo-' + plan[0].id + '-' + Date.now() + '.json'), JSON.stringify(changed, null, 2) + '\n', { flag: 'wx' });
+ await db.query('COMMIT');
+ }
+ for (const row of plan) {
+ const actual = (await db.query('SELECT image_url,all_images,color_name FROM versa_catalog WHERE id=$1', [row.id])).rows[0];
+ assert(equal(actual, mode === 'rehearse' && !skipped.includes(row.id) ? row.before : row.after));
+ }
+ const execution_ticket = path.basename(__dirname).replace(/^tk(\d+)/i, 'TK-$1'); // host+phase execution ticket (child of TK-11241); TK-11241 stays the authorizing/scope ticket per the Option-D re-run
+ const receipt = { ticket: 'TK-11241', execution_ticket, at: new Date().toISOString(), mode, changed: changed.map(r => r.id), skipped, persisted_readback: 'PASS' };
+ fs.writeFileSync(path.join(dir, 'receipt-' + mode + '-' + plan[0].id + '.json'), JSON.stringify(receipt,null,2) + '\n');
+ console.log(JSON.stringify(receipt));
+ } catch (e) { await db.query('ROLLBACK'); throw e; }
+ finally { await db.end(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485/check-image-liveness.cjs b/DW-Programming/verification/tk11485/check-image-liveness.cjs
new file mode 100644
index 00000000..841e1724
--- /dev/null
+++ b/DW-Programming/verification/tk11485/check-image-liveness.cjs
@@ -0,0 +1,29 @@
+const fs = require('node:fs');
+const path = require('node:path');
+const dir = path.join(__dirname, 'production');
+(async () => {
+ const document = JSON.parse(fs.readFileSync(path.join(dir, 'plan.json')));
+ const urls = [...new Set(document.plan.map(r => r.after.image_url).filter(Boolean))];
+ const file = path.join(dir, 'image-liveness.json');
+ const previous = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file)) : {};
+ const results = {}; let next = 0;
+ await Promise.all(Array.from({ length: 4 }, async () => {
+ while (next < urls.length) {
+ const url = urls[next++];
+ if (previous[url]?.ok && Date.now() - Date.parse(previous[url].checked_at) < 4 * 3600 * 1000) { results[url] = previous[url]; continue; }
+ for (let attempt = 0; attempt < 2; attempt++) {
+ try {
+ const response = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(20000) });
+ const type = response.headers.get('content-type') || '';
+ results[url] = { status: response.status, content_type: type, ok: response.ok && type.startsWith('image/'), checked_at: new Date().toISOString() };
+ if (results[url].ok || response.status === 404) break;
+ } catch (error) { results[url] = { ok: false, error: error.message }; }
+ }
+ if (next % 40 === 0) console.log('checked', next, '/', urls.length);
+ }
+ }));
+ fs.writeFileSync(path.join(dir, 'image-liveness.json'), JSON.stringify(results, null, 2) + '\n');
+ const bad = Object.entries(results).filter(([, r]) => !r.ok);
+ console.log(JSON.stringify({ images: urls.length, passed: urls.length - bad.length, bad }, null, 2));
+ if (bad.length) process.exitCode = 1;
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/DW-Programming/verification/tk11485/collect-plan.cjs b/DW-Programming/verification/tk11485/collect-plan.cjs
new file mode 100644
index 00000000..ddcb40af
--- /dev/null
+++ b/DW-Programming/verification/tk11485/collect-plan.cjs
@@ -0,0 +1,67 @@
+// One-time read-only repair planner. Reuses the production browser extractor;
+// never connects to PostgreSQL. Input is the approved canonical before snapshot.
+const fs = require('node:fs');
+const path = require('node:path');
+const crypto = require('node:crypto');
+const { chromium } = require('playwright');
+const { extractVersaColorways } = require('../../lib/versa-colorway-extraction');
+const dir = path.join(__dirname, 'production');
+const rows = JSON.parse(fs.readFileSync(path.join(dir, 'targets.json')));
+const cachePath = path.join(dir, 'vendor-observations.json');
+const observations = fs.existsSync(cachePath) ? JSON.parse(fs.readFileSync(cachePath)) : {};
+const resultPath = path.join(dir, 'plan.json');
+const canonical = u => { try { const url = new URL(u); return url.origin === 'https://www.versadesignedsurfaces.com' ? url.href : null; } catch { return null; } };
+const key = r => canonical(r.product_url);
+const pattern = r => { try { return new URL(r.product_url).pathname.replace(/\/[^/]+\/?$/, ''); } catch { return ''; } };
+
+(async () => {
+ const browser = await chromium.launch({ headless: true });
+ try {
+ let fetched = 0;
+ async function visit(row) {
+ const url = key(row);
+ if (!url || observations[url]?.sku === row.mfr_sku.toUpperCase()) return;
+ const response = await fetch(url, { signal: AbortSignal.timeout(30000) });
+ if (!response.ok) { console.log('FETCH_FAIL', row.id, response.status); return; }
+ if (response.url.replace(/\/$/, '') !== url.replace(/\/$/, '')) {
+ console.log('REDIRECT', row.id, response.url); return;
+ }
+ const html = await response.text();
+ const page = await browser.newPage();
+ try {
+ await page.route('**/*', route => route.abort());
+ await page.setContent(html.replace(/<script\b[^>]*>[\s\S]*?<\/script\s*>/gi, ''), { waitUntil: 'domcontentloaded' });
+ const data = await page.evaluate(extractVersaColorways, { pageUrl: url });
+ if (data.main.sku !== row.mfr_sku.toUpperCase()) throw new Error('SKU mismatch');
+ const evidence = { fetched_from: url, fetched_at: new Date().toISOString(), html_sha256: crypto.createHash('sha256').update(html).digest('hex') };
+ for (const cw of data.colorways) observations[cw.url] = { ...cw, ...evidence };
+ fs.writeFileSync(cachePath, JSON.stringify(observations, null, 2) + '\n');
+ fetched++;
+ console.log('PAGE', fetched, row.id, data.main.sku, data.colorways.length, data.main.imgSrc ? 'swatch' : 'NULL');
+ } finally { await page.close(); }
+ await new Promise(resolve => setTimeout(resolve, 350));
+ }
+ // One page usually proves all siblings; then fetch any missing exact row URLs.
+ const first = [...new Map(rows.map(row => [pattern(row), row])).values()];
+ for (const batch of [first, rows]) {
+ let next = 0;
+ await Promise.all(Array.from({ length: 3 }, async () => {
+ while (next < batch.length) {
+ const row = batch[next++];
+ try { await visit(row); } catch (e) { console.log('ERROR', row.id, e.message); }
+ }
+ }));
+ }
+ const plan = [], unresolved = [];
+ for (const row of rows) {
+ const item = observations[key(row)];
+ if (!item || item.sku !== row.mfr_sku.toUpperCase()) { unresolved.push({ id: row.id, sku: row.mfr_sku, url: row.product_url }); continue; }
+ const color_name = item.colorName || (/^#[0-9a-f]{3,8}$/i.test(row.color_name || '') ? null : row.color_name);
+ plan.push({ id: row.id, sku: row.mfr_sku, before: { image_url: row.image_url, all_images: row.all_images, color_name: row.color_name },
+ after: { image_url: item.imgSrc, all_images: JSON.stringify(item.imgSrc ? [item.imgSrc] : []), color_name },
+ evidence: { url: item.url, fetched_from: item.fetched_from, fetched_at: item.fetched_at, html_sha256: item.html_sha256 } });
+ }
+ fs.writeFileSync(resultPath, JSON.stringify({ generated_at: new Date().toISOString(), approved_scope: 'TK-11241 ungate and run', plan, unresolved }, null, 2) + '\n');
+ console.log('PLAN', JSON.stringify({ ready: plan.length, unresolved: unresolved.length, null_images: plan.filter(p => !p.after.image_url).length, null_colors: plan.filter(p => !p.after.color_name).length }));
+ } finally { await browser.close(); }
+})().catch(e => { console.error(e); process.exitCode = 1; });
diff --git a/scripts/push-mfr-to-shopify.js b/scripts/push-mfr-to-shopify.js
index 9b2074e4..f0bcb669 100644
--- a/scripts/push-mfr-to-shopify.js
+++ b/scripts/push-mfr-to-shopify.js
@@ -4,6 +4,7 @@
*/
const { Pool } = require('pg');
+const { assertNoPublicLeak } = require(require('path').join(process.env.HOME, 'Projects/_shared/leak-guard/leak-guard.cjs')); // TK-12032 fail-closed private-label leak guard
const pool = new Pool({
connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
@@ -23,6 +24,11 @@ async function shopifyGraphQL(query, variables = {}) {
async function pushMetafield(shopifyId, mfrSku) {
const gid = shopifyId.startsWith('gid://') ? shopifyId : `gid://shopify/Product/${shopifyId}`;
+ const metafields = [
+ { ownerId: gid, namespace: 'custom', key: 'manufacturer_sku', value: mfrSku, type: 'single_line_text_field' },
+ { ownerId: gid, namespace: 'dwc', key: 'manufacturer_sku', value: mfrSku, type: 'single_line_text_field' }
+ ];
+ assertNoPublicLeak({ metafields }, { context: `push-mfr ${mfrSku}` }); // TK-12032: abort before write if a banned term survives in the customer-facing custom metafield
return shopifyGraphQL(`
mutation($metafields: [MetafieldsSetInput!]!) {
metafieldsSet(metafields: $metafields) {
@@ -30,12 +36,7 @@ async function pushMetafield(shopifyId, mfrSku) {
userErrors { field message }
}
}
- `, {
- metafields: [
- { ownerId: gid, namespace: 'custom', key: 'manufacturer_sku', value: mfrSku, type: 'single_line_text_field' },
- { ownerId: gid, namespace: 'dwc', key: 'manufacturer_sku', value: mfrSku, type: 'single_line_text_field' }
- ]
- });
+ `, { metafields });
}
async function run() {
diff --git a/shopify/scripts/_superseded/artmura-title-fix.js b/shopify/scripts/_superseded/artmura-title-fix.js
new file mode 100644
index 00000000..00a9d0f1
--- /dev/null
+++ b/shopify/scripts/_superseded/artmura-title-fix.js
@@ -0,0 +1,55 @@
+#!/usr/bin/env node
+/**
+ * artmura-title-fix.js — Steve 2026-06-12: ensure every Artmura title reads
+ * "<Pattern Color> Wallcovering | Artmura". Some are missing the word "Wallcovering"
+ * before "| Artmura"; insert it. Skip ones that already have Wallcovering/Wallcoverings.
+ * Vendor:Artmura on live Shopify. Dry-run unless --go.
+ */
+const https = require('https');
+const fs = require('fs');
+const 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 GO = process.argv.includes('--go');
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+function gql(q, v) { const d = JSON.stringify({ query: q, variables: v });
+ return new Promise(res => { const r = https.request({ host: STORE, path: `/admin/api/${API}/graphql.json`, method: 'POST',
+ headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(d) } },
+ x => { let b=''; x.on('data',c=>b+=c); x.on('end',()=>{ try{res(JSON.parse(b))}catch{res({})} }); }); r.on('error',()=>res({})); r.write(d); r.end(); }); }
+
+const SUFFIX = /\s*\|\s*Artmura\s*$/i;
+// returns new title if it needs the word, else null
+function fix(title) {
+ if (!SUFFIX.test(title)) return null;
+ const prefix = title.replace(SUFFIX, '').trim();
+ if (/wallcoverings?$/i.test(prefix)) return null; // already has Wallcovering(s)
+ return `${prefix} Wallcovering | Artmura`;
+}
+
+(async () => {
+ // page through all vendor:Artmura products
+ const items = []; let after = null, page = 0;
+ do {
+ const r = await gql(`query($q:String!,$after:String){products(first:100,query:$q,after:$after){pageInfo{hasNextPage endCursor} edges{node{id title}}}}`,
+ { q: 'vendor:Artmura', after });
+ const p = r.data && r.data.products; if (!p) break;
+ p.edges.forEach(e => items.push(e.node));
+ after = p.pageInfo.hasNextPage ? p.pageInfo.endCursor : null; page++;
+ } while (after && page < 50);
+
+ const todo = items.map(n => ({ ...n, next: fix(n.title) })).filter(x => x.next);
+ console.log(`Artmura products: ${items.length} total · ${todo.length} need "Wallcovering" added`);
+ todo.slice(0, 12).forEach(x => console.log(` "${x.title}" -> "${x.next}"`));
+ if (!todo.length) { console.log('nothing to change'); return; }
+ if (!GO) { console.log(`\nDRY RUN — re-run with --go to apply to ${todo.length} products.`); return; }
+
+ let ok = 0, fail = 0;
+ for (const x of todo) {
+ const r = await gql(`mutation($id:ID!,$t:String!){productUpdate(input:{id:$id,title:$t}){product{id title} userErrors{message}}}`, { id: x.id, t: x.next });
+ if (r?.data?.productUpdate?.product?.title === x.next) { ok++; if (ok % 25 === 0) process.stdout.write(`\r updated ${ok}…`); }
+ else { fail++; console.log(`\n ✗ ${x.id} ${JSON.stringify(r?.data?.productUpdate?.userErrors || r).slice(0,140)}`); }
+ await sleep(250);
+ }
+ console.log(`\n✓ retitled ${ok}/${todo.length} (failed ${fail})`);
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/shopify/scripts/_superseded/romo-drilldown.js b/shopify/scripts/_superseded/romo-drilldown.js
new file mode 100644
index 00000000..f562e865
--- /dev/null
+++ b/shopify/scripts/_superseded/romo-drilldown.js
@@ -0,0 +1,317 @@
+const path = require('path');
+const { chromium } = require(path.join('/root/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/node_modules/playwright'));
+const { Pool } = require(path.join('/root/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/node_modules/pg'));
+
+const pool = new Pool({
+ connectionString: (process.env.DATABASE_URL || 'postgresql://dw_admin@127.0.0.1:5432/dw_unified')
+});
+
+const BATCH_SIZE = 50;
+const PAGE_TIMEOUT = 15000;
+const DELAY_BETWEEN = 800;
+
+async function sleep(ms) { return new Promise(r => setTimeout(r, ms)); }
+
+async function scrapeProductPage(page, url) {
+ try {
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: PAGE_TIMEOUT });
+ await sleep(2500);
+
+ const data = await page.evaluate(() => {
+ const bodyText = document.body.innerText || '';
+
+ // Extract specs from body text
+ const specPatterns = [
+ { key: 'roll_width', patterns: ['Roll Width'] },
+ { key: 'roll_length', patterns: ['Roll Length'] },
+ { key: 'pattern_repeat', patterns: ['Pattern Repeat', 'Vertical Repeat'] },
+ { key: 'application', patterns: ['Application'] },
+ { key: 'design_style', patterns: ['Design Style'] },
+ { key: 'fire_rating', patterns: ['Fire Ratings', 'Fire Rating'] },
+ { key: 'care', patterns: ['After Care', 'Care Instructions'] },
+ { key: 'colour', patterns: ['Colour'] },
+ { key: 'product_type', patterns: ['Product Type'] },
+ { key: 'environmental', patterns: ['Environmental'] },
+ { key: 'material', patterns: ['Contents', 'Content', 'Composition'] },
+ ];
+
+ const specs = {};
+ const lines = bodyText.split('\n').map(l => l.trim()).filter(Boolean);
+
+ for (const { key, patterns } of specPatterns) {
+ for (const pat of patterns) {
+ // Try "Label\nValue" pattern (label on one line, value on next)
+ for (let i = 0; i < lines.length - 1; i++) {
+ if (lines[i] === pat || lines[i].startsWith(pat + ':')) {
+ let val = lines[i].includes(':') ? lines[i].split(':').slice(1).join(':').trim() : lines[i+1];
+ if (val && val.length < 500 && val !== pat) {
+ specs[key] = val;
+ break;
+ }
+ }
+ }
+ if (specs[key]) break;
+
+ // Try "Label: Value" on same line
+ const regex = new RegExp(pat + '\\s*[:\\-]\\s*(.+)', 'i');
+ const match = bodyText.match(regex);
+ if (match) {
+ specs[key] = match[1].trim().substring(0, 500);
+ break;
+ }
+ }
+ }
+
+ // Collection from breadcrumbs
+ let collection = '';
+ const breadcrumbs = document.querySelectorAll('.breadcrumb a, [class*="breadcrumb"] a, nav a');
+ breadcrumbs.forEach(a => {
+ const text = (a.textContent || '').trim();
+ if (text.toLowerCase().includes('wallcovering') && !text.toLowerCase().includes('all')) {
+ collection = text;
+ }
+ });
+ // Also check for collection in page heading areas
+ if (!collection) {
+ const h2s = document.querySelectorAll('h2, h3, .collection-name, [class*="collection"]');
+ h2s.forEach(el => {
+ const text = (el.textContent || '').trim();
+ if (text.toLowerCase().includes('wallcovering') && text.length < 100) {
+ collection = text;
+ }
+ });
+ }
+
+ // High-res product images (splide gallery)
+ const productImages = [];
+ document.querySelectorAll('.splide__slide img, .product-image img, .product-gallery img, [class*="product"] img').forEach(img => {
+ const src = img.src || img.getAttribute('data-src') || img.getAttribute('data-lazy') || '';
+ if (src && src.includes('catalog/product') && !productImages.includes(src)) {
+ productImages.push(src);
+ }
+ });
+
+ // Room setting images (slideimg class)
+ const roomImages = [];
+ document.querySelectorAll('.slideimg, .room-setting img, [class*="room"] img, [class*="setting"] img, [class*="ambiance"] img, [class*="lifestyle"] img').forEach(el => {
+ let src = '';
+ if (el.tagName === 'IMG') {
+ src = el.src || el.getAttribute('data-src') || '';
+ } else {
+ // Background image
+ const style = el.getAttribute('style') || '';
+ const match = style.match(/url\(['"]?([^'")\s]+)/);
+ if (match) src = match[1];
+ // Also check child images
+ const childImg = el.querySelector('img');
+ if (childImg) src = childImg.src || childImg.getAttribute('data-src') || '';
+ }
+ if (src && !roomImages.includes(src)) {
+ roomImages.push(src);
+ }
+ });
+
+ // Gallery/carousel images
+ document.querySelectorAll('.gallery img, .carousel img, .slider img, [class*="gallery"] img, [class*="slider"] img').forEach(img => {
+ const src = img.src || img.getAttribute('data-src') || '';
+ if (src && src.includes('catalog') && !roomImages.includes(src) && !productImages.includes(src)) {
+ roomImages.push(src);
+ }
+ });
+
+ // Background images that could be room settings
+ document.querySelectorAll('[style*="background-image"]').forEach(el => {
+ const style = el.getAttribute('style') || '';
+ const match = style.match(/url\(['"]?([^'")\s]+)/);
+ if (match && match[1].includes('catalog') && !roomImages.includes(match[1])) {
+ roomImages.push(match[1]);
+ }
+ });
+
+ // Description - first paragraph or product description
+ let description = '';
+ const descEl = document.querySelector('.product-description, [class*="description"], .product-detail p, article p');
+ if (descEl) {
+ description = (descEl.textContent || '').trim().substring(0, 1000);
+ }
+
+ // Color variants on page
+ const colorVariants = [];
+ document.querySelectorAll('.colour-option, [class*="colour"] a, [class*="color-option"], [class*="swatch"] a').forEach(el => {
+ const href = el.href || '';
+ const text = (el.textContent || '').trim();
+ const img = el.querySelector('img');
+ const imgSrc = img ? (img.src || '') : '';
+ if (href || text) {
+ colorVariants.push({ text: text.substring(0, 100), href, image: imgSrc });
+ }
+ });
+
+ return {
+ specs,
+ collection,
+ productImages: productImages.slice(0, 10),
+ roomImages: roomImages.slice(0, 10),
+ description,
+ colorVariants: colorVariants.slice(0, 20),
+ bodySnippet: bodyText.substring(0, 2000)
+ };
+ });
+
+ return data;
+ } catch (err) {
+ return { error: err.message, specs: {}, productImages: [], roomImages: [] };
+ }
+}
+
+async function main() {
+ console.log('=== Romo Drill-Down Scraper ===');
+ console.log(`Started: ${new Date().toISOString()}`);
+
+ // Get all products that need drill-down (no width = not yet scraped)
+ const { rows: products } = await pool.query(`
+ SELECT id, mfr_sku, pattern_name, color_name, brand, product_url, image_url
+ FROM romo_catalog
+ WHERE width IS NULL OR width = ''
+ ORDER BY id
+ `);
+
+ console.log(`Products to scrape: ${products.length}`);
+
+ const browser = await chromium.launch({
+ headless: true,
+ args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-blink-features=AutomationControlled']
+ });
+ const context = await browser.newContext({
+ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
+ viewport: { width: 1920, height: 1080 },
+ ignoreHTTPSErrors: true
+ });
+ await context.addInitScript(() => { Object.defineProperty(navigator, 'webdriver', { get: () => false }); });
+ const page = await context.newPage();
+
+ let updated = 0, errors = 0, skipped = 0;
+ const startTime = Date.now();
+
+ for (let i = 0; i < products.length; i++) {
+ const product = products[i];
+
+ if (!product.product_url) {
+ skipped++;
+ continue;
+ }
+
+ if (i % 50 === 0) {
+ const elapsed = ((Date.now() - startTime) / 1000 / 60).toFixed(1);
+ const rate = updated > 0 ? (elapsed / updated).toFixed(2) : '?';
+ console.log(`\n--- Progress: ${i}/${products.length} | Updated: ${updated} | Errors: ${errors} | ${elapsed}min | ${rate}min/item ---`);
+ }
+
+ try {
+ const data = await scrapeProductPage(page, product.product_url);
+
+ if (data.error) {
+ console.log(` ✗ [${i}] ${product.mfr_sku}: ${data.error}`);
+ errors++;
+ await sleep(DELAY_BETWEEN);
+ continue;
+ }
+
+ const specs = data.specs || {};
+
+ // Get best product image (prefer high-res from gallery)
+ let bestImage = product.image_url;
+ if (data.productImages.length > 0) {
+ // Get highest res version
+ bestImage = data.productImages[0].replace(/\/\d+x\d+\//, '/720x720/');
+ }
+
+ // Build room setting images array
+ const roomSettingImages = data.roomImages.map(url => {
+ // Upgrade to larger size
+ return url.replace(/\/\d+x\d+\//, '/900x550/');
+ });
+
+ // Update PostgreSQL
+ await pool.query(`
+ UPDATE romo_catalog SET
+ width = $1,
+ roll_length = $2,
+ pattern_repeat = $3,
+ material = $4,
+ fire_rating = $5,
+ care_instructions = $6,
+ description = $7,
+ collection = $8,
+ image_url = $9,
+ room_setting_images = $10,
+ gallery_images = $11,
+ specs = $12,
+ room_setting_url = $13,
+ updated_at = NOW()
+ WHERE id = $14
+ `, [
+ specs.roll_width || null,
+ specs.roll_length || null,
+ specs.pattern_repeat || null,
+ specs.material || null,
+ specs.fire_rating || null,
+ specs.care || null,
+ data.description || null,
+ data.collection || null,
+ bestImage,
+ JSON.stringify(roomSettingImages),
+ JSON.stringify(data.productImages),
+ JSON.stringify(specs),
+ roomSettingImages.length > 0 ? roomSettingImages[0] : null,
+ product.id
+ ]);
+
+ const specCount = Object.keys(specs).length;
+ const imgCount = data.productImages.length;
+ const roomCount = roomSettingImages.length;
+
+ if (specCount > 0 || imgCount > 0 || roomCount > 0) {
+ console.log(` ✓ [${i}] ${product.mfr_sku} (${product.brand}): ${specCount} specs, ${imgCount} imgs, ${roomCount} rooms`);
+ updated++;
+ } else {
+ console.log(` ~ [${i}] ${product.mfr_sku}: no data found on page`);
+ skipped++;
+ }
+
+ } catch (err) {
+ console.log(` ✗ [${i}] ${product.mfr_sku}: ${err.message}`);
+ errors++;
+ }
+
+ await sleep(DELAY_BETWEEN);
+ }
+
+ const totalTime = ((Date.now() - startTime) / 1000 / 60).toFixed(1);
+
+ console.log(`\n=== COMPLETE ===`);
+ console.log(`Total: ${products.length} | Updated: ${updated} | Errors: ${errors} | Skipped: ${skipped}`);
+ console.log(`Time: ${totalTime} minutes`);
+
+ // Print summary stats
+ const stats = await pool.query(`
+ SELECT
+ COUNT(*) as total,
+ COUNT(width) as has_width,
+ COUNT(roll_length) as has_length,
+ COUNT(pattern_repeat) as has_repeat,
+ COUNT(collection) as has_collection,
+ COUNT(room_setting_url) as has_room,
+ COUNT(description) as has_desc
+ FROM romo_catalog
+ `);
+ console.log('\nDatabase Stats:', JSON.stringify(stats.rows[0], null, 2));
+
+ await browser.close();
+ await pool.end();
+}
+
+main().catch(err => {
+ console.error('Fatal:', err);
+ process.exit(1);
+});
diff --git a/shopify/scripts/_superseded/romo-lookup.js b/shopify/scripts/_superseded/romo-lookup.js
new file mode 100644
index 00000000..9cefd8d8
--- /dev/null
+++ b/shopify/scripts/_superseded/romo-lookup.js
@@ -0,0 +1,363 @@
+#!/usr/bin/env node
+/**
+ * Look up unmatched ROP- products on Romo website to find MFR numbers.
+ * Uses Playwright stealth mode (no proxy needed).
+ * Searches by pattern name, extracts W-codes, updates Shopify metafields.
+ */
+
+const path = require('path');
+// Use playwright from ImportNewSkufromURL
+const playwrightPath = path.join('/root/Projects/Designer-Wallcoverings/DW-Programming/ImportNewSkufromURL/node_modules/playwright');
+const { chromium } = require(playwrightPath);
+const fs = require('fs');
+const https = require('https');
+
+const SHOPIFY_DOMAIN = "designer-laboratory-sandbox.myshopify.com";
+const SHOPIFY_TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const LOG_FILE = "/tmp/romo-lookup.log";
+const RESULTS_FILE = "/tmp/romo-lookup-results.json";
+const SLACK_WEBHOOK = "${SLACK_WEBHOOK_URL}";
+
+const UNMATCHED = {
+ "Santiago Metal Stripe": ["73500"],
+ "Kimora Floral": ["73501"],
+ "Marekeshet Floral": ["73502"],
+ "Dufrey Stripe": ["73503","73504","73505","73506","73507","73509","73511"],
+ "Gingko": ["73508","73516"],
+ "Lisette Leaves": ["73512"],
+ "Pussy Willow": ["73513"],
+ "Fallig Flower": ["73514"],
+ "Bonsai": ["73515"],
+ "Sally Floral": ["73523"],
+ "Tatiana Trellis": ["73530","73531","73532","73533","73534","73535"],
+ "Falling Willows": ["73539","73540"],
+ "Orvieta": ["73543"],
+ "Salamanca": ["73545"],
+ "Regal Chevron": ["73547","73548","73549","73550","73552","73554"],
+ "Parrots": ["73555"],
+ "Tokohama": ["73560","73561","73562","73563"],
+ "Hirohama": ["73566","73567","73568","73569","73570","73571","73572","73574"],
+ "Willow Branches": ["73580","73581","73582","73583"],
+ "Gingko Elegante": ["73593","73594","73595"],
+ "Hiyacinth": ["73597","73598"],
+ "Piza": ["73607","73608","73609","73610","73611","73612"],
+ "Cynthia Lanterns": ["73613","73614","73615","73616"],
+ "Samantha Stripe": ["73625","73626","73627","73628","73629","73630","73631","73632","73633","73634"],
+ "Infatuation Flowers": ["73635","73636","73637","73638"],
+ "Scalamanca": ["73661","73662","73663","73664","73665","73667","73668"],
+ "Bulgara": ["73670","73672"],
+ "Byzantium Flock": ["73675"],
+};
+
+function log(msg) {
+ const ts = new Date().toISOString().substr(11, 8);
+ const line = `[${ts}] ${msg}`;
+ console.log(line);
+ fs.appendFileSync(LOG_FILE, line + '\n');
+}
+
+function shopifyRest(method, endpoint, data) {
+ return new Promise((resolve, reject) => {
+ const payload = data ? JSON.stringify(data) : null;
+ const opts = {
+ hostname: SHOPIFY_DOMAIN,
+ path: `/admin/api/2024-01/${endpoint}`,
+ method,
+ headers: { 'X-Shopify-Access-Token': SHOPIFY_TOKEN, 'Content-Type': 'application/json' }
+ };
+ if (payload) opts.headers['Content-Length'] = Buffer.byteLength(payload);
+ const req = https.request(opts, res => {
+ let body = '';
+ res.on('data', c => body += c);
+ res.on('end', () => {
+ if (res.statusCode === 429) {
+ setTimeout(() => shopifyRest(method, endpoint, data).then(resolve).catch(reject), 2500);
+ return;
+ }
+ try { resolve(JSON.parse(body)); } catch { resolve(body); }
+ });
+ });
+ req.on('error', reject);
+ if (payload) req.write(payload);
+ req.end();
+ });
+}
+
+function shopifyGql(query) {
+ return new Promise((resolve, reject) => {
+ const payload = JSON.stringify({ query });
+ const opts = {
+ hostname: SHOPIFY_DOMAIN,
+ path: '/admin/api/2024-01/graphql.json',
+ method: 'POST',
+ headers: { 'X-Shopify-Access-Token': SHOPIFY_TOKEN, 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(payload) }
+ };
+ const req = https.request(opts, res => {
+ let body = '';
+ res.on('data', c => body += c);
+ res.on('end', () => {
+ try { resolve(JSON.parse(body)); } catch { resolve(body); }
+ });
+ });
+ req.on('error', reject);
+ req.write(payload);
+ req.end();
+ });
+}
+
+async function searchRomo(page, term) {
+ try {
+ await page.goto('https://www.romo.com/search/advanced', { waitUntil: 'domcontentloaded', timeout: 20000 });
+ await page.waitForTimeout(2000);
+
+ // Fill search and submit
+ const searchInput = page.locator('input[name="search-query"]').first();
+ await searchInput.fill(term);
+ await searchInput.press('Enter');
+ await page.waitForTimeout(4000);
+
+ // Extract results
+ const data = await page.evaluate(() => {
+ const text = document.body.innerText;
+ // W-codes like W304, W380/06, W364-01
+ const wCodes = [...new Set((text.match(/\bW\d{3,5}[\/\-]?\d{0,2}\b/gi) || []))];
+
+ // Product items - look for links with product info
+ const productLinks = [];
+ document.querySelectorAll('a').forEach(a => {
+ const href = a.href || '';
+ const txt = (a.textContent || '').trim();
+ if (href.includes('/product/') || href.includes('/wallcovering') || (href.includes('/w') && /\/w\d{3}/i.test(href))) {
+ if (txt.length > 2 && txt.length < 150) {
+ productLinks.push({ text: txt, href });
+ }
+ }
+ });
+
+ // Try to find product cards/items
+ const items = [];
+ document.querySelectorAll('.product-item, .search-results-item, .product, [class*="product"], [class*="result"]').forEach(el => {
+ const txt = (el.textContent || '').trim();
+ if (txt.length > 5 && txt.length < 500) {
+ items.push(txt.substring(0, 200));
+ }
+ });
+
+ // Also look for reference codes in specific elements
+ const refs = [];
+ document.querySelectorAll('[class*="ref"], [class*="code"], [class*="sku"], .product-code').forEach(el => {
+ refs.push((el.textContent || '').trim());
+ });
+
+ return {
+ wCodes,
+ productLinks: productLinks.slice(0, 20),
+ items: items.slice(0, 10),
+ refs,
+ title: document.title,
+ resultCount: text.match(/(\d+)\s+items?\s+(were\s+)?found/i)?.[1] || '0',
+ bodySnippet: text.substring(0, 1500)
+ };
+ });
+
+ return data;
+ } catch (err) {
+ log(` Search error: ${err.message.substring(0, 80)}`);
+ return null;
+ }
+}
+
+async function visitProductPage(page, url) {
+ try {
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 15000 });
+ await page.waitForTimeout(2000);
+
+ return await page.evaluate(() => {
+ const text = document.body.innerText;
+ const wCodes = [...new Set((text.match(/\bW\d{3,5}[\/\-]?\d{0,2}\b/gi) || []))];
+ const refs = [];
+ document.querySelectorAll('[class*="ref"], [class*="code"], [class*="sku"]').forEach(el => {
+ refs.push((el.textContent || '').trim());
+ });
+ return { wCodes, refs, title: document.title, bodySnippet: text.substring(0, 1000) };
+ });
+ } catch {
+ return null;
+ }
+}
+
+async function main() {
+ fs.writeFileSync(LOG_FILE, '');
+ const startTime = Date.now();
+
+ log('========================================');
+ log('ROMO WEBSITE LOOKUP (Direct - No Proxy)');
+ log('========================================');
+ log(`Patterns to search: ${Object.keys(UNMATCHED).length}`);
+ log(`Total SKUs: ${Object.values(UNMATCHED).flat().length}`);
+
+ const browser = await chromium.launch({
+ headless: true,
+ args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-blink-features=AutomationControlled']
+ });
+ const context = await browser.newContext({
+ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
+ viewport: { width: 1920, height: 1080 },
+ locale: 'en-US',
+ ignoreHTTPSErrors: true
+ });
+ await context.addInitScript(() => {
+ Object.defineProperty(navigator, 'webdriver', { get: () => false });
+ });
+ const page = await context.newPage();
+
+ const allResults = {};
+ let foundCount = 0;
+ let notFoundCount = 0;
+
+ for (const [pattern, skus] of Object.entries(UNMATCHED)) {
+ log(`\n--- "${pattern}" (${skus.length} SKUs) ---`);
+
+ const result = await searchRomo(page, pattern);
+ if (!result) {
+ log(' FAILED to search');
+ allResults[pattern] = { skus, status: 'error' };
+ notFoundCount++;
+ continue;
+ }
+
+ log(` Results: ${result.resultCount} items, W-codes: [${result.wCodes.join(', ')}], Links: ${result.productLinks.length}`);
+
+ if (result.wCodes.length > 0) {
+ log(` FOUND: ${result.wCodes.join(', ')}`);
+ allResults[pattern] = { skus, wCodes: result.wCodes, status: 'found' };
+ foundCount++;
+ } else if (result.productLinks.length > 0) {
+ // Visit first product page to get codes
+ log(` Checking ${result.productLinks.length} product links...`);
+ let pageWCodes = [];
+ for (const link of result.productLinks.slice(0, 3)) {
+ log(` -> ${link.text.substring(0, 60)} : ${link.href}`);
+ const pageData = await visitProductPage(page, link.href);
+ if (pageData && pageData.wCodes.length > 0) {
+ pageWCodes.push(...pageData.wCodes);
+ log(` W-codes: ${pageData.wCodes.join(', ')}`);
+ }
+ await page.waitForTimeout(1500);
+ }
+ pageWCodes = [...new Set(pageWCodes)];
+ if (pageWCodes.length > 0) {
+ log(` FOUND from pages: ${pageWCodes.join(', ')}`);
+ allResults[pattern] = { skus, wCodes: pageWCodes, links: result.productLinks.map(l => l.href), status: 'found' };
+ foundCount++;
+ } else {
+ log(` Links found but no W-codes extracted`);
+ allResults[pattern] = { skus, links: result.productLinks.map(l => ({t: l.text, h: l.href})), status: 'links_only' };
+ notFoundCount++;
+ }
+ } else {
+ log(` NOT FOUND on Romo`);
+ allResults[pattern] = { skus, status: 'not_found' };
+ notFoundCount++;
+ }
+
+ await page.waitForTimeout(2000);
+ }
+
+ await browser.close();
+
+ // Save results
+ fs.writeFileSync(RESULTS_FILE, JSON.stringify(allResults, null, 2));
+
+ // Now update Shopify for products where we found W-codes
+ log('\n========================================');
+ log('UPDATING SHOPIFY WITH FOUND MFR NUMBERS');
+ log('========================================');
+
+ let updated = 0;
+ let errors = 0;
+
+ for (const [pattern, data] of Object.entries(allResults)) {
+ if (data.status !== 'found' || !data.wCodes || data.wCodes.length === 0) continue;
+
+ // For each SKU in this pattern, assign the W-code(s)
+ // If multiple W-codes found, we need to figure out which goes to which SKU
+ // For now, if only 1 W-code, assign to all. If multiple, log for review.
+ const mfr = data.wCodes.length === 1 ? data.wCodes[0] : data.wCodes.join(', ');
+
+ for (const skuNum of data.skus) {
+ const sku = `ROP-${skuNum}`;
+
+ // Find product ID by SKU via GraphQL
+ const gqlResult = await shopifyGql(`{ products(first:1, query:"sku:${sku}") { edges { node { id variants(first:5) { edges { node { id sku } } } } } } }`);
+
+ const edges = gqlResult?.data?.products?.edges;
+ if (!edges || edges.length === 0) {
+ log(` ${sku}: Product not found in Shopify`);
+ continue;
+ }
+
+ const productId = edges[0].node.id.replace('gid://shopify/Product/', '');
+
+ // If multiple W-codes and multiple SKUs, try to match by position
+ let thisMfr = mfr;
+ if (data.wCodes.length > 1 && data.skus.length > 1) {
+ const idx = data.skus.indexOf(skuNum);
+ if (idx < data.wCodes.length) {
+ thisMfr = data.wCodes[idx];
+ }
+ }
+
+ log(` ${sku} -> MFR: ${thisMfr}`);
+
+ const updateResult = await shopifyRest('PUT', `products/${productId}.json`, {
+ product: {
+ id: parseInt(productId),
+ metafields: [
+ { namespace: 'custom', key: 'manufacturer_sku', value: thisMfr, type: 'single_line_text_field' },
+ { namespace: 'dwc', key: 'manufacturer_sku', value: thisMfr, type: 'single_line_text_field' }
+ ]
+ }
+ });
+
+ if (updateResult?.product) {
+ updated++;
+ } else {
+ errors++;
+ log(` ERROR updating ${sku}`);
+ }
+
+ await new Promise(r => setTimeout(r, 600));
+ }
+ }
+
+ const duration = ((Date.now() - startTime) / 1000).toFixed(1);
+
+ log('\n========================================');
+ log('FINAL SUMMARY');
+ log('========================================');
+ log(`Patterns searched: ${Object.keys(UNMATCHED).length}`);
+ log(`Found MFR codes: ${foundCount}`);
+ log(`Not found: ${notFoundCount}`);
+ log(`Shopify updated: ${updated}`);
+ log(`Errors: ${errors}`);
+ log(`Duration: ${duration}s`);
+
+ // Slack
+ const slackMsg = {
+ text: `${errors === 0 ? '✅' : '⚠️'} *Romo MFR Lookup Complete*\n• Patterns searched: ${Object.keys(UNMATCHED).length}\n• Found: ${foundCount}\n• Not found: ${notFoundCount}\n• Shopify updated: ${updated}\n• Errors: ${errors}\n• Duration: ${duration}s`
+ };
+ try {
+ const req = https.request(SLACK_WEBHOOK, { method: 'POST', headers: { 'Content-Type': 'application/json' } });
+ req.write(JSON.stringify(slackMsg));
+ req.end();
+ log('Slack notification sent');
+ } catch {}
+
+ log('Done!');
+}
+
+main().catch(err => {
+ log(`FATAL: ${err.message}`);
+ process.exit(1);
+});
diff --git a/shopify/scripts/cadence/cadence-import.js b/shopify/scripts/cadence/cadence-import.js
index 782119a2..efd28627 100644
--- a/shopify/scripts/cadence/cadence-import.js
+++ b/shopify/scripts/cadence/cadence-import.js
@@ -194,7 +194,12 @@ function scrubBanned(str) {
.replace(/\bSeabrook\b/gi, '') // WallQuest sub-brand
.replace(/\bCommand ?54\b/gi, '') // Command54 (→ Phillipe Romano)
.replace(/\bDesima\b/gi, '') // Desima (→ Phillipe Romano Elegante)
- .replace(/\bCarlsten\b/gi, ''); // Desima/Carlsten line
+ .replace(/\bCarlsten\b/gi, '') // Desima/Carlsten line
+ .replace(/\bGreenland\b/gi, '') // Greenland (→ Phillipe Romano) — TK-12015
+ .replace(/\bMomentum(?:\s+Textiles(?:\s*&(?:amp;)*\s*Walls)?)?\b/gi, '') // Momentum (→ Hollywood Wallcoverings)
+ .replace(/\bVersa(?:\s+Designed\s+Surfaces)?\b/gi, '') // Versa / Versa Designed Surfaces
+ .replace(/\bRigo(?:\s+Wallcovering)?\b/gi, '') // Rigo (→ Phillipe Romano Vinyls)
+ .replace(/\bTokiwa(?:\s+USA)?\b/gi, ''); // Tokiwa (→ Fentucci Naturals)
return s.replace(/\s{2,}/g, ' ').trim();
}
// Importer DENYLIST GUARD (GUARD-ONLY, Steve-approved 2026-06-25, DWBR source re-leak).
@@ -227,11 +232,43 @@ function bannedBrandReason(label) {
[/\bCommand ?54\b/i, '"Command54" is a banned private-label upstream (→ Phillipe Romano)'],
[/\bDesima\b/i, '"Desima" is a banned private-label upstream (→ Phillipe Romano Elegante)'],
[/\bCarlsten\b/i, '"Carlsten" is a banned Desima/Carlsten line name'],
+ [/\bGreenland\b/i, '"Greenland" is a banned private-label upstream (→ Phillipe Romano)'],
+ [/\bMomentum\b/i, '"Momentum" is a banned private-label upstream (→ Hollywood Wallcoverings)'],
+ [/\bVersa\b/i, '"Versa"/"Versa Designed Surfaces" is a banned Momentum sub-brand'],
+ [/\bRigo\b/i, '"Rigo" is a banned private-label upstream (→ Phillipe Romano)'],
+ [/\bTokiwa\b/i, '"Tokiwa" is a banned private-label upstream (→ Fentucci Naturals)'],
];
for (const [re, why] of RULES) { if (re.test(s)) return why; }
return null;
}
+// TK-12015 — UNIVERSAL BLOCKING leak scan over the FINAL assembled productSet input.
+// bannedBrandReason() only checks vendor/Brand/title; this closes descriptionHtml + tags + alt.
+// Reuses the SAME denylist regexes so there is one source of truth. Returns [] when clean.
+function scanPublicLeak(input) {
+ if (!input || typeof input !== 'object') return [];
+ const RULES = [
+ [/Brewster\s*&(?:amp;)*\s*York/i, 'Brewster & York'], [/\bBrewster\b/i, 'Brewster'],
+ [/\bYork Wallcoverings?\b/i, 'York Wallcoverings'], [/\bby York\b/i, 'by York'],
+ [/\byorkwall\b/i, 'yorkwall'], [/\bWall ?Quest\b/i, 'WallQuest'],
+ [/\bChesapeake\b/i, 'Chesapeake'], [/\bNext ?Wall\b/i, 'NextWall'], [/\bSeabrook\b/i, 'Seabrook'],
+ [/\bCommand ?54\b/i, 'Command54'], [/\bDesima\b/i, 'Desima'], [/\bCarlsten\b/i, 'Carlsten'],
+ [/\bGreenland\b/i, 'Greenland'], [/\bMomentum\b/i, 'Momentum'], [/\bVersa\b/i, 'Versa'],
+ [/\bRigo\b/i, 'Rigo'], [/\bTokiwa\b/i, 'Tokiwa'],
+ ];
+ const fields = [];
+ const push = (name, v) => { if (typeof v === 'string' && v.trim()) fields.push([name, v]); };
+ push('title', input.title); push('vendor', input.vendor); push('descriptionHtml', input.descriptionHtml);
+ for (const t of (input.tags || [])) push('tags', t);
+ for (const f of (input.files || [])) push('alt', f && f.alt);
+ for (const m of (input.metafields || [])) if (m && /brand/i.test(m.key || '')) push('metafield:'+m.key, m.value);
+ const hits = [];
+ for (const [fname, val] of fields)
+ for (const [re, term] of RULES)
+ if (re.test(val)) hits.push(`${fname} contains "${term}"`);
+ return hits;
+}
+
// Defensive unwrap for double-encoded metafield values. If a catalog spec column
// (e.g. material) holds a whole Shopify metafield object — {"type":...,"value":"X"} —
// stored as its JSON string, writing it raw leaks the blob into BOTH custom.material
@@ -991,9 +1028,11 @@ async function createProduct(table, row, payload) {
const hold = bannedBrandReason(payload.input?.vendor)
|| bannedBrandReason(brandMf && brandMf.value)
|| bannedBrandReason(payload.input?.title);
- if (hold) {
- console.log(` ⛔ HELD ${row.dw_sku} — ${hold} | resolved Brand="${payload.input?.vendor}" title="${String(payload.title||'').slice(0,60)}"`);
- return { ok: false, err: `HELD: banned front-facing Brand (${hold})`, held: true };
+ const leaks = scanPublicLeak(payload.input); // TK-12015 — covers descriptionHtml + tags + alt
+ if (hold || leaks.length) {
+ const why = hold ? `banned front-facing Brand (${hold})` : `LEAK: ${leaks.join('; ')}`;
+ console.log(` ⛔ HELD ${row.dw_sku} — ${why} | resolved Brand="${payload.input?.vendor}" title="${String(payload.title||'').slice(0,60)}"`);
+ return { ok: false, err: `HELD: ${why}`, held: true };
}
// DEDUP GUARD — never create a second copy of a sku that already has a live listing.
const existing = await findExistingProduct(row.dw_sku);
diff --git a/shopify/scripts/dwvs-import-catalog-only.js b/shopify/scripts/dwvs-import-catalog-only.js
index dbc70116..3257944b 100644
Binary files a/shopify/scripts/dwvs-import-catalog-only.js and b/shopify/scripts/dwvs-import-catalog-only.js differ
diff --git a/shopify/scripts/tk12015-relabel-greenland.mjs b/shopify/scripts/tk12015-relabel-greenland.mjs
new file mode 100644
index 00000000..11ddec1b
--- /dev/null
+++ b/shopify/scripts/tk12015-relabel-greenland.mjs
@@ -0,0 +1,111 @@
+#!/usr/bin/env node
+// TK-12015 Phase 3 (Steve-APPROVED) — relabel 143 ARCHIVED Greenland products -> Phillipe Romano
+// vendor: Greenland -> Phillipe Romano
+// title: "... | Greenland" -> "... | Phillipe Romano" (also strip any other "Greenland" token, guarded)
+// global.Brand metafield: Greenland -> Phillipe Romano (ONLY where it currently == "Greenland")
+// handle: LEAVE AS-IS (per memo) status: KEEP ARCHIVED (productUpdate omits status)
+// RAILS: writes the restore-map to disk BEFORE any mutation; re-reads + asserts 143 rows; batches<=50 with >=90s gap.
+// Usage: node tk12015-relabel-greenland.mjs [--build-only|--apply]
+import { readFileSync, writeFileSync } from 'node:fs';
+import { execSync } from 'node:child_process';
+
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const API = '2024-10';
+const TOKEN = execSync(`grep -E '^SHOPIFY_ADMIN_TOKEN=' ~/Projects/secrets-manager/.env | cut -d= -f2`, {shell:'/bin/zsh'}).toString().trim();
+const ASSET = '/Users/macstudio3/.claude/yolo-queue/pending-approval/assets/tk12015-greenland-archived-143.json';
+const MAP = '/Users/macstudio3/.claude/yolo-queue/executed-reversible/tk12015-greenland-restore-map.json';
+const NEW_VENDOR = 'Phillipe Romano';
+const OLD_TOKEN = 'Greenland';
+const mode = process.argv.includes('--apply') ? 'apply' : 'build-only';
+const sleep = ms => new Promise(r=>setTimeout(r,ms));
+
+async function gql(query, variables){
+ for (let attempt=0; attempt<6; attempt++){
+ const res = await fetch(`https://${SHOP}/admin/api/${API}/graphql.json`, {
+ method:'POST',
+ headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},
+ body: JSON.stringify({query, variables})
+ });
+ const j = await res.json();
+ if (j.errors && JSON.stringify(j.errors).match(/throttl/i)){ await sleep(2000); continue; }
+ // proactive throttle backoff
+ const avail = j?.extensions?.cost?.throttleStatus?.currentlyAvailable;
+ if (typeof avail === 'number' && avail < 300) await sleep(1500);
+ return j;
+ }
+ throw new Error('throttled repeatedly');
+}
+
+const assets = JSON.parse(readFileSync(ASSET,'utf8'));
+console.log(`[${mode}] ${assets.length} target products`);
+
+// ---------- PHASE 1: build restore-map from LIVE state (no writes) ----------
+const byGid = {};
+const ids = assets.map(a=>`gid://shopify/Product/${a.id}`);
+const Q = `query($ids:[ID!]!){ nodes(ids:$ids){ ... on Product { id title handle vendor status
+ metafield(namespace:"global", key:"Brand"){ id value type } } } }`;
+for (let i=0;i<ids.length;i+=50){
+ const chunk = ids.slice(i,i+50);
+ const j = await gql(Q, {ids:chunk});
+ if (j.errors){ console.error('READ ERROR', JSON.stringify(j.errors)); process.exit(1); }
+ for (const n of j.data.nodes){ if(n) byGid[n.id]=n; }
+}
+const restore = [];
+for (const a of assets){
+ const gid = `gid://shopify/Product/${a.id}`;
+ const p = byGid[gid];
+ if (!p){ console.error('MISSING live product', gid, a.sku); process.exit(1); }
+ restore.push({
+ id: a.id, gid, sku: a.sku,
+ old_vendor: p.vendor, old_title: p.title, old_handle: p.handle, old_status: p.status,
+ old_brand_id: p.metafield?.id ?? null,
+ old_brand_value: p.metafield?.value ?? null,
+ old_brand_type: p.metafield?.type ?? null,
+ });
+}
+writeFileSync(MAP, JSON.stringify({ticket:'TK-12015', created:new Date().toISOString(), shop:SHOP, count:restore.length, rows:restore}, null, 2));
+// re-read + assert
+const disk = JSON.parse(readFileSync(MAP,'utf8'));
+if (disk.count !== 143 || disk.rows.length !== 143){ console.error('RESTORE-MAP not 143 rows on disk — abort'); process.exit(1); }
+console.log(`restore-map written + verified on disk: ${disk.rows.length} rows -> ${MAP}`);
+
+// build the change plan
+const plan = restore.map(r=>{
+ let newTitle = r.old_title.replace(/\s*\|\s*Greenland\s*$/,' | '+NEW_VENDOR);
+ // strip any other stray Greenland token (none expected)
+ if (/greenland/i.test(newTitle)) newTitle = newTitle.replace(/greenland/ig, NEW_VENDOR);
+ const touchBrand = r.old_brand_value === OLD_TOKEN;
+ return { gid:r.gid, sku:r.sku, old_title:r.old_title, newTitle,
+ old_vendor:r.old_vendor, touchBrand,
+ still: /greenland/i.test(newTitle) };
+});
+const stillLeak = plan.filter(p=>p.still);
+if (stillLeak.length){ console.error('TITLE still contains Greenland after transform — abort', stillLeak.slice(0,5)); process.exit(1); }
+console.log('sample transforms:');
+plan.slice(0,5).forEach(p=>console.log(` ${p.sku}: "${p.old_title}" -> "${p.newTitle}" | vendor ${p.old_vendor}->${NEW_VENDOR} | brand:${p.touchBrand?'Greenland->PR':'skip('+p.old_vendor+')'}`));
+console.log(`brand metafields to update: ${plan.filter(p=>p.touchBrand).length}/143`);
+
+if (mode === 'build-only'){ console.log('build-only: no writes. Re-run with --apply to execute.'); process.exit(0); }
+
+// ---------- PHASE 2: apply (batches<=50, >=90s gap) ----------
+const M = `mutation($input:ProductInput!){ productUpdate(input:$input){ product{ id title vendor } userErrors{ field message } } }`;
+let ok=0, errs=[];
+for (let i=0;i<plan.length;i+=50){
+ const batch = plan.slice(i,i+50);
+ console.log(`\n== batch ${i/50+1} (${batch.length}) @ ${new Date().toISOString()} ==`);
+ for (const p of batch){
+ const input = { id:p.gid, title:p.newTitle, vendor:NEW_VENDOR };
+ if (p.touchBrand) input.metafields = [{namespace:'global', key:'Brand', value:NEW_VENDOR, type:'single_line_text_field'}];
+ const j = await gql(M, {input});
+ const ue = j?.data?.productUpdate?.userErrors;
+ if (j.errors || (ue && ue.length)){ errs.push({sku:p.sku, err: j.errors||ue}); console.error(` ERR ${p.sku}:`, JSON.stringify(j.errors||ue)); }
+ else { ok++; }
+ await sleep(150);
+ }
+ console.log(` batch done. running total ok=${ok} errs=${errs.length}`);
+ if (i+50 < plan.length){ console.log(' sleeping 90s before next batch...'); await sleep(90000); }
+}
+console.log(`\nAPPLY COMPLETE: ok=${ok} errs=${errs.length}`);
+if (errs.length) console.log(JSON.stringify(errs,null,2));
+writeFileSync('/tmp/tk12015-apply-result.json', JSON.stringify({ok, errs, ts:new Date().toISOString()},null,2));
+process.exit(errs.length? 1 : 0);
diff --git a/shopify/scripts/wolf-gordon-shopify-push.js b/shopify/scripts/wolf-gordon-shopify-push.js
index ea74547b..b6e96f01 100644
Binary files a/shopify/scripts/wolf-gordon-shopify-push.js and b/shopify/scripts/wolf-gordon-shopify-push.js differ
← 9ef06c30 snapshot: sweep uncommitted working tree — TK-11503 explicit
·
back to Designer Wallcoverings
·
chore(outer): stop tracking 20,012 phantom copies of 40 nest 57893960 →