← back to Wolfgordon Crawl
RECONCILIATION-DRYRUN.md
51 lines
# Wolf Gordon re-onboarding — reconciliation DRY RUN (2026-06-19)
Read-only. No writes to shopify_products or live Shopify. Re-run anytime:
`node reconcile.js` and `node unmatched-analysis.js`.
## Catalog (source of truth: dw_unified.wolf_gordon_catalog)
- 5,483 rows. ALL now carry a conforming sequential `DWWG-<n>` SKU (530001..535483).
- The 106 previously-NULL rows were assigned DWWG-535378..535483 (local fix, applied).
## Legacy Shopify reconciliation (1,068 products, vendor='Wolf Gordon')
Match keys (since the website reformatted SKUs):
PRIMARY = normalized mfr_sku (strip space/hyphen + trailing "_8")
FALLBACK = normalized(pattern_name) + "|" + normalized(color from title)
| Bucket | Count | Meaning |
|---|---|---|
| [A] normalized-SKU match | 255 | safely re-mappable to the new sequential DW SKU |
| [B] pattern+color match | 24 | safely re-mappable (fallback) |
| [C] ambiguous | 0 | none |
| [D] unmatched | 789 | discontinue candidates |
| **legacy total** | **1,068** | |
| [E] net-new catalog rows | 5,204 | catalog products with no legacy peer |
KEY CORRECTION to the briefing: a NAIVE raw-string SKU match yields ~2, but a
PUNCTUATION-NORMALIZED SKU match recovers 255. The site did NOT recode the SKU
*values* — it reformatted them (CCT-2670 -> "CCT 2670", BOS-4399_8 -> "BOS 4399").
So 279 of 1,068 (26%) re-map cleanly without any prod renaming guesswork.
## The 789 unmatched, broken down
- 174 — legacy pattern_name is just the SKU echoed (weak old import data,
e.g. "Ambient Design / AD10336", "SM8008"). Unmatchable by pattern+color.
- 614 — real pattern name that no longer exists anywhere in the new catalog =
GENUINE DISCONTINUE (per DW rule: ARCHIVE, never delete/draft).
- 1 — pattern still exists, exact color/sku drifted (recoverable by hand:
DWWG-WWDF-211 WonderWood / Oak Gray Dark Qtd).
By Shopify status: 659 ACTIVE, 105 ARCHIVED, 4 DRAFT, 21 DELETED_FROM_SHOPIFY.
## Proposed migration plan (Steve-gated — NOT executed)
1. [A]+[B] = 279 legacy products -> rename SKU embedded->sequential (prod write).
2. [D]/614 + 174 weak = ~788 legacy ACTIVE/etc. with no catalog peer -> ARCHIVE.
3. [E] = 5,204 net-new catalog rows -> onboard as new products (BLOCKED on pricing).
## Pricing status (BLOCKER, partly resolved)
- vendor_registry.vendor_discount_pct = 0.00 (unset).
- BUT 2,769 / 5,483 catalog rows already have price_retail + price_trade
(retail = trade x 1.81 exactly = DW cost/0.65/0.85 markup). These predate this
crawl (the current scraper does NOT scrape price). Need Steve to confirm whether
price_trade == our WHOLESALE COST (then existing prices are correct) or WG's
published list (then they are over-marked-up and must be recomputed from a real
discount). 2,714 rows still have NO price at all.