← 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
A data/tk11847-appeal-worklist-20260917.jsonA data/tk11847-mckinley-producttype-dryrun-2026-09-18T03-23-55.jsonA data/tk11847-policy-locate-20260917.jsonA tk11847-fresh-state.mjsA tk11847-mckinley-producttype.mjsA tk11847-policy-locate-20260917.mjs
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¤cy=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 →