[object Object]

← back to Marketing Command Center

add true no-write fanout inspection

ff521a3303de9386b698a9885ce2b6f575ec12b1 · 2026-08-29 17:29:18 -0700 · Steve Abrams

Files touched

Diff

commit ff521a3303de9386b698a9885ce2b6f575ec12b1
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sat Aug 29 17:29:18 2026 -0700

    add true no-write fanout inspection
---
 modules/channels/index.js | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/modules/channels/index.js b/modules/channels/index.js
index c95f2ac..2f01123 100644
--- a/modules/channels/index.js
+++ b/modules/channels/index.js
@@ -1040,6 +1040,10 @@ module.exports = {
         }
         const st = platformStatus();
         const live = d.confirm === true && d.dryRun === false;
+        // Read-only verification mode: enumerate fan-out outcomes without
+        // mutating the outbox. Unlike dryRun (which intentionally stages a
+        // draft for the UI), inspectOnly is a true no-write probe.
+        const inspectOnly = d.inspectOnly === true;
         const isVideo = !!content.videoUrl;
         const isImage = !!content.mediaUrl && !content.videoUrl;
         // Why a channel can't actually post right now (null = clear to fire).
@@ -1072,8 +1076,10 @@ module.exports = {
             results.push({ channel: ch, live: false, skipped: !!block, staged: true, reason });
           }
         }
-        writeOutbox(outbox);
-        res.json({ ok: true, live, results, note: live ? 'Live posts fired to connected channels; unconnected staged.' : 'Staged only — connect channels + confirm with dryRun:false to post live.' });
+        if (!inspectOnly) writeOutbox(outbox);
+        res.json({ ok: true, live, inspectOnly, writePerformed: !inspectOnly, results, note: inspectOnly
+          ? 'Inspection only — no outbox or external writes performed.'
+          : (live ? 'Live posts fired to connected channels; unconnected staged.' : 'Staged only — connect channels + confirm with dryRun:false to post live.') });
       } catch (e) { res.status(500).json({ error: e.message }); }
     });
 

← 17c61d4 auto-data-snapshot: 2026-08-29T15:52:29 (1 data files) — pub  ·  back to Marketing Command Center  ·  auto-data-snapshot: 2026-08-29T17:42:33 (1 data files) — pub eb8b600 →