[object Object]

← back to Sanderson Onboard

TK-10873: add restore-map-first apply_labeling.mjs (dry-run verified, gated)

b7e94de6467ce9eb93d9304b7fdce7bbef348beb · 2026-08-31 08:41:26 -0700 · Steve Abrams

Dry-run resolves 45/45 wide-width Zoffany SKUs live. Real pre-state:
43 carry 'Sold Per Roll' (mislabeled as roll for per-yard goods), 2 carry
'Default Title' — all rename to 'Per Yard' + append per-yard PDP line.
Sample variant/value/$4.25 never in any write set. Mirrors
reprice_live_runbook.mjs safety pattern: restore-map-first, fail-closed,
--apply guarded by --i-understand-this-is-live, --revert, ledgered.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit b7e94de6467ce9eb93d9304b7fdce7bbef348beb
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 31 08:41:26 2026 -0700

    TK-10873: add restore-map-first apply_labeling.mjs (dry-run verified, gated)
    
    Dry-run resolves 45/45 wide-width Zoffany SKUs live. Real pre-state:
    43 carry 'Sold Per Roll' (mislabeled as roll for per-yard goods), 2 carry
    'Default Title' — all rename to 'Per Yard' + append per-yard PDP line.
    Sample variant/value/$4.25 never in any write set. Mirrors
    reprice_live_runbook.mjs safety pattern: restore-map-first, fail-closed,
    --apply guarded by --i-understand-this-is-live, --revert, ledgered.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 tk10873/apply_labeling.live_plan.json           | 407 +++++++++++++++++++
 tk10873/apply_labeling.mjs                      | 399 +++++++++++++++++++
 tk10873/apply_labeling.restore_map.preview.json | 502 ++++++++++++++++++++++++
 3 files changed, 1308 insertions(+)

diff --git a/tk10873/apply_labeling.live_plan.json b/tk10873/apply_labeling.live_plan.json
new file mode 100644
index 0000000..fe71891
--- /dev/null
+++ b/tk10873/apply_labeling.live_plan.json
@@ -0,0 +1,407 @@
+[
+  {
+    "mfr_sku": "ZOW0123-02",
+    "pattern": "Pompadour Print",
+    "product_id": "gid://shopify/Product/7866101432371",
+    "product_title": "Pompadour Print - Mineral wallcovering | Zoffany",
+    "rename": "\"Default Title\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0123-03",
+    "pattern": "Pompadour Print",
+    "product_id": "gid://shopify/Product/7794227675187",
+    "product_title": "Pompadour Print - Multi wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0128-01",
+    "pattern": "Emperors Musician",
+    "product_id": "gid://shopify/Product/7793953177651",
+    "product_title": "Emperors Musician - La Seine wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0128-02",
+    "pattern": "Emperors Musician",
+    "product_id": "gid://shopify/Product/7793953210419",
+    "product_title": "Emperors Musician - Charcoal wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0128-03",
+    "pattern": "Emperors Musician",
+    "product_id": "gid://shopify/Product/7793953275955",
+    "product_title": "Emperors Musician - Indigo wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0007-01",
+    "pattern": "Verdure 310430",
+    "product_id": "gid://shopify/Product/7793954226227",
+    "product_title": "Verdure 310430 - Lead Blue wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0007-02",
+    "pattern": "Verdure 310431",
+    "product_id": "gid://shopify/Product/7793954291763",
+    "product_title": "Verdure 310431 - Tapestry Green wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0019-01",
+    "pattern": "Peacock Garden",
+    "product_id": "gid://shopify/Product/7794234196019",
+    "product_title": "Peacock Garden - Linen/Silver wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0019-02",
+    "pattern": "Peacock Garden",
+    "product_id": "gid://shopify/Product/7794234228787",
+    "product_title": "Peacock Garden - Green/Coral wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0125-01",
+    "pattern": "Verdure",
+    "product_id": "gid://shopify/Product/7794227773491",
+    "product_title": "Verdure - Indigo wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-01",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237374515",
+    "product_title": "Moire Wallcovering - Chalk wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-02",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237407283",
+    "product_title": "Moire Wallcovering - Silver wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-03",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237472819",
+    "product_title": "Moire Wallcovering - Rose Quartz wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-04",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237538355",
+    "product_title": "Moire Wallcovering - Platinum wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-05",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237603891",
+    "product_title": "Moire Wallcovering - Stone wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-06",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237636659",
+    "product_title": "Moire Wallcovering - Green Tea wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-07",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237702195",
+    "product_title": "Moire Wallcovering - Hessian Green wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-08",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237767731",
+    "product_title": "Moire Wallcovering - Pale Jade wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-09",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237833267",
+    "product_title": "Moire Wallcovering - Duck Egg wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-10",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237898803",
+    "product_title": "Moire Wallcovering - Blue Silk wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0132-11",
+    "pattern": "Moire Wallcovering",
+    "product_id": "gid://shopify/Product/7794237964339",
+    "product_title": "Moire Wallcovering - Shetland wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0144-01",
+    "pattern": "Mughal Menagerie",
+    "product_id": "gid://shopify/Product/7794235146291",
+    "product_title": "Mughal Menagerie - Mazarine Blue wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0041-01",
+    "pattern": "Phaedra",
+    "product_id": "gid://shopify/Product/7793954684979",
+    "product_title": "Phaedra - Silver wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0041-02",
+    "pattern": "Phaedra",
+    "product_id": "gid://shopify/Product/7793954717747",
+    "product_title": "Phaedra - Prussian Blue wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0075-01",
+    "pattern": "Darnley",
+    "product_id": "gid://shopify/Product/7794228658227",
+    "product_title": "Darnley - Snow wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0075-02",
+    "pattern": "Darnley",
+    "product_id": "gid://shopify/Product/7794228690995",
+    "product_title": "Darnley - Dove wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0075-03",
+    "pattern": "Darnley",
+    "product_id": "gid://shopify/Product/7794228789299",
+    "product_title": "Darnley - Tigers Eye wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0081-01",
+    "pattern": "Rose Absolute",
+    "product_id": "gid://shopify/Product/7794230067251",
+    "product_title": "Rose Absolute - Linen/Gold wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0108-01",
+    "pattern": "Paradise Row",
+    "product_id": "gid://shopify/Product/7794236457011",
+    "product_title": "Paradise Row - Evergreen wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0032-01",
+    "pattern": "Sansui (On Unique Ground)",
+    "product_id": "gid://shopify/Product/7794235867187",
+    "product_title": "Sansui (On Unique Ground) - Indigo Wash wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0124-01",
+    "pattern": "Storks & Thrushes Tuscan Pink/Cobalt",
+    "product_id": "gid://shopify/Product/7794227740723",
+    "product_title": "Storks & Thrushes Tuscan Pink/Cobalt - Tuscan Pink / Cobalt wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0033-01",
+    "pattern": "Sansui",
+    "product_id": "gid://shopify/Product/7794235932723",
+    "product_title": "Sansui - Snow Peaks wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0131-01",
+    "pattern": "Pina De Indes",
+    "product_id": "gid://shopify/Product/7793953636403",
+    "product_title": "Pina De Indes - Stockholm Blue wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0131-02",
+    "pattern": "Pina De Indes",
+    "product_id": "gid://shopify/Product/7793953701939",
+    "product_title": "Pina De Indes - Mousseaux wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0131-03",
+    "pattern": "Pina De Indes",
+    "product_id": "gid://shopify/Product/7793953767475",
+    "product_title": "Pina De Indes - Empire Grey wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0131-04",
+    "pattern": "Pina De Indes Tigers Eye",
+    "product_id": "gid://shopify/Product/7793953800243",
+    "product_title": "Pina De Indes Tigers Eye - Tiger`s Eye wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZDAR312884",
+    "pattern": "Darnley",
+    "product_id": "gid://shopify/Product/7866101661747",
+    "product_title": "Darnley - Tigers Eye wallcovering | Zoffany",
+    "rename": "\"Default Title\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0043-01",
+    "pattern": "Elswick Paisley",
+    "product_id": "gid://shopify/Product/7793954947123",
+    "product_title": "Elswick Paisley - Blue Umber wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0043-02",
+    "pattern": "Elswick Paisley",
+    "product_id": "gid://shopify/Product/7794234294323",
+    "product_title": "Elswick Paisley - Sunstone wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0127-01",
+    "pattern": "Eleonora Print",
+    "product_id": "gid://shopify/Product/7793952981043",
+    "product_title": "Eleonora Print Tuscan Pink Wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0127-02",
+    "pattern": "Eleonora Print",
+    "product_id": "gid://shopify/Product/7793953046579",
+    "product_title": "Eleonora Print Evergreen Wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0127-03",
+    "pattern": "Eleonora Print",
+    "product_id": "gid://shopify/Product/7793953112115",
+    "product_title": "Eleonora Print - Stockholm Blue wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0129-01",
+    "pattern": "Henrietta`s Trail",
+    "product_id": "gid://shopify/Product/7793953341491",
+    "product_title": "Henrietta`s Trail - Perfect White wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0129-02",
+    "pattern": "Henrietta`s Trail",
+    "product_id": "gid://shopify/Product/7793953407027",
+    "product_title": "Henrietta`s Trail - Stockholm Blue wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  },
+  {
+    "mfr_sku": "ZOW0129-03",
+    "pattern": "Henrietta`s Trail",
+    "product_id": "gid://shopify/Product/7793953472563",
+    "product_title": "Henrietta`s Trail - Vine Black wallcovering | Zoffany",
+    "rename": "\"Sold Per Roll\" -> \"Per Yard\"",
+    "value_changed": true,
+    "desc_changed": true
+  }
+]
\ No newline at end of file
diff --git a/tk10873/apply_labeling.mjs b/tk10873/apply_labeling.mjs
new file mode 100644
index 0000000..28e5c69
--- /dev/null
+++ b/tk10873/apply_labeling.mjs
@@ -0,0 +1,399 @@
+#!/usr/bin/env node
+// apply_labeling.mjs — TK-10873 Zoffany wide-width UNIT-LABELING pass (the pair to the v7 reprice).
+//
+// ─────────────────────────────────────────────────────────────────────────────
+// DESIGN CONTRACT — restore-map-FIRST, fail-closed, reversible, ledgered.
+// Mirrors reprice_live_runbook.mjs exactly: the LIVE write (customer-facing COPY:
+// variant title + PDP description) is GATED behind BOTH `--apply` and
+// `--i-understand-this-is-live`, run by Steve as a separate `!` step. The DEFAULT
+// run is a DRY-RUN that resolves each product LIVE (read-only), prints the planned
+// label changes, and writes NOTHING to Shopify.
+// ─────────────────────────────────────────────────────────────────────────────
+//
+// Spec: zoffany_widewidth_labeling_spec.json (45 rows / 20 patterns). Per SKU:
+//   1) Rename the SELLABLE variant's option value "Default Title" -> "Per Yard".
+//      (These are single-option "Title" products with 2 variants: the sellable
+//       one carries option-value "Default Title", the memo carries "Sample". We
+//       rename ONLY the sellable option value via productOptionUpdate; the Sample
+//       value is never touched, so the memo variant + its $4.25 price are safe.)
+//   2) Append the spec's pdp_line to the product descriptionHtml (idempotent: if
+//      the exact line is already present, the description is left unchanged).
+//
+// Modes
+//   (default)  plan   — DRY-RUN. Resolve each row LIVE (read-only GET), verify the
+//                        expected pre-state (ACTIVE, single "Title" option, a
+//                        "Default Title" sellable value, a "Sample" value present),
+//                        and PRINT the planned changes. Writes a PREVIEW restore
+//                        map. ZERO Shopify writes. ABORT-report (not exit) on any
+//                        row that fails to resolve so the whole set is visible.
+//   --apply    LIVE   — Phase 1 RESOLVE+SNAPSHOT: live-read every row, capture the
+//                        COMPLETE restore map {product_id, option_id,
+//                        sellable_value_id, old_value_name, new_value_name,
+//                        old_descriptionHtml, new_descriptionHtml}. Persist (+fsync)
+//                        BEFORE any write. FAIL-CLOSED: if ANY row fails to resolve
+//                        or its live state != expected, ABORT with zero writes.
+//                        Phase 2 WRITE: per product, productOptionUpdate (rename the
+//                        sellable value) then productUpdate (descriptionHtml), each
+//                        readback-verified, appended to the reversible ledger.
+//   --revert <map.json> LIVE — read a restore map and set every option value name +
+//                        descriptionHtml back to old_* (the undo). Readback + ledger.
+//
+// Safety rails (identical philosophy to the reprice runbook):
+//   • --apply requires --i-understand-this-is-live (footgun guard).
+//   • ACTIVE-only (live status must be ACTIVE); exactly-one sellable option value.
+//   • The Sample variant / its value / its $4.25 price are NEVER in any write set.
+//   • Restore map path is printed BEFORE the first write; run aborts if it can't be
+//     written+fsync'd.
+//   • Batches pace to respect Shopify's GraphQL cost throttle.
+import fs from 'node:fs';
+import { execFileSync } from 'node:child_process';
+
+const DIR = new URL('.', import.meta.url).pathname;
+const SPEC_IN = process.env.LABELING_SPEC ? `${DIR}${process.env.LABELING_SPEC}` : `${DIR}zoffany_widewidth_labeling_spec.json`;
+const BASE = SPEC_IN.replace(/\.json$/, '').split('/').pop();
+const PLAN_OUT = `${DIR}apply_labeling.live_plan.json`;
+const PREVIEW_OUT = `${DIR}apply_labeling.restore_map.preview.json`;
+const RESTORE_OUT = `${DIR}apply_labeling.restore_map.live.json`; // populated ONLY by --apply, before writes
+const LEDGER = `${process.env.HOME}/.claude/yolo-queue/executed-reversible/ledger.jsonl`;
+
+const SHOP = 'designer-laboratory-sandbox.myshopify.com';
+const API = '2024-10';
+const BATCH = Number(process.env.LABELING_BATCH || 25);
+const SAMPLE_PRICE = 4.25;
+const NEW_VALUE = 'Per Yard';
+const OLD_VALUE = 'Default Title';
+
+const argv = process.argv.slice(2);
+const APPLY = argv.includes('--apply');
+const LIVE_OK = argv.includes('--i-understand-this-is-live');
+const REVERT_IDX = argv.indexOf('--revert');
+const REVERT_MAP = REVERT_IDX >= 0 ? argv[REVERT_IDX + 1] : null;
+
+// ── mirror read (read-only, local, $0) — resolves mfr_sku -> shopify product id ─
+function psql(q) {
+  return execFileSync('psql', ['-h', '/tmp', '-d', 'dw_unified', '-tAF\t', '-c', q], { encoding: 'utf8' });
+}
+function loadMirror(mfrSkus) {
+  const inlist = mfrSkus.map(s => `'${String(s).replace(/'/g, "''")}'`).join(',');
+  const q = `SELECT mfr_sku, vendor, shopify_id, sku, status
+             FROM shopify_products WHERE mfr_sku IN (${inlist})`;
+  const m = new Map();
+  for (const line of psql(q).trim().split('\n').filter(Boolean)) {
+    const [mfr_sku, vendor, shopify_id, sku, status] = line.split('\t');
+    m.set(mfr_sku, { mfr_sku, vendor, shopify_id, sku, status });
+  }
+  return m;
+}
+
+// ── the labeling set: 45 rows from the spec ───────────────────────────────────
+function loadSpecRows() {
+  const spec = JSON.parse(fs.readFileSync(SPEC_IN, 'utf8'));
+  const rows = spec.rows || spec;
+  return rows.map(r => ({
+    mfr_sku: r.mfr_sku,
+    pattern: r.pattern,
+    variant_label: r.variant_label || NEW_VALUE,
+    pdp_line: r.pdp_line,
+  }));
+}
+
+// ── Shopify Admin GraphQL (used ONLY by --apply / --revert) ───────────────────
+function token() {
+  const t = process.env.SHOPIFY_ADMIN_TOKEN;
+  if (!t) throw new Error('SHOPIFY_ADMIN_TOKEN not set — source ~/Projects/secrets-manager/.env before a live run');
+  return t;
+}
+async function gql(query, variables) {
+  const res = await fetch(`https://${SHOP}/admin/api/${API}/graphql.json`, {
+    method: 'POST',
+    headers: { 'Content-Type': 'application/json', 'X-Shopify-Access-Token': token() },
+    body: JSON.stringify({ query, variables }),
+  });
+  const j = await res.json();
+  if (j.errors) throw new Error('GraphQL errors: ' + JSON.stringify(j.errors));
+  // pace against the throttle: if we're low on the cost bucket, breathe.
+  const throttle = j.extensions?.cost?.throttleStatus;
+  if (throttle && throttle.currentlyAvailable < 200) await new Promise(r => setTimeout(r, 1200));
+  return j.data;
+}
+
+// Live-read a product's options, variants, and description.
+const PRODUCT_Q = `query($id: ID!) {
+  product(id: $id) {
+    id status title descriptionHtml
+    options(first: 5) { id name position optionValues { id name } }
+    variants(first: 20) { nodes { id sku title price selectedOptions { name value } } }
+  }
+}`;
+
+// Resolve the single sellable option value to rename. Enforces the expected shape:
+//   • one option named "Title"
+//   • that option has a "Sample" value (the memo variant we must NEVER touch)
+//   • exactly one non-sample sellable variant; its "Title" option value is the one we
+//     rename to NEW_VALUE ("Per Yard"), whatever it currently is ("Default Title",
+//     "Sold Per Roll", etc.) — EXCEPT that if it is ALREADY NEW_VALUE the row is a
+//     no-op (already labeled).
+// This is deliberately tolerant of the ACTUAL live pre-state: an earlier pass labeled
+// most of these "Sold Per Roll" (the wrong unit for per-yard goods) rather than leaving
+// them "Default Title", so we key off the sellable VARIANT's own option value, not a
+// hard-coded literal. Returns { option_id, sellable_value_id, old_value_name } or throws.
+function resolveSellableValue(prod) {
+  if (!prod) throw new Error('product not found live');
+  if (prod.status !== 'ACTIVE') throw new Error(`live status ${prod.status} (expected ACTIVE)`);
+  const titleOpts = prod.options.filter(o => o.name === 'Title');
+  if (titleOpts.length !== 1) throw new Error(`expected 1 "Title" option, found ${titleOpts.length}`);
+  const opt = titleOpts[0];
+  const sampleVal = opt.optionValues.find(v => v.name === 'Sample');
+  if (!sampleVal) throw new Error('no "Sample" option value present (unexpected structure)');
+  // the sellable variant: exactly one non-sample, priced != sample.
+  const sellableVars = prod.variants.nodes.filter(v =>
+    !String(v.sku || '').endsWith('-Sample') &&
+    !/sample/i.test(v.title || '') &&
+    Number(v.price) !== SAMPLE_PRICE);
+  if (sellableVars.length !== 1) throw new Error(`expected 1 sellable variant, found ${sellableVars.length}`);
+  const sv = sellableVars[0];
+  const svOptVal = (sv.selectedOptions || []).find(so => so.name === 'Title')?.value;
+  if (svOptVal == null) throw new Error('sellable variant has no "Title" option value');
+  if (svOptVal === 'Sample') throw new Error('sellable variant resolved to the Sample value (guard tripped)');
+  // find the option-value record backing that sellable value.
+  const sellableVal = opt.optionValues.find(v => v.name === svOptVal);
+  if (!sellableVal) throw new Error(`sellable option value "${svOptVal}" not found in the option's values`);
+  if (sellableVal.id === sampleVal.id) throw new Error('sellable value id equals the Sample value id (guard tripped)');
+  return { option_id: opt.id, sellable_value_id: sellableVal.id, old_value_name: sellableVal.name };
+}
+
+// Compute the new descriptionHtml: append the pdp_line as its own <p> unless already present.
+function appendPdpLine(oldHtml, pdpLine) {
+  const html = oldHtml || '';
+  if (html.includes(pdpLine)) return { changed: false, newHtml: html };
+  const sep = html.trim().length ? '\n' : '';
+  return { changed: true, newHtml: `${html}${sep}<p>${pdpLine}</p>` };
+}
+
+const OPTION_UPDATE_M = `mutation($productId: ID!, $option: OptionUpdateInput!, $optionValuesToUpdate: [OptionValueUpdateInput!]) {
+  productOptionUpdate(productId: $productId, option: $option, optionValuesToUpdate: $optionValuesToUpdate) {
+    product { id options(first: 5) { id name optionValues { id name } } }
+    userErrors { field message }
+  }
+}`;
+
+const PRODUCT_UPDATE_M = `mutation($input: ProductInput!) {
+  productUpdate(input: $input) { product { id descriptionHtml } userErrors { field message } }
+}`;
+
+function ledger(entry) { fs.appendFileSync(LEDGER, JSON.stringify(entry) + '\n'); }
+function writeFsync(path, data) {
+  const fd = fs.openSync(path, 'w');
+  fs.writeSync(fd, data);
+  fs.fsyncSync(fd);
+  fs.closeSync(fd);
+}
+
+// Resolve every row to its live pre-state. Used by BOTH plan and apply (single code path
+// = the dry-run proves exactly what apply will do). Returns { resolved, failures }.
+async function resolveAll(rows, mirror) {
+  const resolved = [], failures = [];
+  for (const r of rows) {
+    const m = mirror.get(r.mfr_sku);
+    if (!m) { failures.push({ mfr_sku: r.mfr_sku, why: 'no mirror product' }); continue; }
+    if (m.status !== 'ACTIVE') { failures.push({ mfr_sku: r.mfr_sku, why: `mirror status ${m.status}` }); continue; }
+    let data;
+    try { data = await gql(PRODUCT_Q, { id: m.shopify_id }); }
+    catch (e) { failures.push({ mfr_sku: r.mfr_sku, why: 'GET failed: ' + e.message }); continue; }
+    const prod = data.product;
+    let sel;
+    try { sel = resolveSellableValue(prod); }
+    catch (e) { failures.push({ mfr_sku: r.mfr_sku, why: e.message }); continue; }
+    const { changed, newHtml } = appendPdpLine(prod.descriptionHtml, r.pdp_line);
+    resolved.push({
+      mfr_sku: r.mfr_sku, pattern: r.pattern, product_id: prod.id, product_title: prod.title,
+      option_id: sel.option_id, sellable_value_id: sel.sellable_value_id,
+      old_value_name: sel.old_value_name, new_value_name: r.variant_label,
+      old_descriptionHtml: prod.descriptionHtml || '',
+      new_descriptionHtml: newHtml,
+      desc_changed: changed,
+      value_changed: sel.old_value_name !== r.variant_label,
+    });
+  }
+  return { resolved, failures };
+}
+
+// ── MODE: plan (DRY-RUN — resolves live read-only, writes NOTHING to Shopify) ──
+async function runPlan() {
+  const rows = loadSpecRows();
+  const mirror = loadMirror(rows.map(r => r.mfr_sku));
+  console.log('=== Zoffany wide-width UNIT-LABELING — PLAN (DRY-RUN, read-only GETs, ZERO writes) ===');
+  console.log(`spec rows: ${rows.length}   (spec: ${SPEC_IN.split('/').pop()})`);
+  const { resolved, failures } = await resolveAll(rows, mirror);
+
+  // PREVIEW restore map — same shape as the live map materializes.
+  const preview = resolved.map(p => ({
+    mfr_sku: p.mfr_sku, product_id: p.product_id, option_id: p.option_id,
+    sellable_value_id: p.sellable_value_id,
+    old_value_name: p.old_value_name, new_value_name: p.new_value_name,
+    old_descriptionHtml: p.old_descriptionHtml, new_descriptionHtml: p.new_descriptionHtml,
+    _note: 'PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write.',
+  }));
+  fs.writeFileSync(PREVIEW_OUT, JSON.stringify({ ticket: 'TK-10873', mode: 'preview', count: preview.length, rows: preview }, null, 2));
+  fs.writeFileSync(PLAN_OUT, JSON.stringify(resolved.map(p => ({
+    mfr_sku: p.mfr_sku, pattern: p.pattern, product_id: p.product_id, product_title: p.product_title,
+    rename: `"${p.old_value_name}" -> "${p.new_value_name}"`, value_changed: p.value_changed,
+    desc_changed: p.desc_changed,
+  })), null, 2));
+
+  console.log(`resolved LIVE to an ACTIVE product w/ a single sellable option value: ${resolved.length}/${rows.length}`);
+  const renameCount = resolved.filter(p => p.value_changed).length;
+  const descCount = resolved.filter(p => p.desc_changed).length;
+  // show the distinct current sellable-value names we'd rename FROM (real pre-state varies).
+  const fromNames = [...new Set(resolved.filter(p => p.value_changed).map(p => p.old_value_name))];
+  console.log(`  ├─ would rename sellable option value -> "${NEW_VALUE}": ${renameCount}  (from: ${fromNames.map(n => `"${n}"`).join(', ') || 'n/a'})`);
+  console.log(`  └─ would append pdp_line to descriptionHtml: ${descCount} (already-present, skipped: ${resolved.length - descCount})`);
+  console.log('\nsample of planned changes (first 6):');
+  for (const p of resolved.slice(0, 6)) {
+    console.log(`  ${p.mfr_sku}  "${p.product_title}"  value "${p.old_value_name}"->"${p.new_value_name}"  desc+${p.desc_changed ? 'yes' : 'no'}`);
+  }
+  if (failures.length) {
+    console.log(`\n!! ${failures.length} row(s) FAILED to resolve — a live --apply would ABORT with zero writes:`);
+    console.log(JSON.stringify(failures, null, 2));
+  } else {
+    console.log(`\nALL ${resolved.length} rows resolved clean — restore-map-first apply is wired and ready.`);
+  }
+  console.log(`\nartifacts:\n  ${PLAN_OUT}\n  ${PREVIEW_OUT}`);
+  console.log('\nThis run made NO Shopify writes. The live labeling is:');
+  console.log('  node apply_labeling.mjs --apply --i-understand-this-is-live');
+  console.log('  (run by Steve via `!`, with SHOPIFY_ADMIN_TOKEN sourced.)');
+  process.exit(failures.length ? 5 : 0);
+}
+
+// ── MODE: apply (LIVE — restore-map-first) ────────────────────────────────────
+async function runApply() {
+  if (!LIVE_OK) {
+    console.error('REFUSING: --apply requires --i-understand-this-is-live (customer-facing copy write).');
+    process.exit(2);
+  }
+  const rows = loadSpecRows();
+  const mirror = loadMirror(rows.map(r => r.mfr_sku));
+  console.log(`[apply] ${rows.length} spec rows. Resolving live pre-state…`);
+
+  // ── PHASE 1: RESOLVE + SNAPSHOT (no writes) ─────────────────────────────────
+  const { resolved, failures } = await resolveAll(rows, mirror);
+
+  // FAIL-CLOSED: any resolution failure aborts BEFORE a single write.
+  if (failures.length) {
+    console.error(`\n[apply] ABORTED — ${failures.length} rows failed to resolve. ZERO writes made.`);
+    console.error(JSON.stringify(failures.slice(0, 30), null, 2));
+    process.exit(3);
+  }
+
+  // Persist the COMPLETE restore map (+fsync) BEFORE the first write. This IS the undo.
+  writeFsync(RESTORE_OUT, JSON.stringify({
+    ticket: 'TK-10873', generated_at: new Date().toISOString(),
+    shop: SHOP, count: resolved.length,
+    rows: resolved.map(p => ({
+      mfr_sku: p.mfr_sku, product_id: p.product_id, option_id: p.option_id,
+      sellable_value_id: p.sellable_value_id,
+      old_value_name: p.old_value_name, new_value_name: p.new_value_name,
+      old_descriptionHtml: p.old_descriptionHtml, new_descriptionHtml: p.new_descriptionHtml,
+    })),
+  }, null, 2));
+  console.log(`\n[apply] restore map persisted BEFORE any write → ${RESTORE_OUT} (${resolved.length} rows)`);
+  console.log(`[apply] undo at any time: node apply_labeling.mjs --revert ${RESTORE_OUT} --i-understand-this-is-live`);
+
+  // ── PHASE 2: WRITE (batched, verify-readback, ledger) ───────────────────────
+  // Every network call is wrapped so a transient error lands in errs[] instead of
+  // throwing past the loop; the ledger always fires. The restore map covers the undo.
+  let ok = 0, errs = [];
+  for (let i = 0; i < resolved.length; i += BATCH) {
+    const batch = resolved.slice(i, i + BATCH);
+    for (const row of batch) {
+      try {
+        // (a) rename the sellable option value: "Default Title" -> "Per Yard"
+        if (row.value_changed) {
+          const d = await gql(OPTION_UPDATE_M, {
+            productId: row.product_id,
+            option: { id: row.option_id },
+            optionValuesToUpdate: [{ id: row.sellable_value_id, name: row.new_value_name }],
+          });
+          const ue = d.productOptionUpdate.userErrors;
+          if (ue && ue.length) { errs.push({ mfr_sku: row.mfr_sku, step: 'optionUpdate', userErrors: ue }); continue; }
+          const vals = d.productOptionUpdate.product?.options?.find(o => o.id === row.option_id)?.optionValues || [];
+          if (!vals.some(v => v.id === row.sellable_value_id && v.name === row.new_value_name)) {
+            errs.push({ mfr_sku: row.mfr_sku, step: 'optionUpdate', why: 'readback value name mismatch' }); continue;
+          }
+        }
+        // (b) append the pdp_line to descriptionHtml
+        if (row.desc_changed) {
+          const d = await gql(PRODUCT_UPDATE_M, { input: { id: row.product_id, descriptionHtml: row.new_descriptionHtml } });
+          const ue = d.productUpdate.userErrors;
+          if (ue && ue.length) { errs.push({ mfr_sku: row.mfr_sku, step: 'productUpdate', userErrors: ue }); continue; }
+          const wrote = d.productUpdate.product?.descriptionHtml;
+          if (wrote !== row.new_descriptionHtml) {
+            errs.push({ mfr_sku: row.mfr_sku, step: 'productUpdate', why: 'readback descriptionHtml mismatch' }); continue;
+          }
+        }
+        ok++;
+      } catch (e) {
+        errs.push({ mfr_sku: row.mfr_sku, why: 'write threw: ' + e.message });
+        continue;
+      }
+    }
+    console.log(`[apply] batch ${Math.floor(i / BATCH) + 1}: ${ok}/${resolved.length} labeled  (errors so far: ${errs.length})`);
+  }
+
+  ledger({
+    ts: new Date().toISOString(), agent: 'vp-dw-commerce', ticket: 'TK-10873',
+    action: `Zoffany wide-width unit-labeling — rename sellable option value "${OLD_VALUE}"->"${NEW_VALUE}" + append per-yard PDP line on ${ok} ACTIVE products`,
+    blast_radius: ok,
+    undo_cmd: `node ${DIR}apply_labeling.mjs --revert ${RESTORE_OUT} --i-understand-this-is-live`,
+    verify: `restore map ${RESTORE_OUT}; readback-verified each write`,
+  });
+
+  console.log(`\n[apply] DONE. labeled+verified=${ok}  errors=${errs.length}`);
+  if (errs.length) console.log(JSON.stringify(errs.slice(0, 20), null, 2));
+  process.exit(errs.length ? 1 : 0);
+}
+
+// ── MODE: revert (LIVE undo) ──────────────────────────────────────────────────
+async function runRevert() {
+  if (!LIVE_OK) { console.error('REFUSING: --revert requires --i-understand-this-is-live.'); process.exit(2); }
+  const map = JSON.parse(fs.readFileSync(REVERT_MAP, 'utf8'));
+  const rows = map.rows || map;
+  console.log(`[revert] restoring ${rows.length} products' option value + description from ${REVERT_MAP}…`);
+  let ok = 0, errs = [];
+  for (const row of rows) {
+    try {
+      // (a) restore the option value name
+      if (row.old_value_name !== row.new_value_name) {
+        const d = await gql(OPTION_UPDATE_M, {
+          productId: row.product_id,
+          option: { id: row.option_id },
+          optionValuesToUpdate: [{ id: row.sellable_value_id, name: row.old_value_name }],
+        });
+        const ue = d.productOptionUpdate.userErrors;
+        if (ue && ue.length) { errs.push({ mfr_sku: row.mfr_sku, step: 'optionUpdate', userErrors: ue }); continue; }
+      }
+      // (b) restore the description
+      if (row.old_descriptionHtml !== row.new_descriptionHtml) {
+        const d = await gql(PRODUCT_UPDATE_M, { input: { id: row.product_id, descriptionHtml: row.old_descriptionHtml } });
+        const ue = d.productUpdate.userErrors;
+        if (ue && ue.length) { errs.push({ mfr_sku: row.mfr_sku, step: 'productUpdate', userErrors: ue }); continue; }
+      }
+      ok++;
+    } catch (e) { errs.push({ mfr_sku: row.mfr_sku, why: 'revert threw: ' + e.message }); continue; }
+  }
+  ledger({
+    ts: new Date().toISOString(), agent: 'vp-dw-commerce', ticket: 'TK-10873',
+    action: `REVERT Zoffany wide-width unit-labeling — restored ${ok} products' option value + description`,
+    blast_radius: ok, undo_cmd: 're-run --apply to redo', verify: `from ${REVERT_MAP}`,
+  });
+  console.log(`[revert] DONE. restored=${ok}  errors=${errs.length}`);
+  if (errs.length) console.log(JSON.stringify(errs.slice(0, 20), null, 2));
+  process.exit(errs.length ? 1 : 0);
+}
+
+// ── dispatch ──────────────────────────────────────────────────────────────────
+(async () => {
+  if (REVERT_MAP) return runRevert();
+  if (APPLY) return runApply();
+  return runPlan();
+})().catch(e => { console.error('FATAL:', e.message); process.exit(1); });
diff --git a/tk10873/apply_labeling.restore_map.preview.json b/tk10873/apply_labeling.restore_map.preview.json
new file mode 100644
index 0000000..60dd70c
--- /dev/null
+++ b/tk10873/apply_labeling.restore_map.preview.json
@@ -0,0 +1,502 @@
+{
+  "ticket": "TK-10873",
+  "mode": "preview",
+  "count": 45,
+  "rows": [
+    {
+      "mfr_sku": "ZOW0123-02",
+      "product_id": "gid://shopify/Product/7866101432371",
+      "option_id": "gid://shopify/ProductOption/10025808592947",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4444240478259",
+      "old_value_name": "Default Title",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>This all time Zoffany classic has been repainted in a relaxed watercolour style. A hand drawn interpretation of an original document, its influences are thought to come from a late 19th century French artwork, painted to emulate earlier (17th to early 18th century) woven and embroidered textiles. Quirky and uplifting, Baroque-style scrolling foliage and stylised flowers give an overall effect that is rather grand, hence the name Pompadour. Digitally printed on a woven grasscloth. Price by the metre/yard - Random cut.</p>",
+      "new_descriptionHtml": "<p>This all time Zoffany classic has been repainted in a relaxed watercolour style. A hand drawn interpretation of an original document, its influences are thought to come from a late 19th century French artwork, painted to emulate earlier (17th to early 18th century) woven and embroidered textiles. Quirky and uplifting, Baroque-style scrolling foliage and stylised flowers give an overall effect that is rather grand, hence the name Pompadour. Digitally printed on a woven grasscloth. Price by the metre/yard - Random cut.</p>\n<p>Sold by the linear yard. 55\" (139 cm) wide — one yard covers ~13.7 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0123-03",
+      "product_id": "gid://shopify/Product/7794227675187",
+      "option_id": "gid://shopify/ProductOption/9935680798771",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715272208435",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>This all time Zoffany classic has been repainted in a relaxed watercolour style. A hand drawn interpretation of an original document, its influences are thought to come from a late 19th century French artwork, painted to emulate earlier (17th to early 18th century) woven and embroidered textiles. Quirky and uplifting, Baroque-style scrolling foliage and stylised flowers give an overall effect that is rather grand, hence the name Pompadour. Digitally printed on a woven grasscloth.Priced by the metre/yard - Random cut.</p>\n<p><strong>Pompadour Print - Multi</strong></p>",
+      "new_descriptionHtml": "<p>This all time Zoffany classic has been repainted in a relaxed watercolour style. A hand drawn interpretation of an original document, its influences are thought to come from a late 19th century French artwork, painted to emulate earlier (17th to early 18th century) woven and embroidered textiles. Quirky and uplifting, Baroque-style scrolling foliage and stylised flowers give an overall effect that is rather grand, hence the name Pompadour. Digitally printed on a woven grasscloth.Priced by the metre/yard - Random cut.</p>\n<p><strong>Pompadour Print - Multi</strong></p>\n<p>Sold by the linear yard. 55\" (139 cm) wide — one yard covers ~13.7 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0128-01",
+      "product_id": "gid://shopify/Product/7793953177651",
+      "option_id": "gid://shopify/ProductOption/9935362916403",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715258642483",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Trailing floral vines create an open frame around the emperor`s musician as birds and peacocks listen on intently. This beautiful, chinoiserie scene is taken from an 18th century wallcovering document, possibly inspired by oriental draughtsman Jean-Baptiste Pillement. Printed on a paper backed fine textile ground to emphasise the appearance of fabric covered walls.</p>\n<p><strong>Emperors Musician - La Seine</strong></p>",
+      "new_descriptionHtml": "<p>Trailing floral vines create an open frame around the emperor`s musician as birds and peacocks listen on intently. This beautiful, chinoiserie scene is taken from an 18th century wallcovering document, possibly inspired by oriental draughtsman Jean-Baptiste Pillement. Printed on a paper backed fine textile ground to emphasise the appearance of fabric covered walls.</p>\n<p><strong>Emperors Musician - La Seine</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0128-02",
+      "product_id": "gid://shopify/Product/7793953210419",
+      "option_id": "gid://shopify/ProductOption/9935362949171",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715259035699",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Trailing floral vines create an open frame around the emperor`s musician as birds and peacocks listen on intently. This beautiful, chinoiserie scene is taken from an 18th century wallcovering document, possibly inspired by oriental draughtsman Jean-Baptiste Pillement. Printed on a paper backed fine textile ground to emphasise the appearance of fabric covered walls.</p>\n<p><strong>Emperors Musician - Charcoal</strong></p>",
+      "new_descriptionHtml": "<p>Trailing floral vines create an open frame around the emperor`s musician as birds and peacocks listen on intently. This beautiful, chinoiserie scene is taken from an 18th century wallcovering document, possibly inspired by oriental draughtsman Jean-Baptiste Pillement. Printed on a paper backed fine textile ground to emphasise the appearance of fabric covered walls.</p>\n<p><strong>Emperors Musician - Charcoal</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0128-03",
+      "product_id": "gid://shopify/Product/7793953275955",
+      "option_id": "gid://shopify/ProductOption/9935363014707",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715259396147",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Trailing floral vines create an open frame around the emperor`s musician as birds and peacocks listen on intently. This beautiful, chinoiserie scene is taken from an 18th century wallcovering document, possibly inspired by oriental draughtsman Jean-Baptiste Pillement. Printed on a paper backed fine textile ground to emphasise the appearance of fabric covered walls.</p>\n<p><strong>Emperors Musician - Indigo</strong></p>",
+      "new_descriptionHtml": "<p>Trailing floral vines create an open frame around the emperor`s musician as birds and peacocks listen on intently. This beautiful, chinoiserie scene is taken from an 18th century wallcovering document, possibly inspired by oriental draughtsman Jean-Baptiste Pillement. Printed on a paper backed fine textile ground to emphasise the appearance of fabric covered walls.</p>\n<p><strong>Emperors Musician - Indigo</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0007-01",
+      "product_id": "gid://shopify/Product/7793954226227",
+      "option_id": "gid://shopify/ProductOption/9935363964979",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715265523763",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Depicting a lush pastoral landscape with a church and waterfalls, and influenced by religious and hunting themes, this wallcovering is based on a late 17th century painted cloth. Digitally printed on a non-woven paper in two colourways, it also available as a printed linen fabric. Stunning teamed with antiques, or by way of contrast alongside ultra-modern furniture pieces.Priced by the metre in 1.22 increments</p>\n<p><strong>Verdure 310430 - Lead Blue</strong></p>",
+      "new_descriptionHtml": "<p>Depicting a lush pastoral landscape with a church and waterfalls, and influenced by religious and hunting themes, this wallcovering is based on a late 17th century painted cloth. Digitally printed on a non-woven paper in two colourways, it also available as a printed linen fabric. Stunning teamed with antiques, or by way of contrast alongside ultra-modern furniture pieces.Priced by the metre in 1.22 increments</p>\n<p><strong>Verdure 310430 - Lead Blue</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0007-02",
+      "product_id": "gid://shopify/Product/7793954291763",
+      "option_id": "gid://shopify/ProductOption/9935364030515",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715266048051",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Depicting a lush pastoral landscape with a church and waterfalls, and influenced by religious and hunting themes, this wallcovering is based on a late 17th century painted cloth. Digitally printed on a non-woven paper in two colourways, it also available as a printed linen fabric. Stunning teamed with antiques, or by way of contrast alongside ultra-modern furniture pieces.Priced by the metre in increments of 1.22</p>\n<p><strong>Verdure 310431 - Tapestry Green</strong></p>",
+      "new_descriptionHtml": "<p>Depicting a lush pastoral landscape with a church and waterfalls, and influenced by religious and hunting themes, this wallcovering is based on a late 17th century painted cloth. Digitally printed on a non-woven paper in two colourways, it also available as a printed linen fabric. Stunning teamed with antiques, or by way of contrast alongside ultra-modern furniture pieces.Priced by the metre in increments of 1.22</p>\n<p><strong>Verdure 310431 - Tapestry Green</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0019-01",
+      "product_id": "gid://shopify/Product/7794234196019",
+      "option_id": "gid://shopify/ProductOption/9935687385139",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715310678067",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Peacock Garden is an enduring, iconic design first created ten years ago by artist Melissa White, and remains popular to this day. Luscious fruit-laden trees grow, lotus flowers and peacocks happily reside across this poetic Indian garden among the swirling clouds.</p>\n<p><strong>Peacock Garden - Linen/Silver</strong></p>",
+      "new_descriptionHtml": "<p>Peacock Garden is an enduring, iconic design first created ten years ago by artist Melissa White, and remains popular to this day. Luscious fruit-laden trees grow, lotus flowers and peacocks happily reside across this poetic Indian garden among the swirling clouds.</p>\n<p><strong>Peacock Garden - Linen/Silver</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0019-02",
+      "product_id": "gid://shopify/Product/7794234228787",
+      "option_id": "gid://shopify/ProductOption/9935687417907",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715311202355",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Peacock Garden is an enduring, iconic design first created ten years ago by artist Melissa White, and remains popular to this day. Luscious fruit-laden trees grow, lotus flowers and peacocks happily reside across this poetic Indian garden among the swirling clouds.</p>\n<p><strong>Peacock Garden - Green/Coral</strong></p>",
+      "new_descriptionHtml": "<p>Peacock Garden is an enduring, iconic design first created ten years ago by artist Melissa White, and remains popular to this day. Luscious fruit-laden trees grow, lotus flowers and peacocks happily reside across this poetic Indian garden among the swirling clouds.</p>\n<p><strong>Peacock Garden - Green/Coral</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0125-01",
+      "product_id": "gid://shopify/Product/7794227773491",
+      "option_id": "gid://shopify/ProductOption/9935680897075",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715272863795",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Celebrating 10 years since its launch, this hugely popular design by mural artist Melissa White is based on a 17th century painting. Depicting a lush pastoral landscape with a church, waterfalls and stylised foliage, it`s influenced by religious and hunting themes. Introducing a new Indigo colourway, Verdure is digitally printed on non-woven paper and available in two further colours. Sold in increments of 1.22 metres.</p>\n<p><strong>Verdure - Indigo</strong></p>",
+      "new_descriptionHtml": "<p>Celebrating 10 years since its launch, this hugely popular design by mural artist Melissa White is based on a 17th century painting. Depicting a lush pastoral landscape with a church, waterfalls and stylised foliage, it`s influenced by religious and hunting themes. Introducing a new Indigo colourway, Verdure is digitally printed on non-woven paper and available in two further colours. Sold in increments of 1.22 metres.</p>\n<p><strong>Verdure - Indigo</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-01",
+      "product_id": "gid://shopify/Product/7794237374515",
+      "option_id": "gid://shopify/ProductOption/9935690629171",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715333812275",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Chalk</strong></p>",
+      "new_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Chalk</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-02",
+      "product_id": "gid://shopify/Product/7794237407283",
+      "option_id": "gid://shopify/ProductOption/9935690661939",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715334172723",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Silver</strong></p>",
+      "new_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Silver</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-03",
+      "product_id": "gid://shopify/Product/7794237472819",
+      "option_id": "gid://shopify/ProductOption/9935690727475",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715334697011",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Rose Quartz</strong></p>",
+      "new_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Rose Quartz</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-04",
+      "product_id": "gid://shopify/Product/7794237538355",
+      "option_id": "gid://shopify/ProductOption/9935690793011",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715335090227",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Platinum</strong></p>",
+      "new_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Platinum</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-05",
+      "product_id": "gid://shopify/Product/7794237603891",
+      "option_id": "gid://shopify/ProductOption/9935690858547",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715335385139",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Stone</strong></p>",
+      "new_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Stone</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-06",
+      "product_id": "gid://shopify/Product/7794237636659",
+      "option_id": "gid://shopify/ProductOption/9935690891315",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715335712819",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Green Tea</strong></p>",
+      "new_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Green Tea</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-07",
+      "product_id": "gid://shopify/Product/7794237702195",
+      "option_id": "gid://shopify/ProductOption/9935690956851",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715336302643",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Hessian Green</strong></p>",
+      "new_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Hessian Green</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-08",
+      "product_id": "gid://shopify/Product/7794237767731",
+      "option_id": "gid://shopify/ProductOption/9935691022387",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715336794163",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Pale Jade</strong></p>",
+      "new_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Pale Jade</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-09",
+      "product_id": "gid://shopify/Product/7794237833267",
+      "option_id": "gid://shopify/ProductOption/9935691087923",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715337121843",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Duck Egg</strong></p>",
+      "new_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Duck Egg</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-10",
+      "product_id": "gid://shopify/Product/7794237898803",
+      "option_id": "gid://shopify/ProductOption/9935691186227",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715337678899",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Blue Silk</strong></p>",
+      "new_descriptionHtml": "<p>&lt;p&gt;A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.&lt;/p&gt;&lt;p&gt;The natural characteristics of this vertical Moiré gives way to a regal and stately appearance. A constant texture across each panel creates the feeling of luxury.&lt;/p&gt;&lt;p&gt;Supplied trimmed on a non-woven backing.&lt;/p&gt;</p>\n<p><strong>Moire Wallcovering - Blue Silk</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0132-11",
+      "product_id": "gid://shopify/Product/7794237964339",
+      "option_id": "gid://shopify/ProductOption/9935691251763",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715338006579",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Shetland</strong></p>",
+      "new_descriptionHtml": "<p>A sense of movement and lucidity pervades these Moiré wallcovering. Woven in Italy using 100% fine cotton and traditionally finished by artisans to achieve the recognisable watermark quality of moiré fabric on wall. As one move around the room, the interplay of light at different angles heightens a sense of fluidity and movement. The soft palette and tactile quality of this fabric on wall gives a cocooning effect.</p>\n<p><strong>Moire Wallcovering - Shetland</strong></p>\n<p>Sold by the linear yard. 54\" (138 cm) wide — one yard covers ~13.6 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0144-01",
+      "product_id": "gid://shopify/Product/7794235146291",
+      "option_id": "gid://shopify/ProductOption/9935688368179",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715318640691",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Inspired by a 19th-century Kalamkari block print in Zoffany`s archive, Mughal Menagerie is abundant in design riches. An intricate, decorative border frames all manner of animals: peacocks, elephants, squirrels and goats sit on an opulent gold ground, using traditional and digital printing methods. Mazarine Blue is printed on a paper-backed fine textile ground to enhance the feel of a fabric-covered wall appearance. Sold by the metre.</p>\n<p><strong>Mughal Menagerie - Mazarine Blue</strong></p>",
+      "new_descriptionHtml": "<p>Inspired by a 19th-century Kalamkari block print in Zoffany`s archive, Mughal Menagerie is abundant in design riches. An intricate, decorative border frames all manner of animals: peacocks, elephants, squirrels and goats sit on an opulent gold ground, using traditional and digital printing methods. Mazarine Blue is printed on a paper-backed fine textile ground to enhance the feel of a fabric-covered wall appearance. Sold by the metre.</p>\n<p><strong>Mughal Menagerie - Mazarine Blue</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0041-01",
+      "product_id": "gid://shopify/Product/7793954684979",
+      "option_id": "gid://shopify/ProductOption/9935364423731",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715268538419",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Elegant, curvaceous flowers, leaves and tendrils loosely trail across this generously spaced wallcovering pattern, inspired by an 18th century English toile. Detailed botanical drawings sit upon a plain background printed in sophisticated colourways. Modernised through its monumental scale, this 137cm wide wallcovering is sold by the repeat of 189.2cm and multiples thereof. A fabric of the same name is also available.Priced by the metre</p>\n<p><strong>Phaedra - Silver</strong></p>",
+      "new_descriptionHtml": "<p>Elegant, curvaceous flowers, leaves and tendrils loosely trail across this generously spaced wallcovering pattern, inspired by an 18th century English toile. Detailed botanical drawings sit upon a plain background printed in sophisticated colourways. Modernised through its monumental scale, this 137cm wide wallcovering is sold by the repeat of 189.2cm and multiples thereof. A fabric of the same name is also available.Priced by the metre</p>\n<p><strong>Phaedra - Silver</strong></p>\n<p>Sold by the linear yard. 55\" (140 cm) wide — one yard covers ~13.8 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0041-02",
+      "product_id": "gid://shopify/Product/7793954717747",
+      "option_id": "gid://shopify/ProductOption/9935364456499",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715269062707",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Elegant, curvaceous flowers, leaves and tendrils loosely trail across this generously spaced wallcovering pattern, inspired by an 18th century English toile. Detailed botanical drawings sit upon a plain background printed in sophisticated colourways. Modernised through its monumental scale, this 137cm wide wallcovering is sold by the repeat of 189.2cm and multiples thereof. A fabric of the same name is also available.Priced by the metre</p>\n<p><strong>Phaedra - Prussian Blue</strong></p>",
+      "new_descriptionHtml": "<p>Elegant, curvaceous flowers, leaves and tendrils loosely trail across this generously spaced wallcovering pattern, inspired by an 18th century English toile. Detailed botanical drawings sit upon a plain background printed in sophisticated colourways. Modernised through its monumental scale, this 137cm wide wallcovering is sold by the repeat of 189.2cm and multiples thereof. A fabric of the same name is also available.Priced by the metre</p>\n<p><strong>Phaedra - Prussian Blue</strong></p>\n<p>Sold by the linear yard. 55\" (140 cm) wide — one yard covers ~13.8 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0075-01",
+      "product_id": "gid://shopify/Product/7794228658227",
+      "option_id": "gid://shopify/ProductOption/9935681814579",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715278467123",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Featuring a striking central tree trunk and etched bird motif, this delicate wallcovering is adorned with sophisticated metallic highlights. With influences drawn from Temple Newsam, a Jacobean house near Leeds, this design is a recreated fabric from the much loved Chintz design for their first collection in 1983. Smart with painted woodwork. A toile and velvet of the same name is also available.</p>\n<p><strong>Darnley - Snow</strong></p>",
+      "new_descriptionHtml": "<p>Featuring a striking central tree trunk and etched bird motif, this delicate wallcovering is adorned with sophisticated metallic highlights. With influences drawn from Temple Newsam, a Jacobean house near Leeds, this design is a recreated fabric from the much loved Chintz design for their first collection in 1983. Smart with painted woodwork. A toile and velvet of the same name is also available.</p>\n<p><strong>Darnley - Snow</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0075-02",
+      "product_id": "gid://shopify/Product/7794228690995",
+      "option_id": "gid://shopify/ProductOption/9935681847347",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715278794803",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Featuring a striking central tree trunk and etched bird motif, this delicate wallcovering is adorned with sophisticated metallic highlights. With influences drawn from Temple Newsam, a Jacobean house near Leeds, this design is a recreated fabric from the much loved Chintz design for their first collection in 1983. Smart with painted woodwork. A toile and velvet of the same name is also available.</p>\n<p><strong>Darnley - Dove</strong></p>",
+      "new_descriptionHtml": "<p>Featuring a striking central tree trunk and etched bird motif, this delicate wallcovering is adorned with sophisticated metallic highlights. With influences drawn from Temple Newsam, a Jacobean house near Leeds, this design is a recreated fabric from the much loved Chintz design for their first collection in 1983. Smart with painted woodwork. A toile and velvet of the same name is also available.</p>\n<p><strong>Darnley - Dove</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0075-03",
+      "product_id": "gid://shopify/Product/7794228789299",
+      "option_id": "gid://shopify/ProductOption/9935681945651",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715279122483",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A striking damask wallcovering with an extra high repeat makes this design perfect for high ceilings. Named after the Duchess of Devonshire, this design is rotary printed on a wide-width paper in gentle colourways to suit classic and contemporary interiors.</p>\n<p><strong>Darnley - Tigers Eye</strong></p>",
+      "new_descriptionHtml": "<p>A striking damask wallcovering with an extra high repeat makes this design perfect for high ceilings. Named after the Duchess of Devonshire, this design is rotary printed on a wide-width paper in gentle colourways to suit classic and contemporary interiors.</p>\n<p><strong>Darnley - Tigers Eye</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0081-01",
+      "product_id": "gid://shopify/Product/7794230067251",
+      "option_id": "gid://shopify/ProductOption/9935683223603",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715288657971",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Joyous, large-scale roses in full bloom are printed on linen evoking memories of a golden era. Flamboyant and mesmerising, this beautiful wallcovering has a timeless quality and was inspired by a 19th century archive design. The use of unusual colour combinations retains the antique textures of the original document. A fabric of the same name is also available.</p>\n<p><strong>Rose Absolute - Linen/Gold</strong></p>",
+      "new_descriptionHtml": "<p>Joyous, large-scale roses in full bloom are printed on linen evoking memories of a golden era. Flamboyant and mesmerising, this beautiful wallcovering has a timeless quality and was inspired by a 19th century archive design. The use of unusual colour combinations retains the antique textures of the original document. A fabric of the same name is also available.</p>\n<p><strong>Rose Absolute - Linen/Gold</strong></p>\n<p>Sold by the linear yard. 56\" (142 cm) wide — one yard covers ~14 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0108-01",
+      "product_id": "gid://shopify/Product/7794236457011",
+      "option_id": "gid://shopify/ProductOption/9935689711667",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715328307251",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Paradise Row - This glorious hand drawn artwork takes its influences from botanical studies and unique flora gathered from around the world. Accurate watercolour tones showcase the beauty of this original wallcovering.</p>\n<p><strong>Paradise Row - Evergreen</strong></p>",
+      "new_descriptionHtml": "<p>Paradise Row - This glorious hand drawn artwork takes its influences from botanical studies and unique flora gathered from around the world. Accurate watercolour tones showcase the beauty of this original wallcovering.</p>\n<p><strong>Paradise Row - Evergreen</strong></p>\n<p>Sold by the linear yard. 56\" (142 cm) wide — one yard covers ~14 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0032-01",
+      "product_id": "gid://shopify/Product/7794235867187",
+      "option_id": "gid://shopify/ProductOption/9935689089075",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715323818035",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>This spectacular skyscape of celestial quality was painted to scale using large brushes to create an all-over textural wallcovering. Printed in colourways inspired by the earth and sea, one colourway is printed on a grass cloth base and two further versions as wide-width scenic wallcoverings and sold by the metre.</p>\n<p><strong>Sansui (On Unique Ground) - Indigo Wash</strong></p>",
+      "new_descriptionHtml": "<p>This spectacular skyscape of celestial quality was painted to scale using large brushes to create an all-over textural wallcovering. Printed in colourways inspired by the earth and sea, one colourway is printed on a grass cloth base and two further versions as wide-width scenic wallcoverings and sold by the metre.</p>\n<p><strong>Sansui (On Unique Ground) - Indigo Wash</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0124-01",
+      "product_id": "gid://shopify/Product/7794227740723",
+      "option_id": "gid://shopify/ProductOption/9935680864307",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715272536115",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Depicting storks stood at the water`s edge and small birds perched on nearby branches, the original version of this wallcovering is believed to date between 1825 and 1850. Discovered hidden behind oak panelling at Temple Newsham in 1894, this adaptation`s pictorial scene is framed by bamboo lattice work, which amplifies the height of the design. Digitally printed on woven grass cloth.</p>\n<p><strong>Storks &amp; Thrushes Tuscan Pink/Cobalt - Tuscan Pink / Cobalt</strong></p>",
+      "new_descriptionHtml": "<p>Depicting storks stood at the water`s edge and small birds perched on nearby branches, the original version of this wallcovering is believed to date between 1825 and 1850. Discovered hidden behind oak panelling at Temple Newsham in 1894, this adaptation`s pictorial scene is framed by bamboo lattice work, which amplifies the height of the design. Digitally printed on woven grass cloth.</p>\n<p><strong>Storks &amp; Thrushes Tuscan Pink/Cobalt - Tuscan Pink / Cobalt</strong></p>\n<p>Sold by the linear yard. 55\" (139 cm) wide — one yard covers ~13.7 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0033-01",
+      "product_id": "gid://shopify/Product/7794235932723",
+      "option_id": "gid://shopify/ProductOption/9935689154611",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715324309555",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>This spectacular skyscape of celestial quality was painted to scale using large brushes to create an all-over textural wallcovering. Printed in colourways inspired by the earth and sea, one colourway is printed on a grass cloth base and two further versions as wide-width scenic wallcoverings and sold by the metre.</p>\n<p><strong>Sansui - Snow Peaks</strong></p>",
+      "new_descriptionHtml": "<p>This spectacular skyscape of celestial quality was painted to scale using large brushes to create an all-over textural wallcovering. Printed in colourways inspired by the earth and sea, one colourway is printed on a grass cloth base and two further versions as wide-width scenic wallcoverings and sold by the metre.</p>\n<p><strong>Sansui - Snow Peaks</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0131-01",
+      "product_id": "gid://shopify/Product/7793953636403",
+      "option_id": "gid://shopify/ProductOption/9935363375155",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715261493299",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes - Stockholm Blue</strong></p>",
+      "new_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes - Stockholm Blue</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0131-02",
+      "product_id": "gid://shopify/Product/7793953701939",
+      "option_id": "gid://shopify/ProductOption/9935363440691",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715261952051",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes - Mousseaux</strong></p>",
+      "new_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes - Mousseaux</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0131-03",
+      "product_id": "gid://shopify/Product/7793953767475",
+      "option_id": "gid://shopify/ProductOption/9935363506227",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715262050355",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes - Empire Grey</strong></p>",
+      "new_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes - Empire Grey</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0131-04",
+      "product_id": "gid://shopify/Product/7793953800243",
+      "option_id": "gid://shopify/ProductOption/9935363538995",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715262378035",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes Tigers Eye - Tiger`s Eye</strong></p>",
+      "new_descriptionHtml": "<p>Throughout the 18th century, pineapples became a symbol of prosperity and wealth amongst the English elite, with Arcadian Thames resident and poet, Alexander Pope, trading the exotic fruits for items of importance and curiosity. Our homage to this highly regarded fruit captures the distinctive character of indigo resist prints.</p>\n<p><strong>Pina De Indes Tigers Eye - Tiger`s Eye</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZDAR312884",
+      "product_id": "gid://shopify/Product/7866101661747",
+      "option_id": "gid://shopify/ProductOption/10025808822323",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4444240707635",
+      "old_value_name": "Default Title",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>A striking damask wallcovering with an extra high repeat makes this design perfect for high ceilings. Named after the Duchess of Devonshire, this design is rotary printed on a wide-width paper in gentle colourways to suit classic and contemporary interiors.</p>",
+      "new_descriptionHtml": "<p>A striking damask wallcovering with an extra high repeat makes this design perfect for high ceilings. Named after the Duchess of Devonshire, this design is rotary printed on a wide-width paper in gentle colourways to suit classic and contemporary interiors.</p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0043-01",
+      "product_id": "gid://shopify/Product/7793954947123",
+      "option_id": "gid://shopify/ProductOption/9935364685875",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715270635571",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Arresting and opulent, this oversized paisley design depicts kaleidoscopic star bursts on paper backed fabric to add depth and complexity, drama and intrigue. A wallcovering of the same name is also available.Priced by the metre</p>\n<p><strong>Elswick Paisley - Blue Umber</strong></p>",
+      "new_descriptionHtml": "<p>Arresting and opulent, this oversized paisley design depicts kaleidoscopic star bursts on paper backed fabric to add depth and complexity, drama and intrigue. A wallcovering of the same name is also available.Priced by the metre</p>\n<p><strong>Elswick Paisley - Blue Umber</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0043-02",
+      "product_id": "gid://shopify/Product/7794234294323",
+      "option_id": "gid://shopify/ProductOption/9935687483443",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715311497267",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>This large-scale paisley design features a complex interplay of unfurling, fluid motifs on a cotton-wool blend fabric. Inspired by antique paisley rugs, the Elswick Paisley brings a subtle sense of intrigue and timeless elegance to a space.</p>\n<p><strong>Elswick Paisley - Sunstone</strong></p>",
+      "new_descriptionHtml": "<p>This large-scale paisley design features a complex interplay of unfurling, fluid motifs on a cotton-wool blend fabric. Inspired by antique paisley rugs, the Elswick Paisley brings a subtle sense of intrigue and timeless elegance to a space.</p>\n<p><strong>Elswick Paisley - Sunstone</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0127-01",
+      "product_id": "gid://shopify/Product/7793952981043",
+      "option_id": "gid://shopify/ProductOption/9935362719795",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4208935436339",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Evocative of the Arcadian Thames, an elegant trail of branches, leaves and calling birds embodies simplicity and romanticism. Retaining the same textural appearance as its fabric counterpart, this pared back design is printed on a paper backed fine textile wallcovering.</p>",
+      "new_descriptionHtml": "<p>Evocative of the Arcadian Thames, an elegant trail of branches, leaves and calling birds embodies simplicity and romanticism. Retaining the same textural appearance as its fabric counterpart, this pared back design is printed on a paper backed fine textile wallcovering.</p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0127-02",
+      "product_id": "gid://shopify/Product/7793953046579",
+      "option_id": "gid://shopify/ProductOption/9935362785331",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4208935567411",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Evocative of the Arcadian Thames, an elegant trail of branches, leaves and calling birds embodies simplicity and romanticism. Retaining the same textural appearance as its fabric counterpart, this pared back design is printed on a paper backed fine textile wallcovering.</p>",
+      "new_descriptionHtml": "<p>Evocative of the Arcadian Thames, an elegant trail of branches, leaves and calling birds embodies simplicity and romanticism. Retaining the same textural appearance as its fabric counterpart, this pared back design is printed on a paper backed fine textile wallcovering.</p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0127-03",
+      "product_id": "gid://shopify/Product/7793953112115",
+      "option_id": "gid://shopify/ProductOption/9935362850867",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715250679859",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Evocative of the Arcadian Thames, an elegant trail of branches, leaves and calling birds embodies simplicity and romanticism. Retaining the same textural appearance as its fabric counterpart, this pared back design is printed on a paper backed fine textile wallcovering.</p>\n<p><strong>Eleonora Print - Stockholm Blue</strong></p>",
+      "new_descriptionHtml": "<p>Evocative of the Arcadian Thames, an elegant trail of branches, leaves and calling birds embodies simplicity and romanticism. Retaining the same textural appearance as its fabric counterpart, this pared back design is printed on a paper backed fine textile wallcovering.</p>\n<p><strong>Eleonora Print - Stockholm Blue</strong></p>\n<p>Sold by the linear yard. 54\" (136 cm) wide — one yard covers ~13.4 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0129-01",
+      "product_id": "gid://shopify/Product/7793953341491",
+      "option_id": "gid://shopify/ProductOption/9935363080243",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715259822131",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Scrolling trails of delicate florals, bugs and butterflies adorn this decorative wallcovering which is inspired by an archival hand painted Chinese silk table runner.</p>\n<p><strong>Henrietta`s Trail - Perfect White</strong></p>",
+      "new_descriptionHtml": "<p>Scrolling trails of delicate florals, bugs and butterflies adorn this decorative wallcovering which is inspired by an archival hand painted Chinese silk table runner.</p>\n<p><strong>Henrietta`s Trail - Perfect White</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0129-02",
+      "product_id": "gid://shopify/Product/7793953407027",
+      "option_id": "gid://shopify/ProductOption/9935363145779",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715260149811",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Scrolling trails of delicate florals, bugs and butterflies adorn this decorative wallcovering which is inspired by an archival hand painted Chinese silk table runner.</p>\n<p><strong>Henrietta`s Trail - Stockholm Blue</strong></p>",
+      "new_descriptionHtml": "<p>Scrolling trails of delicate florals, bugs and butterflies adorn this decorative wallcovering which is inspired by an archival hand painted Chinese silk table runner.</p>\n<p><strong>Henrietta`s Trail - Stockholm Blue</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    },
+    {
+      "mfr_sku": "ZOW0129-03",
+      "product_id": "gid://shopify/Product/7793953472563",
+      "option_id": "gid://shopify/ProductOption/9935363211315",
+      "sellable_value_id": "gid://shopify/ProductOptionValue/4715260477491",
+      "old_value_name": "Sold Per Roll",
+      "new_value_name": "Per Yard",
+      "old_descriptionHtml": "<p>Scrolling trails of delicate florals, bugs and butterflies adorn this decorative wallcovering which is inspired by an archival hand painted Chinese silk table runner.</p>\n<p><strong>Henrietta`s Trail - Vine Black</strong></p>",
+      "new_descriptionHtml": "<p>Scrolling trails of delicate florals, bugs and butterflies adorn this decorative wallcovering which is inspired by an archival hand painted Chinese silk table runner.</p>\n<p><strong>Henrietta`s Trail - Vine Black</strong></p>\n<p>Sold by the linear yard. 54\" (137 cm) wide — one yard covers ~13.5 sq ft. Order the number of yards required for your project; we recommend confirming yardage before ordering.</p>",
+      "_note": "PREVIEW only — the live --apply run re-reads + captures this map from a live read BEFORE any write."
+    }
+  ]
+}
\ No newline at end of file

← c12e702 TK-10873: build retire_dupes.mjs (restore-map-first, reversi  ·  back to Sanderson Onboard  ·  TK-10873: apply_labeling.mjs dry-run 44/44 clean (dropped re 7fd6304 →