[object Object]

← back to Contractwallpaper

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

cd6b4f621e409fe3d40fb08aa8f68eb6761fe077 · 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 cd6b4f621e409fe3d40fb08aa8f68eb6761fe077
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
---
 tmp-catalog-finish-collection-clean.mjs | 2 +-
 tmp-kravet-finish-collection-clean.mjs  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tmp-catalog-finish-collection-clean.mjs b/tmp-catalog-finish-collection-clean.mjs
index 7d355f4..6781a45 100644
--- a/tmp-catalog-finish-collection-clean.mjs
+++ b/tmp-catalog-finish-collection-clean.mjs
@@ -9,7 +9,7 @@ const DOMAIN=(env.SHOPIFY_STORE_DOMAIN||env.SHOPIFY_STORE).replace(/^https?:\/\/
 const GQL=`https://${DOMAIN}/admin/api/2024-10/graphql.json`;
 const H={'X-Shopify-Access-Token':env.SHOPIFY_ADMIN_TOKEN,'Content-Type':'application/json'};
 const sleep=ms=>new Promise(r=>setTimeout(r,ms));
-const DRY=process.argv.includes('--dry');
+const DRY=!process.argv.includes('--apply');
 const LIMIT=(()=>{const i=process.argv.indexOf('--limit');return i>=0?Number(process.argv[i+1]):null;})();
 
 const SMALL=new Set(["and","or","the","of","in","a","an","for","to","with","by"]);
diff --git a/tmp-kravet-finish-collection-clean.mjs b/tmp-kravet-finish-collection-clean.mjs
index fa910d9..67178de 100644
--- a/tmp-kravet-finish-collection-clean.mjs
+++ b/tmp-kravet-finish-collection-clean.mjs
@@ -10,7 +10,7 @@ const DOMAIN=(env.SHOPIFY_STORE_DOMAIN||env.SHOPIFY_STORE).replace(/^https?:\/\/
 const GQL=`https://${DOMAIN}/admin/api/2024-10/graphql.json`;
 const H={'X-Shopify-Access-Token':env.SHOPIFY_ADMIN_TOKEN,'Content-Type':'application/json'};
 const sleep=ms=>new Promise(r=>setTimeout(r,ms));
-const DRY = process.argv.includes('--dry');
+const DRY = !process.argv.includes('--apply');
 const LIMIT = (()=>{const i=process.argv.indexOf('--limit'); return i>=0?Number(process.argv[i+1]):null;})();
 
 // --- transforms ---

← e506b04 Add clean /privacy route (AdSense URL consistency)  ·  back to Contractwallpaper  ·  front-page-steward: ux-primitives bundle (silent) TK-12031 d912c71 →