[object Object]

← back to Designer Wallcoverings

Read-only cross-brand single-roll min/step audit: 15,034 variants/62 vendors — 2,048 active missing min, 584 min!=2, 7 realized odd-qty orders 60d; DWJS #32512 leak is enforcement-layer not data

fdd0045bda7f07d1cb75269b78da4b12639e48e3 · 2026-07-02 10:00:05 -0700 · Steve Abrams

Files touched

Diff

commit fdd0045bda7f07d1cb75269b78da4b12639e48e3
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 2 10:00:05 2026 -0700

    Read-only cross-brand single-roll min/step audit: 15,034 variants/62 vendors — 2,048 active missing min, 584 min!=2, 7 realized odd-qty orders 60d; DWJS #32512 leak is enforcement-layer not data
---
 .../scripts/audit-single-roll-brands-min-step.py   |  166 ++++
 .../audits/single-roll-brands-min-step-audit.json  | 1028 ++++++++++++++++++++
 2 files changed, 1194 insertions(+)

diff --git a/shopify/scripts/audit-single-roll-brands-min-step.py b/shopify/scripts/audit-single-roll-brands-min-step.py
new file mode 100644
index 00000000..18ab3e3f
--- /dev/null
+++ b/shopify/scripts/audit-single-roll-brands-min-step.py
@@ -0,0 +1,166 @@
+#!/usr/bin/env python3
+"""
+READ-ONLY audit: which "Priced Per Single Roll" brands have min=2/step=2
+order-increment metafields — and which are leaking.
+
+Born 2026-07-02 from Shopify order #32512: DWJS-14130 (Jeffrey Stevens,
+variant "Price Per Single Roll") sold at qty 1 via Online Store web, EVEN
+THOUGH global.v_prods_quantity_order_min=2 / _units=2 are set on the product.
+So there are two distinct gaps to quantify:
+  GAP-A  products missing the min/step metafields entirely (cadence never set
+         them outside the 06-30 DWTT/AF pass)
+  GAP-B  enforcement leak — metafields present but the theme/checkout let a
+         qty below min through (theme min/step is client-side only; Buy-Now /
+         alternate templates bypass it). Quantified via recent orders.
+
+Method:
+  1. Page ALL productVariants with title containing "Single Roll" (the
+     single-roll-priced class across every brand), group by product vendor.
+  2. Per product: explicit-key metafield() reads of
+     global.v_prods_quantity_order_min / _units (the metafields(first:N)
+     scrape lies) + status.
+  3. Recent 60 days of orders: line items with qty==1 whose variant title
+     contains "Single Roll" = realized enforcement leaks.
+
+Zero writes. $0 (Shopify Admin API).
+Run: SHOPIFY_ADMIN_TOKEN=... [SHOPIFY_ORDERS_TOKEN=...] python3 audit-single-roll-brands-min-step.py
+"""
+import json, os, sys, time, urllib.request, datetime, collections
+
+TOKEN = os.environ["SHOPIFY_ADMIN_TOKEN"]
+ORDERS_TOKEN = os.environ.get("SHOPIFY_ORDERS_TOKEN") or TOKEN
+SHOP = "designer-laboratory-sandbox.myshopify.com"
+GQL = f"https://{SHOP}/admin/api/2024-10/graphql.json"
+AUDIT_PATH = os.path.expanduser(
+    "~/Projects/Designer-Wallcoverings/shopify/scripts/audits/single-roll-brands-min-step-audit.json")
+
+def gql(q, v=None, token=TOKEN):
+    body = json.dumps({"query": q, "variables": v or {}}).encode()
+    req = urllib.request.Request(GQL, data=body, headers={
+        "X-Shopify-Access-Token": token, "Content-Type": "application/json"})
+    for _ in range(8):
+        try:
+            with urllib.request.urlopen(req) as r:
+                d = json.load(r)
+            if d.get("errors"):
+                if "THROTTLED" in json.dumps(d["errors"]):
+                    time.sleep(2.5); continue
+                raise SystemExit("GQL ERR: " + json.dumps(d["errors"]))
+            return d["data"]
+        except urllib.error.HTTPError as e:
+            if e.code == 429:
+                time.sleep(2.5); continue
+            raise
+    raise SystemExit("retries exhausted")
+
+VARS = """
+query($cursor:String){
+  productVariants(first:250, after:$cursor, query:"title:*Single Roll*"){
+    pageInfo{hasNextPage endCursor}
+    edges{node{
+      id sku title
+      product{
+        id vendor status handle
+        qmin:metafield(namespace:"global",key:"v_prods_quantity_order_min"){value}
+        qunits:metafield(namespace:"global",key:"v_prods_quantity_order_units"){value}
+      }
+    }}
+  }
+}
+"""
+
+ORDERS = """
+query($cursor:String,$q:String!){
+  orders(first:50, after:$cursor, query:$q){
+    pageInfo{hasNextPage endCursor}
+    edges{node{
+      name createdAt sourceName
+      lineItems(first:30){edges{node{
+        sku quantity vendor variantTitle
+      }}}
+    }}
+  }
+}
+"""
+
+def main():
+    # -- 1+2: single-roll variant scan grouped by vendor --------------------
+    per_vendor = collections.defaultdict(lambda: dict(
+        products=set(), active=set(), missing_min=set(), min_not2=set(),
+        ok=set(), sample_missing=[]))
+    cursor, more, scanned = None, True, 0
+    while more:
+        d = gql(VARS, {"cursor": cursor})
+        pv = d["productVariants"]
+        for e in pv["edges"]:
+            n = e["node"]; p = n["product"]
+            scanned += 1
+            v = per_vendor[p["vendor"] or "(none)"]
+            pid = p["id"]
+            v["products"].add(pid)
+            if p["status"] == "ACTIVE":
+                v["active"].add(pid)
+                qmin = (p["qmin"] or {}).get("value")
+                qunits = (p["qunits"] or {}).get("value")
+                if qmin is None:
+                    v["missing_min"].add(pid)
+                    if len(v["sample_missing"]) < 5:
+                        v["sample_missing"].append(dict(sku=n["sku"], handle=p["handle"]))
+                elif qmin != "2" or qunits != "2":
+                    v["min_not2"].add(pid)
+                else:
+                    v["ok"].add(pid)
+        more = pv["pageInfo"]["hasNextPage"]; cursor = pv["pageInfo"]["endCursor"]
+        sys.stderr.write(f"\rvariants scanned {scanned}")
+        time.sleep(0.2)
+    sys.stderr.write("\n")
+
+    # -- 3: realized qty-1 leaks in last 60 days ---------------------------
+    since = (datetime.date.today() - datetime.timedelta(days=60)).isoformat()
+    leaks = []
+    cursor, more, oscan = None, True, 0
+    try:
+        while more:
+            d = gql(ORDERS, {"cursor": cursor, "q": f"created_at:>={since}"}, token=ORDERS_TOKEN)
+            oo = d["orders"]
+            for e in oo["edges"]:
+                o = e["node"]; oscan += 1
+                for le in o["lineItems"]["edges"]:
+                    li = le["node"]
+                    vt = (li["variantTitle"] or "")
+                    if "single roll" in vt.lower() and li["quantity"] is not None and li["quantity"] % 2 == 1:
+                        leaks.append(dict(order=o["name"], created=o["createdAt"],
+                                          source=o["sourceName"], sku=li["sku"],
+                                          vendor=li["vendor"], qty=li["quantity"]))
+            more = oo["pageInfo"]["hasNextPage"]; cursor = oo["pageInfo"]["endCursor"]
+            sys.stderr.write(f"\rorders scanned {oscan}")
+            time.sleep(0.2)
+        sys.stderr.write("\n")
+    except SystemExit as e:
+        print(f"\n(order scan unavailable: {e}) — GAP-B via orders skipped", file=sys.stderr)
+
+    # -- report -------------------------------------------------------------
+    out_vendors = {}
+    print(f"\n== Single-roll-priced variants: {scanned} across {len(per_vendor)} vendors ==")
+    print(f"{'vendor':32s} {'prods':>6s} {'active':>6s} {'ok 2/2':>6s} {'no-min':>6s} {'min!=2':>6s}")
+    for vend, v in sorted(per_vendor.items(), key=lambda kv: -len(kv[1]["active"])):
+        out_vendors[vend] = dict(products=len(v["products"]), active=len(v["active"]),
+                                 ok=len(v["ok"]), missing_min=len(v["missing_min"]),
+                                 min_not2=len(v["min_not2"]),
+                                 sample_missing=v["sample_missing"])
+        print(f"{vend[:32]:32s} {len(v['products']):6d} {len(v['active']):6d} "
+              f"{len(v['ok']):6d} {len(v['missing_min']):6d} {len(v['min_not2']):6d}")
+
+    print(f"\n== Realized odd-qty single-roll orders (last 60d): {len(leaks)} ==")
+    for l in leaks[:15]:
+        print(f"  {l['order']} {l['created'][:10]} {l['source']:8s} {l['vendor']:24s} {l['sku']} qty={l['qty']}")
+
+    audit = dict(generated_at=datetime.datetime.now().isoformat(),
+                 variants_scanned=scanned, vendors=out_vendors, odd_qty_orders=leaks)
+    os.makedirs(os.path.dirname(AUDIT_PATH), exist_ok=True)
+    with open(AUDIT_PATH, "w") as f:
+        json.dump(audit, f, indent=1)
+    print(f"\nAudit JSON: {AUDIT_PATH}")
+
+if __name__ == "__main__":
+    main()
diff --git a/shopify/scripts/audits/single-roll-brands-min-step-audit.json b/shopify/scripts/audits/single-roll-brands-min-step-audit.json
new file mode 100644
index 00000000..a100e5a9
--- /dev/null
+++ b/shopify/scripts/audits/single-roll-brands-min-step-audit.json
@@ -0,0 +1,1028 @@
+{
+ "generated_at": "2026-07-02T09:58:30.076980",
+ "variants_scanned": 15034,
+ "vendors": {
+  "Thibaut": {
+   "products": 2018,
+   "active": 1999,
+   "ok": 1945,
+   "missing_min": 48,
+   "min_not2": 6,
+   "sample_missing": [
+    {
+     "sku": "DWTT-73611",
+     "handle": "mackinac-terracotta-dwtt-73611"
+    },
+    {
+     "sku": "DWTT-73612",
+     "handle": "maroma-seaglass-dwtt-73612"
+    },
+    {
+     "sku": "DWTT-73613",
+     "handle": "maroma-beige-dwtt-73613"
+    },
+    {
+     "sku": "DWTT-73614",
+     "handle": "maroma-bark-dwtt-73614"
+    },
+    {
+     "sku": "DWTT-73615",
+     "handle": "maroma-olive-dwtt-73615"
+    }
+   ]
+  },
+  "Malibu Wallpaper": {
+   "products": 2126,
+   "active": 1908,
+   "ok": 1908,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Jeffrey Stevens": {
+   "products": 3527,
+   "active": 1391,
+   "ok": 1390,
+   "missing_min": 0,
+   "min_not2": 1,
+   "sample_missing": []
+  },
+  "Schumacher": {
+   "products": 754,
+   "active": 754,
+   "ok": 0,
+   "missing_min": 754,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWLK-800000",
+     "handle": "hoppmosse-ivory-and-multi-dwlk-800000"
+    },
+    {
+     "sku": "DWLK-800010",
+     "handle": "hoppmosse-dove-and-blue-dwlk-800010"
+    },
+    {
+     "sku": "DWLK-800020",
+     "handle": "molntuss-lavender-dwlk-800020"
+    },
+    {
+     "sku": "DWLK-800030",
+     "handle": "korall-ng-brown-dwlk-800030"
+    },
+    {
+     "sku": "DWLK-800040",
+     "handle": "korall-ng-ivory-multi-dwlk-800040"
+    }
+   ]
+  },
+  "PS Removable Wallpaper": {
+   "products": 735,
+   "active": 733,
+   "ok": 733,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "LA Walls": {
+   "products": 701,
+   "active": 535,
+   "ok": 535,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Romo": {
+   "products": 568,
+   "active": 535,
+   "ok": 487,
+   "missing_min": 48,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWRM-241251",
+     "handle": "quadrata-sienna-wallcovering-romo"
+    },
+    {
+     "sku": "DWRM-241197",
+     "handle": "marazzi-oxide-wallcovering-romo"
+    },
+    {
+     "sku": "ROP-73261",
+     "handle": "otillo-anthracite-romo"
+    },
+    {
+     "sku": "DWRM-240001",
+     "handle": "abaca-alabaster-dwrm-240001"
+    },
+    {
+     "sku": "DWRM-240002",
+     "handle": "abaca-atmosphere-dwrm-240002"
+    }
+   ]
+  },
+  "Anna French": {
+   "products": 510,
+   "active": 471,
+   "ok": 442,
+   "missing_min": 26,
+   "min_not2": 3,
+   "sample_missing": [
+    {
+     "sku": "DWAT-65137",
+     "handle": "farmingdale-spa-blue-dwat-65137"
+    },
+    {
+     "sku": "DWAT-65138",
+     "handle": "dalton-eggplant-on-pearl-dwat-65138"
+    },
+    {
+     "sku": "DWAT-65139",
+     "handle": "dalton-spa-blue-on-pearl-dwat-65139"
+    },
+    {
+     "sku": "DWAT-65140",
+     "handle": "dalton-green-on-pearl-dwat-65140"
+    },
+    {
+     "sku": "DWAT-65141",
+     "handle": "dalton-blue-and-white-on-pearl-dwat-65141"
+    }
+   ]
+  },
+  "Designer Wallcoverings": {
+   "products": 638,
+   "active": 432,
+   "ok": 340,
+   "missing_min": 3,
+   "min_not2": 89,
+   "sample_missing": [
+    {
+     "sku": "DIG-43230",
+     "handle": "butterfly-love-golden-black-butterflies"
+    },
+    {
+     "sku": "DIG-540053",
+     "handle": "authentic-1950s-reproduction-vintage-wallcoverings-51"
+    },
+    {
+     "sku": "DIG-540050",
+     "handle": "authentic-1950s-reproduction-vintage-wallcoverings-49"
+    }
+   ]
+  },
+  "Graham & Brown": {
+   "products": 387,
+   "active": 387,
+   "ok": 305,
+   "missing_min": 82,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWGB-200008",
+     "handle": "allure-wallpaper-graham-brown"
+    },
+    {
+     "sku": "DWGB-200024",
+     "handle": "prism-rose-gold-wallpaper-graham-brown"
+    },
+    {
+     "sku": "DWGB-200025",
+     "handle": "gothic-damask-noir-wallpaper-graham-brown"
+    },
+    {
+     "sku": "DWGB-200026",
+     "handle": "gothic-damask-flock-white-wallpaper-graham-brown"
+    },
+    {
+     "sku": "DWGB-200028",
+     "handle": "gothic-damask-flock-cobalt-wallpaper-graham-brown"
+    }
+   ]
+  },
+  "Kravet": {
+   "products": 328,
+   "active": 328,
+   "ok": 0,
+   "missing_min": 5,
+   "min_not2": 323,
+   "sample_missing": [
+    {
+     "sku": "DWKK-100290",
+     "handle": "lille-linen-gold-dwkk-100290"
+    },
+    {
+     "sku": "DWKK-100863",
+     "handle": "ultrasuede-green-taupe-dwkk-100863"
+    },
+    {
+     "sku": "DWKK-101540",
+     "handle": "kravet-couture-34031-1610-dwkk-101540"
+    },
+    {
+     "sku": "DWKK-102010",
+     "handle": "kravet-design-beige-dwkk-102010"
+    },
+    {
+     "sku": "DWKK-102059",
+     "handle": "kravet-smart-light-blue-dwkk-102059"
+    }
+   ]
+  },
+  "Nina Campbell": {
+   "products": 269,
+   "active": 269,
+   "ok": 0,
+   "missing_min": 269,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "EUR-80112",
+     "handle": "eur-80112-ncw4120-designer-wallcoverings-los-angeles"
+    },
+    {
+     "sku": "EUR-80113",
+     "handle": "eur-80113-ncw4120-designer-wallcoverings-los-angeles"
+    },
+    {
+     "sku": "EUR-80114",
+     "handle": "eur-80114-ncw4120-designer-wallcoverings-los-angeles"
+    },
+    {
+     "sku": "EUR-80115",
+     "handle": "eur-80115-ncw4120-designer-wallcoverings-los-angeles"
+    },
+    {
+     "sku": "EUR-80116",
+     "handle": "eur-80116-ncw4121-designer-wallcoverings-los-angeles"
+    }
+   ]
+  },
+  "Versace": {
+   "products": 230,
+   "active": 183,
+   "ok": 83,
+   "missing_min": 0,
+   "min_not2": 100,
+   "sample_missing": []
+  },
+  "Scalamandre Wallpaper": {
+   "products": 174,
+   "active": 174,
+   "ok": 4,
+   "missing_min": 170,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWA-88448",
+     "handle": "wtw0443yuko"
+    },
+    {
+     "sku": "DWA-88449",
+     "handle": "wtw0453wyom"
+    },
+    {
+     "sku": "DWA-88466",
+     "handle": "wtw0422silk"
+    },
+    {
+     "sku": "DWA-88467",
+     "handle": "wtw0447safa"
+    },
+    {
+     "sku": "DWA-88468",
+     "handle": "wtw0414safa"
+    }
+   ]
+  },
+  "Fentucci": {
+   "products": 160,
+   "active": 160,
+   "ok": 159,
+   "missing_min": 0,
+   "min_not2": 1,
+   "sample_missing": []
+  },
+  "Mind the Gap": {
+   "products": 142,
+   "active": 142,
+   "ok": 0,
+   "missing_min": 142,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWC-268059",
+     "handle": "dwc-268059-designerwallcoverings-com"
+    },
+    {
+     "sku": "DWWD-60500",
+     "handle": "dwwd-70500-designerwallcoverings-com"
+    },
+    {
+     "sku": "DWWD-60502",
+     "handle": "dwwd-70502-designerwallcoverings-com"
+    },
+    {
+     "sku": "DWWD-60503",
+     "handle": "dwwd-70503-designerwallcoverings-com"
+    },
+    {
+     "sku": "DWWD-60504",
+     "handle": "dwwd-70504-designerwallcoverings-com"
+    }
+   ]
+  },
+  "Rebel Walls": {
+   "products": 128,
+   "active": 128,
+   "ok": 0,
+   "missing_min": 128,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWRW-450057",
+     "handle": "street-art-brick-wall-rebel-walls"
+    },
+    {
+     "sku": "DWRW-451820",
+     "handle": "waves-magenta-rebel-walls"
+    },
+    {
+     "sku": "DWRW-74894",
+     "handle": "dwrw-74894"
+    },
+    {
+     "sku": "DWRW-75257",
+     "handle": "dwrw-75257"
+    },
+    {
+     "sku": "DWRW-75588",
+     "handle": "dwrw-75588"
+    }
+   ]
+  },
+  "Newwall": {
+   "products": 156,
+   "active": 127,
+   "ok": 0,
+   "missing_min": 127,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWXW-1005074",
+     "handle": "antioquia-yellow-sample-vinyl-dwxw-1005074"
+    },
+    {
+     "sku": "DWXW-1005075",
+     "handle": "antioquia-red-sample-vinyl-dwxw-1005075"
+    },
+    {
+     "sku": "DWXW-1005076",
+     "handle": "antioquia-terracotta-sample-vinyl-dwxw-1005076"
+    },
+    {
+     "sku": "DWXW-1005077",
+     "handle": "baranasi-mauve-sample-vinyl-dwxw-1005077"
+    },
+    {
+     "sku": "DWXW-1005078",
+     "handle": "baranasi-navy-sample-vinyl-dwxw-1005078"
+    }
+   ]
+  },
+  "Phillipe Romano": {
+   "products": 292,
+   "active": 109,
+   "ok": 38,
+   "missing_min": 66,
+   "min_not2": 5,
+   "sample_missing": [
+    {
+     "sku": "AI-Print-Dig-FLOCK-1003AI-North_Sea_Blue",
+     "handle": "daphneys-heirloom-flocked-velvet-wallpaper-russet-orange-north-sea-blue"
+    },
+    {
+     "sku": "AIFLOCK-1003_Russet_Orange_&_North_Sea_Blue",
+     "handle": "daphneys-heirloom-flocked-velvet-wallpaper-russet-orange-north-sea-blue-1"
+    },
+    {
+     "sku": "DWC-187890",
+     "handle": "dwc-187890-designerwallcoverings-com"
+    },
+    {
+     "sku": "DWC-278253",
+     "handle": "dwc-278253-designerwallcoverings-com"
+    },
+    {
+     "sku": "DWWC-508290",
+     "handle": "wood-birch-wallcovering-phillipe-romano"
+    }
+   ]
+  },
+  "DW Bespoke Studio": {
+   "products": 87,
+   "active": 87,
+   "ok": 85,
+   "missing_min": 1,
+   "min_not2": 1,
+   "sample_missing": [
+    {
+     "sku": "DIGGM-7400755-ROLL",
+     "handle": "zappys-happy-days-revival-authentic-1970s-vintage-wallpaper-1"
+    }
+   ]
+  },
+  "British Walls": {
+   "products": 169,
+   "active": 78,
+   "ok": 65,
+   "missing_min": 0,
+   "min_not2": 13,
+   "sample_missing": []
+  },
+  "Ronald Redding": {
+   "products": 215,
+   "active": 62,
+   "ok": 62,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Coordonn\u00e9": {
+   "products": 46,
+   "active": 40,
+   "ok": 0,
+   "missing_min": 35,
+   "min_not2": 5,
+   "sample_missing": [
+    {
+     "sku": "DWXW-1005011",
+     "handle": "padmasalis-black-black-dwxw-1005011"
+    },
+    {
+     "sku": "DWXW-1005012",
+     "handle": "kente-green-green-dwxw-1005012"
+    },
+    {
+     "sku": "DWXW-1005013",
+     "handle": "kente-black-black-dwxw-1005013"
+    },
+    {
+     "sku": "DWXW-1005014",
+     "handle": "kente-wine-wine-dwxw-1005014"
+    },
+    {
+     "sku": "DWXW-1005015",
+     "handle": "kente-black-black-dwxw-1005015"
+    }
+   ]
+  },
+  "Apartment Wallpaper": {
+   "products": 38,
+   "active": 38,
+   "ok": 38,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Innovations USA": {
+   "products": 38,
+   "active": 38,
+   "ok": 0,
+   "missing_min": 38,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWIN-15040",
+     "handle": "rangoon-silk-by-innovations-usa-dwc-rs8505"
+    },
+    {
+     "sku": "DWIN-15041",
+     "handle": "rangoon-silk-by-innovations-usa-dwc-rs8504"
+    },
+    {
+     "sku": "DWIN-15042",
+     "handle": "rangoon-silk-by-innovations-usa-dwc-rs8503"
+    },
+    {
+     "sku": "DWIN-15043",
+     "handle": "rangoon-silk-by-innovations-usa-dwc-rs8502"
+    },
+    {
+     "sku": "DWIN-15060",
+     "handle": "nautilus-by-innovations-usa-dwc-j609"
+    }
+   ]
+  },
+  "Harlequin": {
+   "products": 32,
+   "active": 32,
+   "ok": 0,
+   "missing_min": 32,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWHQ-335000",
+     "handle": "amazilia-gooseberry-harlequin"
+    },
+    {
+     "sku": "DWHQ-335001",
+     "handle": "cranes-in-flight-blush-harlequin"
+    },
+    {
+     "sku": "DWHQ-335002",
+     "handle": "cranes-in-flight-emerald-harlequin"
+    },
+    {
+     "sku": "DWHQ-335003",
+     "handle": "demoiselle-cornflower-first-light-honey-harlequin"
+    },
+    {
+     "sku": "DWHQ-335004",
+     "handle": "demoiselle-kelly-first-light-blush-harlequin"
+    }
+   ]
+  },
+  "Tres Tintas": {
+   "products": 28,
+   "active": 28,
+   "ok": 0,
+   "missing_min": 28,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWXW-1005046",
+     "handle": "kerala-blue-sample-vinyl-dwxw-1005046"
+    },
+    {
+     "sku": "DWXW-1005047",
+     "handle": "kerala-charcoal-sample-vinyl-dwxw-1005047"
+    },
+    {
+     "sku": "DWXW-1005048",
+     "handle": "kerala-sand-sample-vinyl-dwxw-1005048"
+    },
+    {
+     "sku": "DWXW-1005049",
+     "handle": "kerala-beige-sample-vinyl-dwxw-1005049"
+    },
+    {
+     "sku": "DWXW-1005050",
+     "handle": "kerala-taupe-sample-vinyl-dwxw-1005050"
+    }
+   ]
+  },
+  "Zoffany": {
+   "products": 24,
+   "active": 24,
+   "ok": 0,
+   "missing_min": 24,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWZF-187000",
+     "handle": "shagreen-zinc-dwzf-187000"
+    },
+    {
+     "sku": "DWZF-187001",
+     "handle": "persian-tulip-poison-dwzf-187001"
+    },
+    {
+     "sku": "DWZF-187003",
+     "handle": "conway-sahara-dwzf-187003"
+    },
+    {
+     "sku": "DWZF-187004",
+     "handle": "spun-silk-antique-copper-dwzf-187004"
+    },
+    {
+     "sku": "DWZF-187005",
+     "handle": "weathered-stone-plain-bluestone-dwzf-187005"
+    }
+   ]
+  },
+  "Traditional Whimsy": {
+   "products": 21,
+   "active": 21,
+   "ok": 21,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Lee Jofa": {
+   "products": 19,
+   "active": 19,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 19,
+   "sample_missing": []
+  },
+  "Hollywood Wallcoverings": {
+   "products": 13,
+   "active": 13,
+   "ok": 13,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Wallpaper NYC": {
+   "products": 92,
+   "active": 12,
+   "ok": 12,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Missoni Wallpaper": {
+   "products": 42,
+   "active": 12,
+   "ok": 12,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Retro Walls": {
+   "products": 10,
+   "active": 9,
+   "ok": 9,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Phillip Jeffries": {
+   "products": 7,
+   "active": 7,
+   "ok": 0,
+   "missing_min": 7,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWJP-11882",
+     "handle": "dwjp-11882-philip-jeffries-chain-mail-platinum-sword-5855"
+    },
+    {
+     "sku": "DWJP-11886",
+     "handle": "dwjp-11886-philip-jeffries-rivets-chrome-on-blue-linen-repeat-11-33-28-8cmv-x-11-3328-8cm-h-5872"
+    },
+    {
+     "sku": "DWJP-11889",
+     "handle": "dwjp-11889-philip-jeffries-rivets-nickel-on-marble-linen-repeat-11-33-28-8cmv-x-11-3328-8cm-h-5874"
+    },
+    {
+     "sku": "DWJP-13156",
+     "handle": "dwjp-13156-philip-jeffries-haiku-beige-flourish-on-manicured-white-zen-washi-11-panel-height-mural-repeat-264-670-6-cm-h-9010"
+    },
+    {
+     "sku": "DWJP-13178",
+     "handle": "dwjp-13178-philip-jeffries-haiku-red-rejuvination-on-venetian-glass-glam-grass-11-panel-height-mural-repeat-264-670-6-cm-h-9020"
+    }
+   ]
+  },
+  "Phyllis Morris": {
+   "products": 3,
+   "active": 3,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 3,
+   "sample_missing": []
+  },
+  "Cole & Son": {
+   "products": 5,
+   "active": 3,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 3,
+   "sample_missing": []
+  },
+  "Baker Lifestyle": {
+   "products": 3,
+   "active": 3,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 2,
+   "sample_missing": [
+    {
+     "sku": "DWKK-150010",
+     "handle": "kashmira-indigo-baker-lifestyle"
+    }
+   ]
+  },
+  "Brunschwig & Fils": {
+   "products": 3,
+   "active": 3,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 3,
+   "sample_missing": []
+  },
+  "Caroline Cecil Textiles": {
+   "products": 3,
+   "active": 3,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 2,
+   "sample_missing": [
+    {
+     "sku": "DWKK-150545",
+     "handle": "raja-wp-grey-caroline-cecil-textiles"
+    }
+   ]
+  },
+  "Clarke and Clarke": {
+   "products": 3,
+   "active": 3,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 2,
+   "sample_missing": [
+    {
+     "sku": "DWKK-150783",
+     "handle": "lost-adventure-midnight-wp-clarke-and-clarke"
+    }
+   ]
+  },
+  "Gaston Y Daniela": {
+   "products": 2,
+   "active": 2,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 2,
+   "sample_missing": []
+  },
+  "Kravet Couture": {
+   "products": 2,
+   "active": 2,
+   "ok": 0,
+   "missing_min": 2,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-143582",
+     "handle": "songbird-dawn-kravet-couture"
+    },
+    {
+     "sku": "DWKK-153586",
+     "handle": "songbird-sunset-kravet-couture"
+    }
+   ]
+  },
+  "Kravet Design": {
+   "products": 2,
+   "active": 2,
+   "ok": 0,
+   "missing_min": 2,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-143879",
+     "handle": "kravet-design-w3606-5-kravet-design"
+    },
+    {
+     "sku": "DWKK-153878",
+     "handle": "kravet-design-w3606-3-kravet-design"
+    }
+   ]
+  },
+  "Malibu Walls": {
+   "products": 2,
+   "active": 2,
+   "ok": 0,
+   "missing_min": 2,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWBR-170664",
+     "handle": "intrepid-light-grey-dwbr-170664"
+    },
+    {
+     "sku": "DWBR-170665",
+     "handle": "intrepid-aqua-dwbr-170665"
+    }
+   ]
+  },
+  "Glambeads by DW": {
+   "products": 2,
+   "active": 1,
+   "ok": 1,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Roberto Cavalli": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWRC-140009",
+     "handle": "dwrc-140009-designer-wallcobverings"
+    }
+   ]
+  },
+  "Ralph Lauren": {
+   "products": 1,
+   "active": 1,
+   "ok": 1,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "G P & J Baker": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-152907",
+     "handle": "tall-trees-delft-blue-g-p-j-baker"
+    }
+   ]
+  },
+  "Lee Jofa Modern": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-155016",
+     "handle": "hutch-raffia-ivory-lee-jofa-modern"
+    }
+   ]
+  },
+  "Mulberry": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 1,
+   "sample_missing": []
+  },
+  "Scion": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-155304",
+     "handle": "parlour-palm-scion"
+    }
+   ]
+  },
+  "Threads": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-155345",
+     "handle": "fallingwater-charcoal-threads"
+    }
+   ]
+  },
+  "Winfield Thybony": {
+   "products": 1,
+   "active": 1,
+   "ok": 0,
+   "missing_min": 1,
+   "min_not2": 0,
+   "sample_missing": [
+    {
+     "sku": "DWKK-156194",
+     "handle": "compass-clay-winfield-thybony"
+    }
+   ]
+  },
+  "Koroseal": {
+   "products": 1,
+   "active": 1,
+   "ok": 1,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Fentucci Wallpaper": {
+   "products": 4,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Florence Broadhurst": {
+   "products": 24,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Glass Beaded": {
+   "products": 14,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Martyn Lawrence Bullard": {
+   "products": 12,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Scalamandre": {
+   "products": 1,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Armani Casa": {
+   "products": 215,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  },
+  "Daisy Bennett": {
+   "products": 1,
+   "active": 0,
+   "ok": 0,
+   "missing_min": 0,
+   "min_not2": 0,
+   "sample_missing": []
+  }
+ },
+ "odd_qty_orders": [
+  {
+   "order": "#32392",
+   "created": "2026-06-18T21:36:14Z",
+   "source": "web",
+   "sku": "DWTT-81070",
+   "vendor": "Thibaut",
+   "qty": 3
+  },
+  {
+   "order": "#32418",
+   "created": "2026-06-22T14:57:30Z",
+   "source": "web",
+   "sku": "ROP-73260",
+   "vendor": "Romo",
+   "qty": 1
+  },
+  {
+   "order": "#32486",
+   "created": "2026-06-30T16:20:06Z",
+   "source": "web",
+   "sku": "DWTT-80064",
+   "vendor": "Thibaut",
+   "qty": 1
+  },
+  {
+   "order": "#32487",
+   "created": "2026-06-30T16:32:02Z",
+   "source": "shopify_draft_order",
+   "sku": "DWTT-80064",
+   "vendor": "Thibaut",
+   "qty": 1
+  },
+  {
+   "order": "#32494",
+   "created": "2026-06-30T21:31:35Z",
+   "source": "web",
+   "sku": "DWTT-80707",
+   "vendor": "Thibaut",
+   "qty": 3
+  },
+  {
+   "order": "#32500",
+   "created": "2026-07-01T16:41:46Z",
+   "source": "shopify_draft_order",
+   "sku": "DWTT-80707",
+   "vendor": "Thibaut",
+   "qty": 1
+  },
+  {
+   "order": "#32512",
+   "created": "2026-07-02T12:45:08Z",
+   "source": "web",
+   "sku": "DWJS-14130",
+   "vendor": "Jeffrey Stevens",
+   "qty": 1
+  }
+ ]
+}
\ No newline at end of file

← 7590d2f5 sangetsu: full per-colorway build — 19,463 staged records (S  ·  back to Designer Wallcoverings  ·  Thibaut wave-2 backfill FULL RUN complete: 894/1341 PDP-conf e382b648 →