[object Object]

← back to Japan Enrich

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

a44e343ca012c2de2bc4116a384ec08606c94040 · 2026-09-10 17:52:28 -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 a44e343ca012c2de2bc4116a384ec08606c94040
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 17:52:28 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
---
 carnegie-split/rollout.mjs  | 2 +-
 carnegie-split/rollout2.mjs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/carnegie-split/rollout.mjs b/carnegie-split/rollout.mjs
index a8ee382..fb255da 100644
--- a/carnegie-split/rollout.mjs
+++ b/carnegie-split/rollout.mjs
@@ -26,7 +26,7 @@ import { mfrSkuValid, bodyHtmlValid, SKIP_TAG as NEEDS_MFR_TAG, NEEDS_DESC_TAG }
 const HOME=process.env.HOME, SHOP='designer-laboratory-sandbox.myshopify.com', API='2024-10';
 const TOK=execSync(`grep -m1 '^SHOPIFY_ADMIN_TOKEN=' ${HOME}/Projects/secrets-manager/.env|cut -d= -f2-|tr -d '"'\\'' '`).toString().trim();
 const args=process.argv.slice(2), aV=k=>{const i=args.indexOf(k);return i>=0?args[i+1]:null;};
-const ONLY_PAT=aV('--pattern'), LIMIT=Number(aV('--limit')||0), DRY=args.includes('--dry'), NO_ARCH=args.includes('--no-archive');
+const ONLY_PAT=aV('--pattern'), LIMIT=Number(aV('--limit')||0), DRY=!args.includes('--apply'), NO_ARCH=args.includes('--no-archive');
 const LEDGER=`${HOME}/Projects/carnegie-split/rollout-ledger.jsonl`;
 // TK-10792: mfrSkuValid + NEEDS_MFR_TAG imported from canonical gate above
 let mfrSkipCount=0, descSkipCount=0;
diff --git a/carnegie-split/rollout2.mjs b/carnegie-split/rollout2.mjs
index 0b4368f..1416875 100644
--- a/carnegie-split/rollout2.mjs
+++ b/carnegie-split/rollout2.mjs
@@ -24,7 +24,7 @@ import { mfrSkuValid, bodyHtmlValid, SKIP_TAG as NEEDS_MFR_TAG, NEEDS_DESC_TAG }
 const HOME=process.env.HOME, SHOP='designer-laboratory-sandbox.myshopify.com', API='2024-10';
 const TOK=execSync(`grep -m1 '^SHOPIFY_ADMIN_TOKEN=' ${HOME}/Projects/secrets-manager/.env|cut -d= -f2-|tr -d '"'\\'' '`).toString().trim();
 const args=process.argv.slice(2), aV=k=>{const i=args.indexOf(k);return i>=0?args[i+1]:null;};
-const ONLY_PAT=aV('--pattern'), LG=Number(aV('--limit-groups')||0), DRY=args.includes('--dry'), NO_ARCH=args.includes('--no-archive');
+const ONLY_PAT=aV('--pattern'), LG=Number(aV('--limit-groups')||0), DRY=!args.includes('--apply'), NO_ARCH=args.includes('--no-archive');
 const LEDGER=`${HOME}/Projects/carnegie-split/rollout-ledger.jsonl`;
 const sleep=ms=>new Promise(r=>setTimeout(r,ms));
 // TK-10792: mfrSkuValid + NEEDS_MFR_TAG imported from canonical gate above

← ced1de9 TK-11434: apply DW markup in the three Carnegie create paths  ·  back to Japan Enrich  ·  TK-11434: align all four Carnegie create paths to the fixer' 3a27547 →