[object Object]

← back to Gmc Titlefix

TK-11847 fresh pass: 22/29 alcohol-LR offers self-cleared post re-evaluation; 7 remain (6 appeal-ready + Vista Wine HOLD); account walk 61,813 = 7 live LR; parity 28/29 clean; appeal plan 28->6 (pending-approval memo); McKinley product_type gap staged dry-run (full-replace-safe)

0a1f915ea9442ea61791b7f0ed0b5fb15983065e · 2026-09-17 20:24:18 -0700 · Steve

Files touched

Diff

commit 0a1f915ea9442ea61791b7f0ed0b5fb15983065e
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Sep 17 20:24:18 2026 -0700

    TK-11847 fresh pass: 22/29 alcohol-LR offers self-cleared post re-evaluation; 7 remain (6 appeal-ready + Vista Wine HOLD); account walk 61,813 = 7 live LR; parity 28/29 clean; appeal plan 28->6 (pending-approval memo); McKinley product_type gap staged dry-run (full-replace-safe)
---
 data/tk11847-appeal-worklist-20260917.json         | 143 +++++++++++++
 ...ley-producttype-dryrun-2026-09-18T03-23-55.json | 223 +++++++++++++++++++++
 data/tk11847-policy-locate-20260917.json           | 165 +++++++++++++++
 tk11847-fresh-state.mjs                            |  55 +++++
 tk11847-mckinley-producttype.mjs                   |  78 +++++++
 tk11847-policy-locate-20260917.mjs                 |  35 ++++
 6 files changed, 699 insertions(+)

diff --git a/data/tk11847-appeal-worklist-20260917.json b/data/tk11847-appeal-worklist-20260917.json
new file mode 100644
index 0000000..abc1aeb
--- /dev/null
+++ b/data/tk11847-appeal-worklist-20260917.json
@@ -0,0 +1,143 @@
+{
+ "ticket": "TK-11847",
+ "generated": "2026-09-18T03:23:10.152Z",
+ "read_only": true,
+ "merchant": "146735262",
+ "headline": "FRESH 2026-09-17/18: 22 of 29 self-cleared (all 6 contexts approved, zero ILI) after Google-side re-evaluation; 7 remain legal_restrictions-disapproved. No appeal was fired (no appeal API exists; console untouched) — spontaneous re-evaluation, likely triggered by re-processing of the supplemental sample-title overrides.",
+ "counts": {
+  "A_APPEAL_READY": 3,
+  "B_APPEAL_CAUSE_UNCONFIRMED": 3,
+  "C_HOLD_PRICE": 1
+ },
+ "work": [
+  {
+   "offerId": "40977437818931",
+   "title": "McKinley Park Type 2 | Phillipe Romano",
+   "bucket": "B_APPEAL_CAUSE_UNCONFIRMED",
+   "product_url": "https://www.designerwallcoverings.com/products/prw-920603-mst-010",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:40977437818931&channel=online",
+   "approved_contexts": 2,
+   "disapproved_contexts": 4,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation"
+   ],
+   "notimpacted_codes": [
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-09-11T22:20:16.886293Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  },
+  {
+   "offerId": "44508742418483",
+   "title": "Colonne Une Véritable Affinité | Elitis",
+   "bucket": "B_APPEAL_CAUSE_UNCONFIRMED",
+   "product_url": "https://www.designerwallcoverings.com/products/colonne-une-veritable-affinite-elitis",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:44508742418483&channel=online",
+   "approved_contexts": 2,
+   "disapproved_contexts": 4,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation"
+   ],
+   "notimpacted_codes": [
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-09-11T22:47:07.706689Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  },
+  {
+   "offerId": "44724797538355",
+   "title": "Apollo Chardonnay",
+   "bucket": "A_APPEAL_READY",
+   "product_url": "https://www.designerwallcoverings.com/products/majilite-apollo-chardonnay",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:44724797538355&channel=online",
+   "approved_contexts": 2,
+   "disapproved_contexts": 4,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation"
+   ],
+   "notimpacted_codes": [
+    "image_too_small_for_high_resolution",
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-09-11T22:54:48.097974Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  },
+  {
+   "offerId": "44724798226483",
+   "title": "Brushed Finesse Champagne",
+   "bucket": "A_APPEAL_READY",
+   "product_url": "https://www.designerwallcoverings.com/products/majilite-brushed-finesse-champagne",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:44724798226483&channel=online",
+   "approved_contexts": 2,
+   "disapproved_contexts": 4,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation"
+   ],
+   "notimpacted_codes": [
+    "image_too_small_for_high_resolution",
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-08-26T15:15:58.136016Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  },
+  {
+   "offerId": "44508735209523",
+   "title": "Volutes Le Goût De L'étrange | Elitis",
+   "bucket": "B_APPEAL_CAUSE_UNCONFIRMED",
+   "product_url": "https://www.designerwallcoverings.com/products/volutes-le-gout-de-letrange-elitis",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:44508735209523&channel=online",
+   "approved_contexts": 2,
+   "disapproved_contexts": 4,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation"
+   ],
+   "notimpacted_codes": [
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-09-11T23:04:14.129658Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  },
+  {
+   "offerId": "44724798193715",
+   "title": "Infinity White Zinfandel",
+   "bucket": "A_APPEAL_READY",
+   "product_url": "https://www.designerwallcoverings.com/products/majilite-infinity-white-zinfandel",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:44724798193715&channel=online",
+   "approved_contexts": 2,
+   "disapproved_contexts": 4,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation"
+   ],
+   "notimpacted_codes": [
+    "image_too_small_for_high_resolution",
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-09-11T23:19:26.742824Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  },
+  {
+   "offerId": "44736900464691",
+   "title": "Vista Wine | Maharam",
+   "bucket": "C_HOLD_PRICE",
+   "product_url": "https://www.designerwallcoverings.com/products/vista-wine-maharam",
+   "mc_link": "https://merchants.google.com/mc/items/details?a=146735262&offerId=online:en:US:44736900464691&channel=online",
+   "approved_contexts": 0,
+   "disapproved_contexts": 6,
+   "disapproved_codes": [
+    "legal_restrictions_policy_violation",
+    "missing_shipping_weight"
+   ],
+   "notimpacted_codes": [
+    "alcohol_policy_violation"
+   ],
+   "lastUpdateDate": "2026-09-10T16:06:29.912632Z",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper"
+  }
+ ],
+ "evidence": {
+  "fresh_state": "gmc-titlefix/data/tk11847-fresh-state-20260917.json",
+  "account_walk": "gmc-titlefix/data/tk11847-policy-locate-20260917.json (61,813 offers walked, walk_complete=true, legal_restrictions live = 7)",
+  "parity_20260917": "gmc-titlefix/data/tk11847-verify-parity.json (28/29 parity clean; 1 bad = Vista Wine)",
+  "prior_20260916": "gmc-titlefix/data/tk11847-*-20260916-BACKUP.json + pending-approval/2026-09-16-TK-11847-*.md"
+ }
+}
\ No newline at end of file
diff --git a/data/tk11847-mckinley-producttype-dryrun-2026-09-18T03-23-55.json b/data/tk11847-mckinley-producttype-dryrun-2026-09-18T03-23-55.json
new file mode 100644
index 0000000..38122f2
--- /dev/null
+++ b/data/tk11847-mckinley-producttype-dryrun-2026-09-18T03-23-55.json
@@ -0,0 +1,223 @@
+{
+ "ticket": "TK-11847",
+ "offerId": "40977437818931",
+ "mode": "DRY-RUN",
+ "at": "2026-09-18T03:23:55.817Z",
+ "prestate": {
+  "name": "accounts/146735262/products/en~US~40977437818931",
+  "offerId": "40977437818931",
+  "contentLanguage": "en",
+  "feedLabel": "US",
+  "dataSource": "accounts/146735262/dataSources/180695450",
+  "productStatus": {
+   "destinationStatuses": [
+    {
+     "reportingContext": "SHOPPING_ADS",
+     "approvedCountries": [
+      "US"
+     ]
+    },
+    {
+     "reportingContext": "DISPLAY_ADS",
+     "disapprovedCountries": [
+      "US"
+     ]
+    },
+    {
+     "reportingContext": "FREE_LISTINGS",
+     "approvedCountries": [
+      "US"
+     ]
+    },
+    {
+     "reportingContext": "DEMAND_GEN_ADS",
+     "disapprovedCountries": [
+      "US"
+     ]
+    },
+    {
+     "reportingContext": "VIDEO_ADS",
+     "disapprovedCountries": [
+      "US"
+     ]
+    },
+    {
+     "reportingContext": "DEMAND_GEN_ADS_DISCOVER_SURFACE",
+     "disapprovedCountries": [
+      "US"
+     ]
+    }
+   ],
+   "itemLevelIssues": [
+    {
+     "code": "legal_restrictions_policy_violation",
+     "severity": "DISAPPROVED",
+     "resolution": "merchant_action",
+     "reportingContext": "DISPLAY_ADS",
+     "description": "Personalized advertising: legal restrictions",
+     "detail": "Targeting users based on legally restricted content is not allowed in personalized ads",
+     "documentation": "https://support.google.com/merchants/answer/143465",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "legal_restrictions_policy_violation",
+     "severity": "DISAPPROVED",
+     "resolution": "merchant_action",
+     "reportingContext": "DEMAND_GEN_ADS",
+     "description": "Personalized advertising: legal restrictions",
+     "detail": "Targeting users based on legally restricted content is not allowed in personalized ads",
+     "documentation": "https://support.google.com/merchants/answer/143465",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "legal_restrictions_policy_violation",
+     "severity": "DISAPPROVED",
+     "resolution": "merchant_action",
+     "reportingContext": "VIDEO_ADS",
+     "description": "Personalized advertising: legal restrictions",
+     "detail": "Targeting users based on legally restricted content is not allowed in personalized ads",
+     "documentation": "https://support.google.com/merchants/answer/143465",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "legal_restrictions_policy_violation",
+     "severity": "DISAPPROVED",
+     "resolution": "merchant_action",
+     "reportingContext": "DEMAND_GEN_ADS_DISCOVER_SURFACE",
+     "description": "Personalized advertising: legal restrictions",
+     "detail": "Targeting users based on legally restricted content is not allowed in personalized ads",
+     "documentation": "https://support.google.com/merchants/answer/143465",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "alcohol_policy_violation",
+     "severity": "NOT_IMPACTED",
+     "resolution": "merchant_action",
+     "reportingContext": "SHOPPING_ADS",
+     "description": "Alcoholic beverages",
+     "detail": "Products that violate applicable laws and industry standards for the sale of alcoholic beverages are not allowed",
+     "documentation": "https://support.google.com/merchants/answer/6150139",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "alcohol_policy_violation",
+     "severity": "NOT_IMPACTED",
+     "resolution": "merchant_action",
+     "reportingContext": "FREE_LISTINGS",
+     "description": "Alcoholic beverages",
+     "detail": "Products that violate applicable laws and industry standards for the sale of alcoholic beverages are not allowed",
+     "documentation": "https://support.google.com/merchants/answer/6150139",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "alcohol_policy_violation",
+     "severity": "NOT_IMPACTED",
+     "resolution": "merchant_action",
+     "reportingContext": "DEMAND_GEN_ADS",
+     "description": "Alcoholic beverages",
+     "detail": "Products that violate applicable laws and industry standards for the sale of alcoholic beverages are not allowed",
+     "documentation": "https://support.google.com/merchants/answer/6150139",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "alcohol_policy_violation",
+     "severity": "NOT_IMPACTED",
+     "resolution": "merchant_action",
+     "reportingContext": "VIDEO_ADS",
+     "description": "Alcoholic beverages",
+     "detail": "Products that violate applicable laws and industry standards for the sale of alcoholic beverages are not allowed",
+     "documentation": "https://support.google.com/merchants/answer/6150139",
+     "applicableCountries": [
+      "US"
+     ]
+    },
+    {
+     "code": "alcohol_policy_violation",
+     "severity": "NOT_IMPACTED",
+     "resolution": "merchant_action",
+     "reportingContext": "DEMAND_GEN_ADS_DISCOVER_SURFACE",
+     "description": "Alcoholic beverages",
+     "detail": "Products that violate applicable laws and industry standards for the sale of alcoholic beverages are not allowed",
+     "documentation": "https://support.google.com/merchants/answer/6150139",
+     "applicableCountries": [
+      "US"
+     ]
+    }
+   ],
+   "creationDate": "2026-06-29T17:40:19.948688Z",
+   "lastUpdateDate": "2026-09-11T22:20:16.886293Z",
+   "googleExpirationDate": "2026-10-11T22:03:45Z"
+  },
+  "productAttributes": {
+   "identifierExists": false,
+   "title": "McKinley Park Type 2 | Phillipe Romano",
+   "description": "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.",
+   "link": "https://www.designerwallcoverings.com/products/prw-920603-mst-010?variant=40977437818931",
+   "imageLink": "https://www.designerwallcoverings.com/cdn/shop/files/prw-920603-mst-010_1024x1024.jpg?v=1781716212",
+   "expirationDate": "2026-10-11T22:03:45Z",
+   "availability": "IN_STOCK",
+   "condition": "NEW",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper",
+   "price": {
+    "amountMicros": "41920000",
+    "currencyCode": "USD"
+   },
+   "shipping": [
+    {
+     "country": "US"
+    }
+   ],
+   "shippingWeight": {
+    "value": 2,
+    "unit": "lb"
+   }
+  },
+  "base64EncodedName": "accounts/146735262/products/ZW5-VVN-NDA5Nzc0Mzc4MTg5MzE"
+ },
+ "payload": {
+  "offerId": "40977437818931",
+  "contentLanguage": "en",
+  "feedLabel": "US",
+  "content": {
+   "identifierExists": false,
+   "title": "McKinley Park Type 2 | Phillipe Romano",
+   "description": "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.",
+   "link": "https://www.designerwallcoverings.com/products/prw-920603-mst-010?variant=40977437818931",
+   "imageLink": "https://www.designerwallcoverings.com/cdn/shop/files/prw-920603-mst-010_1024x1024.jpg?v=1781716212",
+   "expirationDate": "2026-10-11T22:03:45Z",
+   "availability": "IN_STOCK",
+   "condition": "NEW",
+   "googleProductCategory": "Home & Garden > Decor > Wallpaper",
+   "price": {
+    "amountMicros": "41920000",
+    "currencyCode": "USD"
+   },
+   "shipping": [
+    {
+     "country": "US"
+    }
+   ],
+   "shippingWeight": {
+    "value": 2,
+    "unit": "lb"
+   },
+   "productTypes": [
+    "Wallcovering"
+   ]
+  }
+ }
+}
\ No newline at end of file
diff --git a/data/tk11847-policy-locate-20260917.json b/data/tk11847-policy-locate-20260917.json
new file mode 100644
index 0000000..7cb7098
--- /dev/null
+++ b/data/tk11847-policy-locate-20260917.json
@@ -0,0 +1,165 @@
+{
+ "ticket": "TK-11847-refresh-walk",
+ "read_only": true,
+ "fetched_at": "2026-09-18T03:08:51.042Z",
+ "walk_complete": true,
+ "total_offers_walked": 61813,
+ "n": 13,
+ "rows": [
+  {
+   "offerId": "17656895438913",
+   "title": "Deep Horizon Wallmural",
+   "link": "https://www.designerwallcoverings.com/products/deep-horizon-wallmural-mur-205299",
+   "issues": [
+    "DISAPPROVED|guns_parts_policy_violation"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "40977437818931",
+   "title": "McKinley Park Type 2 | Phillipe Romano",
+   "link": "https://www.designerwallcoverings.com/products/prw-920603-mst-010?variant=40977437818931",
+   "issues": [
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation"
+   ],
+   "ctx_approved": 2,
+   "ctx_disapproved": 4,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "shopify_US_6733036388403_40594972016691",
+   "title": "High Society - Metallic Marijuana Leaf Wallcovering",
+   "link": "https://www.designerwallcoverings.com/products/copy-of-vie-en-rose-red?variant=40594972049459&country=US&currency=USD&utm_medium=product_sync&utm_source=google&utm_content=sag_organic&utm_campaign=sag_organic",
+   "issues": [
+    "DISAPPROVED|illegal_drugs_policy_violation"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44508721381427",
+   "title": "Palazzo Vp 1032 01 | Elitis",
+   "link": "https://www.designerwallcoverings.com/products/palazzo-vp-1032-01-elitis",
+   "issues": [
+    "NOT_IMPACTED|image_too_small_for_high_resolution",
+    "DISAPPROVED|guns_parts_policy_violation"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44508742418483",
+   "title": "Colonne Une Véritable Affinité | Elitis",
+   "link": "https://www.designerwallcoverings.com/products/colonne-une-veritable-affinite-elitis",
+   "issues": [
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation"
+   ],
+   "ctx_approved": 2,
+   "ctx_disapproved": 4,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44508758704179",
+   "title": "Cybèle Portée Par La Nature | Elitis",
+   "link": "https://www.designerwallcoverings.com/products/cybele-portee-par-la-nature-elitis",
+   "issues": [
+    "DISAPPROVED|guns_parts_policy_violation"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44724797538355",
+   "title": "Apollo Chardonnay",
+   "link": "https://www.designerwallcoverings.com/products/majilite-apollo-chardonnay",
+   "issues": [
+    "NOT_IMPACTED|image_too_small_for_high_resolution",
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation"
+   ],
+   "ctx_approved": 2,
+   "ctx_disapproved": 4,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44724798226483",
+   "title": "Brushed Finesse Champagne",
+   "link": "https://www.designerwallcoverings.com/products/majilite-brushed-finesse-champagne",
+   "issues": [
+    "NOT_IMPACTED|image_too_small_for_high_resolution",
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation"
+   ],
+   "ctx_approved": 2,
+   "ctx_disapproved": 4,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44508735209523",
+   "title": "Volutes Le Goût De L'étrange | Elitis",
+   "link": "https://www.designerwallcoverings.com/products/volutes-le-gout-de-letrange-elitis",
+   "issues": [
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation"
+   ],
+   "ctx_approved": 2,
+   "ctx_disapproved": 4,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "42511885860915",
+   "title": "Saint Germain Hemp II - Silver On White",
+   "link": "https://www.designerwallcoverings.com/products/dwjp-11930-philip-jeffries-saint-germain-hemp-ii-silver-on-white-5980",
+   "issues": [
+    "DISAPPROVED|tobacco_policy_violation"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44724798193715",
+   "title": "Infinity White Zinfandel",
+   "link": "https://www.designerwallcoverings.com/products/majilite-infinity-white-zinfandel",
+   "issues": [
+    "NOT_IMPACTED|image_too_small_for_high_resolution",
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation"
+   ],
+   "ctx_approved": 2,
+   "ctx_disapproved": 4,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44508731310131",
+   "title": "Ova Prima Vp 1044 01 | Elitis",
+   "link": "https://www.designerwallcoverings.com/products/ova-prima-vp-1044-01-elitis",
+   "issues": [
+    "DISAPPROVED|guns_parts_policy_violation"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  },
+  {
+   "offerId": "44736900464691",
+   "title": "Vista Wine | Maharam",
+   "link": "https://www.designerwallcoverings.com/products/vista-wine-maharam",
+   "issues": [
+    "DISAPPROVED|legal_restrictions_policy_violation",
+    "NOT_IMPACTED|alcohol_policy_violation",
+    "DISAPPROVED|missing_shipping_weight"
+   ],
+   "ctx_approved": 0,
+   "ctx_disapproved": 6,
+   "ctx_total": 6
+  }
+ ]
+}
\ No newline at end of file
diff --git a/tk11847-fresh-state.mjs b/tk11847-fresh-state.mjs
new file mode 100644
index 0000000..aab1176
--- /dev/null
+++ b/tk11847-fresh-state.mjs
@@ -0,0 +1,55 @@
+// TK-11847 READ-ONLY fresh-state read of the 29 legal_restrictions cohort (2026-09-17).
+// Captures per-context destinationStatuses + itemLevelIssues + lastUpdateDate. $0, no writes.
+import fs from 'fs';
+import { createRequire } from 'module';
+const require = createRequire(import.meta.url);
+const mc = require('./_mc-read-v1.js');
+
+const EV = JSON.parse(fs.readFileSync('/Users/macstudio3/Projects/gmc-titlefix/data/tk11449-policy-locate.json','utf8'));
+const rows = EV.rows.filter(r => r.issues.some(i => i.includes('legal_restrictions')));
+
+const out = [];
+for (const r of rows) {
+  try {
+    const p = await mc.getProduct('online:en:US:' + r.offerId);
+    const ds = (p._v1.productStatus?.destinationStatuses || []).map(d => ({
+      ctx: d.reportingContext,
+      approved: d.approvedCountries || [],
+      disapproved: d.disapprovedCountries || [],
+      pending: d.pendingCountries || [],
+    }));
+    const apprCtx = ds.filter(d => d.approved.length && !d.disapproved.length).length;
+    const disaCtx = ds.filter(d => d.disapproved.length).length;
+    const dis = [...new Set(p.itemLevelIssues.filter(i => i.servability === 'disapproved').map(i => i.code))];
+    const noimp = [...new Set(p.itemLevelIssues.filter(i => i.servability === 'not_impacted').map(i => i.code))];
+    out.push({
+      offerId: r.offerId,
+      title: r.title,
+      approved_contexts: apprCtx,
+      disapproved_contexts: disaCtx,
+      disapproved_codes: dis,
+      notimpacted_codes: noimp,
+      still_legal_restrictions: dis.includes('legal_restrictions_policy_violation'),
+      lastUpdateDate: p._v1.productStatus?.lastUpdateDate || null,
+      advertised: p.price ? Number(p.price.value) : null,
+      contexts: ds,
+    });
+    console.log(`${dis.includes('legal_restrictions_policy_violation') ? 'LR ' : 'ok '} ${apprCtx}a/${disaCtx}d  upd=${(p._v1.productStatus?.lastUpdateDate||'').slice(0,16)}  ${r.title}`);
+  } catch (e) {
+    out.push({ offerId: r.offerId, title: r.title, error: String(e).slice(0,140) });
+    console.log('ERR', r.offerId, String(e).slice(0,100));
+  }
+  await new Promise(z => setTimeout(z, 350));
+}
+
+const summary = {
+  total: out.length,
+  still_legal_restrictions: out.filter(x => x.still_legal_restrictions).length,
+  cleared: out.filter(x => x.still_legal_restrictions === false).length,
+  cleared_all_ctx: out.filter(x => x.still_legal_restrictions === false && x.approved_contexts >= 6).length,
+  appeal_ready_parity_clean: 0, // filled by caller combining with parity file
+  hold: 0,
+};
+fs.writeFileSync('/Users/macstudio3/Projects/gmc-titlefix/data/tk11847-fresh-state-20260917.json',
+  JSON.stringify({ ticket: 'TK-11847', read_only: true, fetched_at: new Date().toISOString(), merchant: mc.MERCHANT, summary, rows: out }, null, 1));
+console.log('\nSUMMARY', JSON.stringify({ ...summary, detail: 'see data/tk11847-fresh-state-20260917.json' }));
\ No newline at end of file
diff --git a/tk11847-mckinley-producttype.mjs b/tk11847-mckinley-producttype.mjs
new file mode 100644
index 0000000..13fae74
--- /dev/null
+++ b/tk11847-mckinley-producttype.mjs
@@ -0,0 +1,78 @@
+#!/usr/bin/env node
+/**
+ * TK-11847 — stage product_type correction for McKinley Park Type 2 (40977437818931).
+ *
+ * MEASURED 2026-09-17/18: this is the ONLY offer of the 7 still carrying
+ * legal_restrictions_policy_violation whose processed product lacks productTypes
+ * (["Wallcovering"] is present on all 6 siblings). googleProductCategory is already
+ * correct ("Home & Garden > Decor > Wallpaper") on all 7 — category is NOT the fix.
+ *
+ * EXPECTED EFFECT: UNKNOWN / NOT-MEASURED. product_type is not a known
+ * legal_restrictions classifier input; this is catalog hygiene, NOT a claimed cure.
+ * The cure for the disapproval is the human MC-console appeal (see pending-approval
+ * memo 2026-09-18-TK-11847-FRESH-appeal-plan-7-remaining-22-self-cleared.md).
+ *
+ * DANGER (TK-11450 lesson, 09-17): Merchant API productInputs:insert is FULL-REPLACE
+ * by default — a price-only insert strips every other attribute. This script ships
+ * the COMPLETE input attribute set captured from the live processed product, and
+ * refuses to run if the live shape does not match the expected baseline.
+ *
+ * SAFETY:
+ *  - DRY-RUN DEFAULT (no writes; prints the exact payload it would insert).
+ *  - apply requires BOTH --apply AND --yes-i-am-steve.
+ *  - Re-reads the processed product immediately before insert; fails closed on drift.
+ *  - Prestate snapshot of the processed product written before the insert.
+ *  - Rollback: re-insert the prestate input payload via the same endpoint
+ *    (dataSource 180695450, primary Content API feed).
+ *
+ * DRY-RUN:  node tk11847-mckinley-producttype.mjs
+ * APPLY:    node tk11847-mckinley-producttype.mjs --apply --yes-i-am-steve
+ */
+import fs from 'fs';
+import { createRequire } from 'module';
+const require = createRequire(import.meta.url);
+const { token, MERCHANT } = require('./_auth.js');
+
+const OFFER = '40977437818931';
+const DS = 'accounts/146735262/dataSources/180695450'; // primary Content API DS (verified: this offer's dataSource)
+const args = process.argv.slice(2);
+const APPLY = args.includes('--apply') && args.includes('--yes-i-am-steve');
+const stamp = () => new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
+
+const t = await token();
+const H = { Authorization: 'Bearer ' + t, 'Content-Type': 'application/json' };
+
+// 1. read live processed product
+const r = await fetch(`https://merchantapi.googleapis.com/products/v1/accounts/${MERCHANT}/products/online~en~US~${OFFER}`, { headers: { Authorization: 'Bearer ' + t } });
+if (!r.ok) { console.error('READ FAIL', r.status, await r.text()); process.exit(2); }
+const p = await r.json();
+const a = p.productAttributes || {};
+
+// 2. sanity gates
+if (a.googleProductCategory !== 'Home & Garden > Decor > Wallpaper') { console.error('GATE FAIL: unexpected category', a.googleProductCategory); process.exit(3); }
+if ((a.productTypes || []).length) { console.error('GATE FAIL: productTypes already present — nothing to do'); process.exit(0); }
+const ili = (p.productStatus?.itemLevelIssues || []).filter(i => i.severity === 'DISAPPROVED').map(i => i.code);
+console.log('live disapproved ILI:', [...new Set(ili)].join(', '));
+
+// 3. build COMPLETE input content (full-replace safe): copy every present attribute,
+//    add productTypes ["Wallcovering"] to match the sibling cohort.
+const content = { ...a, productTypes: ['Wallcovering'] };
+// strip fields that do not belong in a productInput content payload
+for (const k of ['linkTemplate', 'mobileLinkTemplate', 'customAttributes']) delete content[k];
+
+console.log('\n== DRY-RUN PREVIEW ==');
+console.log(JSON.stringify({ offerId: OFFER, contentLanguage: p.contentLanguage, feedLabel: p.feedLabel, dataSource: DS, content: { ...content, description: (content.description || '').slice(0, 80) + '…' } }, null, 1));
+
+const fsOut = `data/tk11847-mckinley-producttype-${APPLY ? 'APPLY' : 'dryrun'}-${stamp()}.json`;
+fs.writeFileSync(fsOut, JSON.stringify({ ticket: 'TK-11847', offerId: OFFER, mode: APPLY ? 'APPLY' : 'DRY-RUN', at: new Date().toISOString(), prestate: p, payload: { offerId: OFFER, contentLanguage: p.contentLanguage, feedLabel: p.feedLabel, content } }, null, 1));
+console.log('\nartifact:', fsOut);
+
+if (!APPLY) { console.log('\nDRY-RUN only — ZERO writes. Apply path: --apply --yes-i-am-steve'); process.exit(0); }
+
+// 4. APPLY (Steve-gated): prestate snapshot already written above; insert.
+const url = `https://merchantapi.googleapis.com/productinputs/v1/accounts/${MERCHANT}/productInputs:insert?dataSource=${encodeURIComponent(DS)}`;
+const body = { offerId: OFFER, contentLanguage: p.contentLanguage || 'en', feedLabel: p.feedLabel || 'US', content };
+const w = await fetch(url, { method: 'POST', headers: H, body: JSON.stringify(body) });
+console.log('\ninsert HTTP', w.status);
+if (!w.ok) { console.error((await w.text()).slice(0, 400)); process.exit(4); }
+console.log('OK — productInput re-inserted with productTypes ["Wallcovering"]. Verify via itemLevelIssues after re-crawl (NOT lastUpdateDate).');
\ No newline at end of file
diff --git a/tk11847-policy-locate-20260917.mjs b/tk11847-policy-locate-20260917.mjs
new file mode 100755
index 0000000..319c212
--- /dev/null
+++ b/tk11847-policy-locate-20260917.mjs
@@ -0,0 +1,35 @@
+// READ-ONLY, $0: LOCATE every offer account-wide carrying a policy-family issue.
+// Proves the account-wide aggregate counts (tobacco=1, illegal_drugs=1) map to known products.
+import { createRequire } from 'module';
+const require = createRequire(import.meta.url);
+const { token, MERCHANT } = require('/Users/macstudio3/Projects/gmc-titlefix/_auth.js');
+import fs from 'fs';
+const BASE='https://merchantapi.googleapis.com';
+const RE=/tobacco|illegal_drugs|alcohol|legal_restrictions|guns/;
+let page='',total=0,hits=[],complete=false,pages=0;
+try{
+ do{
+  const H={Authorization:'Bearer '+(await token())};
+  const r=await fetch(`${BASE}/products/v1/accounts/${MERCHANT}/products?pageSize=250`+(page?`&pageToken=${encodeURIComponent(page)}`:''),{headers:H,signal:AbortSignal.timeout(90000)});
+  if(!r.ok) throw new Error('HTTP '+r.status);
+  const j=await r.json();
+  for(const p of (j.products||[])){
+   total++;
+   const a=p.productAttributes||{},ps=p.productStatus||{};
+   const iss=[...new Set((ps.itemLevelIssues||[]).map(i=>`${i.severity}|${i.code}`))];
+   if(iss.some(c=>RE.test(c))){
+    const ds=ps.destinationStatuses||[];
+    hits.push({offerId:p.offerId,title:(a.title||'').slice(0,75),brand:a.brand,link:a.link,issues:iss,
+      ctx_approved:ds.filter(d=>(d.approvedCountries||[]).length>0).length,
+      ctx_disapproved:ds.filter(d=>(d.disapprovedCountries||[]).length>0).length,ctx_total:ds.length});
+   }
+  }
+  page=j.nextPageToken||''; pages++; if(pages%40===0) process.stderr.write(` ${total}`);
+ }while(page);
+ complete=true;
+}catch(e){ console.error('WALK FAILED:',String(e).slice(0,140)); }
+fs.writeFileSync('/Users/macstudio3/Projects/gmc-titlefix/data/tk11847-policy-locate-20260917.json',
+ JSON.stringify({ticket:'TK-11847-refresh-walk',read_only:true,fetched_at:new Date().toISOString(),walk_complete:complete,total_offers_walked:total,n:hits.length,rows:hits},null,1));
+console.log(`\nwalk_complete=${complete} total=${total} policy_family_hits=${hits.length}`);
+hits.forEach(h=>console.log(`  ${h.ctx_approved>0?'SERVING    ':'disapproved'} ${h.offerId}  ${h.issues.join(',')}\n      ${h.title}`));
+if(!complete) console.log('NOT-MEASURED: walk incomplete.');

← ebd1cd8 auto-data-snapshot: 2026-09-17T20:05:20 (5 data files) — dat  ·  back to Gmc Titlefix  ·  TK-11450 refill (night-TK-11450-attr-census): attribute-leve 658ba04 →