[object Object]

← back to Commercialrealestate

CRCP: harden serve.js — atomic brokers-snapshot write (H3) + clip /api/comps inputs before child-process env (H2)

379ab20efbeb80dedb5726fccabdb0afb64e6c23 · 2026-07-25 11:00:21 -0700 · Steve Abrams

From a code-reviewer sweep; both verified against source. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 379ab20efbeb80dedb5726fccabdb0afb64e6c23
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sat Jul 25 11:00:21 2026 -0700

    CRCP: harden serve.js — atomic brokers-snapshot write (H3) + clip /api/comps inputs before child-process env (H2)
    
    From a code-reviewer sweep; both verified against source. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 scripts/serve.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/serve.js b/scripts/serve.js
index aa1859b..8dcb7de 100644
--- a/scripts/serve.js
+++ b/scripts/serve.js
@@ -174,7 +174,7 @@ app.post('/api/contacts/:key/send-draft', async (req, res) => {
 // deps resolve from the browserbase skill's node_modules.
 const { execFile } = require('child_process');
 app.post('/api/comps', (req, res) => {
-  const { city = 'Van Nuys', type = 'Multifamily' } = req.body || {};
+  const _cb = req.body || {}; const _clip = (v, n, d) => String(v == null ? d : v).slice(0, n); const city = _clip(_cb.city, 80, 'Van Nuys'), type = _clip(_cb.type, 40, 'Multifamily');
   const child = execFile('node', [path.join(__dirname, 'live-comps-bb.js')], {
     env: { ...process.env, CC_CITY: city, CC_TYPE: type, NODE_PATH: process.env.HOME + '/.claude/skills/browserbase/node_modules' },
     timeout: 90000, maxBuffer: 2 * 1024 * 1024
@@ -908,7 +908,7 @@ app.post('/api/broker/find-email', async (req, res) => {
           const s = readBrokerSnap();
           if (s) {
             for (const arr of [s.brokers, s.top]) (arr || []).forEach(x => { if (+x.id === bid && !x.email) { x.email = r.found; saved = true; } });
-            if (saved) fs.writeFileSync(path.join(ROOT, 'data', 'brokers-snapshot.json'), JSON.stringify(s));
+            if (saved) { const _sp = path.join(ROOT, 'data', 'brokers-snapshot.json'); fs.writeFileSync(_sp + '.tmp', JSON.stringify(s)); fs.renameSync(_sp + '.tmp', _sp); }
           }
         } catch (_) { saved = false; }
       }

← aeb0028 CRCP: graceful-degrade /api/brokers/linkedin + /api/segments  ·  back to Commercialrealestate  ·  auto-save: 2026-07-25T12:06:06 (2 files) — data/crcp-drift-s 27e17b2 →