← back to Designer Wallcoverings

audits/designtex-uom-fix/README.md

41 lines

# Designtex Unit-of-Measure label fix (2026-06-22)

## The bug
Live Designtex products on Shopify showed variant title **"Single Roll"** and metafield
`global.unit_of_measure` = **"Priced Per Single Roll"** — but Designtex is sold **PER YARD**.

## Recheck findings (LIVE Shopify, designer-laboratory-sandbox, API 2024-10)
- **294** live products, vendor = Designtex (276 ACTIVE / 18 DRAFT).
- **285** carry SKU prefix `DWDX`, variant title "Single Roll", metafield "Priced Per Single Roll".
  - All 285 match a `dw_unified.designtex_catalog` row that is **per-yard**: `product_type` uniformly
    "Commercial Wallcovering", `roll_length` NULL on every row, `tariff_amount_per_yard` column,
    width ~54in, `our_price` = per-yard price.
  - **Every live price == catalog per-yard `our_price` exactly (0 mismatches).**
    => This is a **LABEL-ONLY bug. Prices are already correct per-yard. No reprice needed.**
- **9** are the **"Rocket"** line, prefix `DWAH` (distinct, NOT Designtex DWDX), variant title "Roll",
  no `unit_of_measure` metafield, NOT in designtex_catalog. **EXCLUDED** from the flip pending separate
  verification (see exclude-9.json).

Note: the Unit field is `global.unit_of_measure` (NOT `custom.unit`).

## Decision (DTD 3/3, high confidence, 2026-06-22)
- Q1 -> **A1**: RELABEL-ONLY for the 285 DWDX (title Single Roll->Yard, metafield ->Priced Per Yard, price untouched).
- Q2 -> **A2**: LEAVE the 9 DWAH "Rocket" as-is, exclude from the flip.

## Canary (DONE, verified live)
5 products relabeled (incl. the flagged DWDX-220230). See canary-before.json / canary-after.json.
Price held at each product's existing per-yard value. Zero userErrors.

## To bulk-fix the remaining 280 (after Steve's eyeball)
```
node bulk-flip-remaining.mjs --execute --skip-done
```
Dry-run first (no flag) prints what it would do. Batches of 50, 90s gap, price never sent.

## Files
- designtex-live-294.json  — full live snapshot
- flip-candidates-285.json — the 285 DWDX to relabel
- exclude-9.json           — the 9 DWAH Rocket excluded
- canary-before.json / canary-after.json
- bulk-flip-remaining.mjs  — gated bulk script (dry-run by default)