← back to Reid Witlin Onboarding
Refresh retained canonical owners during recovery
884a4e85f092f04c22ddcb6231c6e0c6873cee16 · 2026-09-02 23:32:56 -0700 · Steve Abrams
Files touched
M recover_tk10066.pyM verification/tk10066-recovery-results.jsonl
Diff
commit 884a4e85f092f04c22ddcb6231c6e0c6873cee16
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Sep 2 23:32:56 2026 -0700
Refresh retained canonical owners during recovery
---
recover_tk10066.py | 19 ++++++++++++++++++-
verification/tk10066-recovery-results.jsonl | 10 ++++++++++
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/recover_tk10066.py b/recover_tk10066.py
index 6a030b1..b2df6b6 100644
--- a/recover_tk10066.py
+++ b/recover_tk10066.py
@@ -100,6 +100,10 @@ def db_resku(item):
old, new = item["old_sku"], item["new_sku"]
mover, retain = item["move_identity"], item["retain_identity"]
pid, handle = mover["product_id"], item["move_product"]["handle"]
+ retain_pid = retain["product_id"]
+ retain_gid = retain_pid if retain_pid.startswith("gid://") else f"gid://shopify/Product/{retain_pid}"
+ retain_product = next(p for p in item["shopify_products"] if p["product_id"] == retain_gid)
+ retain_handle = retain_product["handle"]
sql = f"""
BEGIN;
DO $$
@@ -116,10 +120,13 @@ END $$;
UPDATE rwltd_catalog SET dw_sku={q(new)}, shopify_product_id={q(pid)},
shopify_handle={q(handle)}, on_shopify=true, agent_updated_at=now()
WHERE id={int(mover['row_id'])} AND mfr_sku={q(mover['mfr_sku'])};
+UPDATE rwltd_catalog SET shopify_product_id={q(retain_gid)},shopify_handle={q(retain_handle)},
+ on_shopify=true,agent_updated_at=now()
+WHERE id={int(retain['row_id'])} AND mfr_sku={q(retain['mfr_sku'])} AND dw_sku={q(old)};
INSERT INTO dw_sku_registry
(dw_sku,vendor_prefix,vendor_name,mfr_sku,shopify_product_id,shopify_handle,status,updated_at)
VALUES ({q(old)},'DWKR','Architectural Fabrics',{q(retain['mfr_sku'])},
- {q(retain['product_id'])},{q(retain['handle'])},'draft',now())
+ {q(retain_gid)},{q(retain_handle)},'draft',now())
ON CONFLICT (vendor_prefix,mfr_sku) DO UPDATE SET dw_sku=EXCLUDED.dw_sku,
shopify_product_id=EXCLUDED.shopify_product_id,shopify_handle=EXCLUDED.shopify_handle,
status='draft',updated_at=now();
@@ -146,6 +153,16 @@ def verify_db_resku(item):
f"WHERE vendor_prefix='DWKR' AND mfr_sku={q(mover['mfr_sku'])};", tuples=True)
if registry != "\t".join([item["new_sku"], mover["product_id"]]):
raise RuntimeError(f"Registry resku read-back failed: {registry}")
+ retain = item["retain_identity"]
+ retain_gid = retain["product_id"] if retain["product_id"].startswith("gid://") else \
+ f"gid://shopify/Product/{retain['product_id']}"
+ retain_product = next(p for p in item["shopify_products"] if p["product_id"] == retain_gid)
+ retain_check = psql(
+ f"SELECT dw_sku,COALESCE(shopify_product_id,''),COALESCE(shopify_handle,''),on_shopify::text "
+ f"FROM rwltd_catalog WHERE id={int(retain['row_id'])};", tuples=True)
+ expected_retain = "\t".join([item["old_sku"], retain_gid, retain_product["handle"], "true"])
+ if retain_check != expected_retain:
+ raise RuntimeError(f"Retain catalog read-back failed: {retain_check}")
def resku_one(item, live):
diff --git a/verification/tk10066-recovery-results.jsonl b/verification/tk10066-recovery-results.jsonl
index 60d66bd..e87effd 100644
--- a/verification/tk10066-recovery-results.jsonl
+++ b/verification/tk10066-recovery-results.jsonl
@@ -91,3 +91,13 @@
{"kind": "link", "mfr_sku": "revere-alaska", "product_id": "gid://shopify/Product/7942325927987", "sku": "DWKR-190830", "state": "dry_run", "ticket": "TK-10066", "ts": "2026-09-03T06:31:02.502523+00:00"}
{"kind": "link", "mfr_sku": "strie-vibez-obsidian", "product_id": "gid://shopify/Product/7942336282675", "sku": "DWKR-190420", "state": "dry_run", "ticket": "TK-10066", "ts": "2026-09-03T06:31:02.502636+00:00"}
{"counts": [34, 55, 2], "kind": "run", "mode": "dry_run", "state": "complete", "ticket": "TK-10066", "ts": "2026-09-03T06:31:02.502742+00:00"}
+{"counts": [1, 1, 1], "kind": "run", "manifest": "/Users/macstudio3/Projects/reid-witlin-onboarding/verification/recovery-manifests/20260903T052418Z.json", "mode": "apply", "state": "start", "ticket": "TK-10066", "ts": "2026-09-03T06:31:37.210071+00:00"}
+{"after": {"handle": "haymarket-chocolate-architectural-fabrics", "id": "gid://shopify/Product/7942335561779", "status": "ARCHIVED", "title": "Haymarket Chocolate", "variants": {"nodes": [{"id": "gid://shopify/ProductVariant/44814406647859", "price": "4.25", "sku": "DWKR-190413-Sample"}]}, "vendor": "Architectural Fabrics"}, "before": {"handle": "haymarket-chocolate-architectural-fabrics", "id": "gid://shopify/Product/7942335561779", "status": "DRAFT", "title": "Haymarket Chocolate", "variants": {"nodes": [{"id": "gid://shopify/ProductVariant/44814406647859", "price": "4.25", "sku": "DWKR-190413-Sample"}]}, "vendor": "Architectural Fabrics"}, "kind": "archive", "product_id": "gid://shopify/Product/7942335561779", "sku": "DWKR-190413-Sample", "state": "applied", "ticket": "TK-10066", "ts": "2026-09-03T06:31:38.199746+00:00"}
+{"after": {"handle": "by-hand-panels-ageless-arrowheads-architectural-fabrics", "id": "gid://shopify/Product/7942340804659", "status": "DRAFT", "title": "By Hand Panels Ageless Arrowheads", "variants": {"nodes": [{"id": "gid://shopify/ProductVariant/44814411956275", "price": "4.25", "sku": "DWKR-191619-Sample"}]}, "vendor": "Architectural Fabrics"}, "before": {"handle": "by-hand-panels-ageless-arrowheads-architectural-fabrics", "id": "gid://shopify/Product/7942340804659", "status": "DRAFT", "title": "By Hand Panels Ageless Arrowheads", "variants": {"nodes": [{"id": "gid://shopify/ProductVariant/44814411956275", "price": "4.25", "sku": "DWKR-191394-Sample"}]}, "vendor": "Architectural Fabrics"}, "kind": "resku", "new_sku": "DWKR-191619", "old_sku": "DWKR-191394", "product_id": "gid://shopify/Product/7942340804659", "state": "applied", "ticket": "TK-10066", "ts": "2026-09-03T06:31:39.740598+00:00"}
+{"kind": "link", "mfr_sku": "revere-alaska", "product_id": "gid://shopify/Product/7942325927987", "sku": "DWKR-190830", "state": "applied", "ticket": "TK-10066", "ts": "2026-09-03T06:31:40.023570+00:00"}
+{"counts": [1, 1, 1], "kind": "run", "mode": "apply", "state": "complete", "ticket": "TK-10066", "ts": "2026-09-03T06:31:40.023898+00:00"}
+{"counts": [1, 1, 1], "kind": "run", "manifest": "/Users/macstudio3/Projects/reid-witlin-onboarding/verification/recovery-manifests/20260903T052418Z.json", "mode": "apply", "state": "start", "ticket": "TK-10066", "ts": "2026-09-03T06:32:43.328197+00:00"}
+{"kind": "archive", "product_id": "gid://shopify/Product/7942335561779", "sku": "DWKR-190413-Sample", "state": "already_applied", "ticket": "TK-10066", "ts": "2026-09-03T06:32:43.598188+00:00"}
+{"after": {"handle": "by-hand-panels-ageless-arrowheads-architectural-fabrics", "id": "gid://shopify/Product/7942340804659", "status": "DRAFT", "title": "By Hand Panels Ageless Arrowheads", "variants": {"nodes": [{"id": "gid://shopify/ProductVariant/44814411956275", "price": "4.25", "sku": "DWKR-191619-Sample"}]}, "vendor": "Architectural Fabrics"}, "before": {"handle": "by-hand-panels-ageless-arrowheads-architectural-fabrics", "id": "gid://shopify/Product/7942340804659", "status": "DRAFT", "title": "By Hand Panels Ageless Arrowheads", "variants": {"nodes": [{"id": "gid://shopify/ProductVariant/44814411956275", "price": "4.25", "sku": "DWKR-191619-Sample"}]}, "vendor": "Architectural Fabrics"}, "kind": "resku", "new_sku": "DWKR-191619", "old_sku": "DWKR-191394", "product_id": "gid://shopify/Product/7942340804659", "state": "already_applied", "ticket": "TK-10066", "ts": "2026-09-03T06:32:44.703111+00:00"}
+{"kind": "link", "mfr_sku": "revere-alaska", "product_id": "gid://shopify/Product/7942325927987", "sku": "DWKR-190830", "state": "applied", "ticket": "TK-10066", "ts": "2026-09-03T06:32:44.996745+00:00"}
+{"counts": [1, 1, 1], "kind": "run", "mode": "apply", "state": "complete", "ticket": "TK-10066", "ts": "2026-09-03T06:32:44.997035+00:00"}
← 039d074 Add guarded Reid Witlin recovery executor
·
back to Reid Witlin Onboarding
·
auto-data-snapshot: 2026-09-02T23:42:20 (1 data files) — ver 6f38500 →