← back to Designerwallcoverings
TK-11644: close last genericization residual — 138 Tier C misclassified rows (134 Nina Campbell + 4 Daisy Bennett identical vendor boilerplate) deleted; live-verified 138/138 null
2541178ddcbdcaaaca283bba6a9e4a06d48d8f4a · 2026-09-17 15:23:27 -0700 · Steve Abrams
Files touched
A scripts/tk11644-tierc-generic-fix.mjsA verification/TK-11644-missing-since-postfix.jsonA verification/TK-11644-tierC-generic-dupes.jsonA verification/TK-11644-tierC-generic-postfix.jsonA verification/TK-11644-tierC-generic-preverify.json
Diff
commit 2541178ddcbdcaaaca283bba6a9e4a06d48d8f4a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Sep 17 15:23:27 2026 -0700
TK-11644: close last genericization residual — 138 Tier C misclassified rows (134 Nina Campbell + 4 Daisy Bennett identical vendor boilerplate) deleted; live-verified 138/138 null
---
scripts/tk11644-tierc-generic-fix.mjs | 53 ++
verification/TK-11644-missing-since-postfix.json | 641 +++++++++++++++++++++
verification/TK-11644-tierC-generic-dupes.json | 18 +
verification/TK-11644-tierC-generic-postfix.json | 7 +
verification/TK-11644-tierC-generic-preverify.json | 9 +
5 files changed, 728 insertions(+)
diff --git a/scripts/tk11644-tierc-generic-fix.mjs b/scripts/tk11644-tierc-generic-fix.mjs
new file mode 100644
index 0000000..550581f
--- /dev/null
+++ b/scripts/tk11644-tierc-generic-fix.mjs
@@ -0,0 +1,53 @@
+// TK-11644 RESIDUAL — Tier C "generic duplicate" rows the original classifier missed.
+// The 2026-04-05 bad bulk job also overwrote these 138 ACTIVE meta descriptions with a
+// single identical vendor-generic blurb (134x "Authorized Dealer of Nina Campbell Fabrics…"
+// + 4x "Authorized Dealer of DAISY BENNETT…"). They landed in Tier C ("job wrote something
+// specific/unique, LEAVE") but the full-value analysis proves they are the SAME
+// genericization shape as Tier A/B: one identical value per group, zero product-specific
+// tokens, metafield.createdAt predates the job (overwrote pre-existing descriptions).
+//
+// Detection: verification/TK-11644-tierC-generic-dupes.json (read-only, 2026-09-17)
+// Gates already measured for all 138:
+// - live metafield still holds the EXACT swept value (race-safe, 0 changed)
+// verification/TK-11644-tierC-generic-preverify.json
+// - body_html fallback >=60 chars on 138/138 (assets/TK-11644-tierC-generic-manifest.json)
+//
+// DRY-RUN BY DEFAULT. --apply is the GATED live customer-facing Shopify write (same shape as
+// the approved Tier A/B + identity-residual runs). Every delete is write-ahead ledgered with
+// its full old value (undo: re-set the old value).
+import { gql } from './lib/shopify.mjs';
+import fs from 'node:fs';
+
+const APPLY = process.argv.includes('--apply');
+
+const m = JSON.parse(fs.readFileSync('assets/TK-11644-tierC-generic-manifest.json','utf8'));
+const rows = m.rows.filter(r => (r.old_value||'').trim().startsWith('Authorized Dealer of'));
+console.error(`Tier=C-generic candidates=${rows.length} mode=${APPLY?'APPLY (LIVE WRITE)':'DRY-RUN'}`);
+
+if(!APPLY){ console.log('DRY-RUN. No write fired. Re-run with --apply (GATED).'); process.exit(0); }
+
+const ledger=process.env.HOME+'/.claude/yolo-queue/executed-reversible/ledger.jsonl';
+let ok=0,err=0;
+for(let i=0;i<rows.length;i+=25){
+ const chunk=rows.slice(i,i+25);
+ // WRITE-AHEAD the undo rows BEFORE firing deletes (same order as identity-fix: a failed
+ // ledger append must abort the delete, never the reverse).
+ for(const v of chunk){
+ try{
+ fs.appendFileSync(ledger,JSON.stringify({ts:new Date().toISOString(),agent:'claude-run-11644',ticket:'TK-11644',
+ action:'delete global.description_tag (tier C generic-duplicate residual)',
+ pid:v.pid,handle:v.handle,blast_radius:1,
+ undo_cmd:`re-set global.description_tag=${JSON.stringify(v.old_value)} on product ${v.pid}`,
+ old_value:v.old_value,verify:`GET product ${v.pid} description_tag == null`})+'\n');
+ }catch(e){ err++; console.error('LEDGER-FAIL (delete NOT attempted)',v.handle,e.message); }
+ }
+ const mf=chunk.map(v=>({ownerId:v.gid,namespace:'global',key:'description_tag'}));
+ const d=await gql(`mutation($mf:[MetafieldIdentifierInput!]!){ metafieldsDelete(metafields:$mf){ deletedMetafields{ ownerId } userErrors{ field message } } }`,{mf});
+ if(d && d.__err){ err+=chunk.length; console.error('GraphQL error',JSON.stringify(d.__err)); continue; }
+ const ue=d.metafieldsDelete.userErrors;
+ if(ue.length){ console.error('userErrors',ue); err+=chunk.length; continue; }
+ ok+=d.metafieldsDelete.deletedMetafields.length;
+ process.stderr.write(`\r deleted ${ok}/${rows.length} err ${err} `);
+}
+process.stderr.write('\n');
+console.log(`APPLY done. deleted=${ok} err=${err}. Rollback map assets/TK-11644-tierC-generic-manifest.json + executed-reversible ledger.`);
\ No newline at end of file
diff --git a/verification/TK-11644-missing-since-postfix.json b/verification/TK-11644-missing-since-postfix.json
new file mode 100644
index 0000000..3a990d0
--- /dev/null
+++ b/verification/TK-11644-missing-since-postfix.json
@@ -0,0 +1,641 @@
+{
+ "count": 159,
+ "rows": [
+ {
+ "handle": "dwqw-56485-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56486-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56488-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56489-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56490-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56491-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56492-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56499-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56501-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56502-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56503-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56504-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56505-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56506-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56507-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56508-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56509-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56510-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56511-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56512-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56513-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56514-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56515-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56516-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56517-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56518-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56519-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56520-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56521-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56522-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56524-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56525-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56526-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56527-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56528-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56529-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56530-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56531-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56537-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56538-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56539-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56540-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56541-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56542-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56543-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56544-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56546-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56547-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56548-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56549-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56550-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56551-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56552-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56554-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56555-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56556-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56558-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56559-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56560-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56563-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56565-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56566-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56567-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56569-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56570-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56571-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56572-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56573-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56574-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56575-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56576-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56577-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56578-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56579-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56580-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56581-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56582-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56583-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56584-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56586-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56587-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56588-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56589-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56590-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56591-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56593-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56594-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56595-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56596-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56597-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56598-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56599-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56600-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56601-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56602-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56603-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56604-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56605-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56606-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56607-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56608-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56835-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56836-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56837-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56840-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56845-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56846-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56847-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56848-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56849-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56850-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56851-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56852-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56853-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56854-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56855-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56856-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56857-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56859-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56860-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56863-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56864-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56865-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56866-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56867-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56868-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56869-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56871-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56873-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56874-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56875-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56876-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56877-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56878-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56879-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56880-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56881-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56882-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56884-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56885-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56886-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56887-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56888-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56889-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56910-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56952-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56955-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56956-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56961-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56963-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56965-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56968-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56972-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56973-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56974-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56975-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56976-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56977-handle",
+ "tier": "A"
+ },
+ {
+ "handle": "dwqw-56978-handle",
+ "tier": "A"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/verification/TK-11644-tierC-generic-dupes.json b/verification/TK-11644-tierC-generic-dupes.json
new file mode 100644
index 0000000..fac84b5
--- /dev/null
+++ b/verification/TK-11644-tierC-generic-dupes.json
@@ -0,0 +1,18 @@
+{
+ "measured_at": "2026-09-17T22:21:06.437Z",
+ "total_offender_rows": 134,
+ "groups": [
+ {
+ "count": 134,
+ "value": "Authorized Dealer of Nina Campbell Fabrics Samples and Purchasing available on a",
+ "vendors": [
+ "Nina Campbell"
+ ],
+ "sample": [
+ "dwc-1001446",
+ "dwc-1001447",
+ "dwc-1001448"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/verification/TK-11644-tierC-generic-postfix.json b/verification/TK-11644-tierC-generic-postfix.json
new file mode 100644
index 0000000..40c414f
--- /dev/null
+++ b/verification/TK-11644-tierC-generic-postfix.json
@@ -0,0 +1,7 @@
+{
+ "ts": "2026-09-17T22:23:22.557Z",
+ "population": 138,
+ "confirmed_null": 138,
+ "still_carrying": 0,
+ "sample": []
+}
\ No newline at end of file
diff --git a/verification/TK-11644-tierC-generic-preverify.json b/verification/TK-11644-tierC-generic-preverify.json
new file mode 100644
index 0000000..8e4c22c
--- /dev/null
+++ b/verification/TK-11644-tierC-generic-preverify.json
@@ -0,0 +1,9 @@
+{
+ "ts": "2026-09-17T22:21:54.055Z",
+ "candidates": 138,
+ "still_exact_match": 138,
+ "changed": 0,
+ "already_deleted": 0,
+ "not_found": 0,
+ "changedRows": []
+}
\ No newline at end of file
← 83c91e7 auto-data-snapshot: 2026-09-17T15:16:40 (2 data files) — ver
·
back to Designerwallcoverings
·
TK-11644: amend snapshot — drop unrelated tk11186 preimage 31ad41b →