[object Object]

← back to Gmc Titlefix

TK-11493: sub-100px featured-image remediation plan + dry-run executor (22 fixes: 20 Scalamandré Scene7 same-asset, 2 reorder; 3 vendor-fetch tail)

9ff16888746d01baa6c68798fd5e8160b762596a · 2026-09-12 20:13:14 -0700 · Steve Abrams

Read-only census re-verified all 25 live. Key finding: the 13 Scalamandré 'bigger' pos2 images are a WRONG COLORWAY of the same pattern — a naive reorder would ship the wrong color; plan instead re-fetches the correct Scene7 asset id. Shopify image writes stay GATED (executor dry-run by default).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KfevHRTapvcS2vMNNuC31z

Files touched

Diff

commit 9ff16888746d01baa6c68798fd5e8160b762596a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sat Sep 12 20:13:14 2026 -0700

    TK-11493: sub-100px featured-image remediation plan + dry-run executor (22 fixes: 20 Scalamandré Scene7 same-asset, 2 reorder; 3 vendor-fetch tail)
    
    Read-only census re-verified all 25 live. Key finding: the 13 Scalamandré 'bigger' pos2 images are a WRONG COLORWAY of the same pattern — a naive reorder would ship the wrong color; plan instead re-fetches the correct Scene7 asset id. Shopify image writes stay GATED (executor dry-run by default).
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01KfevHRTapvcS2vMNNuC31z
---
 data/tk11493-census.json           | 430 +++++++++++++++++++++++++++++++++++++
 data/tk11493-remediation-plan.json | 270 +++++++++++++++++++++++
 tk11493-apply-plan.mjs             |  53 +++++
 3 files changed, 753 insertions(+)

diff --git a/data/tk11493-census.json b/data/tk11493-census.json
new file mode 100644
index 0000000..71cca6f
--- /dev/null
+++ b/data/tk11493-census.json
@@ -0,0 +1,430 @@
+[
+  {
+    "handle": "faux-leaf-squares-fls-2768",
+    "vendor": "Hollywood Wallcoverings",
+    "old_wh": "94x94",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "94x94",
+    "feat_min": 94,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "puget-s-pineapple-scr-7919",
+    "vendor": "Designer Wallcoverings",
+    "old_wh": "80x104",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "80x104",
+    "feat_min": 80,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "896x1152",
+        "min": 896,
+        "src": "room-living_room-puget-s-pineapple-scr-7919.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "love-stars-cor-23333",
+    "vendor": "Coordonn\u00e9",
+    "old_wh": "90x58",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "90x58",
+    "feat_min": 58,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "lola-leaf-stripes-cor-23336",
+    "vendor": "Coordonn\u00e9",
+    "old_wh": "90x69",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "90x69",
+    "feat_min": 69,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0030g1193",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0031g1193",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0034g1193",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0038g1193",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0003g1194",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0001wp88366",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 1,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0004wp88366",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": []
+  },
+  {
+    "handle": "sc_0002wp88367",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0003WP88367_00ac1346-834a-4305-b808-de88c8b160d9.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0005wp88367",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0003WP88367_125de157-00cf-42b4-a19e-6cafcab7f0c3.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0005wp88368",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0002WP88368_3f0d0ed6-2c4d-43b3-9716-f6defbbcec57.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0003wp88369",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0004WP88369_919e4586-467d-45f8-abbe-3cee983685dc.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0004wp88370",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0003WP88370_12347bc2-d623-445b-8a8c-2f3688cc7978.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0004wp88371",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0001WP88371_a6b2edfe-9889-47e3-8c40-251d9cae5f1a.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0003wp88372",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0001WP88372_29a08abd-bf4b-46cf-a2c5-10f2e5b4b3ce.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0002wp88373",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0007WP88373_cc95ca47-d801-481a-b9eb-15ba5ccf9dad.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0003wp88374",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0004WP88374_b6e96243-d8bd-4acc-a092-70e722fc1401.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0003wp88375",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0004WP88375_24c86ad5-8440-4d45-ba23-9af04e196200.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0003wp88381",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0001WP88381_f357e889-a84b-4b8c-be3a-3f7e823d9f12.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0002wp88383",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0001WP88383_0342b811-e4f2-4d85-b9ad-e1b20098565d.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "sc_0001wp88416",
+    "vendor": "Scalamandre Wallpaper",
+    "old_wh": "10x16",
+    "live": true,
+    "published": true,
+    "n_images": 2,
+    "feat_wh": "10x16",
+    "feat_min": 10,
+    "bigger_on_product": [
+      {
+        "pos": 2,
+        "wh": "400x533",
+        "min": 400,
+        "src": "SC_0002WP88416_5983583e-1c10-4c8e-bdfd-d84907287f60.jpg"
+      }
+    ]
+  },
+  {
+    "handle": "danville-contemporary-architectural-fabrics",
+    "vendor": "Architectural Fabrics",
+    "old_wh": "1x1",
+    "live": true,
+    "published": true,
+    "n_images": 11,
+    "feat_wh": "1x1",
+    "feat_min": 1,
+    "bigger_on_product": [
+      {
+        "pos": 3,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "DWRW-190070-sofa-setting.png"
+      },
+      {
+        "pos": 4,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "DWRW-190070-chair-setting.png"
+      },
+      {
+        "pos": 5,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "DWRW-190070-hotel-lobby.png"
+      },
+      {
+        "pos": 6,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "1b37aab678be2b39802317f800fe4ec4.png"
+      },
+      {
+        "pos": 7,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "c2d33c4c91d91c07a2b9c0db012b13d5.png"
+      },
+      {
+        "pos": 8,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "34181e5f46339476379c7401286cb5f3.png"
+      },
+      {
+        "pos": 9,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "f53c5a9b9350ca613255a22ed00e01cb.png"
+      },
+      {
+        "pos": 10,
+        "wh": "1024x1024",
+        "min": 1024,
+        "src": "48cab8dc3fbdc3f4a4decbaf9ba0e18f.png"
+      },
+      {
+        "pos": 2,
+        "wh": "400x400",
+        "min": 400,
+        "src": "DWKR-190070-circular-swatch.png"
+      }
+    ]
+  }
+]
\ No newline at end of file
diff --git a/data/tk11493-remediation-plan.json b/data/tk11493-remediation-plan.json
new file mode 100644
index 0000000..b03de4a
--- /dev/null
+++ b/data/tk11493-remediation-plan.json
@@ -0,0 +1,270 @@
+{
+  "ticket": "TK-11493",
+  "generated": "2026-09-13",
+  "by": "w20-worker",
+  "note": "25 ACTIVE products with featured image <100px (GMC image_too_small DISAPPROVED zone). 22 have a deterministic correct-colorway fix here; 3 (2 Coordonn\u00e9 + 1 Hollywood) need a vendor image fetch and are listed separately in tail_needs_vendor_source, NOT in rows.",
+  "rows": [
+    {
+      "handle": "sc_0030g1193",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0030g1193",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0030G1193?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0030G1193"
+    },
+    {
+      "handle": "sc_0031g1193",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0031g1193",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0031G1193?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0031G1193"
+    },
+    {
+      "handle": "sc_0034g1193",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0034g1193",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0034G1193?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0034G1193"
+    },
+    {
+      "handle": "sc_0038g1193",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0038g1193",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0038G1193?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0038G1193"
+    },
+    {
+      "handle": "sc_0003g1194",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0003g1194",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0003G1194?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0003G1194"
+    },
+    {
+      "handle": "sc_0001wp88366",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0001wp88366",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0001WP88366?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0001WP88366"
+    },
+    {
+      "handle": "sc_0004wp88366",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0004wp88366",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0004WP88366?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0004WP88366"
+    },
+    {
+      "handle": "sc_0002wp88367",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0002wp88367",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0002WP88367?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0002WP88367"
+    },
+    {
+      "handle": "sc_0005wp88367",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0005wp88367",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0005WP88367?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0005WP88367"
+    },
+    {
+      "handle": "sc_0005wp88368",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0005wp88368",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0005WP88368?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0005WP88368"
+    },
+    {
+      "handle": "sc_0003wp88369",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0003wp88369",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0003WP88369?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0003WP88369"
+    },
+    {
+      "handle": "sc_0004wp88370",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0004wp88370",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0004WP88370?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0004WP88370"
+    },
+    {
+      "handle": "sc_0004wp88371",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0004wp88371",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0004WP88371?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0004WP88371"
+    },
+    {
+      "handle": "sc_0003wp88372",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0003wp88372",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0003WP88372?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0003WP88372"
+    },
+    {
+      "handle": "sc_0002wp88373",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0002wp88373",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0002WP88373?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0002WP88373"
+    },
+    {
+      "handle": "sc_0003wp88374",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0003wp88374",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0003WP88374?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0003WP88374"
+    },
+    {
+      "handle": "sc_0003wp88375",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0003wp88375",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0003WP88375?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0003WP88375"
+    },
+    {
+      "handle": "sc_0003wp88381",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0003wp88381",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0003WP88381?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0003WP88381"
+    },
+    {
+      "handle": "sc_0002wp88383",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0002wp88383",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0002WP88383?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0002WP88383"
+    },
+    {
+      "handle": "sc_0001wp88416",
+      "vendor": "Scalamandre Wallpaper",
+      "action": "ADD",
+      "title": "sc_0001wp88416",
+      "before_featured": "10x16",
+      "after_featured": "https://s7d2.scene7.com/is/image/starkcarpet/SC_0001WP88416?$Full%5FImages$",
+      "after_size": "1200x954",
+      "source": "scene7 same-asset (correct colorway)",
+      "sku_asset": "SC_0001WP88416"
+    },
+    {
+      "handle": "puget-s-pineapple-scr-7919",
+      "vendor": "Designer Wallcoverings",
+      "action": "REORDER_FEATURED",
+      "title": null,
+      "before_featured": "80x104",
+      "after_featured": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-puget-s-pineapple-scr-7919.jpg",
+      "after_size": "896x1152",
+      "source": "on-product pos2, filename matches handle (correct product)"
+    },
+    {
+      "handle": "danville-contemporary-architectural-fabrics",
+      "vendor": "Architectural Fabrics",
+      "action": "REORDER_FEATURED",
+      "title": null,
+      "before_featured": "1x1",
+      "after_featured": "https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWKR-190070-circular-swatch.png",
+      "after_size": "400x400",
+      "source": "on-product pos2 circular swatch (DWKR-190070). EYEBALL: confirm 190070==Danville & prefer a >=500px tile if one of pos6-8 is a flat swatch",
+      "needs_eyeball": true
+    }
+  ],
+  "tail_needs_vendor_source": [
+    {
+      "handle": "love-stars-cor-23333",
+      "vendor": "Coordonn\u00e9",
+      "feat": "90x58",
+      "why": "only tiny image on product; not in coordonne_catalog by pattern/sku; needs coordonne.com fetch"
+    },
+    {
+      "handle": "lola-leaf-stripes-cor-23336",
+      "vendor": "Coordonn\u00e9",
+      "feat": "90x69",
+      "why": "only tiny image on product; not in coordonne_catalog; needs coordonne.com fetch. SETTLEMENT-GATE (leaf pattern) before publish."
+    },
+    {
+      "handle": "faux-leaf-squares-fls-2768",
+      "vendor": "Hollywood Wallcoverings",
+      "feat": "94x94",
+      "why": "FLS-2768 not in hollywood_catalog (sibling colorways present only as sample thumbnails); needs Momentum/Versa vendor fetch. SETTLEMENT-GATE (leaf pattern) before publish."
+    }
+  ],
+  "wrong_colorway_finding": "The 13 Scalamandr\u00e9 products each carry a pos2 image of a DIFFERENT colorway of the same pattern (e.g. sc_0002wp88367 carries a SC_0003WP88367 swatch). A naive reorder-to-those would ship the WRONG COLOR. This plan ignores those pos2 images and instead re-fetches the CORRECT asset id from Scene7 for all 20 Scalamandr\u00e9."
+}
\ No newline at end of file
diff --git a/tk11493-apply-plan.mjs b/tk11493-apply-plan.mjs
new file mode 100644
index 0000000..8768d6b
--- /dev/null
+++ b/tk11493-apply-plan.mjs
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+/** TK-11493 executor for data/tk11493-remediation-plan.json.
+ *  Fixes the 22 in-plan ACTIVE products whose featured image is <100px (GMC image_too_small
+ *  DISAPPROVED zone). 20 Scalamandré = ADD the full-size Scene7 image of the SAME asset id
+ *  (correct colorway, no wrong-colorway risk) and make it featured; 2 = REORDER an existing
+ *  larger on-product image to featured. The 3 tail items (2 Coordonné + 1 Hollywood) are NOT
+ *  in rows — they need a vendor image fetch first.
+ *
+ *  Pattern reused verbatim from tk11448-apply-plan.mjs (proven on the 2026-09-11 placeholder fix).
+ *  DRY-RUN BY DEFAULT. Requires --apply AND ticket approval to write.
+ *  Records a per-row undo into data/tk11493-apply-ledger.jsonl BEFORE each write.
+ *  Canary-first: --canary N writes the first N rows, then stops for a human look.
+ *  Undo: REORDER_FEATURED -> productReorderMedia back to before_media_order;
+ *        ADD -> productDeleteMedia the created media id (recorded in the ledger). */
+import fs from 'fs';
+const APPLY=process.argv.includes('--apply');
+const CAN=(()=>{const i=process.argv.indexOf('--canary');return i>0?+process.argv[i+1]:0;})();
+const SHOP='designer-laboratory-sandbox';
+const tok=(fs.readFileSync(process.env.HOME+'/Projects/secrets-manager/.env','utf8').match(/^SHOPIFY_FULL_ACCESS_TOKEN=(.+)$/m)||[])[1];
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(`https://${SHOP}.myshopify.com/admin/api/2024-10/graphql.json`,{method:'POST',headers:{'X-Shopify-Access-Token':tok,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v}),signal:AbortSignal.timeout(60000)});const j=await r.json();if(j.errors){if(JSON.stringify(j.errors).includes('THROTTLED')&&a<5){await new Promise(z=>setTimeout(z,2500*(a+1)));continue;}throw new Error(JSON.stringify(j.errors).slice(0,300));}return j.data;}throw new Error('throttled');}
+const plan=JSON.parse(fs.readFileSync('data/tk11493-remediation-plan.json','utf8'));
+let rows=plan.rows; if(CAN) rows=rows.slice(0,CAN);
+console.log(`${APPLY?'APPLY':'DRY-RUN'} | TK-11493 | rows ${rows.length} of ${plan.rows.length}`);
+if(!APPLY){ for(const r of rows) console.log('  would',r.action.padEnd(16),r.handle.padEnd(42),'->',r.after_size,String(r.after_featured).slice(0,80));
+  console.log(`\nTail (need vendor fetch, NOT fired): ${plan.tail_needs_vendor_source.map(t=>t.handle).join(', ')}`);
+  console.log('DRY-RUN ONLY. Nothing written. Re-run with --apply (or --apply --canary 3) after ticket approval.'); process.exit(0); }
+const led=fs.createWriteStream('data/tk11493-apply-ledger.jsonl',{flags:'a'});
+for(const r of rows){
+  const cur=await gql(`query($h:String!){productByHandle(handle:$h){id media(first:30){edges{node{id ... on MediaImage{image{url}}}}}}}`,{h:r.handle});
+  const p=cur.productByHandle; if(!p){console.log('  SKIP (handle not found)',r.handle);continue;}
+  const before=p.media.edges.map(e=>e.node.id);
+  led.write(JSON.stringify({ts:new Date().toISOString(),ticket:'TK-11493',handle:r.handle,productId:p.id,action:r.action,
+    before_media_order:before,before_featured:r.before_featured,
+    undo:r.action==='REORDER_FEATURED'?'productReorderMedia to before_media_order':'productDeleteMedia the created id'})+'\n');
+  if(r.action==='REORDER_FEATURED'){
+    const target=p.media.edges.find(e=>e.node.image&&e.node.image.url.split('?')[0]===r.after_featured.split('?')[0]);
+    if(!target){console.log('  SKIP (target media not found on product)',r.handle);continue;}
+    const res=await gql(`mutation($id:ID!,$m:[MoveInput!]!){productReorderMedia(id:$id,moves:$m){userErrors{field message}}}`,{id:p.id,m:[{id:target.node.id,newPosition:'0'}]});
+    console.log('  REORDER',r.handle,JSON.stringify(res.productReorderMedia.userErrors));
+  } else { // ADD + feature
+    const res=await gql(`mutation($id:ID!,$m:[CreateMediaInput!]!){productCreateMedia(productId:$id,media:$m){media{id status} mediaUserErrors{field message}}}`,
+      {id:p.id,m:[{originalSource:r.after_featured,mediaContentType:'IMAGE',alt:r.title}]});
+    const err=res.productCreateMedia.mediaUserErrors;
+    if(err&&err.length){console.log('  ERR',r.handle,JSON.stringify(err));continue;}
+    const newId=res.productCreateMedia.media[0].id;
+    led.write(JSON.stringify({ts:new Date().toISOString(),ticket:'TK-11493',handle:r.handle,created_media_id:newId,undo:`productDeleteMedia ${newId}`})+'\n');
+    await new Promise(z=>setTimeout(z,4000)); // let Shopify finish processing before reorder
+    const res2=await gql(`mutation($id:ID!,$m:[MoveInput!]!){productReorderMedia(id:$id,moves:$m){userErrors{field message}}}`,{id:p.id,m:[{id:newId,newPosition:'0'}]});
+    console.log('  ADD+FEATURE',r.handle,newId,r.after_size,JSON.stringify(res2.productReorderMedia.userErrors));
+  }
+  await new Promise(z=>setTimeout(z,800));
+}
+led.end(); console.log('ledger -> data/tk11493-apply-ledger.jsonl');

← b1fe027 TK-11449: execute Steve-approved orphan-unpublish (61) + pri  ·  back to Gmc Titlefix  ·  TK-11493: apply-ledger for 22 live featured-image fixes (rev 72268cd →