[object Object]

← back to Wallco Ai

pdp-theme: atomic write (temp+rename) so a crash mid-write can't leave partial JSON every PDP reads — codex review hardening

2343a75a7c2bcf29c576a2b3bc3d6ae77a6096a1 · 2026-05-31 19:08:13 -0700 · Steve Abrams

Files touched

Diff

commit 2343a75a7c2bcf29c576a2b3bc3d6ae77a6096a1
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun May 31 19:08:13 2026 -0700

    pdp-theme: atomic write (temp+rename) so a crash mid-write can't leave partial JSON every PDP reads — codex review hardening
---
 server.js | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/server.js b/server.js
index 2fd2c3e..811afa5 100644
--- a/server.js
+++ b/server.js
@@ -1000,7 +1000,12 @@ function getActivePdpTheme() {
 function setActivePdpTheme(theme, who) {
   if (theme !== null && !THEME_FILE_MAP[theme]) throw new Error('unknown theme: ' + theme);
   const payload = { theme: theme || null, setAt: new Date().toISOString(), setBy: who || 'admin' };
-  fs.writeFileSync(PDP_THEME_FILE, JSON.stringify(payload, null, 2));
+  // Atomic write (temp + rename): a crash mid-write must never leave partial
+  // JSON that every PDP would then read. (Reader also falls back to monolith on
+  // parse error, but this avoids even a brief revert.) — codex review 2026-05-31
+  const tmp = PDP_THEME_FILE + '.tmp';
+  fs.writeFileSync(tmp, JSON.stringify(payload, null, 2));
+  fs.renameSync(tmp, PDP_THEME_FILE);
   _pdpThemeCache = { val: theme || null, at: Date.now() };
   return payload;
 }

← 252689c gen-luxe grounds on real Shopify SKUs by DW SKU prefix (grs-  ·  back to Wallco Ai  ·  deploy.conf: exclude .venv/__pycache__/logs + prod-only scri 1d5ddf1 →