[object Object]

← back to Gmc Titlefix

TK-11847 Option B script: fold in Kimi review (front-load wallcovering/material in description, productTypes list sent as exact sibling value, post-insert merge readback, 72h-then-appeal rule). Still dry-run only.

c2e8ed11c2ca6f322180792ca57cc549107f8a60 · 2026-09-23 12:00:07 -0700 · Steve

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PP5PN6yC4vLgDAvFqpS1qJ

Files touched

Diff

commit c2e8ed11c2ca6f322180792ca57cc549107f8a60
Author: Steve <steve@designerwallcoverings.com>
Date:   Wed Sep 23 12:00:07 2026 -0700

    TK-11847 Option B script: fold in Kimi review (front-load wallcovering/material in description, productTypes list sent as exact sibling value, post-insert merge readback, 72h-then-appeal rule). Still dry-run only.
    
    Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PP5PN6yC4vLgDAvFqpS1qJ
---
 ...lorway-override-dryrun-2026-09-23T19-00-07.json | 126 +++++++++++++++++++++
 tk11847-colorway-override.mjs                      |  20 +++-
 2 files changed, 143 insertions(+), 3 deletions(-)

diff --git a/data/tk11847-colorway-override-dryrun-2026-09-23T19-00-07.json b/data/tk11847-colorway-override-dryrun-2026-09-23T19-00-07.json
new file mode 100644
index 0000000..804fc2a
--- /dev/null
+++ b/data/tk11847-colorway-override-dryrun-2026-09-23T19-00-07.json
@@ -0,0 +1,126 @@
+{
+ "ticket": "TK-11847",
+ "mode": "DRY-RUN",
+ "at": "2026-09-23T19:00:07.711Z",
+ "dataSource": "accounts/146735262/dataSources/10677010255",
+ "hold": [
+  "44736900464691"
+ ],
+ "rows": [
+  {
+   "offerId": "44724797538355",
+   "title": "Apollo Chardonnay",
+   "color": "Chardonnay",
+   "material": "Faux Leather",
+   "stillLR": true,
+   "liveDescription": "Apollo Chardonnay",
+   "liveColor": null,
+   "liveMaterial": null,
+   "lastUpdateDate": "2026-09-11T22:54:48.097974Z",
+   "productAttributes": {
+    "color": "Chardonnay",
+    "material": "Faux Leather",
+    "productTypes": [
+     "Wallcovering"
+    ],
+    "description": "Apollo Chardonnay — faux leather wallcovering (wallpaper) in the Chardonnay colorway. Not a beverage. Apollo — Chardonnay . Majilite Nytek® faux leather from the Metallic Specialties I collection — a specially engineered Nylon Fiber Matrix, luxurious, breathable and durable, ideal for wall coverings, seating, flat surfaces and displays. Width: 54 in / 137 cm Weight: 8.8 oz/sq yd / 300 g/m² Thickness: 28 mils / 0.7 mm Durability: 300,000+ double rubs (Wyzenbeek wire screen, ASTM D-4157-82) Flammability: UFAC/NFPA 260 (Class 1) &amp; CAL Technical Bulletin 117-2013 Section 1 — Pass Cleanability: S/W · Crocking Wet 5 / Dry 5 PFAS-, PVC- and plasticizer-free · no off-gassing Available by the yard (54\" wide) at $117.25/yd, or order a $4.25 sample swatch."
+   }
+  },
+  {
+   "offerId": "44724798226483",
+   "title": "Brushed Finesse Champagne",
+   "color": "Champagne",
+   "material": "Faux Leather",
+   "stillLR": true,
+   "liveDescription": "Brushed Finesse Champagne",
+   "liveColor": null,
+   "liveMaterial": null,
+   "lastUpdateDate": "2026-08-26T15:15:58.136016Z",
+   "productAttributes": {
+    "color": "Champagne",
+    "material": "Faux Leather",
+    "productTypes": [
+     "Wallcovering"
+    ],
+    "description": "Brushed Finesse Champagne — faux leather wallcovering (wallpaper) in the Champagne colorway. Not a beverage. Brushed Finesse — Champagne . Majilite Nytek® faux leather from the Metallic Specialties I collection — a specially engineered Nylon Fiber Matrix, luxurious, breathable and durable, ideal for wall coverings, seating, flat surfaces and displays. Width: 54 in / 137 cm Weight: 8.8 oz/sq yd / 300 g/m² Thickness: 28 mils / 0.7 mm Durability: 300,000+ double rubs (Wyzenbeek wire screen, ASTM D-4157-82) Flammability: UFAC/NFPA 260 (Class 1) &amp; CAL Technical Bulletin 117-2013 Section 1 — Pass Cleanability: S/W · Crocking Wet 5 / Dry 5 PFAS-, PVC- and plasticizer-free · no off-gassing Available by the yard (54\" wide) at $92.75/yd, or order a $4.25 sample swatch."
+   }
+  },
+  {
+   "offerId": "44724798193715",
+   "title": "Infinity White Zinfandel",
+   "color": "White Zinfandel",
+   "material": "Faux Leather",
+   "stillLR": true,
+   "liveDescription": "Infinity White Zinfandel",
+   "liveColor": null,
+   "liveMaterial": null,
+   "lastUpdateDate": "2026-09-11T23:19:26.742824Z",
+   "productAttributes": {
+    "color": "White Zinfandel",
+    "material": "Faux Leather",
+    "productTypes": [
+     "Wallcovering"
+    ],
+    "description": "Infinity White Zinfandel — faux leather wallcovering (wallpaper) in the White Zinfandel colorway. Not a beverage. Infinity — White Zinfandel . Majilite Nytek® faux leather from the Metallic Specialties I collection — a specially engineered Nylon Fiber Matrix, luxurious, breathable and durable, ideal for wall coverings, seating, flat surfaces and displays. Width: 54 in / 137 cm Weight: 8.8 oz/sq yd / 300 g/m² Thickness: 28 mils / 0.7 mm Durability: 300,000+ double rubs (Wyzenbeek wire screen, ASTM D-4157-82) Flammability: UFAC/NFPA 260 (Class 1) &amp; CAL Technical Bulletin 117-2013 Section 1 — Pass Cleanability: S/W · Crocking Wet 5 / Dry 5 PFAS-, PVC- and plasticizer-free · no off-gassing Available by the yard (54\" wide) at $92.75/yd, or order a $4.25 sample swatch."
+   }
+  },
+  {
+   "offerId": "40977437818931",
+   "title": "McKinley Park Type 2 | Phillipe Romano",
+   "color": "Gray",
+   "material": "Vinyl",
+   "stillLR": true,
+   "liveDescription": "A soft, organic quality suggests a landscape obscured by fog… or a memory by time. The Type II vinyl wallcovering’s a gentle visual texture for the wall.",
+   "liveColor": null,
+   "liveMaterial": null,
+   "lastUpdateDate": "2026-09-11T22:20:16.886293Z",
+   "productAttributes": {
+    "color": "Gray",
+    "material": "Vinyl",
+    "productTypes": [
+     "Wallcovering"
+    ],
+    "description": "McKinley Park Type 2 | Phillipe Romano — vinyl wallcovering (wallpaper) in the Gray colorway. Not a beverage. A soft, organic quality suggests a landscape obscured by fog... or a memory by time. The Type II vinyl wallcovering’s a gentle visual texture for the wall."
+   }
+  },
+  {
+   "offerId": "44508742418483",
+   "title": "Colonne Une Véritable Affinité | Elitis",
+   "color": "Silver",
+   "material": "Textile",
+   "stillLR": true,
+   "liveDescription": "Colonne Une Véritable Affinité | Elitis",
+   "liveColor": null,
+   "liveMaterial": null,
+   "lastUpdateDate": "2026-09-11T22:47:07.706689Z",
+   "productAttributes": {
+    "color": "Silver",
+    "material": "Textile",
+    "productTypes": [
+     "Wallcovering"
+    ],
+    "description": "Colonne Une Véritable Affinité | Elitis — textile wallcovering (wallpaper) in the Silver colorway. Not a beverage. A traditional striped wallcovering with a textured effect, suitable for residential use. Colonne in Une Véritable Affinité, from the Elitis Wall Rayures Jumelles collection. 60% PES 40% PU, 50\" wide."
+   }
+  },
+  {
+   "offerId": "44508735209523",
+   "title": "Volutes Le Goût De L'étrange | Elitis",
+   "color": "Cream",
+   "material": "Vinyl",
+   "stillLR": true,
+   "liveDescription": "Volutes Le Goût De L'étrange | Elitis",
+   "liveColor": null,
+   "liveMaterial": null,
+   "lastUpdateDate": "2026-09-11T23:04:14.129658Z",
+   "productAttributes": {
+    "color": "Cream",
+    "material": "Vinyl",
+    "productTypes": [
+     "Wallcovering"
+    ],
+    "description": "Volutes Le Goût De L'étrange | Elitis — vinyl wallcovering (wallpaper) in the Cream colorway. Not a beverage. Traditional vinyl wallcovering featuring bronze abstract swirls on a charcoal gray textured background, suitable for residential interiors. Volutes in Le Goût De L'étrange, from the Elitis Wall Domino collection. Paper on non woven backing, 39\" wide."
+   }
+  }
+ ],
+ "results": []
+}
\ No newline at end of file
diff --git a/tk11847-colorway-override.mjs b/tk11847-colorway-override.mjs
index 0d79e04..1d10a70 100644
--- a/tk11847-colorway-override.mjs
+++ b/tk11847-colorway-override.mjs
@@ -74,8 +74,12 @@ for (const p of PLAN) {
     const u = new URL(a.link); const j = await (await fetch(u.origin + u.pathname.replace(/\/$/, '') + '.json', { headers: { 'User-Agent': 'Mozilla/5.0' } })).json();
     desc = (j.product?.body_html || '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim().slice(0, 900);
   } catch (e) { console.log('  (description fetch failed, will omit description)', p.offerId, e.message); }
-  const productAttributes = { color: p.color, material: p.material };
-  if (desc) productAttributes.description = `${p.title} — ${p.color} colorway. ${desc}`;
+  // Kimi review 09-23: front-load the wallcovering/material tokens in the first ~160 chars; 'colorway'
+  // names the drink word as a color; productTypes is a LIST attribute (wholesale replace) so it is sent
+  // as exactly the sibling value ['Wallcovering'] (also fills the McKinley Park gap from the 09-18 pass).
+  const productAttributes = { color: p.color, material: p.material, productTypes: ['Wallcovering'] };
+  const lead = `${p.title} — ${p.material.toLowerCase()} wallcovering (wallpaper) in the ${p.color} colorway. Not a beverage.`;
+  productAttributes.description = desc ? `${lead} ${desc}`.slice(0, 4900) : lead;
   rows.push({ ...p, stillLR, liveDescription: a.description, liveColor: a.color || null, liveMaterial: a.material || null, lastUpdateDate: live._v1.productStatus?.lastUpdateDate, productAttributes });
   console.log(`${stillLR ? 'LR ' : 'ok '} ${p.offerId}  ${p.title}\n     live: color=${a.color || '-'} material=${a.material || '-'} desc="${(a.description || '').slice(0, 50)}"\n     push: color=${p.color} material=${p.material} desc="${(productAttributes.description || '').slice(0, 90)}…"`);
   await new Promise(z => setTimeout(z, 300));
@@ -105,4 +109,14 @@ for (const r of rows) {
 }
 fs.writeFileSync(art, JSON.stringify(record, null, 1));
 console.log('\nartifact:', art);
-console.log('Verify ONLY via itemLevelIssues/destinationStatuses after a lag (node tk11847-fresh-state-20260923.mjs); lastUpdateDate is not the test.');
+if (!ROLLBACK) {
+  // post-insert readback: the supplemental MUST merge into the same processed product (same offerId/en/US), never spawn a standalone item
+  console.log('\nREADBACK (merge check — supplemental must land on the same processed product):');
+  await new Promise(z => setTimeout(z, 3000));
+  for (const r of record.results.filter(x => x.ok)) {
+    const live = await mc.getProduct('online:en:US:' + r.offerId).catch(e => ({ err: e.message }));
+    const a = live?._v1?.productAttributes || {};
+    console.log(' ', r.offerId, 'color=', a.color || '-', 'material=', a.material || '-', 'desc=', (a.description || '').slice(0, 60), live?.err ? 'ERR ' + live.err : '(merge may lag minutes)');
+  }
+}
+console.log('Verify ONLY via itemLevelIssues/destinationStatuses after a lag (node tk11847-fresh-state-20260923.mjs); lastUpdateDate is not the test. If still disapproved ~72h after re-processing, fall back to the console appeal for that offer.');

← fa224f8 TK-11847 09-23 re-measure (7/29 still LR, parity 28/1 unchan  ·  back to Gmc Titlefix  ·  auto-data-snapshot: 2026-09-24T12:49:23 (1 data files) — tk1 b01c159 →