[object Object]

← back to Designer Wallcoverings

auto-save: 2026-06-24T09:56:09 (5 files) — shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl vendor-scrapers/china-seas-refresh pending-approval/burst_twil_naturals.py

34951aa43a179f58fa14f68a5b0e8b4581691aec · 2026-06-24 09:56:16 -0700 · Steve Abrams

Files touched

Diff

commit 34951aa43a179f58fa14f68a5b0e8b4581691aec
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jun 24 09:56:16 2026 -0700

    auto-save: 2026-06-24T09:56:09 (5 files) — shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl vendor-scrapers/china-seas-refresh pending-approval/burst_twil_naturals.py
---
 pending-approval/burst_twil_naturals.py            | 146 +++++++++++++++
 shopify/scripts/cadence/data/cadence-cursor.json   |   2 +-
 .../cadence/data/cadence-plan-am-2026-06-24.json   | 208 +++++++++++----------
 .../cadence/data/upload-restore-2026-06-24.jsonl   |  18 ++
 4 files changed, 274 insertions(+), 100 deletions(-)

diff --git a/pending-approval/burst_twil_naturals.py b/pending-approval/burst_twil_naturals.py
new file mode 100644
index 00000000..5990d359
--- /dev/null
+++ b/pending-approval/burst_twil_naturals.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+"""
+burst_twil_naturals.py — raw burst-create the 42 NEW Fentucci/TWIL grasscloth
+products on Shopify (Steve-authorized override of cadence-only, 2026-06-24).
+
+Each product: DRAFT status (activation gate — no publish without confirmed cost/
+full specs), Sample + Roll variants, image(s), description, and FULL metafields.
+Idempotent: skips any dw_sku that already exists. Dedup already done upstream
+(only genuinely-new patterns are in /tmp/burst_records.json).
+
+  DRY (default): bash/python preview, no writes.
+  CONFIRM=1 python3 burst_twil_naturals.py   -> creates live (draft) products.
+"""
+import os, sys, json, time, urllib.request, urllib.parse
+
+SHOP="designer-laboratory-sandbox.myshopify.com"; API="2024-10"
+DATA="/tmp/burst_records.json"
+SAMPLE_PRICE="4.25"
+DRY = os.environ.get("CONFIRM","0") != "1"
+
+TOKEN=os.environ.get("SHOPIFY_ADMIN_TOKEN","")
+if not TOKEN:
+    for line in open(os.path.expanduser("~/Projects/secrets-manager/.env")):
+        if line.startswith("SHOPIFY_ADMIN_TOKEN="):
+            TOKEN=line.strip().split("=",1)[1]; break
+assert TOKEN, "no SHOPIFY_ADMIN_TOKEN"
+BASE=f"https://{SHOP}/admin/api/{API}"
+H={"X-Shopify-Access-Token":TOKEN,"Content-Type":"application/json"}
+
+def api(method, path, payload=None):
+    data=json.dumps(payload).encode() if payload is not None else None
+    req=urllib.request.Request(BASE+path, data=data, headers=H, method=method)
+    with urllib.request.urlopen(req, timeout=40) as r:
+        return r.status, json.loads(r.read().decode())
+
+def graphql(query, variables=None):
+    payload={"query":query,"variables":variables or {}}
+    st,res=api("POST","/graphql.json",payload)
+    return res
+
+_PUBS=None
+def all_publication_ids():
+    global _PUBS
+    if _PUBS is None:
+        res=graphql("{ publications(first:50){edges{node{id name}}} }")
+        _PUBS=[e["node"]["id"] for e in res.get("data",{}).get("publications",{}).get("edges",[])]
+    return _PUBS
+
+def publish_all_channels(product_id):
+    gid=f"gid://shopify/Product/{product_id}"
+    pubs=[{"publicationId":p} for p in all_publication_ids()]
+    q="""mutation pub($id:ID!,$input:[PublicationInput!]!){ publishablePublish(id:$id, input:$input){ userErrors{message} } }"""
+    res=graphql(q, {"id":gid,"input":pubs})
+    errs=res.get("data",{}).get("publishablePublish",{}).get("userErrors",[])
+    return len(pubs), errs
+
+def title_case(s): return " ".join(w[:1].upper()+w[1:].lower() if w else w for w in (s or "").split())
+
+def sku_exists(dw_sku):
+    try:
+        st,res=api("GET", f"/products.json?fields=id&limit=1&handle={urllib.parse.quote(handle_for(dw_sku))}")
+        return False  # handle-based check is weak; rely on registry/dedup upstream
+    except Exception:
+        return False
+
+def handle_for(rec):
+    p=title_case(rec["pattern"]).lower().replace(" ","-"); c=(rec["color"] or "").lower().replace(" ","-")
+    return f"{p}{('-'+c) if c else ''}-grasscloth-wallcovering-fentucci"
+
+def metafields(rec):
+    mf=[]
+    def add(ns,key,val):
+        if val not in (None,"",): mf.append({"namespace":ns,"key":key,"value":str(val),"type":"single_line_text_field"})
+    add("global","width", rec.get("width") or "36 Inches")
+    add("global","length", rec.get("length") or "8 Yards")
+    add("global","unit_of_measure","Priced Per Single Roll")
+    add("global","Content","Natural Grasscloth")
+    add("global","repeat","Random Match")
+    add("global","Color-Way", title_case(rec.get("color")) if rec.get("color") else None)
+    add("global","Brand","Fentucci")
+    add("global","Collection","TWIL Naturals")
+    add("custom","color", title_case(rec.get("color")) if rec.get("color") else None)
+    add("custom","real_color_name", title_case(rec.get("color")) if rec.get("color") else None)
+    add("custom","manufacturer_sku", rec.get("mfr_sku"))
+    add("custom","pattern_name", title_case(rec.get("pattern")))
+    add("dwc","manufacturer_sku", rec.get("mfr_sku"))
+    add("dwc","pattern_name", title_case(rec.get("pattern")))
+    add("dwc","color", title_case(rec.get("color")) if rec.get("color") else None)
+    add("dwc","brand","Fentucci")
+    return mf
+
+INVENTORY=2026   # Steve: inventory 2026 for both variants
+
+def build(rec):
+    pat=title_case(rec["pattern"]) or (rec.get("mfr_sku") or "").strip()  # never blank: fall back to MFR SKU
+    col=title_case(rec["color"]) if rec.get("color") else ""
+    title=f"{pat}{(' '+col) if col else ''} Grasscloth Wallcovering | Fentucci".replace("Wallpaper","Wallcovering")
+    imgs=[{"src":u} for u in [rec.get("img1"),rec.get("img2")] if u]
+    price=rec.get("price") or None   # column O "DW Price" = sell price per single roll
+    inv=dict(inventory_management="shopify", inventory_quantity=INVENTORY)
+    variants=[{"option1":"Sample","sku":f"{rec['dw_sku']}-Sample","price":SAMPLE_PRICE, **inv}]
+    roll={"option1":"Roll","sku":rec["dw_sku"], **inv}
+    if price: roll["price"]=price
+    variants.append(roll)
+    # ACTIVE only if it has a sell price; unpriced stay draft (can't sell unpriced)
+    status="active" if price else "draft"
+    tags=["Grasscloth","Natural Wallcovering","Fentucci","TWIL Naturals", f"color:{col}" if col else "", "display_variant", "Needs-Cost" if not price else ""]
+    return {"product":{
+        "title":title,"body_html":rec.get("description") or "",
+        "vendor":"Fentucci","product_type":"Wallcovering","status":status,
+        "published_scope":"global",
+        "tags":", ".join(t for t in tags if t),
+        "options":[{"name":"Title"}],
+        "images":imgs,"variants":variants,"metafields":metafields(rec),
+    }}
+
+def main():
+    recs=json.load(open(DATA))
+    print(f"{len(recs)} TWIL grasscloth products | mode: {'DRY-RUN' if DRY else 'LIVE CREATE (draft)'}")
+    created=0; skipped=0
+    for rec in recs:
+        payload=build(rec)
+        p=payload["product"]
+        if DRY:
+            print(f"  [dry] {rec['dw_sku']:14} {p['title'][:44]:44} | {p['status']:6} {len(p['variants'])}v inv{INVENTORY} {len(p['metafields'])}mf price={rec.get('price') or 'NONE'}")
+            continue
+        try:
+            st,res=api("POST","/products.json",payload)
+            pid=res.get("product",{}).get("id")
+            msg=f"  created {rec['dw_sku']} -> {pid} ({p['status']})"
+            if p["status"]=="active":
+                n,errs=publish_all_channels(pid)
+                msg+=f" | published to {n} channels" + (f" ERR:{errs}" if errs else "")
+            print(msg); created+=1
+            time.sleep(0.6)
+        except Exception as e:
+            body=getattr(e,'read',lambda:b'')() if hasattr(e,'read') else b''
+            print(f"  ERROR {rec['dw_sku']}: {e} {body[:200]}")
+    if DRY:
+        active=sum(1 for r in recs if r.get('price')); draft=len(recs)-active
+        print(f"\nDRY-RUN — would create {active} ACTIVE (all channels, inv {INVENTORY}) + {draft} DRAFT (no sheet price). Re-run with CONFIRM=1.")
+    else:
+        print(f"\nDONE — created {created} products. Active ones published to all sales channels with inventory {INVENTORY}.")
+
+if __name__=="__main__":
+    main()
diff --git a/shopify/scripts/cadence/data/cadence-cursor.json b/shopify/scripts/cadence/data/cadence-cursor.json
index 2efc43f7..0099425f 100644
--- a/shopify/scripts/cadence/data/cadence-cursor.json
+++ b/shopify/scripts/cadence/data/cadence-cursor.json
@@ -1,5 +1,5 @@
 {
- "idx": 4,
+ "idx": 10,
  "lastSlot": "am",
  "lastRun": "2026-06-24"
 }
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
index 41ab3963..217221bc 100644
--- a/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
+++ b/shopify/scripts/cadence/data/cadence-plan-am-2026-06-24.json
@@ -1,172 +1,182 @@
 [
  {
-  "vendor": "Plains",
-  "dw_sku": "DWYP-1000003",
-  "cost": 0,
-  "retail": 0,
+  "vendor": "Newwall",
+  "dw_sku": "DWXW-1005026",
+  "cost": 156,
+  "retail": 282.35,
   "sample": "4.25",
-  "sampleOnly": true,
-  "title": "Bahama Cloth II, Salmon Wallcoverings | Plains",
+  "sampleOnly": false,
+  "title": "Huipil Wine, Wine Wallcoverings | Newwall",
   "willActivate": true
  },
  {
-  "vendor": "Plains",
-  "dw_sku": "DWYP-1000004",
-  "cost": 0,
-  "retail": 0,
+  "vendor": "Newwall",
+  "dw_sku": "DWXW-1005027",
+  "cost": 156,
+  "retail": 282.35,
   "sample": "4.25",
-  "sampleOnly": true,
-  "title": "Bahama Cloth II, Lavender Wallcoverings | Plains",
+  "sampleOnly": false,
+  "title": "Sumba Cream, Cream Wallcoverings | Newwall",
   "willActivate": true
  },
  {
-  "vendor": "Plains",
-  "dw_sku": "DWYP-1000005",
-  "cost": 0,
-  "retail": 0,
+  "vendor": "Newwall",
+  "dw_sku": "DWXW-1005028",
+  "cost": 156,
+  "retail": 282.35,
   "sample": "4.25",
-  "sampleOnly": true,
-  "title": "Bahama Cloth II, Pacific Blue Wallcoverings | Plains",
+  "sampleOnly": false,
+  "title": "Sumba White, White Wallcoverings | Newwall",
   "willActivate": true
  },
  {
-  "vendor": "Grasscloth",
-  "dw_sku": "DWRA-1300003",
-  "cost": 0,
-  "retail": 0,
+  "vendor": "Brewster & York",
+  "dw_sku": "DWBR-170679",
+  "cost": 35,
+  "retail": 63.35,
   "sample": "4.25",
-  "sampleOnly": true,
-  "title": "Enchanted Bamboo, One Color Black on Cream Grasscloth Wallcoverings | Grasscloth",
-  "willActivate": false
+  "sampleOnly": false,
+  "title": "Charlise, Blue Wallcoverings | Brewster & York",
+  "willActivate": true
  },
  {
-  "vendor": "Grasscloth",
-  "dw_sku": "DWRA-1300004",
-  "cost": 0,
-  "retail": 0,
+  "vendor": "Brewster & York",
+  "dw_sku": "DWBR-170680",
+  "cost": 69.99,
+  "retail": 126.68,
   "sample": "4.25",
-  "sampleOnly": true,
-  "title": "Enchanted Bamboo, One Color Black on Hay Grasscloth Wallcoverings | Grasscloth",
-  "willActivate": false
+  "sampleOnly": false,
+  "title": "Desiree, White Wallcoverings | Brewster & York",
+  "willActivate": true
  },
  {
-  "vendor": "Romo",
-  "dw_sku": "DWRM-240054",
-  "cost": 408.1035,
-  "retail": 738.65,
+  "vendor": "Brewster & York",
+  "dw_sku": "DWBR-170681",
+  "cost": 90,
+  "retail": 162.9,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Kami, Pearl Wallcoverings | Romo",
+  "title": "Anna, Dark Blue Wallcoverings | Brewster & York",
   "willActivate": true
  },
  {
-  "vendor": "Romo",
-  "dw_sku": "DWRM-240055",
-  "cost": 408.1035,
-  "retail": 738.65,
+  "vendor": "Kravet",
+  "dw_sku": "DWKK-102052",
+  "cost": 59.95,
+  "retail": 89.93,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Kami, Powder Wallcoverings | Romo",
+  "title": "Kravet Smart, Beige Wallcoverings | Kravet",
   "willActivate": true
  },
  {
-  "vendor": "Romo",
-  "dw_sku": "DWRM-240059",
-  "cost": 408.1035,
-  "retail": 738.65,
+  "vendor": "Kravet",
+  "dw_sku": "DWKK-102053",
+  "cost": 59.95,
+  "retail": 89.93,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Kami, Caspian Wallcoverings | Romo",
+  "title": "Kravet Smart, Off-White Wallcoverings | Kravet",
   "willActivate": true
  },
  {
-  "vendor": "Thibaut",
-  "dw_sku": "DWTT-73420",
-  "cost": 62.1,
-  "retail": 112.4,
+  "vendor": "Kravet",
+  "dw_sku": "DWKK-102054",
+  "cost": 59.95,
+  "retail": 89.93,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Onda, Metallic Gold on Cream Wallcoverings | Thibaut",
+  "title": "Kravet Smart, Beige Wallcoverings | Kravet",
   "willActivate": true
  },
  {
-  "vendor": "Thibaut",
-  "dw_sku": "DWTT-73421",
-  "cost": 56.7,
-  "retail": 102.62,
+  "vendor": "Schumacher",
+  "dw_sku": "DWLK-805260",
+  "cost": 68,
+  "retail": 123.08,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Burmese, Denim Blue Wallcoverings | Thibaut",
+  "title": "Del Tesoro, Purple & Coral Wallcoverings | Schumacher",
   "willActivate": true
  },
  {
-  "vendor": "Thibaut",
-  "dw_sku": "DWTT-73422",
-  "cost": 56.7,
-  "retail": 102.62,
+  "vendor": "Schumacher",
+  "dw_sku": "DWLK-805270",
+  "cost": 68,
+  "retail": 123.08,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Burmese, Metallic on Beige Wallcoverings | Thibaut",
+  "title": "Les Fougeres, Document Wallcoverings | Schumacher",
   "willActivate": true
  },
  {
-  "vendor": "Zoffany",
-  "dw_sku": "DWZF-187029",
-  "cost": 281,
-  "retail": 508.6,
+  "vendor": "Schumacher",
+  "dw_sku": "DWLK-805280",
+  "cost": 68,
+  "retail": 123.08,
   "sample": "4.25",
   "sampleOnly": false,
-  "title": "Abstract 1928, Taupe Wallcoverings | Zoffany",
+  "title": "Les Fougeres, Spring Wallcoverings | Schumacher",
   "willActivate": true
  },
  {
-  "vendor": "Zoffany",
-  "dw_sku": "DWZF-187032",
-  "cost": 177,
-  "retail": 320.36,
+  "vendor": "Quadrille",
+  "dw_sku": "DWQC-600012",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Watered Silk, Platinum Grey Wallcoverings | Zoffany",
+  "sampleOnly": true,
+  "title": "Rajah Paisley, Multi Greens on Linen Wallcoverings | Quadrille",
   "willActivate": true
  },
  {
-  "vendor": "Zoffany",
-  "dw_sku": "DWZF-187034",
-  "cost": 140,
-  "retail": 253.39,
+  "vendor": "Quadrille",
+  "dw_sku": "DWQC-600013",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Persian Tulip, Blue Stone Wallcoverings | Zoffany",
+  "sampleOnly": true,
+  "title": "Rajah Paisley, Multi New Blue on Linen Wallcoverings | Quadrille",
   "willActivate": true
  },
  {
-  "vendor": "Designtex",
-  "dw_sku": "DWDX-220321",
-  "cost": 22,
-  "retail": 39.82,
+  "vendor": "Quadrille",
+  "dw_sku": "DWQC-600014",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Thatch, Zebra Wallcoverings | Designtex",
-  "willActivate": false
+  "sampleOnly": true,
+  "title": "Rajah Paisley, Multi Lavender / Rouge on Linen Wallcoverings | Quadrille",
+  "willActivate": true
  },
  {
-  "vendor": "Designtex",
-  "dw_sku": "DWDX-220322",
-  "cost": 22,
-  "retail": 39.82,
+  "vendor": "Alan Campbell",
+  "dw_sku": "DWAK-700006",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Thatch, Nighttime Wallcoverings | Designtex",
+  "sampleOnly": true,
+  "title": "Inca Gold on Tint Wallcoverings | Alan Campbell",
   "willActivate": true
  },
  {
-  "vendor": "Designtex",
-  "dw_sku": "DWDX-220323",
-  "cost": 22,
-  "retail": 39.82,
+  "vendor": "Alan Campbell",
+  "dw_sku": "DWAK-700007",
+  "cost": 0,
+  "retail": 0,
   "sample": "4.25",
-  "sampleOnly": false,
-  "title": "Thatch, Sand Wallcoverings | Designtex",
-  "willActivate": false
+  "sampleOnly": true,
+  "title": "Jungle Green on Tint Wallcoverings | Alan Campbell",
+  "willActivate": true
+ },
+ {
+  "vendor": "Alan Campbell",
+  "dw_sku": "DWAK-700008",
+  "cost": 0,
+  "retail": 0,
+  "sample": "4.25",
+  "sampleOnly": true,
+  "title": "French Blue on Tint Wallcoverings | Alan Campbell",
+  "willActivate": true
  }
 ]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
index eed02425..c304db35 100644
--- a/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
+++ b/shopify/scripts/cadence/data/upload-restore-2026-06-24.jsonl
@@ -111,3 +111,21 @@
 {"table":"designtex_catalog","mfr_sku":"8290152","dw_sku":"DWDX-220321","shopify_product_id":"7867403337779","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-06-24T15-40-01-197Z","ts":"2026-06-24T15:40:58.335Z"}
 {"table":"designtex_catalog","mfr_sku":"8290153","dw_sku":"DWDX-220322","shopify_product_id":"7867403403315","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T15-40-01-197Z","ts":"2026-06-24T15:41:01.992Z"}
 {"table":"designtex_catalog","mfr_sku":"8290251","dw_sku":"DWDX-220323","shopify_product_id":"7867403436083","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-06-24T15-40-01-197Z","ts":"2026-06-24T15:41:04.486Z"}
+{"table":"newwall_catalog","mfr_sku":"A00821","dw_sku":"DWXW-1005026","shopify_product_id":"7867412873267","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:07.781Z"}
+{"table":"newwall_catalog","mfr_sku":"A00822","dw_sku":"DWXW-1005027","shopify_product_id":"7867412906035","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:12.053Z"}
+{"table":"newwall_catalog","mfr_sku":"A00823","dw_sku":"DWXW-1005028","shopify_product_id":"7867412971571","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:17.187Z"}
+{"table":"brewster_catalog","mfr_sku":"2657-22252","dw_sku":"DWBR-170679","shopify_product_id":"7867413004339","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:21.341Z"}
+{"table":"brewster_catalog","mfr_sku":"2657-22259","dw_sku":"DWBR-170680","shopify_product_id":"7867413037107","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:25.331Z"}
+{"table":"brewster_catalog","mfr_sku":"2999-55032","dw_sku":"DWBR-170681","shopify_product_id":"7867413135411","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:29.656Z"}
+{"table":"kravet_catalog","mfr_sku":"35361.1.0","dw_sku":"DWKK-102052","shopify_product_id":"7424886014003","action":"linked-existing","activated":false,"batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:30.672Z"}
+{"table":"kravet_catalog","mfr_sku":"35361.101.0","dw_sku":"DWKK-102053","shopify_product_id":"7424886112307","action":"linked-existing","activated":false,"batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:31.469Z"}
+{"table":"kravet_catalog","mfr_sku":"35361.111.0","dw_sku":"DWKK-102054","shopify_product_id":"7424886177843","action":"linked-existing","activated":false,"batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:32.276Z"}
+{"table":"schumacher_catalog","mfr_sku":"5010652","dw_sku":"DWLK-805260","shopify_product_id":"7867413200947","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:36.515Z"}
+{"table":"schumacher_catalog","mfr_sku":"5010660","dw_sku":"DWLK-805270","shopify_product_id":"7867413233715","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:40.566Z"}
+{"table":"schumacher_catalog","mfr_sku":"5010661","dw_sku":"DWLK-805280","shopify_product_id":"7867413266483","action":"created","activated":true,"published":true,"sampleOnly":false,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:44.563Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"304290F-07","dw_sku":"DWQC-600012","shopify_product_id":"7867413299251","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:48.226Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"304290F-03","dw_sku":"DWQC-600013","shopify_product_id":"7867413332019","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:52.649Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"304290F-05","dw_sku":"DWQC-600014","shopify_product_id":"7867413364787","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:40:56.535Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC850-12","dw_sku":"DWAK-700006","shopify_product_id":"7867413430323","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:41:00.598Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC850-06","dw_sku":"DWAK-700007","shopify_product_id":"7867413463091","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:41:04.940Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"AC850-05","dw_sku":"DWAK-700008","shopify_product_id":"7867413495859","action":"created","activated":true,"published":true,"sampleOnly":true,"status":"ACTIVE","batch_id":"upload-am-2026-06-24T16-40-00-144Z","ts":"2026-06-24T16:41:08.479Z"}

← 784bf419 auto-save: 2026-06-24T08:55:52 (4 files) — shopify/scripts/c  ·  back to Designer Wallcoverings  ·  cadence: tag new ACTIVE products 'New Arrival' inline so fee f41456c0 →