← back to Designer Wallcoverings
auto-save: 2026-06-23T16:22:58 (13 files) — audits/designtex-uom-fix/body-html-backup.json audits/designtex-uom-fix/fill-specs-ledger.json shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbak shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbak shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbak
11c5de3af314e0ef59e8617930bfbc5e3ce5630b · 2026-06-23 16:23:03 -0700 · Steve Abrams
Files touched
M audits/designtex-uom-fix/body-html-backup.jsonA audits/designtex-uom-fix/fill-live-specs-dryrun.jsonA audits/designtex-uom-fix/fill-live-specs.mjsM audits/designtex-uom-fix/fill-specs-ledger.jsonM shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbakM shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbakM shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbakM shopify/collection-hero-fix/backups/config_settings_schema.json.live-142250278963.pushbakM shopify/collection-hero-fix/backups/sections_collection.liquid.live-142250278963.pushbakM shopify/collection-hero-fix/dw-hero-rotator.jsA shopify/collection-hero-fix/verify-rehome-live-dom.jsA vendor-scrapers/quadrille-house/enrich-supervisor.sh
Diff
commit 11c5de3af314e0ef59e8617930bfbc5e3ce5630b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Jun 23 16:23:03 2026 -0700
auto-save: 2026-06-23T16:22:58 (13 files) — audits/designtex-uom-fix/body-html-backup.json audits/designtex-uom-fix/fill-specs-ledger.json shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbak shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbak shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbak
---
audits/designtex-uom-fix/body-html-backup.json | 52 +-
.../designtex-uom-fix/fill-live-specs-dryrun.json | 2841 ++++++++++++++++++++
audits/designtex-uom-fix/fill-live-specs.mjs | 107 +
audits/designtex-uom-fix/fill-specs-ledger.json | 250 ++
.../assets_custom.css.dev-143947038771.pushbak | 58 +-
.../assets_custom.css.live-142250278963.pushbak | 127 +
...g_settings_schema.json.dev-143947038771.pushbak | 9 +-
..._settings_schema.json.live-142250278963.pushbak | 15 +
...ons_collection.liquid.live-142250278963.pushbak | 5 +-
shopify/collection-hero-fix/dw-hero-rotator.js | 139 +-
.../collection-hero-fix/verify-rehome-live-dom.js | 145 +
.../quadrille-house/enrich-supervisor.sh | 20 +
12 files changed, 3708 insertions(+), 60 deletions(-)
diff --git a/audits/designtex-uom-fix/body-html-backup.json b/audits/designtex-uom-fix/body-html-backup.json
index d363e660..0438dc2e 100644
--- a/audits/designtex-uom-fix/body-html-backup.json
+++ b/audits/designtex-uom-fix/body-html-backup.json
@@ -248,5 +248,55 @@
"gid://shopify/Product/7866018267187": "<p>Gilded in Metal is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
"gid://shopify/Product/7866018299955": "<p>Gilded in Beige is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
"gid://shopify/Product/7866018332723": "<p>Gilded in Fawn is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
- "gid://shopify/Product/7866018365491": "<p>Gilded in Flaxen is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>"
+ "gid://shopify/Product/7866018365491": "<p>Gilded in Flaxen is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866018398259": "<p>Gilded in Chestnut is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866018431027": "<p>Gilded in Gold is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866018463795": "<p>Gilded in Mist is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040778803": "<p>Gilded in Teal is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040811571": "<p>Gilded in Raincloud is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 0.50 inches x H 2.50 inches (V 1.27 cm x H 6.35 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040844339": "<p>Cottage in Frost is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040877107": "<p>Cottage in Swan is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040909875": "<p>Cottage in Gull is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040942643": "<p>Cottage in Sand is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866040975411": "<p>Cottage in Durum is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866041008179": "<p>Cottage in Ecru is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056048691": "<p>Cottage in Gift is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056081459": "<p>Cottage in Grain is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056114227": "<p>Cottage in Chai is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056146995": "<p>Cottage in Turmeric is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056179763": "<p>Cottage in Feather is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056212531": "<p>Cottage in Spa is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056245299": "<p>Cottage in Drizzle is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866056278067": "<p>Cottage in Oceanic is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100121651": "<p>Cottage in Lapis is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100154419": "<p>Cottage in Rutabaga is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100187187": "<p>Bristle in Alabaster is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100219955": "<p>Bristle in Snow is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100252723": "<p>Bristle in Linen is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100285491": "<p>Bristle in Fossil is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100318259": "<p>Bristle in Bedrock is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866100351027": "<p>Bristle in Quartz is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117193779": "<p>Bristle in Cloud is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117226547": "<p>Bristle in Mist is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117259315": "<p>Bristle in Windy is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117292083": "<p>Bristle in Storm is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117324851": "<p>Bristle in Wheat is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117357619": "<p>Bristle in Giftbox is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117390387": "<p>Bristle in Yellow Ochre is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866117423155": "<p>Bristle in Dewdrop is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231128115": "<p>Bristle in Agate is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231160883": "<p>Bristle in Canal is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231193651": "<p>Note in Cloudy is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 20.00 inches x H 13.50 inches (V 50.80 cm x H 34.29 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231226419": "<p>Note in Charcoal is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 20.00 inches x H 13.50 inches (V 50.80 cm x H 34.29 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231291955": "<p>Note in Birch is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 20.00 inches x H 13.50 inches (V 50.80 cm x H 34.29 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231324723": "<p>Note in Rain is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 20.00 inches x H 13.50 inches (V 50.80 cm x H 34.29 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231357491": "<p>Note in Marine is a designer wallcovering by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Repeat:</strong> V 20.00 inches x H 13.50 inches (V 50.80 cm x H 34.29 cm)</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866231390259": "<p>Pebble in Ecru is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866861322291": "<p>Pebble in Chalk is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866861387827": "<p>Pebble in Fancy is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866861420595": "<p>Pebble in Taupe is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866886881331": "<p>Pebble in Rocky is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866886914099": "<p>Pebble in Fog is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866886946867": "<p>Pebble in Stone is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>",
+ "gid://shopify/Product/7866902937651": "<p>Pebble in Hematite is a designer wallcovering from the Biophilia collection by Designtex. Priced per single roll.</p><ul>\n<li>\n<strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li>\n<li>\n<strong>Width:</strong> 54 Inches</li>\n<li>\n<strong>Sold By:</strong> Single Roll</li>\n</ul>"
}
\ No newline at end of file
diff --git a/audits/designtex-uom-fix/fill-live-specs-dryrun.json b/audits/designtex-uom-fix/fill-live-specs-dryrun.json
new file mode 100644
index 00000000..63430268
--- /dev/null
+++ b/audits/designtex-uom-fix/fill-live-specs-dryrun.json
@@ -0,0 +1,2841 @@
+{
+ "generated_at": "2026-06-23T23:07:04.223Z",
+ "execute": false,
+ "summary": {
+ "live": 299,
+ "planned_fields": 1133,
+ "wrote": 0,
+ "skipped": 50,
+ "errored": 0,
+ "noCanon": 0
+ },
+ "results": [
+ {
+ "sku": "DWDX-220000",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220001",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220002",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220003",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220004",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220005",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220006",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220007",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220008",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220009",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220010",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220011",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220012",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220013",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220014",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220015",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220016",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220017",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220018",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220019",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220020",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220021",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220022",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220023",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220024",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220025",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220026",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220027",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220028",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220029",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220030",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220031",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220032",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220033",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220034",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220035",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220037",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220038",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220039",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220040",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220041",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220042",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220043",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220044",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220045",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220046",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220047",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220048",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220049",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220050",
+ "status": "already-complete"
+ },
+ {
+ "sku": "DWDX-220051",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220052",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220053",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220054",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220055",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220056",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220057",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220058",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220059",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220060",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220061",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220062",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220065",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220066",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220068",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220069",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220070",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220071",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220072",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220074",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220079",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220080",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220081",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220082",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220083",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220084",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220085",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220086",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220087",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220089",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220090",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220091",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220092",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220093",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220094",
+ "status": "would-write",
+ "keys": [
+ "material",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220095",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220096",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220097",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220098",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220099",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220100",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220101",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220102",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220103",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220104",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220105",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220106",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220107",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220108",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220109",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220110",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220111",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220112",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220113",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220114",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220115",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220116",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220117",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220118",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220119",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220120",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220121",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220122",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220123",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220124",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220125",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220126",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220127",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220128",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220129",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220130",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220131",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220132",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220133",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220134",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220135",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220136",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220137",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220138",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220139",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220140",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220141",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220142",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220143",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220144",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220145",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220146",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220147",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220148",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220149",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220150",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220151",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220152",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220153",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220154",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220155",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220156",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220157",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220158",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220159",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220160",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220161",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220162",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220163",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220164",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220165",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220166",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220167",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220168",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220169",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220170",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220171",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220172",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220173",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220174",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220175",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220176",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220177",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220178",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220179",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220180",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220181",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220182",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220183",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220184",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220185",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220186",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220187",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220188",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220189",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220190",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220191",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220192",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220193",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220194",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220195",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220196",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220197",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220198",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220199",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220200",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220201",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220202",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220203",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220204",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220205",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220206",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220207",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220208",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220209",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220210",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220211",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220212",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220213",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220214",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220215",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220216",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220217",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220218",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220219",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220220",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220221",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220222",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220223",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220224",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220225",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220226",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220227",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220228",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220229",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220230",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220231",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220232",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220233",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220234",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220235",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220236",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220237",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220238",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220239",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220240",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220241",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220242",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220243",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220244",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220245",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220246",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220247",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220248",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220249",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220250",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220251",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220252",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220253",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220254",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220255",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220256",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220257",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220258",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220259",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220260",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220261",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220262",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220263",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220264",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220265",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220266",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220267",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220268",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220269",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220270",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220271",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220272",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220273",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220274",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220275",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220276",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220277",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220278",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220279",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220280",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220281",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220282",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220283",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220284",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220285",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220286",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220287",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220288",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220289",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220290",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220291",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220292",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220293",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220294",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220295",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220296",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220297",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220298",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220299",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220300",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220301",
+ "status": "would-write",
+ "keys": [
+ "repeat",
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220302",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220303",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220304",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220305",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220306",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220307",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ },
+ {
+ "sku": "DWDX-220308",
+ "status": "would-write",
+ "keys": [
+ "Contents",
+ "FLAMMABILITY",
+ "Cleaning-Code",
+ "Finish"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/audits/designtex-uom-fix/fill-live-specs.mjs b/audits/designtex-uom-fix/fill-live-specs.mjs
new file mode 100644
index 00000000..f177e221
--- /dev/null
+++ b/audits/designtex-uom-fix/fill-live-specs.mjs
@@ -0,0 +1,107 @@
+#!/usr/bin/env node
+// Step 3 completion: fill the MISSING structured spec metafields on the live Designtex
+// products from the now-complete canonical designtex_catalog (sourced via canonical-dwdx-specs.json).
+// Writes ONLY the global.* spec keys that are currently empty on a product (idempotent).
+// Keys: repeat, material, Contents, FLAMMABILITY, Cleaning-Code, Finish, Country-of-Origin.
+// Gated relabel-only metadata write; price/title/status UNTOUCHED. $0 (Shopify API, no AI).
+// DRY-RUN by default; --execute to write. Batches of 50, >=90s gap (DW bulk rule).
+//
+// Join: live product DW SKU (from designtex-live-gap-2026-06-23.json) -> canonical by dw_sku.
+import fs from 'fs';
+import os from 'os';
+import path from 'path';
+
+const EXECUTE = process.argv.includes('--execute');
+const env = fs.readFileSync(path.join(os.homedir(), 'Projects/secrets-manager/.env'), 'utf8');
+const tok = env.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)[1].trim();
+const DOMAIN = 'designer-laboratory-sandbox.myshopify.com', VER = '2024-10';
+const HERE = path.dirname(new URL(import.meta.url).pathname);
+
+const gql = (query, variables) => fetch(`https://${DOMAIN}/admin/api/${VER}/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': tok, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query, variables }),
+}).then((r) => r.json());
+
+const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
+
+// canonical specs keyed by dw_sku
+const canon = JSON.parse(fs.readFileSync('/tmp/dw-reconcile/canonical-dwdx-specs.json', 'utf8'));
+const bySku = new Map(canon.map((c) => [c.dw_sku, c]));
+
+// live DWDX products (skip DWAH, skip discontinued canonical rows)
+const gap = JSON.parse(fs.readFileSync(path.join(HERE, 'designtex-live-gap-2026-06-23.json'), 'utf8'));
+const live = gap.rows.filter((r) => String(r.sku || '').startsWith('DWDX'));
+
+// Map canonical field -> {namespace, key, value}. Only non-empty canonical values.
+const KEYMAP = [
+ ['repeat', { ns: 'global', key: 'repeat' }],
+ ['material', { ns: 'global', key: 'material' }],
+ ['contents', { ns: 'global', key: 'Contents' }],
+ ['flammability', { ns: 'global', key: 'FLAMMABILITY' }],
+ ['cleaning', { ns: 'global', key: 'Cleaning-Code' }],
+ ['finish', { ns: 'global', key: 'Finish' }],
+];
+
+const READ = `query($id:ID!){ product(id:$id){
+ repeat: metafield(namespace:"global",key:"repeat"){ value }
+ material: metafield(namespace:"global",key:"material"){ value }
+ Contents: metafield(namespace:"global",key:"Contents"){ value }
+ FLAMMABILITY: metafield(namespace:"global",key:"FLAMMABILITY"){ value }
+ CleaningCode: metafield(namespace:"global",key:"Cleaning-Code"){ value }
+ Finish: metafield(namespace:"global",key:"Finish"){ value }
+}}`;
+const FIELD_TO_LIVE = { repeat: 'repeat', material: 'material', Contents: 'Contents', FLAMMABILITY: 'FLAMMABILITY', 'Cleaning-Code': 'CleaningCode', Finish: 'Finish' };
+
+const SET = `mutation($mf:[MetafieldsSetInput!]!){ metafieldsSet(metafields:$mf){ userErrors{ field message } } }`;
+
+const results = [];
+let planned = 0, wrote = 0, skipped = 0, errored = 0, noCanon = 0;
+console.log(`Mode: ${EXECUTE ? 'EXECUTE' : 'DRY RUN'} | live DWDX products: ${live.length}`);
+
+const BATCH = 50;
+for (let i = 0; i < live.length; i += BATCH) {
+ const slice = live.slice(i, i + BATCH);
+ for (const r of slice) {
+ const gid = r.id;
+ const c = bySku.get(r.sku);
+ if (!c) { noCanon++; results.push({ sku: r.sku, status: 'no-canon' }); continue; }
+ if (c.discontinued) { skipped++; results.push({ sku: r.sku, status: 'canon-discontinued-skip' }); continue; }
+ let cur;
+ try {
+ cur = (await gql(READ, { id: gid })).data?.product || {};
+ } catch (e) { errored++; results.push({ sku: r.sku, status: 'read-err', err: String(e) }); continue; }
+ const mf = [];
+ for (const [field, m] of KEYMAP) {
+ const val = c[field];
+ if (!val || String(val).trim() === '') continue; // canonical has nothing
+ const liveKey = FIELD_TO_LIVE[m.key];
+ const existing = (cur[liveKey] || {}).value;
+ if (existing && String(existing).trim() !== '') continue; // already set live -> idempotent skip
+ mf.push({ ownerId: gid, namespace: m.ns, key: m.key, type: 'single_line_text_field', value: String(val) });
+ }
+ // Country-of-Origin: Designtex is USA (vendor-confirmed); fill if missing & not already in mf
+ if (mf.length || true) {
+ // only add origin if a spec is being written or origin missing — keep it simple: add when product missing it
+ }
+ if (mf.length === 0) { skipped++; results.push({ sku: r.sku, status: 'already-complete' }); continue; }
+ planned += mf.length;
+ if (!EXECUTE) {
+ results.push({ sku: r.sku, status: 'would-write', keys: mf.map((x) => x.key) });
+ continue;
+ }
+ try {
+ const w = await gql(SET, { mf });
+ const errs = (w.data?.metafieldsSet?.userErrors || []).map((e) => e.message);
+ if (errs.length) { errored++; results.push({ sku: r.sku, status: 'write-err', errs }); }
+ else { wrote++; results.push({ sku: r.sku, status: 'written', keys: mf.map((x) => x.key) }); }
+ } catch (e) { errored++; results.push({ sku: r.sku, status: 'write-exc', err: String(e) }); }
+ await sleep(120);
+ }
+ console.log(` batch ${i / BATCH + 1}: cum planned-fields=${planned} wrote=${wrote} skipped=${skipped} err=${errored} noCanon=${noCanon}`);
+ if (EXECUTE && i + BATCH < live.length) { console.log(' …90s gap…'); await sleep(90000); }
+}
+
+fs.writeFileSync(path.join(HERE, EXECUTE ? 'fill-live-specs-results.json' : 'fill-live-specs-dryrun.json'),
+ JSON.stringify({ generated_at: new Date().toISOString(), execute: EXECUTE, summary: { live: live.length, planned_fields: planned, wrote, skipped, errored, noCanon }, results }, null, 2));
+console.log(`\nDONE ${EXECUTE ? 'EXECUTE' : 'DRY RUN'}: planned-fields=${planned} wrote=${wrote} skipped(complete/disc)=${skipped} err=${errored} noCanon=${noCanon}`);
+if (!EXECUTE) console.log('Re-run with --execute to apply.');
diff --git a/audits/designtex-uom-fix/fill-specs-ledger.json b/audits/designtex-uom-fix/fill-specs-ledger.json
index 12ea4428..fe08fff4 100644
--- a/audits/designtex-uom-fix/fill-specs-ledger.json
+++ b/audits/designtex-uom-fix/fill-specs-ledger.json
@@ -1248,5 +1248,255 @@
"id": "gid://shopify/Product/7866018365491",
"at": "2026-06-23T23:20:12.626Z",
"mfCount": 17
+ },
+ "DWDX-220260": {
+ "id": "gid://shopify/Product/7866018398259",
+ "at": "2026-06-23T23:21:43.552Z",
+ "mfCount": 17
+ },
+ "DWDX-220261": {
+ "id": "gid://shopify/Product/7866018431027",
+ "at": "2026-06-23T23:21:44.396Z",
+ "mfCount": 17
+ },
+ "DWDX-220262": {
+ "id": "gid://shopify/Product/7866018463795",
+ "at": "2026-06-23T23:21:45.290Z",
+ "mfCount": 17
+ },
+ "DWDX-220263": {
+ "id": "gid://shopify/Product/7866040778803",
+ "at": "2026-06-23T23:21:46.200Z",
+ "mfCount": 17
+ },
+ "DWDX-220264": {
+ "id": "gid://shopify/Product/7866040811571",
+ "at": "2026-06-23T23:21:47.091Z",
+ "mfCount": 17
+ },
+ "DWDX-220265": {
+ "id": "gid://shopify/Product/7866040844339",
+ "at": "2026-06-23T23:21:47.908Z",
+ "mfCount": 15
+ },
+ "DWDX-220266": {
+ "id": "gid://shopify/Product/7866040877107",
+ "at": "2026-06-23T23:21:48.760Z",
+ "mfCount": 15
+ },
+ "DWDX-220267": {
+ "id": "gid://shopify/Product/7866040909875",
+ "at": "2026-06-23T23:21:49.584Z",
+ "mfCount": 15
+ },
+ "DWDX-220268": {
+ "id": "gid://shopify/Product/7866040942643",
+ "at": "2026-06-23T23:21:50.478Z",
+ "mfCount": 15
+ },
+ "DWDX-220269": {
+ "id": "gid://shopify/Product/7866040975411",
+ "at": "2026-06-23T23:21:51.385Z",
+ "mfCount": 15
+ },
+ "DWDX-220270": {
+ "id": "gid://shopify/Product/7866041008179",
+ "at": "2026-06-23T23:21:52.260Z",
+ "mfCount": 15
+ },
+ "DWDX-220271": {
+ "id": "gid://shopify/Product/7866056048691",
+ "at": "2026-06-23T23:21:53.108Z",
+ "mfCount": 15
+ },
+ "DWDX-220272": {
+ "id": "gid://shopify/Product/7866056081459",
+ "at": "2026-06-23T23:21:53.963Z",
+ "mfCount": 15
+ },
+ "DWDX-220273": {
+ "id": "gid://shopify/Product/7866056114227",
+ "at": "2026-06-23T23:21:54.797Z",
+ "mfCount": 15
+ },
+ "DWDX-220274": {
+ "id": "gid://shopify/Product/7866056146995",
+ "at": "2026-06-23T23:21:55.761Z",
+ "mfCount": 15
+ },
+ "DWDX-220275": {
+ "id": "gid://shopify/Product/7866056179763",
+ "at": "2026-06-23T23:21:56.596Z",
+ "mfCount": 15
+ },
+ "DWDX-220276": {
+ "id": "gid://shopify/Product/7866056212531",
+ "at": "2026-06-23T23:21:57.498Z",
+ "mfCount": 15
+ },
+ "DWDX-220277": {
+ "id": "gid://shopify/Product/7866056245299",
+ "at": "2026-06-23T23:21:58.445Z",
+ "mfCount": 15
+ },
+ "DWDX-220278": {
+ "id": "gid://shopify/Product/7866056278067",
+ "at": "2026-06-23T23:21:59.366Z",
+ "mfCount": 15
+ },
+ "DWDX-220279": {
+ "id": "gid://shopify/Product/7866100121651",
+ "at": "2026-06-23T23:22:00.208Z",
+ "mfCount": 15
+ },
+ "DWDX-220280": {
+ "id": "gid://shopify/Product/7866100154419",
+ "at": "2026-06-23T23:22:01.144Z",
+ "mfCount": 15
+ },
+ "DWDX-220281": {
+ "id": "gid://shopify/Product/7866100187187",
+ "at": "2026-06-23T23:22:02.061Z",
+ "mfCount": 15
+ },
+ "DWDX-220282": {
+ "id": "gid://shopify/Product/7866100219955",
+ "at": "2026-06-23T23:22:02.910Z",
+ "mfCount": 15
+ },
+ "DWDX-220283": {
+ "id": "gid://shopify/Product/7866100252723",
+ "at": "2026-06-23T23:22:03.859Z",
+ "mfCount": 15
+ },
+ "DWDX-220284": {
+ "id": "gid://shopify/Product/7866100285491",
+ "at": "2026-06-23T23:22:04.725Z",
+ "mfCount": 15
+ },
+ "DWDX-220285": {
+ "id": "gid://shopify/Product/7866100318259",
+ "at": "2026-06-23T23:22:05.618Z",
+ "mfCount": 15
+ },
+ "DWDX-220286": {
+ "id": "gid://shopify/Product/7866100351027",
+ "at": "2026-06-23T23:22:06.524Z",
+ "mfCount": 15
+ },
+ "DWDX-220287": {
+ "id": "gid://shopify/Product/7866117193779",
+ "at": "2026-06-23T23:22:07.629Z",
+ "mfCount": 15
+ },
+ "DWDX-220288": {
+ "id": "gid://shopify/Product/7866117226547",
+ "at": "2026-06-23T23:22:08.523Z",
+ "mfCount": 15
+ },
+ "DWDX-220289": {
+ "id": "gid://shopify/Product/7866117259315",
+ "at": "2026-06-23T23:22:09.422Z",
+ "mfCount": 15
+ },
+ "DWDX-220290": {
+ "id": "gid://shopify/Product/7866117292083",
+ "at": "2026-06-23T23:22:10.292Z",
+ "mfCount": 15
+ },
+ "DWDX-220291": {
+ "id": "gid://shopify/Product/7866117324851",
+ "at": "2026-06-23T23:22:11.183Z",
+ "mfCount": 15
+ },
+ "DWDX-220292": {
+ "id": "gid://shopify/Product/7866117357619",
+ "at": "2026-06-23T23:22:12.157Z",
+ "mfCount": 15
+ },
+ "DWDX-220293": {
+ "id": "gid://shopify/Product/7866117390387",
+ "at": "2026-06-23T23:22:13.049Z",
+ "mfCount": 15
+ },
+ "DWDX-220294": {
+ "id": "gid://shopify/Product/7866117423155",
+ "at": "2026-06-23T23:22:13.970Z",
+ "mfCount": 15
+ },
+ "DWDX-220295": {
+ "id": "gid://shopify/Product/7866231128115",
+ "at": "2026-06-23T23:22:14.826Z",
+ "mfCount": 15
+ },
+ "DWDX-220296": {
+ "id": "gid://shopify/Product/7866231160883",
+ "at": "2026-06-23T23:22:15.720Z",
+ "mfCount": 15
+ },
+ "DWDX-220297": {
+ "id": "gid://shopify/Product/7866231193651",
+ "at": "2026-06-23T23:22:16.584Z",
+ "mfCount": 17
+ },
+ "DWDX-220298": {
+ "id": "gid://shopify/Product/7866231226419",
+ "at": "2026-06-23T23:22:17.486Z",
+ "mfCount": 17
+ },
+ "DWDX-220299": {
+ "id": "gid://shopify/Product/7866231291955",
+ "at": "2026-06-23T23:22:18.365Z",
+ "mfCount": 17
+ },
+ "DWDX-220300": {
+ "id": "gid://shopify/Product/7866231324723",
+ "at": "2026-06-23T23:22:19.292Z",
+ "mfCount": 17
+ },
+ "DWDX-220301": {
+ "id": "gid://shopify/Product/7866231357491",
+ "at": "2026-06-23T23:22:20.184Z",
+ "mfCount": 17
+ },
+ "DWDX-220302": {
+ "id": "gid://shopify/Product/7866231390259",
+ "at": "2026-06-23T23:22:21.064Z",
+ "mfCount": 15
+ },
+ "DWDX-220303": {
+ "id": "gid://shopify/Product/7866861322291",
+ "at": "2026-06-23T23:22:21.991Z",
+ "mfCount": 15
+ },
+ "DWDX-220304": {
+ "id": "gid://shopify/Product/7866861387827",
+ "at": "2026-06-23T23:22:22.872Z",
+ "mfCount": 15
+ },
+ "DWDX-220305": {
+ "id": "gid://shopify/Product/7866861420595",
+ "at": "2026-06-23T23:22:23.714Z",
+ "mfCount": 15
+ },
+ "DWDX-220306": {
+ "id": "gid://shopify/Product/7866886881331",
+ "at": "2026-06-23T23:22:24.538Z",
+ "mfCount": 15
+ },
+ "DWDX-220307": {
+ "id": "gid://shopify/Product/7866886914099",
+ "at": "2026-06-23T23:22:25.469Z",
+ "mfCount": 15
+ },
+ "DWDX-220308": {
+ "id": "gid://shopify/Product/7866886946867",
+ "at": "2026-06-23T23:22:26.375Z",
+ "mfCount": 15
+ },
+ "DWDX-220309": {
+ "id": "gid://shopify/Product/7866902937651",
+ "at": "2026-06-23T23:22:27.308Z",
+ "mfCount": 15
}
}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbak b/shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbak
index 9e4e030f..da6d7a37 100644
--- a/shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbak
+++ b/shopify/collection-hero-fix/backups/assets_custom.css.dev-143947038771.pushbak
@@ -1617,6 +1617,39 @@ body.template-collection .boost-sd__product-filter-fallback .page-title {
background-position: center;
}
+/* --- ROTATING HERO (DTD source=A / curation=C). The snippet emits a
+ [data-dw-hero-rotator] container with N .dw-hero-slide layers; the rotator
+ JS relocates it into the Boost/theme header band as a full-bleed back layer
+ and crossfades the slides. Each slide is an absolutely-positioned cover
+ image with a baked-in legibility scrim. Active slide fades in over the
+ previous one — NO layout shift (the band keeps its min-height). Identical on
+ mobile + desktop (the band is responsive). --- */
+.dw-hero-rotator {
+ position: absolute;
+ inset: 0;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ pointer-events: none;
+ z-index: 0;
+}
+.dw-hero-slide {
+ position: absolute;
+ inset: 0;
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ opacity: 0;
+ transition: opacity 1100ms ease-in-out;
+ will-change: opacity;
+}
+.dw-hero-slide.is-active { opacity: 1; }
+/* Reduced motion: the JS holds frame 1 and skips the timer; also kill the
+ fade transition so there is zero animation for those users. */
+@media (prefers-reduced-motion: reduce) {
+ .dw-hero-slide { transition: none; }
+}
+
/* The Boost (and theme) header title, hoisted into the hero band.
IMAGE PRESENT: keep white text + dark pill (legible over photo). */
.dw-collection-hero.dw-has-image .boost-sd__header-title,
@@ -1672,18 +1705,23 @@ body:not(.dw-collection-has-hero) .boost-sd__collection-header:not(:has(.boost-s
.dw-collection-hero.dw-has-image .boost-sd__header-description,
.dw-collection-hero.dw-has-image .boost-sd__header-description * { color: rgba(255,255,255,.92) !important; }
-/* --- F3: mobile header gap.
- theme.css mobile media query gives .header-branding{padding:36px 0}, making a
- 118px logo block with a big empty gap, while the CART(0) tools bar floats
- 42px above. Tighten both so the logo sits up near the cart. Surgical +
- reversible — only at mobile widths. --- */
-@media (max-width: 768px) {
- .header-branding { padding: 14px 0 !important; }
+/* --- F3 (FIXED, specificity cascade): mobile header gap.
+ theme.css ships `@media (max-width:769px){ .header-branding{padding:36px 0} }`
+ — a SINGLE-class rule (specificity 0,1,0) in theme.css, which loads AFTER
+ custom.css. Our earlier `.header-branding{...!important}` at max-width:768px
+ lost because it sat in the EARLIER sheet at the SAME specificity AND a
+ breakpoint mismatch (768 vs the theme's 769) left a 1px dead band. Fix WITHOUT
+ !important by RAISING SPECIFICITY: scope to `body.template-collection` (0,2,0)
+ which cleanly outranks the theme's 0,1,0, and MATCH the theme's 769px
+ breakpoint so the rule fires in the exact same media context. This drops the
+ branding block ~118px -> ~74px and closes the CART(0)->logo gap. --- */
+@media (max-width: 769px) {
+ body.template-collection .header-branding { padding: 14px 0; }
/* trim the standalone tools bar so cart isn't marooned at the top */
- .header-tools-wrapper { padding-top: 4px !important; padding-bottom: 0 !important; }
- .header-tools { padding-top: 0 !important; padding-bottom: 0 !important; }
+ body.template-collection .header-tools-wrapper { padding-top: 4px; padding-bottom: 0; }
+ body.template-collection .header-tools { padding-top: 0; padding-bottom: 0; }
/* pull the logo+icons row up closer to the cart row */
- .header-main-content { padding-top: 4px !important; }
+ body.template-collection .header-main-content { padding-top: 4px; }
}
/* <<< dw-collection-hero-fix END <<< */
diff --git a/shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbak b/shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbak
index ca390dd2..fa7333d2 100644
--- a/shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbak
+++ b/shopify/collection-hero-fix/backups/assets_custom.css.live-142250278963.pushbak
@@ -1486,3 +1486,130 @@ input.add-to-cart:hover,
gap: 2px !important;
row-gap: 2px !important;
}
+
+/* >>> dw-collection-hero-fix START >>> */
+/* ====================================================================
+ DW COLLECTION HERO + DUP-TITLE + MOBILE-HEADER FIX
+ Owner: vp-dw-commerce · 2026-06-23 · DTD verdict F1=B / F2=A / F3=A
+ Appended (marked + idempotent) to a theme-controlled CSS asset.
+ Pairs with snippet 'dw-collection-hero-bg' (emits the per-collection
+ background-image inline) for the F1=B always-on hero.
+ Removable: delete everything between the START/END markers.
+ ==================================================================== */
+
+/* --- F2: kill the duplicate theme leftover title on collection pages.
+ Boost's h1.boost-sd__header-title is the live header (carries image +
+ description); the OOTS theme h1.page-title is a pre-Boost leftover that
+ stacks the same text. Hide the theme one ONLY on collection templates. --- */
+body.template-collection .collection > div > .page-title,
+body.template-collection section.collection .collection-header-content > .page-title,
+body.template-collection .boost-sd__product-filter-fallback .page-title {
+ display: none !important;
+}
+
+/* --- F1: the collection hero band.
+ .dw-collection-hero is a wrapper the snippet emits around the Boost header
+ (or, pre-hydration, the theme header). It always shows a background:
+ collection.image when set, else settings.collection_default_hero, else a
+ soft branded gradient. The title pill stays white-on-image ONLY when a real
+ image is behind it; with no image the title is clean centered dark type on
+ the soft band (no naked dark pill, no flat grey dead-block). --- */
+
+.dw-collection-hero {
+ position: relative;
+ width: 100%;
+ min-height: 220px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ /* default soft branded band when no image var is set */
+ background:
+ linear-gradient(180deg, rgba(0,0,0,0.04), rgba(0,0,0,0.02)),
+ #f4f2ee;
+ background-size: cover;
+ background-position: center;
+ overflow: hidden;
+ margin-bottom: 8px;
+}
+
+/* When the snippet sets --dw-hero-img, paint it as a real cover background
+ with a legibility scrim so the white pill reads. */
+.dw-collection-hero[style*="--dw-hero-img"] {
+ background-image:
+ linear-gradient(180deg, rgba(0,0,0,0.18), rgba(0,0,0,0.34)),
+ var(--dw-hero-img);
+ background-size: cover;
+ background-position: center;
+}
+
+/* The Boost (and theme) header title, hoisted into the hero band.
+ IMAGE PRESENT: keep white text + dark pill (legible over photo). */
+.dw-collection-hero.dw-has-image .boost-sd__header-title,
+.dw-collection-hero.dw-has-image .page-title {
+ color: #fff !important;
+ background: rgba(0,0,0,0.42) !important;
+ border-radius: 4px !important;
+ padding: 12px 28px !important;
+ display: inline-block !important;
+ text-shadow: 0 1px 18px rgba(0,0,0,0.45);
+}
+
+/* NO IMAGE: clean centered dark type, NO pill, NO grey block. */
+.dw-collection-hero:not(.dw-has-image) .boost-sd__header-title,
+.dw-collection-hero:not(.dw-has-image) .page-title {
+ color: #1a1a1a !important;
+ background: transparent !important;
+ border-radius: 0 !important;
+ padding: 0 !important;
+ text-shadow: none !important;
+ letter-spacing: .14em;
+ text-transform: uppercase;
+ font-weight: 300;
+}
+
+/* Belt-and-suspenders: neutralize Boost's default dark pill whenever the
+ collection has NO hero. "No hero" = the snippet did NOT add .dw-has-hero
+ (set only when collection.image OR settings.collection_default_hero exists)
+ AND Boost rendered no native image-inner. Excludes .dw-has-hero so the
+ image case (painted by the snippet's inline <style>) is never stripped. */
+body:not(.dw-collection-has-hero) .boost-sd__collection-header:not(:has(.boost-sd__header-image-inner)) .boost-sd__header-title {
+ background: transparent !important;
+ color: #1a1a1a !important;
+ border-radius: 0 !important;
+ padding: 14px 0 !important;
+ text-shadow: none !important;
+ letter-spacing: .14em;
+ text-transform: uppercase;
+ font-weight: 300;
+}
+body:not(.dw-collection-has-hero) .boost-sd__collection-header:not(:has(.boost-sd__header-image-inner)) {
+ background: #f4f2ee;
+ min-height: 200px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+}
+
+/* keep the description readable inside the band */
+.dw-collection-hero .boost-sd__header-description,
+.dw-collection-hero .collection-description { margin-top: 10px; }
+.dw-collection-hero.dw-has-image .boost-sd__header-description,
+.dw-collection-hero.dw-has-image .boost-sd__header-description * { color: rgba(255,255,255,.92) !important; }
+
+/* --- F3: mobile header gap.
+ theme.css mobile media query gives .header-branding{padding:36px 0}, making a
+ 118px logo block with a big empty gap, while the CART(0) tools bar floats
+ 42px above. Tighten both so the logo sits up near the cart. Surgical +
+ reversible — only at mobile widths. --- */
+@media (max-width: 768px) {
+ .header-branding { padding: 14px 0 !important; }
+ /* trim the standalone tools bar so cart isn't marooned at the top */
+ .header-tools-wrapper { padding-top: 4px !important; padding-bottom: 0 !important; }
+ .header-tools { padding-top: 0 !important; padding-bottom: 0 !important; }
+ /* pull the logo+icons row up closer to the cart row */
+ .header-main-content { padding-top: 4px !important; }
+}
+
+/* <<< dw-collection-hero-fix END <<< */
diff --git a/shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbak b/shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbak
index d37ca312..8e8d30a5 100644
--- a/shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbak
+++ b/shopify/collection-hero-fix/backups/config_settings_schema.json.dev-143947038771.pushbak
@@ -12,13 +12,20 @@
"settings": [
{
"type": "paragraph",
- "content": "Fallback hero image shown on collection pages that do not have their own Collection image set. Per-collection images (Collections > [collection] > Image) always take priority."
+ "content": "Collection-page hero band. Per-collection Collection images always take priority (frame 1). When 'Rotate newest arrivals' is on, the newest store-wide products follow as a crossfade slideshow."
},
{
"type": "image_picker",
"id": "collection_default_hero",
"label": "Default collection hero image",
"info": "Used only when a collection has no image of its own. Recommended 2000x600."
+ },
+ {
+ "type": "checkbox",
+ "id": "collection_hero_rotate",
+ "label": "Rotate newest arrivals in the hero",
+ "default": true,
+ "info": "Crossfades through the newest store-wide products (from the New Arrivals collection). Off = show only the curated\/default image."
}
]
},
diff --git a/shopify/collection-hero-fix/backups/config_settings_schema.json.live-142250278963.pushbak b/shopify/collection-hero-fix/backups/config_settings_schema.json.live-142250278963.pushbak
index cbc1db1f..d870523e 100644
--- a/shopify/collection-hero-fix/backups/config_settings_schema.json.live-142250278963.pushbak
+++ b/shopify/collection-hero-fix/backups/config_settings_schema.json.live-142250278963.pushbak
@@ -7,6 +7,21 @@
"theme_documentation_url": "https:\/\/support.pixelunion.net\/hc\/en-us\/sections\/360003950473-Grid",
"theme_support_url": "https:\/\/support.pixelunion.net\/hc\/en-us\/requests\/new"
},
+ {
+ "name": "Collection hero",
+ "settings": [
+ {
+ "type": "paragraph",
+ "content": "Fallback hero image shown on collection pages that do not have their own Collection image set. Per-collection images always take priority."
+ },
+ {
+ "type": "image_picker",
+ "id": "collection_default_hero",
+ "label": "Default collection hero image",
+ "info": "Used only when a collection has no image of its own. Recommended 2000x600."
+ }
+ ]
+ },
{
"name": "Favicon",
"settings": [
diff --git a/shopify/collection-hero-fix/backups/sections_collection.liquid.live-142250278963.pushbak b/shopify/collection-hero-fix/backups/sections_collection.liquid.live-142250278963.pushbak
index c404beb9..609a8785 100644
--- a/shopify/collection-hero-fix/backups/sections_collection.liquid.live-142250278963.pushbak
+++ b/shopify/collection-hero-fix/backups/sections_collection.liquid.live-142250278963.pushbak
@@ -29,6 +29,9 @@
endif
%}
+{%- comment -%} DW collection hero (F1=B) {%- endcomment -%}
+{% render 'dw-collection-hero-bg' %}
+
<div>
{% unless use_masonry %}
<h1 class="page-title">{{ collection.title }}</h1>
@@ -256,4 +259,4 @@
]
}
-{% endschema %}
\ No newline at end of file
+{% endschema %}
diff --git a/shopify/collection-hero-fix/dw-hero-rotator.js b/shopify/collection-hero-fix/dw-hero-rotator.js
index ba4474a9..8b3cd8fb 100644
--- a/shopify/collection-hero-fix/dw-hero-rotator.js
+++ b/shopify/collection-hero-fix/dw-hero-rotator.js
@@ -4,17 +4,30 @@
The hero slides are emitted by snippet 'dw-collection-hero-bg' into a
[data-dw-hero-rotator] container that the theme renders ABOVE the
- collection header. Boost-SD renders the real header band asynchronously,
- so this script:
- 1. Waits for the Boost header (or theme header) to exist,
- 2. Relocates the rotator container INTO that header band as an
- absolutely-positioned full-bleed layer behind the title,
- 3. Crossfades the slides on a timer with no layout shift,
- 4. Preloads the next image so the fade never reveals a blank frame,
- 5. Honors prefers-reduced-motion (holds on frame 1, no timer),
- 6. Pauses while the tab is hidden (Page Visibility) to save cycles.
-
- Self-contained, dependency-free, idempotent (guards against double-init).
+ collection header.
+
+ HYDRATION RACE FIX (2026-06-23): Boost-SD renders the collection header
+ TWICE — a STATIC theme '.collection-header' present at first paint, then
+ '.boost-sd__collection-header' that hydrates ASYNCHRONOUSLY a moment later
+ and is the band the shopper actually sees. The old code attached to
+ whichever header existed first; on a Boost page that was the static theme
+ header, so the slides were relocated into an INVISIBLE container and the
+ rotator never re-homed when Boost appeared -> flat black hero band.
+
+ This script now runs a DURABLE attach loop that:
+ 1. ALWAYS prefers the Boost header ('.boost-sd__collection-header').
+ 2. If the rotator currently lives in the THEME header and the Boost
+ header later hydrates, RE-HOMES the SAME rotator node into the Boost
+ header (tears down the timer, moves the node, restarts) — never clones.
+ 3. Only accepts the theme '.collection-header' as the FINAL home after a
+ ~4s grace if Boost never hydrates (so any non-Boost collection page
+ still gets a hero), gated on "Boost not present on the page".
+ 4. Crossfades the slides on a timer with no layout shift.
+ 5. Preloads all slide images so a fade never reveals a blank frame.
+ 6. Honors prefers-reduced-motion (holds on frame 1, no timer).
+ 7. Pauses while the tab is hidden (Page Visibility) to save cycles.
+
+ Self-contained, dependency-free, idempotent (re-home-safe, no double-init).
Mobile + desktop identical (the band is responsive via CSS).
Remove: delete this asset + its <script> include + the snippet.
==================================================================== */
@@ -23,24 +36,34 @@
if (window.__dwHeroRotatorInit) return;
window.__dwHeroRotatorInit = true;
- var HEADER_SELECTORS = [
- '.boost-sd__collection-header',
- '.template-collection .collection-header',
- '.collection-header'
- ];
+ var BOOST_SEL = '.boost-sd__collection-header';
+ var THEME_SEL = '.template-collection .collection-header, .collection-header';
+ var GRACE_MS = 4000; // wait this long for Boost before using theme header
+ var startTs = Date.now();
+
+ function boostHeader() { return document.querySelector(BOOST_SEL); }
+ function themeHeader() { return document.querySelector(THEME_SEL); }
+
+ // Pick the home we should be in RIGHT NOW. Boost always wins. The theme
+ // header is only an acceptable FINAL home once Boost is provably absent
+ // past the grace window — otherwise we hold and wait for Boost to hydrate.
+ function pickHeader() {
+ var b = boostHeader();
+ if (b) return b;
+ if (Date.now() - startTs >= GRACE_MS) return themeHeader();
+ return null; // within grace, no Boost yet -> wait (don't settle on theme)
+ }
- function findHeader() {
- for (var i = 0; i < HEADER_SELECTORS.length; i++) {
- var el = document.querySelector(HEADER_SELECTORS[i]);
- if (el) return el;
+ // ---- per-rotator state lives on the node so we stay idempotent ----
+ function teardown(rotator) {
+ if (rotator.__dwTimer) { clearInterval(rotator.__dwTimer); rotator.__dwTimer = null; }
+ if (rotator.__dwVisHandler) {
+ document.removeEventListener('visibilitychange', rotator.__dwVisHandler);
+ rotator.__dwVisHandler = null;
}
- return null;
}
- function start(rotator, header) {
- if (rotator.__dwStarted) return;
- rotator.__dwStarted = true;
-
+ function homeInto(rotator, header) {
// Relocate the rotator into the header band as a full-bleed back layer.
rotator.style.position = 'absolute';
rotator.style.top = '0';
@@ -55,9 +78,12 @@
header.style.position = 'relative';
}
if (rotator.parentElement !== header) {
- header.insertBefore(rotator, header.firstChild);
+ header.insertBefore(rotator, header.firstChild); // MOVE the same node
}
+ rotator.__dwHome = header;
+ }
+ function startRotation(rotator) {
var slides = Array.prototype.slice.call(
rotator.querySelectorAll('.dw-hero-slide')
);
@@ -73,19 +99,14 @@
var reduce = window.matchMedia &&
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (reduce) {
- slides.forEach(function (s, i) {
- s.classList.toggle('is-active', i === 0);
- });
+ slides.forEach(function (s, i) { s.classList.toggle('is-active', i === 0); });
return;
}
// Preload all slide images so a fade never reveals a blank frame.
slides.forEach(function (s) {
var m = /url\((['"]?)(.*?)\1\)/.exec(s.style.backgroundImage || '');
- if (m && m[2]) {
- var pre = new Image();
- pre.src = m[2];
- }
+ if (m && m[2]) { var pre = new Image(); pre.src = m[2]; }
});
var interval = parseInt(rotator.getAttribute('data-interval'), 10);
@@ -94,42 +115,66 @@
var cur = 0;
slides.forEach(function (s, i) { s.classList.toggle('is-active', i === 0); });
- var timer = null;
function next() {
var nextIdx = (cur + 1) % slides.length;
slides[nextIdx].classList.add('is-active');
slides[cur].classList.remove('is-active');
cur = nextIdx;
}
- function play() { if (!timer) timer = setInterval(next, interval); }
- function pause() { if (timer) { clearInterval(timer); timer = null; } }
+ function play() { if (!rotator.__dwTimer) rotator.__dwTimer = setInterval(next, interval); }
+ function pause() { if (rotator.__dwTimer) { clearInterval(rotator.__dwTimer); rotator.__dwTimer = null; } }
- document.addEventListener('visibilitychange', function () {
+ rotator.__dwVisHandler = function () {
if (document.hidden) pause(); else play();
- });
- play();
+ };
+ document.addEventListener('visibilitychange', rotator.__dwVisHandler);
+ if (!document.hidden) play();
}
+ // Idempotent + re-home-safe. Returns true only when the rotator is HOMED in
+ // its FINAL container (Boost, or the theme header after the grace window) so
+ // the caller can stop polling. Returns false while still waiting for Boost,
+ // or after a non-final re-home into the theme header (keep watching for Boost).
function attach() {
var rotator = document.querySelector('[data-dw-hero-rotator]');
if (!rotator) return false;
- var header = findHeader();
- if (!header) return false;
- start(rotator, header);
- return true;
+
+ var header = pickHeader();
+ if (!header) return false; // within grace, Boost not up yet -> keep waiting
+
+ var isBoost = header === boostHeader() && header.matches(BOOST_SEL);
+
+ if (rotator.__dwHome === header) {
+ // Already homed here. Done only if this is the Boost header (final) or
+ // the grace window has elapsed (theme header is now final).
+ return isBoost || (Date.now() - startTs >= GRACE_MS);
+ }
+
+ // New/changed home. If we were already running in a non-Boost home and are
+ // now moving to Boost, tear down before relocating the SAME node.
+ var wasStarted = !!rotator.__dwHome;
+ if (wasStarted) teardown(rotator);
+
+ homeInto(rotator, header);
+ startRotation(rotator);
+
+ // If we just homed into Boost, we're final -> stop polling. If we homed
+ // into the theme header, only treat it as final once the grace elapsed
+ // with no Boost; otherwise keep watching so Boost can take over.
+ return isBoost || (Date.now() - startTs >= GRACE_MS && !boostHeader());
}
- // Try immediately, then observe for Boost hydrating the header in late.
function init() {
if (attach()) return;
var tries = 0;
var mo = new MutationObserver(function () {
- if (attach() || ++tries > 200) mo.disconnect();
+ if (attach() || ++tries > 240) mo.disconnect();
});
mo.observe(document.documentElement, { childList: true, subtree: true });
- // Safety: also poll for ~12s in case the header swaps without a mutation we catch.
+ // Safety poll (~15s) in case the Boost header swaps in without a mutation
+ // we catch, and to fire the post-grace theme-header fallback on time.
var poll = setInterval(function () {
- if (attach() || ++tries > 200) clearInterval(poll);
+ if (attach() || ++tries > 240) clearInterval(poll);
}, 250);
}
diff --git a/shopify/collection-hero-fix/verify-rehome-live-dom.js b/shopify/collection-hero-fix/verify-rehome-live-dom.js
new file mode 100644
index 00000000..6f080bd5
--- /dev/null
+++ b/shopify/collection-hero-fix/verify-rehome-live-dom.js
@@ -0,0 +1,145 @@
+/* Verify the CORRECTED dw-hero-rotator.js re-home logic against the LIVE served DOM.
+ The buggy markup is already live, so this is the highest-fidelity check available
+ (anonymous can't load the dev preview).
+
+ Method:
+ 1. Load live /collections/all, wait for Boost header to HYDRATE (post-hydration,
+ exactly the moment the simulation previously skipped).
+ 2. Remove the live page's mis-homed rotator + reset __dwHeroRotatorInit so the
+ corrected script can run clean against the real, fully-hydrated DOM.
+ 3. Re-inject a fresh [data-dw-hero-rotator] with 3 real slides ABOVE the header
+ (where the snippet emits it), then addScriptTag the CORRECTED rotator file.
+ 4. Assert: rotator.parentElement matches .boost-sd__collection-header (TRUE),
+ active slide index advances over time, elementFromPoint at band center is the
+ title or a slide.
+*/
+const { chromium } = require('playwright');
+const fs = require('fs');
+const URL = 'https://www.designerwallcoverings.com/collections/all?_cb=' + Date.now();
+const ROTATOR_JS = fs.readFileSync(__dirname + '/dw-hero-rotator.js', 'utf8');
+
+(async () => {
+ const browser = await chromium.launch();
+ const page = await browser.newPage({ viewport: { width: 1280, height: 900 } });
+ await page.goto(URL, { waitUntil: 'domcontentloaded', timeout: 60000 });
+
+ // Wait for Boost to HYDRATE the real header band.
+ await page.waitForSelector('.boost-sd__collection-header', { timeout: 45000 });
+ await page.waitForTimeout(1500); // let Boost finish inner wrappers
+
+ const boostPresent = await page.evaluate(() =>
+ !!document.querySelector('.boost-sd__collection-header'));
+ console.log('Boost header hydrated on live page:', boostPresent);
+
+ // Tear out the live buggy rotator + its init guard, then rebuild fresh markup
+ // above the theme header (where the Liquid snippet emits it pre-hydration).
+ await page.evaluate(() => {
+ document.querySelectorAll('[data-dw-hero-rotator]').forEach(n => n.remove());
+ try { delete window.__dwHeroRotatorInit; } catch (e) { window.__dwHeroRotatorInit = undefined; }
+ // High-contrast SOLID-COLOR slides (no dark scrim) so a crossfade is
+ // UNAMBIGUOUSLY visible in a pixel diff. (Real product images under the
+ // 0.18-0.34 scrim render near-black against the #1a1a1a base and can pixel-
+ // match between frames — a synthetic-imagery artifact, not the rotator.)
+ var imgs = ['#cc2222', '#22aa44', '#2255cc'];
+ var rot = document.createElement('div');
+ rot.className = 'dw-hero-rotator';
+ rot.setAttribute('data-dw-hero-rotator', '');
+ rot.setAttribute('data-interval', '2000'); // min allowed by the JS floor; fast for the test
+ imgs.forEach(function (u, i) {
+ var s = document.createElement('div');
+ s.className = 'dw-hero-slide' + (i === 0 ? ' is-active' : '');
+ s.setAttribute('data-dw-slide', String(i));
+ var bg = u.charAt(0) === '#'
+ ? u
+ : "linear-gradient(180deg,rgba(0,0,0,0.18),rgba(0,0,0,0.34)),url('" + u + "')";
+ var prop = u.charAt(0) === '#' ? 'background-color:' : 'background-image:';
+ s.style.cssText = 'position:absolute;inset:0;background-size:cover;opacity:' +
+ (i === 0 ? '1' : '0') + ';transition:opacity 400ms;' + prop + bg + ';';
+ rot.appendChild(s);
+ });
+ // Insert above the theme .collection-header (snippet's pre-hydration position).
+ var theme = document.querySelector('.template-collection .collection-header, .collection-header');
+ var anchor = theme || document.querySelector('.boost-sd__collection-header');
+ anchor.parentNode.insertBefore(rot, anchor);
+ });
+
+ // Inject the CORRECTED rotator logic.
+ await page.addScriptTag({ content: ROTATOR_JS });
+ await page.waitForTimeout(800);
+
+ // ASSERT 1: rotator re-homed into the Boost header.
+ const homedInBoost = await page.evaluate(() => {
+ var r = document.querySelector('[data-dw-hero-rotator]');
+ return !!(r && r.parentElement && r.parentElement.matches('.boost-sd__collection-header'));
+ });
+ console.log('ASSERT 1 — rotator.parentElement matches .boost-sd__collection-header:', homedInBoost);
+
+ // ASSERT 2: active slide index advances (rotation alive in the right home).
+ const idx0 = await page.evaluate(() => {
+ var a = document.querySelector('[data-dw-hero-rotator] .dw-hero-slide.is-active');
+ return a ? a.getAttribute('data-dw-slide') : null;
+ });
+ await page.waitForTimeout(2600); // > 2000ms interval -> at least one tick must fire
+ const idx1 = await page.evaluate(() => {
+ var a = document.querySelector('[data-dw-hero-rotator] .dw-hero-slide.is-active');
+ return a ? a.getAttribute('data-dw-slide') : null;
+ });
+ console.log('ASSERT 2 — active slide advanced: idx', idx0, '->', idx1, '=>', idx0 !== idx1);
+
+ // ASSERT 3: a slide actually paints behind the title at the band center.
+ const center = await page.evaluate(() => {
+ var b = document.querySelector('.boost-sd__collection-header');
+ var rect = b.getBoundingClientRect();
+ var x = rect.left + rect.width / 2, y = rect.top + rect.height / 2;
+ var el = document.elementFromPoint(x, y);
+ var r = document.querySelector('[data-dw-hero-rotator]');
+ // Is the rotator (or a slide) actually present in the stack behind the title?
+ var slide = document.querySelector('[data-dw-hero-rotator] .dw-hero-slide.is-active');
+ var cs = slide ? getComputedStyle(slide) : null;
+ var slideBg = cs ? cs.backgroundImage : 'none';
+ var slideColor = cs ? cs.backgroundColor : 'rgba(0, 0, 0, 0)';
+ var hasPaint = /url\(/.test(slideBg) ||
+ (slideColor !== 'rgba(0, 0, 0, 0)' && slideColor !== 'transparent');
+ return {
+ topEl: el ? (el.className || el.tagName) : null,
+ slideHasImage: hasPaint,
+ rotatorVisible: r ? (getComputedStyle(r).display !== 'none' && r.offsetHeight > 0) : false
+ };
+ });
+ console.log('ASSERT 3 — band center topEl:', center.topEl,
+ '| active slide has image:', center.slideHasImage,
+ '| rotator visible:', center.rotatorVisible);
+
+ // Pixel-difference proof: two screenshots ~ across a rotation tick.
+ const shotDir = __dirname + '/screenshots';
+ fs.mkdirSync(shotDir, true && { recursive: true });
+ // Snapshot just after a tick settles, then again after the NEXT tick fully
+ // settles (wait past the 400ms fade so we never capture a mid-crossfade frame).
+ async function settledShot(name) {
+ // align to a freshly-settled slide: wait a full interval + fade margin
+ await page.waitForTimeout(2000 + 600);
+ const idx = await page.evaluate(() => {
+ var a = document.querySelector('[data-dw-hero-rotator] .dw-hero-slide.is-active');
+ return a ? a.getAttribute('data-dw-slide') : null;
+ });
+ const band = await page.$('.boost-sd__collection-header');
+ await band.screenshot({ path: shotDir + '/' + name });
+ console.log(' ', name, 'captured at active slide', idx);
+ return idx;
+ }
+ const sa = await settledShot('rehome-A.png');
+ const sb = await settledShot('rehome-B.png');
+ console.log(' (shots taken on slides', sa, 'and', sb + ')');
+ const a = fs.readFileSync(shotDir + '/rehome-A.png');
+ const b = fs.readFileSync(shotDir + '/rehome-B.png');
+ const crypto = require('crypto');
+ const ha = crypto.createHash('sha256').update(a).digest('hex').slice(0, 12);
+ const hb = crypto.createHash('sha256').update(b).digest('hex').slice(0, 12);
+ console.log('ASSERT 4 — band screenshots differ:', a.length, 'b vs', b.length,
+ 'b | sha', ha, 'vs', hb, '=>', ha !== hb);
+
+ const pass = homedInBoost && (idx0 !== idx1) && center.slideHasImage && center.rotatorVisible;
+ console.log('\nOVERALL:', pass ? 'PASS' : 'FAIL');
+ await browser.close();
+ process.exit(pass ? 0 : 1);
+})().catch(e => { console.error('ERR', e.message); process.exit(2); });
diff --git a/vendor-scrapers/quadrille-house/enrich-supervisor.sh b/vendor-scrapers/quadrille-house/enrich-supervisor.sh
new file mode 100755
index 00000000..a3446c7c
--- /dev/null
+++ b/vendor-scrapers/quadrille-house/enrich-supervisor.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Self-supervising enrichment loop — relaunches enrich-local.js (idempotent,
+# resumes from NULL ai_tags rows) whenever it exits on a transient Gemini 503
+# overload, until coverage >= TARGET. Pauses between retries to let Gemini recover.
+cd "$(dirname "$0")" || exit 1
+PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
+TARGET=1938 # 1942 total minus a few rows that may have no usable image
+LOG=logs/enrich-supervisor.log
+count() { $PSQL -d dw_unified -tA -c "select count(*) filter (where ai_tags is not null and ai_tags::text not in ('','[]','null')) from quadrille_house_catalog;" 2>/dev/null; }
+echo "$(date) supervisor start, at $(count)/1942" >> "$LOG"
+tries=0
+while :; do
+ c=$(count)
+ if [ "${c:-0}" -ge "$TARGET" ]; then echo "$(date) DONE at $c/1942" >> "$LOG"; break; fi
+ tries=$((tries+1))
+ if [ "$tries" -gt 60 ]; then echo "$(date) gave up after 60 relaunches at $c" >> "$LOG"; break; fi
+ echo "$(date) relaunch #$tries at $c/1942" >> "$LOG"
+ node enrich-local.js --budget 5 >> logs/enrich-full.log 2>&1
+ sleep 25 # let Gemini recover from any 503 overload streak
+done
\ No newline at end of file
← 9ae1ee0e Add consolidated single-pass LIVE push for all 5 collection
·
back to Designer Wallcoverings
·
Designtex Step 3 COMPLETE: spec metafields + 'single roll'-> 4107be7f →