[object Object]

← back to Designerwallcoverings

TK-11076 Anna French colorway retag: remediate+rollback+canary (stopped-canary-unsafe — strip cannot cleanly separate palette noise from real colors)

9b0e1287a0b2bca04929a4330d02002364979204 · 2026-09-01 12:44:54 -0700 · Steve Abrams

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

Files touched

Diff

commit 9b0e1287a0b2bca04929a4330d02002364979204
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Sep 1 12:44:54 2026 -0700

    TK-11076 Anna French colorway retag: remediate+rollback+canary (stopped-canary-unsafe — strip cannot cleanly separate palette noise from real colors)
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 .../out/tk11076-canary-diff.json                   |  574 +++++++++
 scripts/anna-french-onboard/out/tk11076-skips.json | 1213 ++++++++++++++++++++
 scripts/anna-french-onboard/tk11076-remediate.mjs  |  307 +++++
 scripts/anna-french-onboard/tk11076-rollback.mjs   |   43 +
 4 files changed, 2137 insertions(+)

diff --git a/scripts/anna-french-onboard/out/tk11076-canary-diff.json b/scripts/anna-french-onboard/out/tk11076-canary-diff.json
new file mode 100644
index 0000000..1488a51
--- /dev/null
+++ b/scripts/anna-french-onboard/out/tk11076-canary-diff.json
@@ -0,0 +1,574 @@
+[
+  {
+    "handle": "dwta-65215designerwallcoverings-los-angeles",
+    "mfr": "AT9876",
+    "status": "ACTIVE",
+    "title": "Waves - Charcoal Wallcovering | Anna French",
+    "anchor_colorway": "Charcoal",
+    "set_facet": "color:Charcoal",
+    "stripped_wrong_facet": [],
+    "stripped_bg_descriptor": [],
+    "stripped_ai_palette_strays": [
+      "Gray",
+      "Gunmetal",
+      "Silver",
+      "Steel"
+    ],
+    "KEPT_color_tags": [
+      "Dark Gray",
+      "Denim",
+      "Gold",
+      "Light Gray",
+      "Navy",
+      "Yellow",
+      "Charcoal"
+    ],
+    "old_tags": [
+      "Abstract",
+      "AI-Analyzed-v2",
+      "Anna French",
+      "Architectural",
+      "AT9876",
+      "Bathroom",
+      "Bedroom",
+      "Class A Fire Rated",
+      "Coastal",
+      "Commercial",
+      "Contemporary",
+      "Dark Gray",
+      "Denim",
+      "display_variant",
+      "Geometric",
+      "Gold",
+      "Gray",
+      "Gunmetal",
+      "Japonisme",
+      "Light Gray",
+      "Living Room",
+      "Navy",
+      "Office",
+      "Paper",
+      "Scandinavian",
+      "Showroom Line",
+      "Silver",
+      "Smoke",
+      "Steel",
+      "Wallcovering",
+      "Waves",
+      "Yellow"
+    ],
+    "new_tags": [
+      "Abstract",
+      "AI-Analyzed-v2",
+      "Anna French",
+      "Architectural",
+      "AT9876",
+      "Bathroom",
+      "Bedroom",
+      "Class A Fire Rated",
+      "Coastal",
+      "Commercial",
+      "Contemporary",
+      "Dark Gray",
+      "Denim",
+      "display_variant",
+      "Geometric",
+      "Gold",
+      "Japonisme",
+      "Light Gray",
+      "Living Room",
+      "Navy",
+      "Office",
+      "Paper",
+      "Scandinavian",
+      "Showroom Line",
+      "Smoke",
+      "Wallcovering",
+      "Waves",
+      "Yellow",
+      "color:Charcoal",
+      "Charcoal"
+    ]
+  },
+  {
+    "handle": "tate-trellis-black-anna-french",
+    "mfr": "AT57883",
+    "status": "ACTIVE",
+    "title": "Tate Trellis Black Wallcovering",
+    "anchor_colorway": "Black",
+    "set_facet": "color:Black",
+    "stripped_wrong_facet": [],
+    "stripped_bg_descriptor": [],
+    "stripped_ai_palette_strays": [
+      "Light Gray",
+      "Pearl",
+      "Silver",
+      "Taupe"
+    ],
+    "KEPT_color_tags": [
+      "Ash Gray",
+      "Black",
+      "Cream",
+      "Ivory",
+      "Neutral",
+      "Stone",
+      "Warm Gray"
+    ],
+    "old_tags": [
+      "Ash Gray",
+      "AT57883",
+      "Bedroom",
+      "Black",
+      "Botanical",
+      "Bristol",
+      "Calm",
+      "Contemporary",
+      "Cream",
+      "Dining Room",
+      "display_variant",
+      "Elegant",
+      "Entryway",
+      "Floral",
+      "Foliage",
+      "Geometric",
+      "Ivory",
+      "Light Gray",
+      "Living Room",
+      "Medium Scale",
+      "Neutral",
+      "Off-White",
+      "Office",
+      "Pattern",
+      "Pearl",
+      "Powder Room",
+      "Refined",
+      "Silver",
+      "Sophisticated",
+      "Stone",
+      "Tate Trellis",
+      "Taupe",
+      "Thibaut Wallcovering",
+      "Traditional",
+      "Transitional",
+      "Trellis",
+      "Wallcovering",
+      "Warm Gray"
+    ],
+    "new_tags": [
+      "Ash Gray",
+      "AT57883",
+      "Bedroom",
+      "Black",
+      "Botanical",
+      "Bristol",
+      "Calm",
+      "Contemporary",
+      "Cream",
+      "Dining Room",
+      "display_variant",
+      "Elegant",
+      "Entryway",
+      "Floral",
+      "Foliage",
+      "Geometric",
+      "Ivory",
+      "Living Room",
+      "Medium Scale",
+      "Neutral",
+      "Off-White",
+      "Office",
+      "Pattern",
+      "Powder Room",
+      "Refined",
+      "Sophisticated",
+      "Stone",
+      "Tate Trellis",
+      "Thibaut Wallcovering",
+      "Traditional",
+      "Transitional",
+      "Trellis",
+      "Wallcovering",
+      "Warm Gray",
+      "color:Black"
+    ]
+  },
+  {
+    "handle": "camellia-garden-navy-and-linen-anna-french",
+    "mfr": "AT24553",
+    "status": "ACTIVE",
+    "title": "Camellia Garden - Navy and Linen Wallcovering | Anna French",
+    "anchor_colorway": "Navy And Linen",
+    "set_facet": "color:Navy And Linen",
+    "stripped_wrong_facet": [],
+    "stripped_bg_descriptor": [],
+    "stripped_ai_palette_strays": [
+      "Steel Blue",
+      "White"
+    ],
+    "KEPT_color_tags": [
+      "Beige",
+      "Blue",
+      "Bone White",
+      "Champagne",
+      "Cream",
+      "Denim Blue",
+      "Linen",
+      "Slate Blue",
+      "Taupe"
+    ],
+    "old_tags": [
+      "ANNA FRENCH AT DW",
+      "Architectural",
+      "AT24553",
+      "Bedroom",
+      "Beige",
+      "Blue",
+      "Bone White",
+      "Botanical",
+      "CAMELLIA",
+      "Champagne",
+      "Coastal",
+      "Contemporary",
+      "Cream",
+      "Denim Blue",
+      "Dining Room",
+      "display_variant",
+      "Entryway",
+      "Floral",
+      "GARDEN",
+      "Hospitality",
+      "Linen",
+      "Living Room",
+      "material-group-non-woven",
+      "Non-woven",
+      "Residential",
+      "Rustic",
+      "Showroom Line",
+      "Slate Blue",
+      "Steel Blue",
+      "Taupe",
+      "Traditional",
+      "Transitional",
+      "Wallcovering",
+      "White"
+    ],
+    "new_tags": [
+      "ANNA FRENCH AT DW",
+      "Architectural",
+      "AT24553",
+      "Bedroom",
+      "Beige",
+      "Blue",
+      "Bone White",
+      "Botanical",
+      "CAMELLIA",
+      "Champagne",
+      "Coastal",
+      "Contemporary",
+      "Cream",
+      "Denim Blue",
+      "Dining Room",
+      "display_variant",
+      "Entryway",
+      "Floral",
+      "GARDEN",
+      "Hospitality",
+      "Linen",
+      "Living Room",
+      "material-group-non-woven",
+      "Non-woven",
+      "Residential",
+      "Rustic",
+      "Showroom Line",
+      "Slate Blue",
+      "Taupe",
+      "Traditional",
+      "Transitional",
+      "Wallcovering",
+      "color:Navy And Linen",
+      "Navy And Linen"
+    ]
+  },
+  {
+    "handle": "buddy-blue-anna-french",
+    "mfr": "AT24602",
+    "status": "ACTIVE",
+    "title": "Buddy - Light Blue Wallcovering | Anna French",
+    "anchor_colorway": "Blue",
+    "set_facet": "color:Blue",
+    "stripped_wrong_facet": [],
+    "stripped_bg_descriptor": [],
+    "stripped_ai_palette_strays": [
+      "Powder Blue",
+      "White"
+    ],
+    "KEPT_color_tags": [
+      "Beige",
+      "Blue",
+      "Light Blue",
+      "Taupe"
+    ],
+    "old_tags": [
+      "AI-Analyzed-v2",
+      "Animal",
+      "Animal/Insects",
+      "Anna French",
+      "ANNA FRENCH AT DW",
+      "Architectural",
+      "AT24602",
+      "Bathroom",
+      "Bedroom",
+      "Beige",
+      "Blue",
+      "Coastal",
+      "Commercial",
+      "display_variant",
+      "Dog",
+      "Entryway",
+      "Farmhouse",
+      "Light Blue",
+      "Living Room",
+      "Nursery",
+      "Office",
+      "Paper",
+      "Powder Blue",
+      "Scandinavian",
+      "Showroom Line",
+      "Taupe",
+      "Traditional",
+      "Transitional",
+      "Wallcovering",
+      "White"
+    ],
+    "new_tags": [
+      "AI-Analyzed-v2",
+      "Animal",
+      "Animal/Insects",
+      "Anna French",
+      "ANNA FRENCH AT DW",
+      "Architectural",
+      "AT24602",
+      "Bathroom",
+      "Bedroom",
+      "Beige",
+      "Blue",
+      "Coastal",
+      "Commercial",
+      "display_variant",
+      "Dog",
+      "Entryway",
+      "Farmhouse",
+      "Light Blue",
+      "Living Room",
+      "Nursery",
+      "Office",
+      "Paper",
+      "Scandinavian",
+      "Showroom Line",
+      "Taupe",
+      "Traditional",
+      "Transitional",
+      "Wallcovering",
+      "color:Blue"
+    ]
+  },
+  {
+    "handle": "dwta-65133designerwallcoverings-los-angeles",
+    "mfr": "AT15121",
+    "status": "ACTIVE",
+    "title": "Cornwall - Green and Beige Fabric | Anna French",
+    "anchor_colorway": "Green And Beige",
+    "set_facet": "color:Green And Beige",
+    "stripped_wrong_facet": [],
+    "stripped_bg_descriptor": [],
+    "stripped_ai_palette_strays": [
+      "Linen"
+    ],
+    "KEPT_color_tags": [
+      "Beige",
+      "Cream",
+      "Green",
+      "Light Beige",
+      "Light Green",
+      "Sage",
+      "White"
+    ],
+    "old_tags": [
+      "AI-Analyzed-v2",
+      "Anna French",
+      "Architectural",
+      "Asparagus",
+      "Bedroom",
+      "Beige",
+      "Botanical",
+      "Citron",
+      "Class A Fire Rated",
+      "Commercial",
+      "Cornwall",
+      "Cream",
+      "Creme",
+      "display_variant",
+      "Entryway",
+      "Fabric",
+      "Farmhouse",
+      "Floral",
+      "Green",
+      "Honeydew",
+      "Laurel",
+      "Lichen",
+      "Light Beige",
+      "Light Green",
+      "Linen",
+      "Living Room",
+      "Moss",
+      "Nursery",
+      "Paper",
+      "Pattern",
+      "Pesto",
+      "Pistachio",
+      "Putty",
+      "Sage",
+      "Scandinavian",
+      "Showroom Line",
+      "Thyme",
+      "Traditional",
+      "Wallcovering",
+      "White",
+      "Willow"
+    ],
+    "new_tags": [
+      "AI-Analyzed-v2",
+      "Anna French",
+      "Architectural",
+      "Asparagus",
+      "Bedroom",
+      "Beige",
+      "Botanical",
+      "Citron",
+      "Class A Fire Rated",
+      "Commercial",
+      "Cornwall",
+      "Cream",
+      "Creme",
+      "display_variant",
+      "Entryway",
+      "Fabric",
+      "Farmhouse",
+      "Floral",
+      "Green",
+      "Honeydew",
+      "Laurel",
+      "Lichen",
+      "Light Beige",
+      "Light Green",
+      "Living Room",
+      "Moss",
+      "Nursery",
+      "Paper",
+      "Pattern",
+      "Pesto",
+      "Pistachio",
+      "Putty",
+      "Sage",
+      "Scandinavian",
+      "Showroom Line",
+      "Thyme",
+      "Traditional",
+      "Wallcovering",
+      "White",
+      "Willow",
+      "color:Green And Beige",
+      "Green And Beige"
+    ]
+  },
+  {
+    "handle": "dwta-65010designerwallcoverings-los-angeles",
+    "mfr": "AT24600",
+    "status": "ACTIVE",
+    "title": "Buddy - Multi Wallcovering | Anna French",
+    "anchor_colorway": "Multi",
+    "set_facet": "color:Multi",
+    "stripped_wrong_facet": [],
+    "stripped_bg_descriptor": [],
+    "stripped_ai_palette_strays": [
+      "Ivory",
+      "White"
+    ],
+    "KEPT_color_tags": [
+      "Beige",
+      "Black",
+      "Cream",
+      "Gray",
+      "Grey",
+      "Multi"
+    ],
+    "old_tags": [
+      "Abstract",
+      "AI-Analyzed-v2",
+      "Animal",
+      "Animal/Insects",
+      "Anna French",
+      "ANNA FRENCH AT DW",
+      "Architectural",
+      "AT24600",
+      "Bathroom",
+      "Bedroom",
+      "Beige",
+      "Black",
+      "Coastal",
+      "Commercial",
+      "Cream",
+      "display_variant",
+      "Dog",
+      "Entryway",
+      "Farmhouse",
+      "Gray",
+      "Grey",
+      "Ivory",
+      "Living Room",
+      "Novelty",
+      "Nursery",
+      "Office",
+      "Orange",
+      "Paper",
+      "Showroom Line",
+      "Traditional",
+      "Wallcovering",
+      "White"
+    ],
+    "new_tags": [
+      "Abstract",
+      "AI-Analyzed-v2",
+      "Animal",
+      "Animal/Insects",
+      "Anna French",
+      "ANNA FRENCH AT DW",
+      "Architectural",
+      "AT24600",
+      "Bathroom",
+      "Bedroom",
+      "Beige",
+      "Black",
+      "Coastal",
+      "Commercial",
+      "Cream",
+      "display_variant",
+      "Dog",
+      "Entryway",
+      "Farmhouse",
+      "Gray",
+      "Grey",
+      "Living Room",
+      "Novelty",
+      "Nursery",
+      "Office",
+      "Orange",
+      "Paper",
+      "Showroom Line",
+      "Traditional",
+      "Wallcovering",
+      "color:Multi",
+      "Multi"
+    ]
+  }
+]
\ No newline at end of file
diff --git a/scripts/anna-french-onboard/out/tk11076-skips.json b/scripts/anna-french-onboard/out/tk11076-skips.json
new file mode 100644
index 0000000..7a83981
--- /dev/null
+++ b/scripts/anna-french-onboard/out/tk11076-skips.json
@@ -0,0 +1,1213 @@
+[
+  {
+    "handle": "samantha-s-striated-stripe-rop-73632",
+    "mfr": "73632",
+    "reason": "no anchor row",
+    "title": "Samantha's Striated Stripe"
+  },
+  {
+    "handle": "dwtt-70690-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Cape May Weave Teal - Teal Natural Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-70700-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Cordoza Weave Charcoal - Charcoal Gray Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-70750-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Fine Harvest Black - Black Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwta-65000designerwallcoverings-los-angeles",
+    "mfr": "AT24575",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65001designerwallcoverings-los-angeles",
+    "mfr": "AT24583",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65002designerwallcoverings-los-angeles",
+    "mfr": "AT24581",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Blush Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65003designerwallcoverings-los-angeles",
+    "mfr": "AT24576",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Flax Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65004designerwallcoverings-los-angeles",
+    "mfr": "AT24577",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Linen Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65005designerwallcoverings-los-angeles",
+    "mfr": "AT24582",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Light Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65006designerwallcoverings-los-angeles",
+    "mfr": "AT24580",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Robin's Egg Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65007designerwallcoverings-los-angeles",
+    "mfr": "AT24578",
+    "reason": "anchor colorway Default/blank",
+    "title": "Barlow Linen - Light Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65008designerwallcoverings-los-angeles",
+    "mfr": "AT24579",
+    "reason": "no anchor row",
+    "title": "Barlow Linen - Soft Green Fabric | Anna French"
+  },
+  {
+    "handle": "buddy-robins-egg-anna-french",
+    "mfr": "AT24603",
+    "reason": "anchor colorway Default/blank",
+    "title": "Buddy - Robin's Egg Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65030designerwallcoverings-los-angeles",
+    "mfr": "AT24542",
+    "reason": "no anchor row",
+    "title": "Ellery Stripe - Pale Blue Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65031designerwallcoverings-los-angeles",
+    "mfr": "AT24564",
+    "reason": "no anchor row",
+    "title": "Westmont - Green Wallcovering | Anna French"
+  },
+  {
+    "handle": "mini-sun-robins-egg-anna-french",
+    "mfr": "AT24567",
+    "reason": "anchor colorway Default/blank",
+    "title": "Mini Sun - Robin's Egg Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65042designerwallcoverings-los-angeles",
+    "mfr": "AT24557",
+    "reason": "no anchor row",
+    "title": "Pontorma - Green Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65057designerwallcoverings-los-angeles",
+    "mfr": "ATM24573",
+    "reason": "no anchor row",
+    "title": "Javanese Stripe - Wedgewood Blue Commercial Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65058designerwallcoverings-los-angeles",
+    "mfr": "ATM24571",
+    "reason": "no anchor row",
+    "title": "Javanese Stripe - Navy Commercial Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65059designerwallcoverings-los-angeles",
+    "mfr": "ATM24572",
+    "reason": "no anchor row",
+    "title": "Saybrook Check - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65060designerwallcoverings-los-angeles",
+    "mfr": "AT24590",
+    "reason": "no anchor row",
+    "title": "Wesley Stripe - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65064designerwallcoverings-los-angeles",
+    "mfr": "AT24589",
+    "reason": "no anchor row",
+    "title": "Wesley Stripe - Linen Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65079designerwallcoverings-los-angeles",
+    "mfr": "AT23161",
+    "reason": "no anchor row",
+    "title": "Bryson - Pale Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65080designerwallcoverings-los-angeles",
+    "mfr": "AT23165",
+    "reason": "no anchor row",
+    "title": "Bryson - Charcoal Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65082designerwallcoverings-los-angeles",
+    "mfr": "AT23164",
+    "reason": "no anchor row",
+    "title": "Bryson - Light Gray Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65092designerwallcoverings-los-angeles",
+    "mfr": "AT23170",
+    "reason": "no anchor row",
+    "title": "Keswick Stripe - Light Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65120designerwallcoverings-los-angeles",
+    "mfr": "ATWW15169",
+    "reason": "no anchor row",
+    "title": "Antilles Toile - Brown Commercial Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65121designerwallcoverings-los-angeles",
+    "mfr": "ATWW15172",
+    "reason": "no anchor row",
+    "title": "Antilles Toile | Anna French"
+  },
+  {
+    "handle": "dwta-65122designerwallcoverings-los-angeles",
+    "mfr": "ATWW15171",
+    "reason": "no anchor row",
+    "title": "Antilles Toile | Anna French"
+  },
+  {
+    "handle": "dwta-65123designerwallcoverings-los-angeles",
+    "mfr": "ATWW15170",
+    "reason": "no anchor row",
+    "title": "Edo Bloom - Apricot and Slate on Pearl Commercial Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65126designerwallcoverings-los-angeles",
+    "mfr": "AT15130",
+    "reason": "anchor colorway Default/blank",
+    "title": "Clipperton Stripe - Brown on Natural Fabric | Anna French"
+  },
+  {
+    "handle": "clipperton-stripe-navy-anna-french",
+    "mfr": "AT15128",
+    "reason": "anchor colorway Default/blank",
+    "title": "Clipperton Stripe - Navy Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65138designerwallcoverings-los-angeles",
+    "mfr": "AT15106",
+    "reason": "no anchor row",
+    "title": "Fern Stripe - Brown and Slate Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65140designerwallcoverings-los-angeles",
+    "mfr": "AT15101",
+    "reason": "no anchor row",
+    "title": "Fern Stripe - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65141designerwallcoverings-los-angeles",
+    "mfr": "AT15105",
+    "reason": "no anchor row",
+    "title": "Fern Stripe - Red and Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65142designerwallcoverings-los-angeles",
+    "mfr": "AT15103",
+    "reason": "no anchor row",
+    "title": "Fern Stripe - Spa Blue Fabric | Anna French"
+  },
+  {
+    "handle": "javanese-stripe-spa-blue-anna-french",
+    "mfr": "AT15140",
+    "reason": "anchor colorway Default/blank",
+    "title": "Javanese Stripe - Light Blue Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65157designerwallcoverings-los-angeles",
+    "mfr": "AT15161",
+    "reason": "no anchor row",
+    "title": "Julian - Ivory Fabric | Anna French"
+  },
+  {
+    "handle": "saybrook-check-beige-anna-french",
+    "mfr": "AT15143",
+    "reason": "anchor colorway Default/blank",
+    "title": "Saybrook Check - Beige Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65202designerwallcoverings-los-angeles",
+    "mfr": "AT9832",
+    "reason": "no anchor row",
+    "title": "Shadows - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65207designerwallcoverings-los-angeles",
+    "mfr": "AT9849",
+    "reason": "no anchor row",
+    "title": "Takao Weave - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "cleo-vine-green-and-white-anna-french",
+    "mfr": "AT9622",
+    "reason": "anchor colorway Default/blank",
+    "title": "Cleo Vine - Green and White Wallcovering | Anna French"
+  },
+  {
+    "handle": "gaya-emerald-green-anna-french",
+    "mfr": "AT9657",
+    "reason": "anchor colorway Default/blank",
+    "title": "Gaya - Emerald Green Natural Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65246designerwallcoverings-los-angeles",
+    "mfr": "AT9660",
+    "reason": "anchor colorway Default/blank",
+    "title": "Gaya Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65249designerwallcoverings-los-angeles",
+    "mfr": "AT9639",
+    "reason": "no anchor row",
+    "title": "Herriot Way - Flax Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65250designerwallcoverings-los-angeles",
+    "mfr": "AT9611",
+    "reason": "no anchor row",
+    "title": "Herriot Way Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65251designerwallcoverings-los-angeles",
+    "mfr": "AT9611",
+    "reason": "no anchor row",
+    "title": "Herriot Way Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65252designerwallcoverings-los-angeles",
+    "mfr": "AT9611",
+    "reason": "no anchor row",
+    "title": "Herriot Way - Spa Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65265designerwallcoverings-los-angeles",
+    "mfr": "AT9694",
+    "reason": "anchor colorway Default/blank",
+    "title": "Pyramid - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65266designerwallcoverings-los-angeles",
+    "mfr": "AT9696",
+    "reason": "no anchor row",
+    "title": "Pyramid - White Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65267designerwallcoverings-los-angeles",
+    "mfr": "AT9692",
+    "reason": "no anchor row",
+    "title": "Pyramid - Ivory Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65268designerwallcoverings-los-angeles",
+    "mfr": "AT9693",
+    "reason": "no anchor row",
+    "title": "Pyramid - Navy on White Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65269designerwallcoverings-los-angeles",
+    "mfr": "AT9695",
+    "reason": "no anchor row",
+    "title": "Pyramid - Smoke Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65270designerwallcoverings-los-angeles",
+    "mfr": "AT9607",
+    "reason": "no anchor row",
+    "title": "Riva Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65271designerwallcoverings-los-angeles",
+    "mfr": "AT9607",
+    "reason": "no anchor row",
+    "title": "Riva Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65273designerwallcoverings-los-angeles",
+    "mfr": "AT9608",
+    "reason": "no anchor row",
+    "title": "Riva - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65274designerwallcoverings-los-angeles",
+    "mfr": "AT9607",
+    "reason": "no anchor row",
+    "title": "Riva - Plum Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65275designerwallcoverings-los-angeles",
+    "mfr": "AT9606",
+    "reason": "no anchor row",
+    "title": "Riva - Red Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65276designerwallcoverings-los-angeles",
+    "mfr": "AT9604",
+    "reason": "no anchor row",
+    "title": "Riva - Soft Blue Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65312designerwallcoverings-los-angeles",
+    "mfr": "AT78746",
+    "reason": "no anchor row",
+    "title": "Gibson - Red Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65328designerwallcoverings-los-angeles",
+    "mfr": "AT78780",
+    "reason": "anchor colorway Default/blank",
+    "title": "Kahna Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65355designerwallcoverings-los-angeles",
+    "mfr": "DWAF-65355",
+    "reason": "no anchor row",
+    "title": "Mini Trellis Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65367designerwallcoverings-los-angeles",
+    "mfr": "DWAF-65367",
+    "reason": "no anchor row",
+    "title": "Tansman Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65369designerwallcoverings-los-angeles",
+    "mfr": "AT78732",
+    "reason": "anchor colorway Default/blank",
+    "title": "Tansman Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65371designerwallcoverings-los-angeles",
+    "mfr": "AT78766",
+    "reason": "no anchor row",
+    "title": "Vero Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65372designerwallcoverings-los-angeles",
+    "mfr": "AT78763",
+    "reason": "anchor colorway Default/blank",
+    "title": "Vero Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65373designerwallcoverings-los-angeles",
+    "mfr": "AT78766",
+    "reason": "no anchor row",
+    "title": "Vero Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65374designerwallcoverings-los-angeles",
+    "mfr": "AT78766",
+    "reason": "no anchor row",
+    "title": "Vero Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65375designerwallcoverings-los-angeles",
+    "mfr": "AT78766",
+    "reason": "no anchor row",
+    "title": "Vero - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65376designerwallcoverings-los-angeles",
+    "mfr": "AT78766",
+    "reason": "no anchor row",
+    "title": "Vero Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65386designerwallcoverings-los-angeles",
+    "mfr": "AT79130",
+    "reason": "no anchor row",
+    "title": "Balin Ikat - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65387designerwallcoverings-los-angeles",
+    "mfr": "AT79131",
+    "reason": "no anchor row",
+    "title": "Balin Ikat Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65388designerwallcoverings-los-angeles",
+    "mfr": "AT79131",
+    "reason": "no anchor row",
+    "title": "Balin Ikat Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65389designerwallcoverings-los-angeles",
+    "mfr": "AT79132",
+    "reason": "no anchor row",
+    "title": "Balin Ikat - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65391designerwallcoverings-los-angeles",
+    "mfr": "AT79131",
+    "reason": "no anchor row",
+    "title": "Balin Ikat - Sage Fabric | Anna French"
+  },
+  {
+    "handle": "cashiers-beige-anna-french",
+    "mfr": "AT79109",
+    "reason": "anchor colorway Default/blank",
+    "title": "Cashiers - Beige Wallcovering | Anna French"
+  },
+  {
+    "handle": "davis-dot-aqua-anna-french",
+    "mfr": "AT79163",
+    "reason": "anchor colorway Default/blank",
+    "title": "Davis Dot - Aqua Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65421designerwallcoverings-los-angeles",
+    "mfr": "AT79160",
+    "reason": "anchor colorway Default/blank",
+    "title": "Davis Dot Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65425designerwallcoverings-los-angeles",
+    "mfr": "AT79139",
+    "reason": "anchor colorway Default/blank",
+    "title": "Fairfield Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65445designerwallcoverings-los-angeles",
+    "mfr": "AT79182",
+    "reason": "no anchor row",
+    "title": "Manor - Ivory Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65446designerwallcoverings-los-angeles",
+    "mfr": "AT79185",
+    "reason": "no anchor row",
+    "title": "Manor - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65448designerwallcoverings-los-angeles",
+    "mfr": "AT79182",
+    "reason": "no anchor row",
+    "title": "Manor Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65467designerwallcoverings-los-angeles",
+    "mfr": "AT7918",
+    "reason": "anchor colorway Default/blank",
+    "title": "Mamba Wallcovering | Anna French"
+  },
+  {
+    "handle": "mamba-pearl-anna-french",
+    "mfr": "AT7918",
+    "reason": "anchor colorway Default/blank",
+    "title": "Mamba - Pearl Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65482designerwallcoverings-los-angeles",
+    "mfr": "AT7928",
+    "reason": "anchor colorway Default/blank",
+    "title": "Plumes Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65491designerwallcoverings-los-angeles",
+    "mfr": "AT7946",
+    "reason": "no anchor row",
+    "title": "Watercourse - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65494designerwallcoverings-los-angeles",
+    "mfr": "AT7947",
+    "reason": "no anchor row",
+    "title": "Watercourse - Taupe Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65499designerwallcoverings-los-angeles",
+    "mfr": "AT7915",
+    "reason": "no anchor row",
+    "title": "Willow Wood - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65513designerwallcoverings-los-angeles",
+    "mfr": "AT6140",
+    "reason": "no anchor row",
+    "title": "Dawson Stripe Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65514designerwallcoverings-los-angeles",
+    "mfr": "AT6140",
+    "reason": "no anchor row",
+    "title": "Dawson Stripe - Charcoal and Linen Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65515designerwallcoverings-los-angeles",
+    "mfr": "AT6141",
+    "reason": "anchor colorway Default/blank",
+    "title": "Dawson Stripe Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65516designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65516",
+    "reason": "no anchor row",
+    "title": "Mallorca Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65517designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65517",
+    "reason": "no anchor row",
+    "title": "Mallorca Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65584designerwallcoverings-los-angeles",
+    "mfr": "AT6032",
+    "reason": "anchor colorway Default/blank",
+    "title": "Zane Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65608designerwallcoverings-los-angeles",
+    "mfr": "AT34100",
+    "reason": "no anchor row",
+    "title": "Cholla Sisal - Off White Fabric | Anna French"
+  },
+  {
+    "handle": "livorette-citron-yellow-anna-french",
+    "mfr": "AT34127",
+    "reason": "anchor colorway Default/blank",
+    "title": "Livorette - Citron Yellow Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65619designerwallcoverings-los-angeles",
+    "mfr": "AT34127",
+    "reason": "anchor colorway Default/blank",
+    "title": "Livorette Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65622designerwallcoverings-los-angeles",
+    "mfr": "AT34127",
+    "reason": "anchor colorway Default/blank",
+    "title": "Livorette Wallcovering | Anna French"
+  },
+  {
+    "handle": "rue-de-seine-off-white-on-yellow-anna-french",
+    "mfr": "AT34140",
+    "reason": "anchor colorway Default/blank",
+    "title": "Rue De Seine - Off White on Yellow Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65629designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65629",
+    "reason": "no anchor row",
+    "title": "Tuileries Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65630designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65630",
+    "reason": "no anchor row",
+    "title": "Tuileries Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65631designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65631",
+    "reason": "no anchor row",
+    "title": "Tuileries Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65632designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65632",
+    "reason": "no anchor row",
+    "title": "Tuileries Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65633designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65633",
+    "reason": "no anchor row",
+    "title": "Tuileries Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65634designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65634",
+    "reason": "no anchor row",
+    "title": "Tyndall Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65636designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65636",
+    "reason": "no anchor row",
+    "title": "Tyndall Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65638designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65638",
+    "reason": "no anchor row",
+    "title": "Tyndall Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65639designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65639",
+    "reason": "no anchor row",
+    "title": "Zola Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65641designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65641",
+    "reason": "no anchor row",
+    "title": "Zola Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65390designerwallcoverings-los-angeles",
+    "mfr": "AT79131",
+    "reason": "no anchor row",
+    "title": "Balin Ikat Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65392designerwallcoverings-los-angeles",
+    "mfr": "AT79131",
+    "reason": "no anchor row",
+    "title": "Balin Ikat Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65498designerwallcoverings-los-angeles",
+    "mfr": "DWAF-65498",
+    "reason": "no anchor row",
+    "title": "Willow Wood Fabric | Anna French"
+  },
+  {
+    "handle": "dwta-65511designerwallcoverings-los-angeles",
+    "mfr": "AT6140",
+    "reason": "no anchor row",
+    "title": "Dawson Stripe Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65512designerwallcoverings-los-angeles",
+    "mfr": "AT6140",
+    "reason": "no anchor row",
+    "title": "Dawson Stripe Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65518designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65518",
+    "reason": "no anchor row",
+    "title": "Mallorca Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwta-65521designerwallcoverings-los-angeles",
+    "mfr": "DWAT-65521",
+    "reason": "no anchor row",
+    "title": "Mallorca Wallcovering | Anna French"
+  },
+  {
+    "handle": "dwtt-80250-designer-wallcoverings-los-angeles",
+    "mfr": "AT57818",
+    "reason": "no anchor row",
+    "title": "Beckley Stripe Soft Gold Wallcovering"
+  },
+  {
+    "handle": "dwtt-80251-designer-wallcoverings-los-angeles",
+    "mfr": "AT57820",
+    "reason": "no anchor row",
+    "title": "Beckley Stripe Beige Wallcovering"
+  },
+  {
+    "handle": "beckley-stripe-sky-anna-french",
+    "mfr": "AT57823",
+    "reason": "anchor colorway Default/blank",
+    "title": "Beckley Stripe Ivory Wallcovering"
+  },
+  {
+    "handle": "dwtt-80256-designer-wallcoverings-los-angeles",
+    "mfr": "AT57825",
+    "reason": "no anchor row",
+    "title": "Ensbury Fern Light Blue Wallcovering"
+  },
+  {
+    "handle": "dwtt-80284-designer-wallcoverings-los-angeles",
+    "mfr": "AT57863",
+    "reason": "no anchor row",
+    "title": "Balmuccia Damask Pearl Wallcovering"
+  },
+  {
+    "handle": "dwtt-80285-designer-wallcoverings-los-angeles",
+    "mfr": "AT57864",
+    "reason": "no anchor row",
+    "title": "Balmuccia Damask Beige Wallcovering"
+  },
+  {
+    "handle": "dwtt-80286-designer-wallcoverings-los-angeles",
+    "mfr": "AT57865",
+    "reason": "no anchor row",
+    "title": "Balmuccia Damask Blush Wallcovering"
+  },
+  {
+    "handle": "dwtt-80287-designer-wallcoverings-los-angeles",
+    "mfr": "AT57866",
+    "reason": "no anchor row",
+    "title": "Balmuccia Damask Soft Blue Wallcovering"
+  },
+  {
+    "handle": "dwtt-80288-designer-wallcoverings-los-angeles",
+    "mfr": "AT57867",
+    "reason": "no anchor row",
+    "title": "Balmuccia Damask Soft Green Wallcovering"
+  },
+  {
+    "handle": "dwtt-80290-designer-wallcoverings-los-angeles",
+    "mfr": "AT57869",
+    "reason": "no anchor row",
+    "title": "Balmuccia Damask Pewter on Chestnut Wallcovering"
+  },
+  {
+    "handle": "dwtt-80292-designer-wallcoverings-los-angeles",
+    "mfr": "AT57871",
+    "reason": "no anchor row",
+    "title": "Cielo Multi Wallcovering"
+  },
+  {
+    "handle": "dwtt-80294-designer-wallcoverings-los-angeles",
+    "mfr": "AT57873",
+    "reason": "no anchor row",
+    "title": "Cielo Slate Wallcovering"
+  },
+  {
+    "handle": "dwtt-80295-designer-wallcoverings-los-angeles",
+    "mfr": "AT57874",
+    "reason": "no anchor row",
+    "title": "Ashton Beige Wallcovering"
+  },
+  {
+    "handle": "dwtt-80299-designer-wallcoverings-los-angeles",
+    "mfr": "AT57879",
+    "reason": "no anchor row",
+    "title": "Tate Trellis Beige Wallcovering"
+  },
+  {
+    "handle": "dwtt-80301-designer-wallcoverings-los-angeles",
+    "mfr": "AT57881",
+    "reason": "no anchor row",
+    "title": "Tate Trellis Soft Blue Wallcovering"
+  },
+  {
+    "handle": "dwtt-80305-designer-wallcoverings-los-angeles",
+    "mfr": "AT57885",
+    "reason": "no anchor row",
+    "title": "Ensbury Fern Pearl Wallcovering"
+  },
+  {
+    "handle": "dwtt-80983-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Kyoto Asian Branches Navy Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-80985-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Kyoto Asian Branches Emerald Green Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-80986-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Kyoto Asian Branches Black Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-80988-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Kyoto Asian Branches Fuchsia Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-80991-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Shadows Brushstrokes Emerald Green Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-80996-designer-wallcoverings-los-angeles",
+    "mfr": "AT9839",
+    "reason": "no anchor row",
+    "title": "Charlotte Raffia Light Taupe Wallcovering"
+  },
+  {
+    "handle": "dwtt-80998-designer-wallcoverings-los-angeles",
+    "mfr": "AT9841",
+    "reason": "no anchor row",
+    "title": "Charlotte Raffia Tan Wallcovering"
+  },
+  {
+    "handle": "dwtt-81001-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Charlotte Geomteric Fret Natural Raffia Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-81011-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Kimono Geometric Robin'S Egg Aqua Wallcovering | Thibaut"
+  },
+  {
+    "handle": "dwtt-81025-designer-wallcoverings-los-angeles",
+    "reason": "foreign-vendor title",
+    "title": "Wallcovering | Thibaut"
+  },
+  {
+    "handle": "chelsea-fabrics-af57840-lavender-thibaut",
+    "mfr": "AT57840",
+    "reason": "no anchor row",
+    "title": "Chelsea - Lavender Fabric | Anna French"
+  },
+  {
+    "handle": "stockbridge-fabrics-af16137-lavender-and-blue-thibaut",
+    "mfr": "AT16137",
+    "reason": "no anchor row",
+    "title": "Stockbridge - Lavender and Blue Fabric | Anna French"
+  },
+  {
+    "handle": "stockbridge-fabrics-af16140-blush-thibaut",
+    "mfr": "AT16140",
+    "reason": "no anchor row",
+    "title": "Stockbridge - Blush Fabric | Anna French"
+  },
+  {
+    "handle": "laura-fabrics-af23101-lavender-and-green-thibaut",
+    "mfr": "AT23101",
+    "reason": "no anchor row",
+    "title": "Laura - Lavender and Green Fabric | Anna French"
+  },
+  {
+    "handle": "laura-fabrics-af23100-blush-and-green-thibaut",
+    "mfr": "AT23100",
+    "reason": "no anchor row",
+    "title": "Laura - Blush and Green Fabric | Anna French"
+  },
+  {
+    "handle": "laura-fabrics-af23105-blue-thibaut",
+    "mfr": "AT23105",
+    "reason": "no anchor row",
+    "title": "Laura - Blue Fabric | Anna French"
+  },
+  {
+    "handle": "laura-fabrics-af23103-coral-and-black-thibaut",
+    "mfr": "AT23103",
+    "reason": "no anchor row",
+    "title": "Laura - Coral and Black Fabric | Anna French"
+  },
+  {
+    "handle": "laura-fabrics-af23104-citrus-and-blue-thibaut",
+    "mfr": "AT23104",
+    "reason": "no anchor row",
+    "title": "Laura - Citrus and Blue Fabric | Anna French"
+  },
+  {
+    "handle": "peacock-toile-fabrics-af57828-soft-blue-and-beige-thibaut",
+    "mfr": "AT57828",
+    "reason": "no anchor row",
+    "title": "Peacock Toile - Soft Blue and Beige Fabric | Anna French"
+  },
+  {
+    "handle": "newlands-toile-fabrics-af57838-black-thibaut",
+    "mfr": "AT57838",
+    "reason": "no anchor row",
+    "title": "Newlands Toile - Black Fabric | Anna French"
+  },
+  {
+    "handle": "pontorma-fabrics-af24558-neutral-thibaut",
+    "mfr": "AT24558",
+    "reason": "anchor colorway Default/blank",
+    "title": "Pontorma - Neutral Fabric | Anna French"
+  },
+  {
+    "handle": "ellery-stripe-fabrics-af24542-white-on-soft-blue-thibaut",
+    "mfr": "AT24542",
+    "reason": "no anchor row",
+    "title": "Ellery Stripe - White on Soft Blue Fabric | Anna French"
+  },
+  {
+    "handle": "ellery-stripe-fabrics-af24543-sky-blue-on-white-thibaut",
+    "mfr": "AT24543",
+    "reason": "no anchor row",
+    "title": "Ellery Stripe - Sky Blue on White Fabric | Anna French"
+  },
+  {
+    "handle": "ellery-stripe-fabrics-af24547-navy-on-white-thibaut",
+    "mfr": "AT24547",
+    "reason": "no anchor row",
+    "title": "Ellery Stripe - Navy on White Fabric | Anna French"
+  },
+  {
+    "handle": "lindsey-fabrics-af57809-sand-thibaut",
+    "mfr": "AT57809",
+    "reason": "no anchor row",
+    "title": "Lindsey - Sand Fabric | Anna French"
+  },
+  {
+    "handle": "lindsey-fabrics-af57810-blush-thibaut",
+    "mfr": "AT57810",
+    "reason": "no anchor row",
+    "title": "Lindsey - Blush Fabric | Anna French"
+  },
+  {
+    "handle": "lindsey-fabrics-af57811-lavender-thibaut",
+    "mfr": "AT57811",
+    "reason": "no anchor row",
+    "title": "Lindsey - Lavender Fabric | Anna French"
+  },
+  {
+    "handle": "lindsey-fabrics-af57813-blue-thibaut",
+    "mfr": "AT57813",
+    "reason": "no anchor row",
+    "title": "Lindsey - Blue Fabric | Anna French"
+  },
+  {
+    "handle": "ellery-stripe-fabrics-af24548-navy-on-soft-teal-thibaut",
+    "mfr": "AT24548",
+    "reason": "no anchor row",
+    "title": "Ellery Stripe - Navy on Soft Teal Fabric | Anna French"
+  },
+  {
+    "handle": "sussex-hydrangea-fabrics-af57846-blue-and-green-thibaut",
+    "mfr": "AT57846",
+    "reason": "no anchor row",
+    "title": "Sussex Hydrangea - Blue and Green Fabric | Anna French"
+  },
+  {
+    "handle": "lindsey-fabrics-af57815-navy-thibaut",
+    "mfr": "AT57815",
+    "reason": "no anchor row",
+    "title": "Lindsey - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "cornwall-wallcoverings-af15124-red-and-blue-thibaut",
+    "reason": "foreign-vendor title",
+    "title": "Cornwall Wallcoverings – Red and Blue | Thibaut"
+  },
+  {
+    "handle": "chelsea-fabrics-af57842-slate-and-linen-thibaut",
+    "mfr": "AT57842",
+    "reason": "no anchor row",
+    "title": "Chelsea - Slate and Linen Fabric | Anna French"
+  },
+  {
+    "handle": "chelsea-fabrics-af57839-soft-blue-and-green-thibaut",
+    "mfr": "AT57839",
+    "reason": "no anchor row",
+    "title": "Chelsea - Soft Blue and Green Fabric | Anna French"
+  },
+  {
+    "handle": "chelsea-fabrics-af57843-chestnut-thibaut",
+    "mfr": "AT57843",
+    "reason": "no anchor row",
+    "title": "Chelsea - Chestnut Fabric | Anna French"
+  },
+  {
+    "handle": "stockbridge-fabrics-af16138-blue-thibaut",
+    "mfr": "AT16138",
+    "reason": "no anchor row",
+    "title": "Stockbridge - Blue Fabric | Anna French"
+  },
+  {
+    "handle": "stockbridge-fabrics-af16139-apricot-and-slate-thibaut",
+    "mfr": "AT16139",
+    "reason": "no anchor row",
+    "title": "Stockbridge - Apricot and Slate Fabric | Anna French"
+  },
+  {
+    "handle": "holly-trellis-fabrics-af16125-blue-thibaut",
+    "mfr": "AT16125",
+    "reason": "no anchor row",
+    "title": "Holly Trellis - Blue Fabric | Anna French"
+  },
+  {
+    "handle": "holly-trellis-fabrics-af16126-beige-thibaut",
+    "mfr": "AT16126",
+    "reason": "no anchor row",
+    "title": "Holly Trellis - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "garden-club-fabrics-af16133-apricot-and-slate-thibaut",
+    "mfr": "AT16133",
+    "reason": "no anchor row",
+    "title": "Garden Club - Apricot and Slate Fabric | Anna French"
+  },
+  {
+    "handle": "garden-club-fabrics-af16134-blue-thibaut",
+    "mfr": "AT16134",
+    "reason": "no anchor row",
+    "title": "Garden Club - Blue Fabric | Anna French"
+  },
+  {
+    "handle": "garden-club-fabrics-af16136-blush-thibaut",
+    "mfr": "AT16136",
+    "reason": "no anchor row",
+    "title": "Garden Club - Blush Fabric | Anna French"
+  },
+  {
+    "handle": "elwood-fabrics-af24563-navy-thibaut",
+    "mfr": "AT24563",
+    "reason": "no anchor row",
+    "title": "Elwood - Navy Fabric | Anna French"
+  },
+  {
+    "handle": "sussex-hydrangea-fabrics-af57848-soft-gold-thibaut",
+    "mfr": "AT57848",
+    "reason": "no anchor row",
+    "title": "Sussex Hydrangea - Soft Gold Fabric | Anna French"
+  },
+  {
+    "handle": "sussex-hydrangea-fabrics-af57849-white-and-green-thibaut",
+    "mfr": "AT57849",
+    "reason": "no anchor row",
+    "title": "Sussex Hydrangea - White and Green Fabric | Anna French"
+  },
+  {
+    "handle": "shadows-fabrics-af9836-eggplant-thibaut",
+    "mfr": "AT9836",
+    "reason": "no anchor row",
+    "title": "Shadows - Eggplant Fabric | Anna French"
+  },
+  {
+    "handle": "cornwall-blush-fabric-anna-french",
+    "mfr": "AT15119",
+    "reason": "anchor colorway Default/blank",
+    "title": "Cornwall Fabric – Blush | Anna French"
+  },
+  {
+    "handle": "shadows-fabrics-af9834-emerald-green-thibaut",
+    "mfr": "AT9834",
+    "reason": "no anchor row",
+    "title": "Shadows - Emerald Green Fabric | Anna French"
+  },
+  {
+    "handle": "shadows-fabrics-af9835-black-thibaut",
+    "mfr": "AT9835",
+    "reason": "no anchor row",
+    "title": "Shadows - Black Fabric | Anna French"
+  },
+  {
+    "handle": "julian-wallcoverings-af15164-brown-thibaut",
+    "reason": "foreign-vendor title",
+    "title": "Julian Wallcoverings – Brown | Thibaut"
+  },
+  {
+    "handle": "julian-fabrics-af15161-beige-and-spa-blue-thibaut",
+    "mfr": "AT15161",
+    "reason": "no anchor row",
+    "title": "Julian - Beige and Spa Blue Fabric | Anna French"
+  },
+  {
+    "handle": "lindsey-fabrics-af57817-black-thibaut",
+    "mfr": "AT57817",
+    "reason": "no anchor row",
+    "title": "Lindsey - Black Fabric | Anna French"
+  },
+  {
+    "handle": "pontorma-fabrics-af24555-soft-gold-thibaut",
+    "mfr": "AT24555",
+    "reason": "no anchor row",
+    "title": "Pontorma - Soft Gold Fabric | Anna French"
+  },
+  {
+    "handle": "sussex-hydrangea-fabrics-af57845-soft-blue-thibaut",
+    "mfr": "AT57845",
+    "reason": "no anchor row",
+    "title": "Sussex Hydrangea - Soft Blue Fabric | Anna French"
+  },
+  {
+    "handle": "laura-fabrics-af23102-sage-and-gold-thibaut",
+    "mfr": "AT23102",
+    "reason": "no anchor row",
+    "title": "Laura - Sage and Gold Fabric | Anna French"
+  },
+  {
+    "handle": "bloomsbury-square-fabrics-af23112-beige-thibaut",
+    "mfr": "AT23112",
+    "reason": "no anchor row",
+    "title": "Bloomsbury Square - Beige Fabric | Anna French"
+  },
+  {
+    "handle": "sussex-hydrangea-fabrics-af57847-slate-and-linen-thibaut",
+    "mfr": "AT57847",
+    "reason": "no anchor row",
+    "title": "Sussex Hydrangea - Slate and Linen Fabric | Anna French"
+  },
+  {
+    "handle": "peacock-toile-fabrics-af57830-blue-and-green-thibaut",
+    "mfr": "AT57830",
+    "reason": "no anchor row",
+    "title": "Peacock Toile - Blue and Green Fabric | Anna French"
+  },
+  {
+    "handle": "pontorma-fabrics-af24557-kelly-thibaut",
+    "mfr": "AT24557",
+    "reason": "no anchor row",
+    "title": "Pontorma - Kelly Fabric | Anna French"
+  },
+  {
+    "handle": "peacock-toile-fabrics-af57829-green-and-plum-thibaut",
+    "mfr": "AT57829",
+    "reason": "no anchor row",
+    "title": "Peacock Toile - Green and Plum Fabric | Anna French"
+  },
+  {
+    "handle": "pontorma-fabrics-af24559-rose-thibaut",
+    "mfr": "AT24559",
+    "reason": "no anchor row",
+    "title": "Pontorma - Rose Fabric | Anna French"
+  },
+  {
+    "handle": "cleo-green-and-white-anna-french",
+    "mfr": "AT9622",
+    "reason": "anchor colorway Default/blank",
+    "title": "Cleo - Green and White Fabric | Anna French"
+  },
+  {
+    "handle": "elwood-fabrics-af24564-document-linen-thibaut",
+    "mfr": "AT24564",
+    "reason": "no anchor row",
+    "title": "Elwood - Document Linen Fabric | Anna French"
+  },
+  {
+    "handle": "chloe-blush-wallcovering-thibaut",
+    "mfr": "AT10746",
+    "reason": "no anchor row",
+    "title": "Chloe - Blush | Wallcovering | Anna French"
+  },
+  {
+    "handle": "chloe-green-wallcovering-thibaut",
+    "mfr": "AT10748",
+    "reason": "no anchor row",
+    "title": "Chloe - Green | Wallcovering | Anna French"
+  },
+  {
+    "handle": "chloe-mineral-wallcovering-thibaut",
+    "mfr": "AT10749",
+    "reason": "no anchor row",
+    "title": "Chloe - Mineral | Wallcovering | Anna French"
+  },
+  {
+    "handle": "chloe-beige-wallcovering-thibaut",
+    "mfr": "AT10750",
+    "reason": "no anchor row",
+    "title": "Chloe - Beige | Wallcovering | Anna French"
+  },
+  {
+    "handle": "chloe-spa-blue-wallcovering-thibaut",
+    "mfr": "AT10751",
+    "reason": "no anchor row",
+    "title": "Chloe - Spa Blue | Wallcovering | Anna French"
+  },
+  {
+    "handle": "chloe-spa-blue-on-white-wallcovering-thibaut",
+    "mfr": "AT10752",
+    "reason": "no anchor row",
+    "title": "Chloe - Spa Blue on White | Wallcovering | Anna French"
+  },
+  {
+    "handle": "deauville-linen-flax-dwat-65119",
+    "mfr": "AT16148",
+    "reason": "anchor colorway Default/blank",
+    "title": "Deauville Linen, Flax Wallcoverings | Anna French"
+  },
+  {
+    "handle": "antoinette-blue-dwat-65127",
+    "mfr": "AT16156",
+    "reason": "anchor colorway Default/blank",
+    "title": "Antoinette, Blue Wallcoverings | Anna French"
+  }
+]
\ No newline at end of file
diff --git a/scripts/anna-french-onboard/tk11076-remediate.mjs b/scripts/anna-french-onboard/tk11076-remediate.mjs
new file mode 100644
index 0000000..a30b8be
--- /dev/null
+++ b/scripts/anna-french-onboard/tk11076-remediate.mjs
@@ -0,0 +1,307 @@
+#!/usr/bin/env node
+/**
+ * TK-11076 — batch-correct LIVE Anna French products (vendor="Anna French").
+ *
+ * ANCHOR: authoritative real colorway = anna_french_catalog.color_name (Mac2-canonical, /tmp socket),
+ *         joined to each live product by mfr_sku (custom.manufacturer_sku, else variant SKU base).
+ *
+ * PER PRODUCT:
+ *  (1) SET the correct color:<anchor color_name> facet (anchor is authoritative — the live title
+ *      colorway is the corrupted AI value; verified 69/328 title-vs-anchor disagreements).
+ *  (2) STRIP AI-palette STRAY color tags — sourced from THIS product's OWN AI metafields
+ *      (custom.color_details[].name + color_1/2/3_name + background_color), deterministic + per-product,
+ *      NOT a global denylist — EXCLUDING any token that IS (a component of) the real anchor colorway.
+ *      Also strip stale "color:"/"Color:" facets that are not the correct anchor facet, and the
+ *      "Background Color X" descriptor tags (AI palette noise).
+ *  (3) PRESERVE the correct color facet + the bare anchor colorway word(s) + every legit color word that
+ *      is NOT in the AI palette + EVERY non-color tag (vendor, pattern, collection, material, rooms,
+ *      styles, New Arrival, Trending, display_variant, Showroom Line, AI-Analyzed-v2, etc).
+ *
+ *  NO variant SKU / price / status / sales-channel / image writes. Tags only.
+ *
+ * SCOPE GATE — only remediate products that:
+ *   • are non-ARCHIVED, vendor Anna French, and
+ *   • join the anchor by mfr_sku with a NON-"Default"/non-blank color_name.
+ * Products with no anchor row, a "Default" colorway, or a foreign-vendor title (e.g. "| Thibaut") are
+ * SKIPPED (never guessed). PG-first: nothing to write in anna_french_catalog for the tag fix (color_name
+ * there is already authoritative). We record old tags in THIS VENDOR'S rollback file, then write Shopify.
+ *
+ *   node tk11076-remediate.mjs                       # DRY-RUN
+ *   node tk11076-remediate.mjs --canary              # DRY-RUN + write canary diff for 6 diverse products
+ *   node tk11076-remediate.mjs --apply --limit=6     # apply first N
+ *   node tk11076-remediate.mjs --apply --only=h1,h2
+ *   node tk11076-remediate.mjs --apply               # full batch (90s gap every 25)
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { execSync } from 'node:child_process';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const DB = 'postgresql:///dw_unified?host=/tmp';
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const CANARY = process.argv.includes('--canary');
+const LIMIT = parseInt((process.argv.find(a => a.startsWith('--limit=')) || '').split('=')[1] || '0', 10);
+const ONLY = ((process.argv.find(a => a.startsWith('--only=')) || '').split('=')[1] || '').split(',').filter(Boolean);
+const ROLLBACK = path.join(process.env.HOME, '.claude/yolo-queue/executed-reversible/TK-11076-Anna_French-rollback.json');
+const LEDGER_LOG = path.join(process.env.HOME, '.claude/yolo-queue/executed-reversible');
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+const decode = s => String(s || '').replace(/&amp;/g, '&').replace(/&#39;/g, "'").replace(/&quot;/g, '"');
+const titleCase = s => decode(s).replace(/\b\w/g, c => c.toUpperCase()).trim();
+const norm = s => decode(s).toLowerCase().replace(/\s*\/\s*/g, '/').replace(/\s+/g, ' ').trim();
+
+// Base color lexicon (only used to CLASSIFY a bare tag as "colour-ish" for the strip; the actual
+// strip decision is driven by the product's OWN AI palette metafields, not by this set).
+const COLOR_MODIFIERS = new Set(['soft','pale','dark','light','deep','bright','warm','cool','dusty',
+  'metallic','metalic','antique','burnished','muted','rich','medium','pastel','dusky','faded']);
+const COLOR_WORDS = new Set([
+  'white','black','grey','gray','ivory','cream','beige','stone','dove','taupe','greige','oatmeal',
+  'alabaster','bone','eggshell','linen','sand','almond','pearl','chalk','parchment','champagne','flax','ecru',
+  'silver','gold','gilver','bronze','copper','pewter','platinum','mica','graphite','charcoal','slate','gunmetal',
+  'teal','aqua','turquoise','jade','celadon','sage','mint','emerald','forest','olive','chartreuse','lime','green','spa','seafoam',
+  'blue','navy','indigo','cobalt','sapphire','cornflower','sky','denim','powder','peacock','azure','cerulean','wedgewood','robin','steel','ocean',
+  'red','crimson','scarlet','burgundy','wine','russet','terracotta','rust','brick','coral','salmon','blush','camel',
+  'pink','rose','fuchsia','magenta','lavender','lilac','purple','plum','amethyst','mauve','violet','petal',
+  'yellow','ochre','saffron','mustard','honey','amber','peach','apricot','tan','walnut','espresso','coffee',
+  'brown','chocolate','khaki','multi','natural','neutral','midnight','ash','mineral','spring']);
+function colorTokens(str) {
+  return norm(str).split(/[^a-z']+/).filter(Boolean).filter(w => COLOR_WORDS.has(w) || COLOR_MODIFIERS.has(w));
+}
+function isColorishTag(tag) {
+  // a bare tag counts as "colour-ish" if it is short and every word is in the color lexicon
+  const words = norm(tag).split(/[^a-z']+/).filter(Boolean);
+  if (!words.length || words.length > 3) return false;
+  const hasBase = words.some(w => COLOR_WORDS.has(w));
+  return hasBase && words.every(w => COLOR_WORDS.has(w) || COLOR_MODIFIERS.has(w));
+}
+
+async function gql(query, variables) {
+  for (let a = 0; a < 5; a++) {
+    const res = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`, {
+      method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+      body: JSON.stringify({ query, variables }), signal: AbortSignal.timeout(45000) });
+    const j = await res.json().catch(() => ({}));
+    if (j.errors) { if (a === 4) return { errors: j.errors }; await sleep(1200 * (a + 1)); continue; }
+    await sleep(350); return j.data;
+  }
+}
+
+async function fetchLive() {
+  const out = []; let cursor = null;
+  const q = `query($cursor:String){
+    products(first:100, query:"vendor:'Anna French'", after:$cursor){
+      pageInfo{ hasNextPage endCursor }
+      nodes{ id handle status title tags
+        featuredImage{ url }
+        mfr: metafield(namespace:"custom", key:"manufacturer_sku"){ value }
+        cd:  metafield(namespace:"custom", key:"color_details"){ value }
+        c1:  metafield(namespace:"custom", key:"color_1_name"){ value }
+        c2:  metafield(namespace:"custom", key:"color_2_name"){ value }
+        c3:  metafield(namespace:"custom", key:"color_3_name"){ value }
+        bg:  metafield(namespace:"custom", key:"background_color"){ value }
+        variants(first:3){ nodes{ sku } } }
+    } }`;
+  for (let guard = 0; guard < 60; guard++) {
+    const d = await gql(q, { cursor });
+    if (!d || d.errors) { console.error('fetchLive gql error', JSON.stringify(d && d.errors)); break; }
+    for (const n of d.products.nodes) out.push(n);
+    if (!d.products.pageInfo.hasNextPage) break;
+    cursor = d.products.pageInfo.endCursor;
+  }
+  return out;
+}
+
+function mfrOf(p) {
+  return (p.mfr && p.mfr.value) ||
+    (p.variants.nodes.map(v => v.sku).find(Boolean) || '').replace(/-DWA[TF](-Sample)?$/i, '').replace(/-Sample$/i, '');
+}
+
+// mfr_sku(upper) → authoritative color_name from anna_french_catalog (Mac2-canonical staging)
+function anchorMap() {
+  const raw = execSync(`psql "${DB}" -tAc "select coalesce(json_agg(json_build_object('sku',upper(mfr_sku),'col',color_name,'pat',pattern_name))::text,'[]') from anna_french_catalog"`,
+    { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }).trim();
+  const m = new Map();
+  for (const r of JSON.parse(raw || '[]')) if (r.sku) m.set(String(r.sku).toUpperCase(), { col: r.col || '', pat: r.pat || '' });
+  return m;
+}
+
+async function run() {
+  const anchor = anchorMap();
+  let live = await fetchLive();
+  console.log(`live Anna French products: ${live.length}`);
+  if (ONLY.length) live = live.filter(p => ONLY.includes(p.handle));
+
+  const plans = [], skips = [];
+  for (const p of live) {
+    if (p.status === 'ARCHIVED') { continue; }                          // discontinued = leave archived, untouched
+    // Foreign-vendor mislabel guard: a title that names another house is NOT Anna French.
+    if (/\|\s*(Thibaut|Schumacher|York|Kravet|Brewster)\b/i.test(p.title)) {
+      skips.push({ handle: p.handle, reason: 'foreign-vendor title', title: p.title }); continue;
+    }
+    const mfrU = String(mfrOf(p)).toUpperCase();
+    const a = anchor.get(mfrU);
+    if (!a) { skips.push({ handle: p.handle, mfr: mfrU, reason: 'no anchor row', title: p.title }); continue; }
+    const colorway = (a.col || '').trim();
+    if (!colorway || /^default$/i.test(colorway)) {
+      skips.push({ handle: p.handle, mfr: mfrU, reason: 'anchor colorway Default/blank', title: p.title }); continue;
+    }
+    const cwTitle = titleCase(colorway);
+    const facet = 'color:' + cwTitle;
+    // tokens that ARE the real colorway (never strip these) — e.g. "Robin's Egg on White" → robin egg white
+    const cwTokens = new Set(colorTokens(colorway));
+    const cwNorm = norm(colorway);
+
+    // AI palette = THIS product's own AI metafields (deterministic strip source)
+    const palette = new Set();
+    try { for (const c of JSON.parse(p.cd && p.cd.value || '[]')) { const n = c && (c.name || c.color); if (n) palette.add(titleCase(n)); } } catch {}
+    for (const v of [p.c1 && p.c1.value, p.c2 && p.c2.value, p.c3 && p.c3.value, p.bg && p.bg.value]) if (v) palette.add(titleCase(v));
+    const paletteNorm = new Set([...palette].map(norm));
+
+    const newTags = []; const strippedFacet = [], strippedPalette = [], strippedBgDesc = [];
+    for (const t of p.tags) {
+      const tn = norm(t);
+      // (a) existing color: / "Color:" facets — keep only if it is exactly the correct anchor facet
+      if (/^color\s*:/i.test(t)) {
+        if (tn === norm(facet)) { newTags.push(facet); continue; }       // already correct, canonicalize
+        strippedFacet.push(t); continue;                                 // wrong/stale facet → strip
+      }
+      // (b) "Background Color X" descriptor tags = AI palette noise → strip
+      if (/^background color\b/i.test(t)) { strippedBgDesc.push(t); continue; }
+      // never strip a tag that is (a component of) the real colorway
+      const tWords = tn.split(/[^a-z']+/).filter(Boolean);
+      const isColorwayPiece = tn === cwNorm || (tWords.length && tWords.every(w => cwTokens.has(w)));
+      if (isColorwayPiece) { newTags.push(t); continue; }                // PRESERVE the real colour word(s)
+      // (c) strip bare colour-ish tags that the AI palette produced for THIS product
+      if (isColorishTag(t) && paletteNorm.has(tn)) { strippedPalette.push(t); continue; }
+      newTags.push(t);                                                   // PRESERVE every other tag
+    }
+    // (d) ensure correct facet + bare colorway present
+    if (!newTags.includes(facet)) newTags.push(facet);
+    if (!newTags.map(norm).includes(cwNorm)) newTags.push(cwTitle);
+
+    // de-dup preserving order
+    const seen = new Set(); const finalTags = [];
+    for (const t of newTags) { const k = norm(t); if (seen.has(k)) continue; seen.add(k); finalTags.push(t); }
+
+    const changed = JSON.stringify([...p.tags].sort()) !== JSON.stringify([...finalTags].sort());
+    if (!changed) continue;
+    plans.push({ id: p.id, handle: p.handle, status: p.status, mfr: mfrU, title: p.title,
+      colorway: cwTitle, featuredImage: p.featuredImage && p.featuredImage.url || null,
+      oldTags: p.tags, newTags: finalTags, strippedFacet, strippedPalette, strippedBgDesc });
+  }
+
+  console.log(`plans: ${plans.length} need correction`);
+  console.log(`skipped: ${skips.length}`);
+  const skReasons = {}; for (const s of skips) skReasons[s.reason] = (skReasons[s.reason] || 0) + 1;
+  console.log('skip reasons:', JSON.stringify(skReasons));
+  fs.writeFileSync(path.join(HERE, 'out', 'tk11076-skips.json'), JSON.stringify(skips, null, 2));
+
+  // ---- CANARY: 6 diverse products, before/after diff, JUDGE strip safety ----
+  if (CANARY) {
+    // pick diverse: compound colorway, single colorway, many-strip, few-strip, fabric, wallcovering
+    const pick = [];
+    const byStrips = [...plans].sort((a, b) => b.strippedPalette.length - a.strippedPalette.length);
+    const compound = plans.find(p => /\s(on|and)\s/i.test(p.colorway));
+    const single = plans.find(p => !/\s(on|and)\s/i.test(p.colorway) && p.strippedPalette.length >= 1);
+    const fabric = plans.find(p => /Fabric/i.test(p.title));
+    const wall = plans.find(p => /Wallcovering/i.test(p.title));
+    for (const c of [byStrips[0], byStrips[1], compound, single, fabric, wall]) {
+      if (c && !pick.find(x => x && x.handle === c.handle)) pick.push(c);
+    }
+    let i = 0; while (pick.length < 6 && i < plans.length) { if (!pick.find(x => x.handle === plans[i].handle)) pick.push(plans[i]); i++; }
+    const canary = pick.slice(0, 6).map(pl => {
+      const kept = pl.newTags.filter(t => isColorishTag(t));
+      return {
+        handle: pl.handle, mfr: pl.mfr, status: pl.status, title: pl.title,
+        anchor_colorway: pl.colorway,
+        set_facet: 'color:' + pl.colorway,
+        stripped_wrong_facet: pl.strippedFacet,
+        stripped_bg_descriptor: pl.strippedBgDesc,
+        stripped_ai_palette_strays: pl.strippedPalette,
+        KEPT_color_tags: kept,
+        old_tags: pl.oldTags, new_tags: pl.newTags,
+      };
+    });
+    fs.writeFileSync(path.join(HERE, 'out', 'tk11076-canary-diff.json'), JSON.stringify(canary, null, 2));
+    console.log('\n===== CANARY (6 diverse) =====');
+    for (const c of canary) {
+      console.log(`\n### ${c.handle} [${c.status}]  mfr=${c.mfr}`);
+      console.log(`  title: ${c.title}`);
+      console.log(`  SET facet: ${c.set_facet}`);
+      console.log(`  strip wrong-facet: ${JSON.stringify(c.stripped_wrong_facet)}`);
+      console.log(`  strip bg-desc:     ${JSON.stringify(c.stripped_bg_descriptor)}`);
+      console.log(`  strip AI strays:   ${JSON.stringify(c.stripped_ai_palette_strays)}`);
+      console.log(`  KEPT color tags:   ${JSON.stringify(c.KEPT_color_tags)}`);
+    }
+    console.log(`\ncanary diff → ${path.join(HERE, 'out', 'tk11076-canary-diff.json')}`);
+    return;
+  }
+
+  let toApply = plans;
+  if (LIMIT) toApply = plans.slice(0, LIMIT);
+  if (!APPLY) {
+    for (const pl of toApply.slice(0, 30)) {
+      const add = pl.newTags.filter(t => !pl.oldTags.includes(t));
+      const rem = pl.oldTags.filter(t => !pl.newTags.includes(t));
+      console.log(`\n[${pl.status}] ${pl.handle} (${pl.mfr}) → color:${pl.colorway}`);
+      console.log(`   +[${add.join(', ')}]  -[${rem.join(', ')}]`);
+    }
+    console.log(`\nDRY-RUN. ${plans.length} would change (showing ≤30). Re-run with --apply.`);
+    return;
+  }
+
+  // ---- APPLY ----
+  const rollback = fs.existsSync(ROLLBACK) ? JSON.parse(fs.readFileSync(ROLLBACK, 'utf8')) : {};
+  let done = 0, pass = 0, fail = 0, batchCount = 0;
+  for (const pl of toApply) {
+    rollback[pl.handle] = { id: pl.id, mfr: pl.mfr, ts: new Date().toISOString(),
+      colorway: pl.colorway, old_tags: pl.oldTags, new_tags: pl.newTags };
+    fs.writeFileSync(ROLLBACK, JSON.stringify(rollback, null, 2));
+
+    const d = await gql(`mutation($input:ProductInput!){ productUpdate(input:$input){ product{ id } userErrors{ field message } } }`,
+      { input: { id: pl.id, tags: pl.newTags } });
+    const ue = d && d.productUpdate && d.productUpdate.userErrors;
+    if (ue && ue.length) { console.error(`   userErrors ${pl.handle}: ${JSON.stringify(ue)}`); fail++; continue; }
+
+    // per-item verify: re-GET tags + image + status
+    const v = await gql(`query($id:ID!){ product(id:$id){ status tags featuredImage{ url } variants(first:1){ nodes{ sku price } } } }`, { id: pl.id });
+    const prod = v && v.product || {};
+    const liveTags = prod.tags || [];
+    const facet = 'color:' + pl.colorway;
+    const facetOk = liveTags.map(norm).includes(norm(facet));
+    const noWrongFacet = !liveTags.some(t => /^color\s*:/i.test(t) && norm(t) !== norm(facet));
+    // every stray we stripped must be gone (unless it IS the colorway word we deliberately keep)
+    const cwNorm = norm(pl.colorway);
+    const straysGone = !pl.strippedPalette.concat(pl.strippedBgDesc).some(t => liveTags.includes(t) && norm(t) !== cwNorm);
+    // no legit/non-color tag lost: every old tag that is NOT a stripped stray/wrong-facet must still be present
+    const strippedSet = new Set([...pl.strippedFacet, ...pl.strippedPalette, ...pl.strippedBgDesc].map(norm));
+    const noLegitLost = pl.oldTags.filter(t => !strippedSet.has(norm(t))).every(t => liveTags.map(norm).includes(norm(t)));
+    const imgOk = (prod.featuredImage && prod.featuredImage.url || null) === pl.featuredImage;
+    const statusOk = prod.status === pl.status;
+    const verifyOk = facetOk && noWrongFacet && straysGone && noLegitLost && imgOk && statusOk;
+    if (verifyOk) pass++; else { fail++; console.error(`   VERIFY FAIL ${pl.handle}: facetOk=${facetOk} noWrongFacet=${noWrongFacet} straysGone=${straysGone} noLegitLost=${noLegitLost} imgOk=${imgOk} statusOk=${statusOk}`); }
+
+    done++;
+    console.log(`[${done}/${toApply.length}] ${pl.handle} ✓ ${verifyOk ? 'verified' : 'VERIFY-FAIL'}  color:${pl.colorway}`);
+    try {
+      execSync(`node "${path.join(LEDGER_LOG, 'log-exec.mjs')}" ` +
+        `--agent vp-dw-commerce --ticket TK-11076 ` +
+        `--action "Anna French retag ${pl.handle}: color:${pl.colorway}, strip AI-palette strays" ` +
+        `--blast 1 ` +
+        `--undo "cd ${HERE} && node tk11076-rollback.mjs --only=${pl.handle} --apply" ` +
+        `--verify "GET product ${pl.id} — color facet correct, strays gone, non-color tags intact, image/status unchanged"`,
+        { stdio: 'ignore' });
+    } catch { /* ledger best-effort */ }
+
+    batchCount++;
+    if (batchCount % 25 === 0 && done < toApply.length) { console.log('   …90s inter-batch gap…'); await sleep(90000); }
+    else await sleep(650);
+  }
+  console.log(`\nDONE: ${done} products · verify-pass ${pass} · verify-fail ${fail}`);
+  console.log(`rollback map: ${ROLLBACK}`);
+}
+run();
diff --git a/scripts/anna-french-onboard/tk11076-rollback.mjs b/scripts/anna-french-onboard/tk11076-rollback.mjs
new file mode 100644
index 0000000..9a4bdb8
--- /dev/null
+++ b/scripts/anna-french-onboard/tk11076-rollback.mjs
@@ -0,0 +1,43 @@
+#!/usr/bin/env node
+/**
+ * TK-11076 Anna French rollback — restore old_tags per handle from THIS vendor's own rollback file.
+ *   node tk11076-rollback.mjs                      # DRY-RUN (all recorded handles)
+ *   node tk11076-rollback.mjs --only=h1,h2 --apply # restore specific handles
+ *   node tk11076-rollback.mjs --apply              # restore ALL recorded handles
+ */
+import fs from 'node:fs';
+import path from 'node:path';
+const STORE = process.env.SHOPIFY_STORE || 'designer-laboratory-sandbox.myshopify.com';
+const TOKEN = process.env.SHOPIFY_ADMIN_TOKEN;
+const API = process.env.SHOPIFY_API_VERSION || '2024-10';
+const APPLY = process.argv.includes('--apply');
+const ONLY = ((process.argv.find(a => a.startsWith('--only=')) || '').split('=')[1] || '').split(',').filter(Boolean);
+const ROLLBACK = path.join(process.env.HOME, '.claude/yolo-queue/executed-reversible/TK-11076-Anna_French-rollback.json');
+if (!TOKEN) { console.error('FATAL: set SHOPIFY_ADMIN_TOKEN'); process.exit(1); }
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+async function gql(query, variables) {
+  for (let a = 0; a < 5; a++) {
+    const res = await fetch(`https://${STORE}/admin/api/${API}/graphql.json`, {
+      method: 'POST', headers: { 'X-Shopify-Access-Token': TOKEN, 'Content-Type': 'application/json' },
+      body: JSON.stringify({ query, variables }), signal: AbortSignal.timeout(45000) });
+    const j = await res.json().catch(() => ({}));
+    if (j.errors) { if (a === 4) return { errors: j.errors }; await sleep(1200 * (a + 1)); continue; }
+    await sleep(300); return j.data;
+  }
+}
+const map = fs.existsSync(ROLLBACK) ? JSON.parse(fs.readFileSync(ROLLBACK, 'utf8')) : {};
+let handles = Object.keys(map);
+if (ONLY.length) handles = handles.filter(h => ONLY.includes(h));
+console.log(`rollback candidates: ${handles.length}`);
+if (!APPLY) { console.log('DRY-RUN. Re-run with --apply to restore old_tags.'); process.exit(0); }
+let done = 0;
+for (const h of handles) {
+  const rec = map[h];
+  const d = await gql(`mutation($input:ProductInput!){ productUpdate(input:$input){ product{ id } userErrors{ message } } }`,
+    { input: { id: rec.id, tags: rec.old_tags } });
+  const ue = d && d.productUpdate && d.productUpdate.userErrors;
+  if (ue && ue.length) { console.error(`  ERR ${h}: ${JSON.stringify(ue)}`); continue; }
+  done++; console.log(`[${done}/${handles.length}] restored ${h}`);
+  await sleep(500);
+}
+console.log(`DONE: restored ${done} products.`);

← a6fd514 TK-11076: Rebel Walls AI-palette retag remediate+rollback (c  ·  back to Designerwallcoverings  ·  auto-data-snapshot: 2026-09-01T12:55:30 (10 data files) — sc 3d0551a →