← 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
M tmp-catalog-finish-collection-clean.mjsM tmp-kravet-finish-collection-clean.mjs
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 →