[object Object]

← back to Rebel Walls Push

GMC re-gate: exclude Google & YouTube publication (29646651457) from push + activate

e6677f9760946da7e5cedb32746110e602134d7c · 2026-07-08 15:56:09 -0700 · Steve Abrams

Both run on a daily cron and re-leaked the $4.25 sample price to the Google channel.
Filter Google out of loadPublications() in each. Google is fed by the controlled TSV
feed only. Inline + reversible.

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

Files touched

Diff

commit e6677f9760946da7e5cedb32746110e602134d7c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 8 15:56:09 2026 -0700

    GMC re-gate: exclude Google & YouTube publication (29646651457) from push + activate
    
    Both run on a daily cron and re-leaked the $4.25 sample price to the Google channel.
    Filter Google out of loadPublications() in each. Google is fed by the controlled TSV
    feed only. Inline + reversible.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 scripts/activate.js |  7 ++++++-
 scripts/push.js     | 11 ++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/scripts/activate.js b/scripts/activate.js
index 39de924..2e67727 100644
--- a/scripts/activate.js
+++ b/scripts/activate.js
@@ -102,7 +102,12 @@ const M_SET_QTY = `mutation($input:InventorySetQuantitiesInput!){
 let PUBLICATION_IDS = null;
 async function loadPublications() {
   const r = await gqlRetry(`{publications(first:50){edges{node{id name}}}}`, {}, 'publications');
-  PUBLICATION_IDS = r.json.data.publications.edges.map(e => e.node);
+  // GMC source-fix (Steve policy, 2026-07-08): exclude "Google & YouTube"
+  // (publication 29646651457). Shopify auto-syncs minVariantPrice ($4.25 sample)
+  // to Merchant Center → price disapproval. Google is fed by the controlled TSV
+  // feed only. Rollback: delete the .filter() below.
+  PUBLICATION_IDS = r.json.data.publications.edges.map(e => e.node)
+    .filter(p => p.id !== 'gid://shopify/Publication/29646651457');
   return PUBLICATION_IDS;
 }
 
diff --git a/scripts/push.js b/scripts/push.js
index b886625..6232079 100644
--- a/scripts/push.js
+++ b/scripts/push.js
@@ -272,9 +272,18 @@ const QTY_2026 = 2026;
 let PUBLICATION_IDS = null;   // [{id,name}]
 let LOCATION_ID = null;       // gid://shopify/Location/...
 
+// GMC source-fix (Steve policy, 2026-07-08): NEVER publish new SKUs to the
+// "Google & YouTube" channel (publication 29646651457). Shopify auto-syncs the
+// published product's minVariantPrice to Merchant Center; on DW that min is the
+// $4.25 "-Sample" variant → Google advertises $4.25 on a real roll → price
+// disapproval. Google is fed EXCLUSIVELY by the controlled TSV feed. This push
+// runs on a daily cron, so it re-leaks unless Google is excluded here.
+// Rollback: delete the GOOGLE_PUBLICATION_ID filter line below.
+const GOOGLE_PUBLICATION_ID = 'gid://shopify/Publication/29646651457';
 async function loadPublications() {
   const r = await gql(`{publications(first:50){edges{node{id name}}}}`);
-  PUBLICATION_IDS = (r.json.data && r.json.data.publications.edges || []).map(e => e.node);
+  PUBLICATION_IDS = (r.json.data && r.json.data.publications.edges || []).map(e => e.node)
+    .filter(p => p.id !== GOOGLE_PUBLICATION_ID); // GMC exclusion (2026-07-08)
 }
 async function discoverLocation() {
   // Pull the location off any already-pushed variant's inventory level. If none

← 2f4dc48 chore: macstudio3 migration — reconcile from mac2 + repoint  ·  back to Rebel Walls Push  ·  push: create DRAFT not ACTIVE so Rebel Walls flows through t fa667c7 →