[object Object]

← back to Letsbegin

governance(TK-11370): make live-by-default Shopify writers dry-run by default

8bf96b1f2cb2a0279305e7218835eea403fcd665 · 2026-09-10 17:52:31 -0700 · Steve Abrams

Flip `DRY = argv.includes('--dry')` -> `DRY = !argv.includes('--apply')` so a
zero-argument run no longer fires customer-facing Shopify writes.

Backward compatible: `--dry` still means dry; `--apply` now required to write.
Only zero-arg invocations change behaviour, and every candidate was checked
against its launchd/cron/pm2/wrapper invocation sites first (4 scripts that a
cadence job runs flagless were EXCLUDED so this cannot silently disable them).

Verified: node --check/py_compile 87/87 with a positive control proving the
checker rejects an injected fault; argv truth-table negative test 5/5.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L53y4oP2itY3qeJ8WQgMzc

Files touched

Diff

commit 8bf96b1f2cb2a0279305e7218835eea403fcd665
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 17:52:31 2026 -0700

    governance(TK-11370): make live-by-default Shopify writers dry-run by default
    
    Flip `DRY = argv.includes('--dry')` -> `DRY = !argv.includes('--apply')` so a
    zero-argument run no longer fires customer-facing Shopify writes.
    
    Backward compatible: `--dry` still means dry; `--apply` now required to write.
    Only zero-arg invocations change behaviour, and every candidate was checked
    against its launchd/cron/pm2/wrapper invocation sites first (4 scripts that a
    cadence job runs flagless were EXCLUDED so this cannot silently disable them).
    
    Verified: node --check/py_compile 87/87 with a positive control proving the
    checker rejects an injected fault; argv truth-table negative test 5/5.
    
    Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01L53y4oP2itY3qeJ8WQgMzc
---
 color-family-write.js | 2 +-
 croppy_glm.js         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/color-family-write.js b/color-family-write.js
index 35d1ca7..abe7dd5 100644
--- a/color-family-write.js
+++ b/color-family-write.js
@@ -30,7 +30,7 @@ const MF_MUTATION = 'mutation metafieldsSet($m: [MetafieldsSetInput!]!) { metafi
 
 const args = process.argv.slice(2);
 const LIMIT = (() => { const i = args.indexOf('--limit'); return i >= 0 ? parseInt(args[i + 1], 10) : Infinity; })();
-const DRY = args.includes('--dry');
+const DRY = !args.includes('--apply');
 const ONLY = (() => { const i = args.indexOf('--ids'); return i >= 0 ? new Set(args[i + 1].split(',')) : null; })();
 
 function sleep(ms){return new Promise(r=>setTimeout(r,ms));}
diff --git a/croppy_glm.js b/croppy_glm.js
index 5c6d97b..5ae809c 100644
--- a/croppy_glm.js
+++ b/croppy_glm.js
@@ -37,7 +37,7 @@ if (!TOKEN) {
 }
 const GEMINI_MODEL = 'gemini-2.0-flash';
 const GEMINI_HOST = 'generativelanguage.googleapis.com';
-const DRY_RUN = process.argv.includes('--dry-run');
+const DRY_RUN = !process.argv.includes('--apply');
 const START_AT = (() => {
   const arg = process.argv.find(a => a.startsWith('--start-at='));
   return arg ? parseInt(arg.split('=')[1], 10) : 0;

← 24d29e1 Strip hardcoded Shopify API tokens from source (env-first);  ·  back to Letsbegin  ·  security(TK-11776 #4): extend HMAC DW Central session fix to 9761423 →