← back to Designer Wallcoverings
TK-135: add resume (progress log) to palette apply; canary 20 verified live (metafield+tag ok)
f6f5377e88a5adcd1a2860b729a50181457a88d3 · 2026-07-27 18:54:07 -0700 · Steve
Files touched
M shopify/scripts/tk135-apply-palette.js
Diff
commit f6f5377e88a5adcd1a2860b729a50181457a88d3
Author: Steve <steve@designerwallcoverings.com>
Date: Mon Jul 27 18:54:07 2026 -0700
TK-135: add resume (progress log) to palette apply; canary 20 verified live (metafield+tag ok)
---
shopify/scripts/tk135-apply-palette.js | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/shopify/scripts/tk135-apply-palette.js b/shopify/scripts/tk135-apply-palette.js
index 47d80e2e..ee1bbad5 100644
--- a/shopify/scripts/tk135-apply-palette.js
+++ b/shopify/scripts/tk135-apply-palette.js
@@ -23,6 +23,7 @@ const arg = (k, d) => { const i = args.indexOf(k); return i >= 0 ? args[i + 1] :
const LIMIT = parseInt(arg('--limit', '0'), 10) || Infinity;
const IN = arg('--in', path.join(__dirname, 'data/tk135/palette-proposed.tsv'));
const REPORT = arg('--report', null);
+const PROGRESS = arg('--progress', path.join(__dirname, 'data/tk135/apply-progress.log')); // resume: gids done
const env = fs.readFileSync(os.homedir() + '/Projects/secrets-manager/.env', 'utf8');
const TOKEN = (env.match(/^SHOPIFY_ADMIN_TOKEN=(.*)$/m) || [])[1].replace(/['"]/g, '').trim();
@@ -82,6 +83,13 @@ function load() {
(async () => {
let rows = load();
+ // resume: drop gids already completed in a prior run (append-only progress log)
+ if (fs.existsSync(PROGRESS)) {
+ const done = new Set(fs.readFileSync(PROGRESS, 'utf8').split('\n').filter(Boolean));
+ const before = rows.length;
+ rows = rows.filter(r => !done.has(r.gid));
+ if (before !== rows.length) console.log(`resume: skipping ${before - rows.length} already-done (progress log)\n`);
+ }
if (LIMIT !== Infinity) rows = rows.slice(0, LIMIT);
console.log(`tk135-apply-palette — ${rows.length} products — ${APPLY ? '🔴 LIVE' : 'DRY-RUN'}\n in: ${IN}\n`);
const report = { ticket: 'TK-135', started: new Date().toISOString(), apply: APPLY, updated: [], failed: [] };
@@ -103,7 +111,8 @@ function load() {
const tg = await gqlR(M_TAG, { id: r.gid, tags: [r.tag] });
const te = tg.data?.tagsAdd?.userErrors || [];
if (me.length || te.length) { report.failed.push({ gid: r.gid, me, te }); console.log(` ❌ ${r.gid.split('/').pop()} ${JSON.stringify(me.concat(te))}`); }
- else report.updated.push(r.gid);
+ else { report.updated.push(r.gid); fs.appendFileSync(PROGRESS, r.gid + '\n'); }
+ if (report.updated.length % 500 === 0) console.log(` …${report.updated.length} updated`);
await sleep(150);
}
report.finished = new Date().toISOString();
← 97023338 auto-save: 2026-07-27T18:53:10 (2 files) — shopify/scripts/d
·
back to Designer Wallcoverings
·
TK-135: fix PG-mirror trigger abort — skip DW-prefix mfr_sku f26f24ae →