[object Object]

← back to Gmc Titlefix

TK-11448: per-bucket remediation + why-the-62-pending-crawl-are-stuck (evidence-backed)

01d3acde18c2af6bf5143fbf12dcee436834a1d5 · 2026-09-11 14:15:10 -0700 · Steve

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

Files touched

Diff

commit 01d3acde18c2af6bf5143fbf12dcee436834a1d5
Author: Steve <steve@designerwallcoverings.com>
Date:   Fri Sep 11 14:15:10 2026 -0700

    TK-11448: per-bucket remediation + why-the-62-pending-crawl-are-stuck (evidence-backed)
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01DPnHjsFLTsVZton5xPecp9
---
 data/tk11448-per-bucket-remediation.json | 42 ++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/data/tk11448-per-bucket-remediation.json b/data/tk11448-per-bucket-remediation.json
new file mode 100644
index 0000000..2e80271
--- /dev/null
+++ b/data/tk11448-per-bucket-remediation.json
@@ -0,0 +1,42 @@
+{
+  "ticket": "TK-11448",
+  "built_by": "win-11448",
+  "built_at_note": "2026-09-11 — per-bucket remediation; why-are-the-62-stuck resolved with evidence",
+  "bucket_counts_full_walk": { "image_link_pending_crawl": 62, "image_too_generic": 42, "image_too_small": 27, "union_distinct_offers": 79 },
+  "why_the_62_pending_crawl_are_stuck": {
+    "headline": "The 62 image_link_pending_crawl is NOT a Google crawl-latency backlog. It is two failure modes wearing one label.",
+    "mode_A_coreported_bad_image": {
+      "count": 56,
+      "of_which_generic_placeholder": 41,
+      "of_which_too_small": 15,
+      "mechanism": "Google DID crawl the image, found it unusable (broken-image placeholder or too-small), disapproved the offer on image_too_generic / image_too_small, and image_link_pending_crawl is co-reported alongside. It cannot clear while the underlying image is the defect. Verified by composition: 56 of 62 carry a real image disapproval in the SAME offer row.",
+      "resolution": "Fix or archive the underlying image. 27 of these are ALREADY archived (Steve-approved in-session); their pending_crawl clears on the next feed cycle. The rest are the FIX-17 set (add real image) + the Scalamandre too-small sourcing set."
+    },
+    "mode_B_genuine_frozen_feed": {
+      "count": 6,
+      "handles": ["dwdc-330795 (Coordonné)","dwk-30927-koroseal-...-crystal-beach (Koroseal)","dwkk-137783 (GP & J Baker)","dwss-71130 (Sandberg)","dwkk-g50f51eb1 (Cole & Son — already clearing in MC)","dwrw-76152 (Rebel Walls — NOT_MEASURED, mc_image null)"],
+      "mechanism": "Image is already GOOD (1200-1800px), the feed URL equals the live Shopify URL (same_as_mc=true), and the image is fully crawlable — probed 5/5 as Googlebot: HTTP 200 image/jpeg, and cdn.shopify.com robots.txt does NOT disallow /s/files/. So the crawl is not blocked and the URL is not a stale 404. The offers simply froze: Google & YouTube channel stopped pushing 2026-08-26; MC lastUpdate is stuck at 08-19/08-20. With no fresh feed submission, Google never advances the pending crawl.",
+      "resolution": "TK-11397 Google & YouTube channel RESYNC (re-push). No image sourcing, no Shopify write. This is the ONLY lever for mode B and it is an external GMC feed push — hard-gated, not fired here.",
+      "honesty_note": "We cannot PROVE the resync clears them (that is Google's side). What is proven: image reachable+good, robots-allowed, feed frozen. The stale feed is the only remaining variable under our control."
+    }
+  },
+  "per_bucket_remediation": {
+    "image_too_generic_42": {
+      "root_cause": "Gray broken-image placeholder (md5 07ba3bad8ec1be7440d01bb2479e14f8, 800x600, 6326B) uploaded once-per-product under a per-product filename, so it is FEATURED on the live storefront, not just in ads.",
+      "disposition": "33 archived (Steve-approved, DONE) + FIX-17 (gated, drafted) + Farmers-Hill-Fall keeper -> TK-11491.",
+      "gated_action": "FIX-17 Shopify image writes (see pending-approval memo)."
+    },
+    "image_too_small_27": {
+      "split": { "RESYNC_FIXES_9": "Shopify has a good image; feed serves old small one -> TK-11397 resync", "NEEDS_BIGGER_IMAGE_17": "genuinely small on the product (10 Scalamandre incl. the 10x16px ~370B placeholders, + Phillipe Romano/Architectural Fabrics/Malibu/etc.) -> need a bigger image SOURCED, or archive-if-not-on-vendor", "RESYNC_OR_RECRAWL_1": "TK-11397 resync" },
+      "note": "image_too_small fires DISAPPROVED only at the small end (observed <=320px, worst 10x16px). The 500px threshold is image_too_small_for_high_resolution = NOT_IMPACTED (future enforcement), tracked separately (TK-11494, 12,495 sub-500 products).",
+      "gated_action": "Scalamandre/other bigger-image sourcing -> recommend spin-out (sourcing lane); resync-fixable 9+1 ride TK-11397."
+    },
+    "image_link_pending_crawl_62": "See why_the_62_pending_crawl_are_stuck. 56 resolve via image fix/archive (27 already archived), 6 ride TK-11397 resync."
+  },
+  "gated_and_pending": {
+    "FIX_17_shopify_image_writes": "11 Rebel Walls add-real-image + 6 Sandberg reorder-featured. plan=data/tk11448-remediation-plan.json, executor=tk11448-apply-plan.mjs (dry-run default, --canary N). DRAFTED to pending-approval; NOT fired.",
+    "TK_11397_resync": "external GMC feed push — clears the 6 genuine pending_crawl + lets the 27 archived + 9 resync_fixes drop cleanly. Hard-gated, owned by TK-11397, not fired here.",
+    "scalamandre_bigger_image_sourcing": "17 NEEDS_BIGGER_IMAGE — recommend spin-out to a sourcing ticket (parallels the Rebel Walls scraper lane)."
+  },
+  "nothing_fired": true
+}

← ffe6554 5x: TK-11448 verify-and-fix report — 4 sweeps, 1 real defect  ·  back to Gmc Titlefix  ·  TK-11522/11523: full vendor-edge sweep — 126 testable, 27 br 33da7f5 →