[object Object]

← back to Dw Domain Fleet

fleet: deploy-safe showroom-vendor require — fall back to in-repo list off-Mac2 (TK-11322)

bab12e12ddfe8093bf87b7fe29a8697fa6a2080f · 2026-09-09 14:58:54 -0700 · Steve Abrams

Root cause of the 502s after repoint: server.js required ~/Projects/fix-live-board/
config/showroom-vendor.cjs, which exists on Mac2 but NOT Kamatera -> MODULE_NOT_FOUND
crashed every dwf-* on boot. Now try/catch with a fallback that reads the in-repo
config/showroom-vendors.json, so the fleet boots on any box. Verified funnel+monetize
boot 200 with HOME unset.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S81Y5KkGKrUHg2mwWQtD96

Files touched

Diff

commit bab12e12ddfe8093bf87b7fe29a8697fa6a2080f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 9 14:58:54 2026 -0700

    fleet: deploy-safe showroom-vendor require — fall back to in-repo list off-Mac2 (TK-11322)
    
    Root cause of the 502s after repoint: server.js required ~/Projects/fix-live-board/
    config/showroom-vendor.cjs, which exists on Mac2 but NOT Kamatera -> MODULE_NOT_FOUND
    crashed every dwf-* on boot. Now try/catch with a fallback that reads the in-repo
    config/showroom-vendors.json, so the fleet boots on any box. Verified funnel+monetize
    boot 200 with HOME unset.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01S81Y5KkGKrUHg2mwWQtD96
---
 server.js | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/server.js b/server.js
index 57ecea1..5c9ed45 100644
--- a/server.js
+++ b/server.js
@@ -26,7 +26,19 @@ const catalog = require('./shared/catalog');
 const { sortProducts } = require('./shared/sort');
 const render = require('./shared/render');
 // Canonical showroom-vendor primitive (list + logic in fix-live-board/config). TK-11186.
-const { isShowroomVendor } = require(path.join(process.env.HOME, 'Projects/fix-live-board/config/showroom-vendor.cjs'));
+// Deploy-safe: fix-live-board lives on Mac2, not on Kamatera — fall back to the
+// in-repo showroom list (config/showroom-vendors.json) so the fleet boots anywhere.
+let isShowroomVendor;
+try {
+  ({ isShowroomVendor } = require(path.join(process.env.HOME, 'Projects/fix-live-board/config/showroom-vendor.cjs')));
+} catch (e) {
+  let _showroom = [];
+  try { _showroom = JSON.parse(fs.readFileSync(path.join(__dirname, 'config', 'showroom-vendors.json'), 'utf8')); } catch (_) {}
+  const _norm = s => String(s == null ? '' : s).trim().toLowerCase();
+  const _set = new Set(_showroom.map(_norm));
+  isShowroomVendor = v => _set.has(_norm(v));
+  console.log(`[${SITE}] showroom-vendor: using in-repo fallback (${_set.size} vendors)`);
+}
 
 // Monetize (parked/for-sale content) sites are standalone — they never serve the
 // DW catalog/funnel, so skip the entire catalog + hero + image-proxy build for

← 39b399d fleet: repoint all 43 sites to free ports 11100-11142 (fix E  ·  back to Dw Domain Fleet  ·  monetize DEPTH: add /articles hub + per-article long-form pa 64e2a9d →