[object Object]

← back to Maya Width Fix

TK-11029 phase2: recover 17 multi-width Maya widths (verified vendor multi-width strings); 2 cozy 404s left needs-rep; reversible restore-map

939743363e53596c928c855c186ce4c0dcf5fcca · 2026-08-31 11:04:45 -0700 · Steve Abrams

Files touched

Diff

commit 939743363e53596c928c855c186ce4c0dcf5fcca
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 31 11:04:45 2026 -0700

    TK-11029 phase2: recover 17 multi-width Maya widths (verified vendor multi-width strings); 2 cozy 404s left needs-rep; reversible restore-map
---
 backfill-multiwidth.py                             |  92 ++++++++
 ...-map-multiwidth-2026-08-31T11-04-03.257729.json | 257 +++++++++++++++++++++
 ...-map-multiwidth-2026-08-31T11-04-09.472171.json | 257 +++++++++++++++++++++
 3 files changed, 606 insertions(+)

diff --git a/backfill-multiwidth.py b/backfill-multiwidth.py
new file mode 100644
index 0000000..044ab85
--- /dev/null
+++ b/backfill-multiwidth.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+"""
+TK-11029 phase 2: recover the 16 multi-width Maya rows still polluted with the
+'=device-width...' placeholder. Verified $0 fetch of the vendor collection pages
+shows each of these patterns is genuinely offered in TWO roll widths and EVERY
+colorway is available in BOTH — width is a pattern-level attribute, not per-SKU.
+So we store the vendor's REAL verified full multi-width string (accurate, not a
+guess). The 2 x 404 collections (cozy-nestle, cozy-bed-fellow) are truly gone
+from Maya's site -> left polluted-flagged, needs rep/PDF (Steve's rule: no guess).
+
+Reversible: writes a restore-map (old value per dw_sku) BEFORE any UPDATE.
+"""
+import json, subprocess, re, datetime, sys, os
+
+PSQL = ["psql", "-h", "/tmp", "-d", "dw_unified", "-At", "-F", "\t"]
+HERE = os.path.dirname(os.path.abspath(__file__))
+
+# Vendor's REAL verified width text, captured from the live collection pages
+# (curl $0, HTTP 200, specs-table "Width" row) 2026-08-31.
+COLLECTION_WIDTH = {
+    "entwine-inlet-linen":  '27" Width Approx. 27 in untrimmed (68.6 cm); 54" Width Approx. 54 in untrimmed (137.2 cm)',
+    "entwine-serene-silk":  '27" Width Approx. 27 in untrimmed (68.6 cm); 54" Width Approx. 54 in untrimmed (137.2 cm)',
+    "wisping-weaves-montauk": '27" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)',
+    "ajiro-sunburst":       '15" Width Approx. 30 in untrimmed (76.2 cm); 18" Width Approx. 36 in untrimmed (91.4 cm)',
+}
+# These stay polluted (truly discontinued, 404, no web width):
+STILL_UNKNOWN_SLUGS = {"cozy-nestle", "cozy-bed-fellow"}
+
+def q(sql):
+    r = subprocess.run(PSQL + ["-c", sql], capture_output=True, text=True)
+    if r.returncode != 0:
+        print("SQL ERR:", r.stderr); sys.exit(1)
+    return [line.split("\t") for line in r.stdout.strip().split("\n") if line]
+
+def esc(s): return s.replace("'", "''")
+
+APPLY = "--apply" in sys.argv
+
+rows = q("""SELECT dw_sku, mfr_sku, width, coalesce(width_inches::text,''),
+                   split_part(product_url,'/collections/',2)
+            FROM maya_catalog WHERE width LIKE '%device-width%' ORDER BY dw_sku""")
+
+restore, updates, unknown = [], [], []
+for dw_sku, mfr_sku, old_w, old_wi, slug in rows:
+    if slug in COLLECTION_WIDTH:
+        new_w = COLLECTION_WIDTH[slug]
+        # multi-width => no single width_inches; leave NULL (ambiguous by design)
+        restore.append({"dw_sku": dw_sku, "mfr_sku": mfr_sku, "slug": slug,
+                        "old_width": old_w, "old_width_inches": old_wi})
+        updates.append({"dw_sku": dw_sku, "slug": slug, "new_width": new_w,
+                        "new_width_inches": None})
+    else:
+        unknown.append({"dw_sku": dw_sku, "mfr_sku": mfr_sku, "slug": slug,
+                        "reason": "collection 404 / discontinued on mayaromanoff.com; needs Maya rep/PDF"})
+
+ts = datetime.datetime.now().isoformat()
+rm = {"ts": ts, "ticket": "TK-11029", "phase": "2-multiwidth",
+      "table": "maya_catalog", "column": "width,width_inches",
+      "polluted_string": '=device-width, initial-scale=1">',
+      "total_polluted_before": len(rows), "to_fix": len(updates),
+      "still_unknown": len(unknown),
+      "restore_map": restore, "updates_planned": updates,
+      "still_unknown_rows": unknown,
+      "collection_widths": COLLECTION_WIDTH,
+      "note": "multi-width patterns: each colorway offered in BOTH widths; storing the "
+              "vendor's real verified multi-width string (accurate, not a guess). "
+              "width_inches left NULL (no single width). cozy-nestle/cozy-bed-fellow "
+              "404 on vendor site -> left polluted, needs rep."}
+path = os.path.join(HERE, f"restore-map-multiwidth-{ts.replace(':','-')}.json")
+json.dump(rm, open(path, "w"), indent=2)
+print("RESTORE-MAP:", path)
+print(f"total_polluted={len(rows)} to_fix={len(updates)} still_unknown={len(unknown)}")
+
+if not APPLY:
+    print("\nDRY-RUN (no --apply). Planned updates:")
+    for u in updates:
+        print(f"  {u['dw_sku']:12s} [{u['slug']}] -> {u['new_width'][:60]}...")
+    print("\nStill-unknown (left polluted):")
+    for u in unknown:
+        print(f"  {u['dw_sku']:12s} {u['mfr_sku']:12s} [{u['slug']}]")
+    sys.exit(0)
+
+n = 0
+for u in updates:
+    sql = (f"UPDATE maya_catalog SET width='{esc(u['new_width'])}', "
+           f"width_inches=NULL, updated_at=now() "
+           f"WHERE dw_sku='{esc(u['dw_sku'])}' AND width LIKE '%device-width%';")
+    r = subprocess.run(PSQL + ["-c", sql], capture_output=True, text=True)
+    if r.returncode != 0:
+        print("UPDATE ERR", u['dw_sku'], r.stderr); sys.exit(1)
+    n += 1
+print(f"APPLIED {n} row updates")
diff --git a/restore-map-multiwidth-2026-08-31T11-04-03.257729.json b/restore-map-multiwidth-2026-08-31T11-04-03.257729.json
new file mode 100644
index 0000000..4e2a560
--- /dev/null
+++ b/restore-map-multiwidth-2026-08-31T11-04-03.257729.json
@@ -0,0 +1,257 @@
+{
+  "ts": "2026-08-31T11:04:03.257729",
+  "ticket": "TK-11029",
+  "phase": "2-multiwidth",
+  "table": "maya_catalog",
+  "column": "width,width_inches",
+  "polluted_string": "=device-width, initial-scale=1\">",
+  "total_polluted_before": 19,
+  "to_fix": 17,
+  "still_unknown": 2,
+  "restore_map": [
+    {
+      "dw_sku": "DWMR-80016",
+      "mfr_sku": "MR-AS-3055-S",
+      "slug": "ajiro-sunburst",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80099",
+      "mfr_sku": "MR-FV-38407",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80100",
+      "mfr_sku": "MR-FV-38508",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80101",
+      "mfr_sku": "MR-FV-38510",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80102",
+      "mfr_sku": "MR-FV-38603",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80103",
+      "mfr_sku": "MR-FV-38604",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80104",
+      "mfr_sku": "MR-FV-38605",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80105",
+      "mfr_sku": "MR-FV-38606",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80106",
+      "mfr_sku": "MR-FV-38608",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80107",
+      "mfr_sku": "MR-FV-38667",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80108",
+      "mfr_sku": "MR-FV-40507",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80109",
+      "mfr_sku": "MR-FV-40508",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80110",
+      "mfr_sku": "MR-FV-40667",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80111",
+      "mfr_sku": "MR-FV-40670",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80221",
+      "mfr_sku": "MR-FV-31510",
+      "slug": "wisping-weaves-montauk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80222",
+      "mfr_sku": "MR-FV-31511",
+      "slug": "wisping-weaves-montauk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80223",
+      "mfr_sku": "MR-FV-31603",
+      "slug": "wisping-weaves-montauk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    }
+  ],
+  "updates_planned": [
+    {
+      "dw_sku": "DWMR-80016",
+      "slug": "ajiro-sunburst",
+      "new_width": "15\" Width Approx. 30 in untrimmed (76.2 cm); 18\" Width Approx. 36 in untrimmed (91.4 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80099",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80100",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80101",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80102",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80103",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80104",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80105",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80106",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80107",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80108",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80109",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80110",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80111",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80221",
+      "slug": "wisping-weaves-montauk",
+      "new_width": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80222",
+      "slug": "wisping-weaves-montauk",
+      "new_width": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80223",
+      "slug": "wisping-weaves-montauk",
+      "new_width": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+      "new_width_inches": null
+    }
+  ],
+  "still_unknown_rows": [
+    {
+      "dw_sku": "DWMR-80026",
+      "mfr_sku": "MR-CC-1506-H",
+      "slug": "cozy-bed-fellow",
+      "reason": "collection 404 / discontinued on mayaromanoff.com; needs Maya rep/PDF"
+    },
+    {
+      "dw_sku": "DWMR-80211",
+      "mfr_sku": "MR-CZ-2511",
+      "slug": "cozy-nestle",
+      "reason": "collection 404 / discontinued on mayaromanoff.com; needs Maya rep/PDF"
+    }
+  ],
+  "collection_widths": {
+    "entwine-inlet-linen": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+    "entwine-serene-silk": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+    "wisping-weaves-montauk": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+    "ajiro-sunburst": "15\" Width Approx. 30 in untrimmed (76.2 cm); 18\" Width Approx. 36 in untrimmed (91.4 cm)"
+  },
+  "note": "multi-width patterns: each colorway offered in BOTH widths; storing the vendor's real verified multi-width string (accurate, not a guess). width_inches left NULL (no single width). cozy-nestle/cozy-bed-fellow 404 on vendor site -> left polluted, needs rep."
+}
\ No newline at end of file
diff --git a/restore-map-multiwidth-2026-08-31T11-04-09.472171.json b/restore-map-multiwidth-2026-08-31T11-04-09.472171.json
new file mode 100644
index 0000000..643e697
--- /dev/null
+++ b/restore-map-multiwidth-2026-08-31T11-04-09.472171.json
@@ -0,0 +1,257 @@
+{
+  "ts": "2026-08-31T11:04:09.472171",
+  "ticket": "TK-11029",
+  "phase": "2-multiwidth",
+  "table": "maya_catalog",
+  "column": "width,width_inches",
+  "polluted_string": "=device-width, initial-scale=1\">",
+  "total_polluted_before": 19,
+  "to_fix": 17,
+  "still_unknown": 2,
+  "restore_map": [
+    {
+      "dw_sku": "DWMR-80016",
+      "mfr_sku": "MR-AS-3055-S",
+      "slug": "ajiro-sunburst",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80099",
+      "mfr_sku": "MR-FV-38407",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80100",
+      "mfr_sku": "MR-FV-38508",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80101",
+      "mfr_sku": "MR-FV-38510",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80102",
+      "mfr_sku": "MR-FV-38603",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80103",
+      "mfr_sku": "MR-FV-38604",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80104",
+      "mfr_sku": "MR-FV-38605",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80105",
+      "mfr_sku": "MR-FV-38606",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80106",
+      "mfr_sku": "MR-FV-38608",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80107",
+      "mfr_sku": "MR-FV-38667",
+      "slug": "entwine-inlet-linen",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80108",
+      "mfr_sku": "MR-FV-40507",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80109",
+      "mfr_sku": "MR-FV-40508",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80110",
+      "mfr_sku": "MR-FV-40667",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80111",
+      "mfr_sku": "MR-FV-40670",
+      "slug": "entwine-serene-silk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80221",
+      "mfr_sku": "MR-FV-31510",
+      "slug": "wisping-weaves-montauk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80222",
+      "mfr_sku": "MR-FV-31511",
+      "slug": "wisping-weaves-montauk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    },
+    {
+      "dw_sku": "DWMR-80223",
+      "mfr_sku": "MR-FV-31603",
+      "slug": "wisping-weaves-montauk",
+      "old_width": "=device-width, initial-scale=1\">",
+      "old_width_inches": "1"
+    }
+  ],
+  "updates_planned": [
+    {
+      "dw_sku": "DWMR-80016",
+      "slug": "ajiro-sunburst",
+      "new_width": "15\" Width Approx. 30 in untrimmed (76.2 cm); 18\" Width Approx. 36 in untrimmed (91.4 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80099",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80100",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80101",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80102",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80103",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80104",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80105",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80106",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80107",
+      "slug": "entwine-inlet-linen",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80108",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80109",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80110",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80111",
+      "slug": "entwine-serene-silk",
+      "new_width": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80221",
+      "slug": "wisping-weaves-montauk",
+      "new_width": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80222",
+      "slug": "wisping-weaves-montauk",
+      "new_width": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+      "new_width_inches": null
+    },
+    {
+      "dw_sku": "DWMR-80223",
+      "slug": "wisping-weaves-montauk",
+      "new_width": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+      "new_width_inches": null
+    }
+  ],
+  "still_unknown_rows": [
+    {
+      "dw_sku": "DWMR-80026",
+      "mfr_sku": "MR-CC-1506-H",
+      "slug": "cozy-bed-fellow",
+      "reason": "collection 404 / discontinued on mayaromanoff.com; needs Maya rep/PDF"
+    },
+    {
+      "dw_sku": "DWMR-80211",
+      "mfr_sku": "MR-CZ-2511",
+      "slug": "cozy-nestle",
+      "reason": "collection 404 / discontinued on mayaromanoff.com; needs Maya rep/PDF"
+    }
+  ],
+  "collection_widths": {
+    "entwine-inlet-linen": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+    "entwine-serene-silk": "27\" Width Approx. 27 in untrimmed (68.6 cm); 54\" Width Approx. 54 in untrimmed (137.2 cm)",
+    "wisping-weaves-montauk": "27\" untrimmed (68.6 cm), 6.75 sq ft/yd (0.63 sq m/yd); 54\" untrimmed (137.2 cm), 13.5 sq ft/yd (1.25 sq m/yd)",
+    "ajiro-sunburst": "15\" Width Approx. 30 in untrimmed (76.2 cm); 18\" Width Approx. 36 in untrimmed (91.4 cm)"
+  },
+  "note": "multi-width patterns: each colorway offered in BOTH widths; storing the vendor's real verified multi-width string (accurate, not a guess). width_inches left NULL (no single width). cozy-nestle/cozy-bed-fellow 404 on vendor site -> left polluted, needs rep."
+}
\ No newline at end of file

← 64817d4 TK-11029: fix polluted maya_catalog.width via specsTable re-  ·  back to Maya Width Fix  ·  TK-11029: read-only diagnosis + deterministic dry-run correc 3b407f5 →