[object Object]

← back to Ticket System

TK-10002 re-SKU: 65 stray variants fixed live (6 skipped, held by out-of-scope active product); resumed sweep, mirror+shopify

467d9321259ca138051dfbc5a9437c04c71bc465 · 2026-07-30 10:23:28 -0700 · Steve

Files touched

Diff

commit 467d9321259ca138051dfbc5a9437c04c71bc465
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Jul 30 10:23:28 2026 -0700

    TK-10002 re-SKU: 65 stray variants fixed live (6 skipped, held by out-of-scope active product); resumed sweep, mirror+shopify
---
 tk10002-resku/APPLY-RESULTS.md    |  83 +++++++
 tk10002-resku/resume-apply.mjs    |  66 +++++
 tk10002-resku/resume-results.json | 499 ++++++++++++++++++++++++++++++++++++++
 tk10002-resku/state-check.json    |  38 +++
 4 files changed, 686 insertions(+)

diff --git a/tk10002-resku/APPLY-RESULTS.md b/tk10002-resku/APPLY-RESULTS.md
new file mode 100644
index 00000000..da6345a5
--- /dev/null
+++ b/tk10002-resku/APPLY-RESULTS.md
@@ -0,0 +1,83 @@
+# TK-10002 — Re-SKU STRAY sweep — APPLY RESULTS (resumed)
+
+Steve-approved 'execute the 64 clean' 2026-07-30. Executor died on rate-limit before writing; resumed directly (idempotent).
+
+- **WRITTEN: 65 stray variants** re-SKU'd (mirror-first then Shopify productVariantsBulkUpdate), 0 write errors, verified live.
+- **SKIPPED 6** — NEW live finding: 3 targets held by an ACTIVE product OUTSIDE the 64 (plan's static count said 1; live check found 3), + 3 downstream-of-external. Left ACTIVE + UNCHANGED (not DRAFT'd — a cosmetic wrong sample-SKU isn't worth pulling a live product); handed to follow-up REVIEW.
+- Guard: in-memory holder map (index-lag-safe) + one-time live external-holder check per target; re-verified free before each write; acyclic cascade resolved in 1 pass.
+- Cost: $0 (local PG + free Shopify GraphQL).
+
+## SKIPPED — needs follow-up REVIEW
+- 7664489496627: Dig-240412-25-type-2-vinyl-Sample -> Dig-240417-25-type-2-vinyl-Sample (BLOCKED_EXTERNAL)
+- 7664512270387: Dig-2400091-25-type-2-vinyl-Sample -> DIG-435098-25-type-2-vinyl-Sample (BLOCKED_EXTERNAL)
+- 7664585867315: Dig-171051-25-type-2-vinyl-Sample -> DIG-747481-25-type-2-vinyl-Sample (BLOCKED_EXTERNAL)
+- 7664462168115: Dig-5101409-25-type-2-vinyl-Sample -> DIG-2400091-25-type-2-vinyl-Sample (RESIDUE)
+- 7664490545203: Dig-171053-25-type-2-vinyl-Sample -> DIG-171052-25-type-2-vinyl-Sample (RESIDUE)
+- 7664490577971: Dig-171052-25-type-2-vinyl-Sample -> DIG-171051-25-type-2-vinyl-Sample (RESIDUE)
+
+## WRITTEN (variant old->new SKU)
+- 6649656049715: DIG-513061 - 04 Black White -> DIG-5130614 - 04 Black White
+- 6836337868851: DIGGM-7400755-ROLL -> DIG-7400755-ROLL
+- 7535350022195: Dig-352501-Set -> Dig-352500-Set
+- 7548957392947: DIG-320255-mural -> DIG-320256-mural
+- 7582548623411: Dig-510130-Roll -> DIG-510132-Roll
+- 7664462364723: Dig-2400089-25-type-2-vinyl-Sample -> DIG-2400085-25-type-2-vinyl-Sample
+- 7664487890995: Dig-2400083-25-type-2-vinyl-Sample -> DIG-27173-25-type-2-vinyl-Sample
+- 7664488218675: Dig-7700743-25-type-2-vinyl-Sample -> Dig-240426-25-type-2-vinyl-Sample
+- 7664488251443: Dig-2400089-25-pre-Sample -> Dig-240425-25-pre-Sample
+- 7664488251443: Dig-20009-25-type-2-vinyl-Sample -> Dig-240425-25-type-2-vinyl-Sample
+- 7664490643507: Dig-435098-25-type-2-vinyl-Sample -> Dig-240413-25-type-2-vinyl-Sample
+- 7664493002803: Dig-240407-25-type-2-vinyl-Sample -> DIG-2400065-25-type-2-vinyl-Sample
+- 7664511418419: Dig-25-25-pre-Sample -> DIG_198404-25-pre-Sample
+- 7664511451187: Dig-25-25-pre-Sample -> DIG_198405-25-pre-Sample
+- 7664511451187: Dig-198401-25-type-2-vinyl-Sample -> DIG_198405-25-type-2-vinyl-Sample
+- 7664511549491: Dig-198402-25-type-2-vinyl-Sample -> DIG-198401-25-type-2-vinyl-Sample
+- 7664511582259: Dig-98527-25-type-2-vinyl-Sample -> DIG-198402-25-type-2-vinyl-Sample
+- 7664511647795: Dig-98521-25-type-2-vinyl-Sample -> DIG-98527-25-type-2-vinyl-Sample
+- 7664511680563: Dig-5531532-25-type-2-vinyl-Sample -> DIG-98521-25-type-2-vinyl-Sample
+- 7664511778867: Dig-3002-25-type-2-vinyl-Sample -> DIG-9100-25-type-2-vinyl-Sample
+- 7664511877171: Dig-60015-25-type-2-vinyl-Sample -> DIG-60014-25-type-2-vinyl-Sample
+- 7664511909939: Dig-60016-25-type-2-vinyl-Sample -> DIG-60015-25-type-2-vinyl-Sample
+- 7664511942707: Dig-60018-25-type-2-vinyl-Sample -> DIG-60016-25-type-2-vinyl-Sample
+- 7664512008243: Dig-40011-25-type-2-vinyl-Sample -> DIG-60018-25-type-2-vinyl-Sample
+- 7664512106547: Dig-40051-25-type-2-vinyl-Sample -> DIG-40041-25-type-2-vinyl-Sample
+- 7664512237619: Dig-240416-25-type-2-vinyl-Sample -> DIG-68000-25-type-2-vinyl-Sample
+- 7664512303155: Dig-5101406-25-type-2-vinyl-Sample -> DIG-5101407-25-type-2-vinyl-Sample
+- 7664512335923: Dig-85330-25-type-2-vinyl-Sample -> DIG-5101406-25-type-2-vinyl-Sample
+- 7664512401459: Dig-85335-25-type-2-vinyl-Sample -> DIG-85330-25-type-2-vinyl-Sample
+- 7664512434227: Dig-40021-25-type-2-vinyl-Sample -> DIG-85335-25-type-2-vinyl-Sample
+- 7664512466995: Dig-85337-25-type-2-vinyl-Sample -> DIG-85336-25-type-2-vinyl-Sample
+- 7664512499763: Dig-85331-25-type-2-vinyl-Sample -> DIG-85337-25-type-2-vinyl-Sample
+- 7664512532531: Dig-85333-25-type-2-vinyl-Sample -> DIG-85331-25-type-2-vinyl-Sample
+- 7664512565299: Dig-85334-25-type-2-vinyl-Sample -> DIG-85333-25-type-2-vinyl-Sample
+- 7664512598067: Dig-85332-25-type-2-vinyl-Sample -> DIG-85334-25-type-2-vinyl-Sample
+- 7664512630835: Dig-98621-25-type-2-vinyl-Sample -> DIG-85332-25-type-2-vinyl-Sample
+- 7664512663603: Dig-240416-25-type-2-vinyl-Sample -> DIG-98621-25-type-2-vinyl-Sample
+- 7664512696371: Dig-4350959-25-type-2-vinyl-Sample -> DIG-1985-25-type-2-vinyl-Sample
+- 7664512761907: Dig-3001-25-pre-Sample -> Book-3001-25-pre-Sample
+- 7664512761907: Dig-1952-25-type-2-vinyl-Sample -> Book-3001-25-type-2-vinyl-Sample
+- 7664512794675: Dig-1100-25-type-2-vinyl-Sample -> DIG-1952-25-type-2-vinyl-Sample
+- 7664512827443: Dig-1100-25-pre-Sample -> Vin-1100-25-pre-Sample
+- 7664512827443: Dig-1100-25-type-2-vinyl-Sample -> Vin-1100-25-type-2-vinyl-Sample
+- 7664513646643: Dig-25-25-pre-sample -> DIG_10082002-25-pre-sample
+- 7664513646643: Dig-25-25-type-2-vinyl-Sample -> DIG_10082002-25-type-2-vinyl-Sample
+- 7664515285043: Dig-4350100-25-type-2-vinyl-Sample -> DIG-435003-25-type-2-vinyl-Sample
+- 7664583704627: Dig-1010-25-pre-Sample -> Vin-1010-25-pre-Sample
+- 7664584196147: Dig-770351-25-type-2-vinyl-Sample -> Dig-540002-25-type-2-vinyl-Sample
+- 7664584851507: Dig-770089-25-type-2-vinyl-Sample -> DIG-740108-25-type-2-vinyl-Sample
+- 7664584884275: Dig-240407-25-type-2-vinyl-Sample -> DIG-74118-25-type-2-vinyl-Sample
+- 7664584949811: Dig-5531533-25-type-2-vinyl-Sample -> DIG-5531532-25-type-2-vinyl-Sample
+- 7664585015347: Dig-553342-25-type-2-vinyl-Sample -> DIG-553341-25-type-2-vinyl-Sample
+- 7664585048115: Dig-2010-25-type-2-vinyl-Sample -> DIG-553342-25-type-2-vinyl-Sample
+- 7664585965619: Dig-762174-25-type-2-vinyl-Sample -> DIG-762168-25-type-2-vinyl-Sample
+- 7664585998387: Dig-762179-25-type-2-vinyl-Sample -> DIG-762174-25-type-2-vinyl-Sample
+- 7664586031155: Dig-762165-25-type-2-vinyl-Sample -> DIG-762179-25-type-2-vinyl-Sample
+- 7664586326067: Dig-553794-25-type-2-vinyl-Sample -> DIG-553793-25-type-2-vinyl-Sample
+- 7664586686515: Dig-25-25-type-2-vinyl-Sample -> DIG-439241-25-type-2-vinyl-Sample
+- 7664631349299: Dig-51235-25-type-2-vinyl-Sample -> DIG-51288-25-type-2-vinyl-Sample
+- 7664636067891: Dig-435086-25-type-2-vinyl-Sample -> DIG-435095-25-type-2-vinyl-Sample
+- 7664636100659: Dig-770089-25-type-2-vinyl-Sample -> DIG-435086-25-type-2-vinyl-Sample
+- 7664640917555: Dig-700005-25-type-2-vinyl-Sample -> WPEX-700005-25-type-2-vinyl-Sample
+- 7664640917555: Dig-700005-25-pre-sample -> WPEX-700005-25-pre-sample
+- 7664640983091: Dig-700007-25-type-2-vinyl-Sample -> WPEX-700007-25-type-2-vinyl-Sample
+- 7664640983091: Dig-700007-25-pre-sample -> WPEX-700007-25-pre-sample
diff --git a/tk10002-resku/resume-apply.mjs b/tk10002-resku/resume-apply.mjs
new file mode 100644
index 00000000..3fa39f9f
--- /dev/null
+++ b/tk10002-resku/resume-apply.mjs
@@ -0,0 +1,66 @@
+#!/usr/bin/env node
+// Resume the 64-product confident-STRAY re-SKU sweep. Idempotent, guard-checked, iterative.
+// Guard uses an authoritative in-memory holder map (seeded once from live + a one-time external
+// SKU search per target) — avoids Shopify search-index lag during the cascade. DRY unless APPLY=1.
+import fs from 'node:fs'; import { execSync } from 'node:child_process';
+const APPLY=process.env.APPLY==='1';
+const TOKEN=(process.env.SHOPIFY_ADMIN_TOKEN||'').trim();
+const STORE='designer-laboratory-sandbox.myshopify.com', API='2024-10';
+const PSQL='host=/tmp dbname=dw_unified';
+const EXCLUDE=new Set(['7664488284211','7664489529395','7774188404787','7391684657203']);
+const fv=JSON.parse(fs.readFileSync(new URL('./final-verdict.json',import.meta.url)));
+const products=fv.confident.filter(p=>!EXCLUDE.has(String(p.pid)));
+const gql=async(q,v)=>{const r=await fetch(`https://${STORE}/admin/api/${API}/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':TOKEN,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});const j=await r.json();if(j.errors)throw new Error(JSON.stringify(j.errors));return j.data;};
+const psql=(sql)=>execSync(`psql "${PSQL}" -At -F '\t' -c ${JSON.stringify(sql)}`).toString().trim();
+const lc=s=>s.trim().toLowerCase();
+
+// 1. fetch current variants for all 64; build holder map + work list
+const holder=new Map();               // sku_lc -> pid (in-scope current state)
+const work=[];                        // {pid, stray, corr, variantGid}
+for(const p of products){
+  const d=await gql(`{product(id:"gid://shopify/Product/${p.pid}"){variants(first:40){nodes{id sku}}}}`);
+  const vmap=new Map();
+  for(const v of d.product.variants.nodes){ const sk=(v.sku||'').trim(); if(sk){ vmap.set(sk,v.id); holder.set(lc(sk),String(p.pid)); } }
+  for(const s of p.strays){
+    const stray=s.stray.trim(), corr=s.corrected.trim();
+    if(vmap.has(corr)) continue;                          // already done
+    if(!vmap.has(stray)){ work.push({pid:String(p.pid),stray,corr,variantGid:null,skip:'stray-not-live'}); continue; }
+    work.push({pid:String(p.pid),stray,corr,variantGid:vmap.get(stray)});
+  }
+}
+const inScope=new Set(products.map(p=>String(p.pid)));
+
+// 2. one-time EXTERNAL holder check per distinct corrected target (ACTIVE, not in-scope, not self)
+const targets=[...new Set(work.filter(w=>w.variantGid).map(w=>w.corr))];
+const extBlocked=new Set();
+for(const t of targets){
+  const d=await gql(`query($q:String!){productVariants(first:20,query:$q){nodes{sku product{id status}}}}`,{q:`sku:${JSON.stringify(t)}`});
+  const hit=d.productVariants.nodes.find(n=>lc(n.sku||'')===lc(t) && n.product.status==='ACTIVE' && !inScope.has(n.product.id.split('/').pop()));
+  if(hit) extBlocked.add(lc(t));
+}
+console.log(`Mode:${APPLY?'APPLY':'DRY'} products=${products.length} pending=${work.filter(w=>w.variantGid).length} externalBlockedTargets=${extBlocked.size}`);
+
+// 3. iterate: write any pending whose corrected is free in the in-memory holder map (or only self)
+const results=[]; let remaining=work.filter(w=>w.variantGid); let pass=0;
+while(remaining.length){
+  pass++; let progressed=0; const next=[];
+  for(const w of remaining){
+    if(extBlocked.has(lc(w.corr))){ results.push({...w,action:'BLOCKED_EXTERNAL'}); continue; }
+    const cur=holder.get(lc(w.corr));                     // who holds corrected now?
+    if(cur && cur!==w.pid){ next.push(w); continue; }     // still held by another in-sweep product → later pass
+    if(!APPLY){ results.push({...w,action:'WOULD_WRITE'}); holder.delete(lc(w.stray)); holder.set(lc(w.corr),w.pid); progressed++; continue; }
+    psql(`UPDATE shopify_products SET variant_sku='${w.corr.replace(/'/g,"''")}' WHERE upper(status)='ACTIVE' AND variant_sku='${w.stray.replace(/'/g,"''")}' AND shopify_id LIKE '%${w.pid}';`);
+    const d=await gql(`mutation($pid:ID!,$v:[ProductVariantsBulkInput!]!){productVariantsBulkUpdate(productId:$pid,variants:$v){userErrors{field message}}}`,
+      {pid:`gid://shopify/Product/${w.pid}`, v:[{id:w.variantGid,inventoryItem:{sku:w.corr}}]});
+    const errs=d.productVariantsBulkUpdate.userErrors;
+    if(errs.length){ results.push({...w,action:'WRITE_ERR',errs}); }
+    else { results.push({...w,action:'WRITTEN'}); holder.delete(lc(w.stray)); holder.set(lc(w.corr),w.pid); progressed++; }
+  }
+  console.log(`  pass ${pass}: ${APPLY?'wrote':'would-write'} ${progressed}, deferred ${next.length}`);
+  if(!progressed){ next.forEach(w=>results.push({...w,action:'RESIDUE'})); break; }
+  remaining=next;
+}
+const by=a=>results.filter(r=>r.action===a).length;
+console.log(`\n${APPLY?'WRITTEN':'WOULD_WRITE'}=${by(APPLY?'WRITTEN':'WOULD_WRITE')} WRITE_ERR=${by('WRITE_ERR')} BLOCKED_EXTERNAL=${by('BLOCKED_EXTERNAL')} RESIDUE=${by('RESIDUE')} skip=${work.filter(w=>w.skip).length}`);
+results.filter(r=>['WRITE_ERR','RESIDUE','BLOCKED_EXTERNAL'].includes(r.action)).forEach(r=>console.log(`  ${r.action} ${r.pid} ${r.stray}->${r.corr} ${r.errs?JSON.stringify(r.errs):''}`));
+fs.writeFileSync(new URL('./resume-results.json',import.meta.url),JSON.stringify(results,null,2));
diff --git a/tk10002-resku/resume-results.json b/tk10002-resku/resume-results.json
new file mode 100644
index 00000000..379c1768
--- /dev/null
+++ b/tk10002-resku/resume-results.json
@@ -0,0 +1,499 @@
+[
+  {
+    "pid": "6649656049715",
+    "stray": "DIG-513061 - 04 Black White",
+    "corr": "DIG-5130614 - 04 Black White",
+    "variantGid": "gid://shopify/ProductVariant/43605870673971",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "6836337868851",
+    "stray": "DIGGM-7400755-ROLL",
+    "corr": "DIG-7400755-ROLL",
+    "variantGid": "gid://shopify/ProductVariant/43605860876339",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7535350022195",
+    "stray": "Dig-352501-Set",
+    "corr": "Dig-352500-Set",
+    "variantGid": "gid://shopify/ProductVariant/43184160145459",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7548957392947",
+    "stray": "DIG-320255-mural",
+    "corr": "DIG-320256-mural",
+    "variantGid": "gid://shopify/ProductVariant/43231378047027",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7582548623411",
+    "stray": "Dig-510130-Roll",
+    "corr": "DIG-510132-Roll",
+    "variantGid": "gid://shopify/ProductVariant/43605854158899",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664462364723",
+    "stray": "Dig-2400089-25-type-2-vinyl-Sample",
+    "corr": "DIG-2400085-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019593379891",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664487890995",
+    "stray": "Dig-2400083-25-type-2-vinyl-Sample",
+    "corr": "DIG-27173-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019611729971",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664488218675",
+    "stray": "Dig-7700743-25-type-2-vinyl-Sample",
+    "corr": "Dig-240426-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019607076915",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664488251443",
+    "stray": "Dig-2400089-25-pre-Sample",
+    "corr": "Dig-240425-25-pre-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019593674803",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664488251443",
+    "stray": "Dig-20009-25-type-2-vinyl-Sample",
+    "corr": "Dig-240425-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019593773107",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664489496627",
+    "stray": "Dig-240412-25-type-2-vinyl-Sample",
+    "corr": "Dig-240417-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019596558387",
+    "action": "BLOCKED_EXTERNAL"
+  },
+  {
+    "pid": "7664490643507",
+    "stray": "Dig-435098-25-type-2-vinyl-Sample",
+    "corr": "Dig-240413-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019596820531",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664493002803",
+    "stray": "Dig-240407-25-type-2-vinyl-Sample",
+    "corr": "DIG-2400065-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019584008243",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511418419",
+    "stray": "Dig-25-25-pre-Sample",
+    "corr": "DIG_198404-25-pre-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019590332467",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511451187",
+    "stray": "Dig-25-25-pre-Sample",
+    "corr": "DIG_198405-25-pre-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019590529075",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511451187",
+    "stray": "Dig-198401-25-type-2-vinyl-Sample",
+    "corr": "DIG_198405-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019590627379",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511549491",
+    "stray": "Dig-198402-25-type-2-vinyl-Sample",
+    "corr": "DIG-198401-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019590823987",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511582259",
+    "stray": "Dig-98527-25-type-2-vinyl-Sample",
+    "corr": "DIG-198402-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019591020595",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511647795",
+    "stray": "Dig-98521-25-type-2-vinyl-Sample",
+    "corr": "DIG-98527-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019591217203",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511680563",
+    "stray": "Dig-5531532-25-type-2-vinyl-Sample",
+    "corr": "DIG-98521-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019591413811",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511778867",
+    "stray": "Dig-3002-25-type-2-vinyl-Sample",
+    "corr": "DIG-9100-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019592986675",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511877171",
+    "stray": "Dig-60015-25-type-2-vinyl-Sample",
+    "corr": "DIG-60014-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019594166323",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511909939",
+    "stray": "Dig-60016-25-type-2-vinyl-Sample",
+    "corr": "DIG-60015-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019594362931",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664511942707",
+    "stray": "Dig-60018-25-type-2-vinyl-Sample",
+    "corr": "DIG-60016-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019594559539",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512008243",
+    "stray": "Dig-40011-25-type-2-vinyl-Sample",
+    "corr": "DIG-60018-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019594756147",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512106547",
+    "stray": "Dig-40051-25-type-2-vinyl-Sample",
+    "corr": "DIG-40041-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019595182131",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512237619",
+    "stray": "Dig-240416-25-type-2-vinyl-Sample",
+    "corr": "DIG-68000-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019596165171",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512270387",
+    "stray": "Dig-2400091-25-type-2-vinyl-Sample",
+    "corr": "DIG-435098-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019597017139",
+    "action": "BLOCKED_EXTERNAL"
+  },
+  {
+    "pid": "7664512303155",
+    "stray": "Dig-5101406-25-type-2-vinyl-Sample",
+    "corr": "DIG-5101407-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019597606963",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512335923",
+    "stray": "Dig-85330-25-type-2-vinyl-Sample",
+    "corr": "DIG-5101406-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019597803571",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512401459",
+    "stray": "Dig-85335-25-type-2-vinyl-Sample",
+    "corr": "DIG-85330-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019598262323",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512434227",
+    "stray": "Dig-40021-25-type-2-vinyl-Sample",
+    "corr": "DIG-85335-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019598458931",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512466995",
+    "stray": "Dig-85337-25-type-2-vinyl-Sample",
+    "corr": "DIG-85336-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019598721075",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512499763",
+    "stray": "Dig-85331-25-type-2-vinyl-Sample",
+    "corr": "DIG-85337-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019598917683",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512532531",
+    "stray": "Dig-85333-25-type-2-vinyl-Sample",
+    "corr": "DIG-85331-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019599114291",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512565299",
+    "stray": "Dig-85334-25-type-2-vinyl-Sample",
+    "corr": "DIG-85333-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019599310899",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512598067",
+    "stray": "Dig-85332-25-type-2-vinyl-Sample",
+    "corr": "DIG-85334-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019599507507",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512630835",
+    "stray": "Dig-98621-25-type-2-vinyl-Sample",
+    "corr": "DIG-85332-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019599704115",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512663603",
+    "stray": "Dig-240416-25-type-2-vinyl-Sample",
+    "corr": "DIG-98621-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019599900723",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512696371",
+    "stray": "Dig-4350959-25-type-2-vinyl-Sample",
+    "corr": "DIG-1985-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019602063411",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512761907",
+    "stray": "Dig-3001-25-pre-Sample",
+    "corr": "Book-3001-25-pre-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019602718771",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512761907",
+    "stray": "Dig-1952-25-type-2-vinyl-Sample",
+    "corr": "Book-3001-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019602817075",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512794675",
+    "stray": "Dig-1100-25-type-2-vinyl-Sample",
+    "corr": "DIG-1952-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019603079219",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512827443",
+    "stray": "Dig-1100-25-pre-Sample",
+    "corr": "Vin-1100-25-pre-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019603210291",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664512827443",
+    "stray": "Dig-1100-25-type-2-vinyl-Sample",
+    "corr": "Vin-1100-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019603308595",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664513646643",
+    "stray": "Dig-25-25-pre-sample",
+    "corr": "DIG_10082002-25-pre-sample",
+    "variantGid": "gid://shopify/ProductVariant/44019608911923",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664513646643",
+    "stray": "Dig-25-25-type-2-vinyl-Sample",
+    "corr": "DIG_10082002-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019609010227",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664515285043",
+    "stray": "Dig-4350100-25-type-2-vinyl-Sample",
+    "corr": "DIG-435003-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019621789747",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664583704627",
+    "stray": "Dig-1010-25-pre-Sample",
+    "corr": "Vin-1010-25-pre-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019580895283",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664584196147",
+    "stray": "Dig-770351-25-type-2-vinyl-Sample",
+    "corr": "Dig-540002-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019587022899",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664584851507",
+    "stray": "Dig-770089-25-type-2-vinyl-Sample",
+    "corr": "DIG-740108-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019589840947",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664584884275",
+    "stray": "Dig-240407-25-type-2-vinyl-Sample",
+    "corr": "DIG-74118-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019590037555",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664584949811",
+    "stray": "Dig-5531533-25-type-2-vinyl-Sample",
+    "corr": "DIG-5531532-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019591610419",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664585015347",
+    "stray": "Dig-553342-25-type-2-vinyl-Sample",
+    "corr": "DIG-553341-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019592200243",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664585048115",
+    "stray": "Dig-2010-25-type-2-vinyl-Sample",
+    "corr": "DIG-553342-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019592396851",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664585867315",
+    "stray": "Dig-171051-25-type-2-vinyl-Sample",
+    "corr": "DIG-747481-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019600293939",
+    "action": "BLOCKED_EXTERNAL"
+  },
+  {
+    "pid": "7664585965619",
+    "stray": "Dig-762174-25-type-2-vinyl-Sample",
+    "corr": "DIG-762168-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019601080371",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664585998387",
+    "stray": "Dig-762179-25-type-2-vinyl-Sample",
+    "corr": "DIG-762174-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019601276979",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664586031155",
+    "stray": "Dig-762165-25-type-2-vinyl-Sample",
+    "corr": "DIG-762179-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019601473587",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664586326067",
+    "stray": "Dig-553794-25-type-2-vinyl-Sample",
+    "corr": "DIG-553793-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019603734579",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664586686515",
+    "stray": "Dig-25-25-type-2-vinyl-Sample",
+    "corr": "DIG-439241-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019606552627",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664631349299",
+    "stray": "Dig-51235-25-type-2-vinyl-Sample",
+    "corr": "DIG-51288-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019651510323",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664636067891",
+    "stray": "Dig-435086-25-type-2-vinyl-Sample",
+    "corr": "DIG-435095-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019628048435",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664636100659",
+    "stray": "Dig-770089-25-type-2-vinyl-Sample",
+    "corr": "DIG-435086-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019628015667",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664640917555",
+    "stray": "Dig-700005-25-type-2-vinyl-Sample",
+    "corr": "WPEX-700005-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019723993139",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664640917555",
+    "stray": "Dig-700005-25-pre-sample",
+    "corr": "WPEX-700005-25-pre-sample",
+    "variantGid": "gid://shopify/ProductVariant/44019724091443",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664640983091",
+    "stray": "Dig-700007-25-type-2-vinyl-Sample",
+    "corr": "WPEX-700007-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019711868979",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664640983091",
+    "stray": "Dig-700007-25-pre-sample",
+    "corr": "WPEX-700007-25-pre-sample",
+    "variantGid": "gid://shopify/ProductVariant/44019711967283",
+    "action": "WRITTEN"
+  },
+  {
+    "pid": "7664462168115",
+    "stray": "Dig-5101409-25-type-2-vinyl-Sample",
+    "corr": "DIG-2400091-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019597213747",
+    "action": "RESIDUE"
+  },
+  {
+    "pid": "7664490545203",
+    "stray": "Dig-171053-25-type-2-vinyl-Sample",
+    "corr": "DIG-171052-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019600687155",
+    "action": "RESIDUE"
+  },
+  {
+    "pid": "7664490577971",
+    "stray": "Dig-171052-25-type-2-vinyl-Sample",
+    "corr": "DIG-171051-25-type-2-vinyl-Sample",
+    "variantGid": "gid://shopify/ProductVariant/44019600490547",
+    "action": "RESIDUE"
+  }
+]
\ No newline at end of file
diff --git a/tk10002-resku/state-check.json b/tk10002-resku/state-check.json
new file mode 100644
index 00000000..59a31913
--- /dev/null
+++ b/tk10002-resku/state-check.json
@@ -0,0 +1,38 @@
+{
+  "done": 65,
+  "pending": 6,
+  "other": 0,
+  "errs": 0,
+  "pend": [
+    {
+      "pid": "7664462168115",
+      "stray": "Dig-5101409-25-type-2-vinyl-Sample",
+      "corrected": "DIG-2400091-25-type-2-vinyl-Sample"
+    },
+    {
+      "pid": "7664489496627",
+      "stray": "Dig-240412-25-type-2-vinyl-Sample",
+      "corrected": "Dig-240417-25-type-2-vinyl-Sample"
+    },
+    {
+      "pid": "7664490545203",
+      "stray": "Dig-171053-25-type-2-vinyl-Sample",
+      "corrected": "DIG-171052-25-type-2-vinyl-Sample"
+    },
+    {
+      "pid": "7664490577971",
+      "stray": "Dig-171052-25-type-2-vinyl-Sample",
+      "corrected": "DIG-171051-25-type-2-vinyl-Sample"
+    },
+    {
+      "pid": "7664512270387",
+      "stray": "Dig-2400091-25-type-2-vinyl-Sample",
+      "corrected": "DIG-435098-25-type-2-vinyl-Sample"
+    },
+    {
+      "pid": "7664585867315",
+      "stray": "Dig-171051-25-type-2-vinyl-Sample",
+      "corrected": "DIG-747481-25-type-2-vinyl-Sample"
+    }
+  ]
+}
\ No newline at end of file

← 1eb5274f auto-save: 2026-07-30T10:16:54 (3 files) — tk10002-resku/app  ·  back to Ticket System  ·  TK-10046: preserve planner /tmp inputs (GC-proof for the gat 9af966b1 →