← back to Gmc 425 Supplemental Feed
add reorder-canary re-sync recheck script (read-only efficacy confirmation)
b93ed3f02a72d700f64014bf38a4a09ea0fe2172 · 2026-08-10 09:53:17 -0700 · Steve Abrams
Files touched
A recheck-reorder-canary.mjs
Diff
commit b93ed3f02a72d700f64014bf38a4a09ea0fe2172
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 10 09:53:17 2026 -0700
add reorder-canary re-sync recheck script (read-only efficacy confirmation)
---
recheck-reorder-canary.mjs | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/recheck-reorder-canary.mjs b/recheck-reorder-canary.mjs
new file mode 100644
index 0000000..fe0c695
--- /dev/null
+++ b/recheck-reorder-canary.mjs
@@ -0,0 +1,24 @@
+#!/usr/bin/env node
+/** recheck-reorder-canary.mjs — READ-ONLY. Run a few HOURS after the reorder canary (post Google re-sync).
+ * Re-classifies the 10 reordered pids in live Merchant Center: did the Roll offer appear + $4.25 Sample drop? */
+import fs from 'node:fs'; import crypto from 'node:crypto';
+const HOME=process.env.HOME, MERCHANT='146735262';
+const SA_PATH=HOME+'/Projects/secrets-manager/gmc-sa-146735262.json';
+const b64=b=>Buffer.from(b).toString('base64').replace(/=/g,'').replace(/\+/g,'-').replace(/\//g,'_');
+async function mcToken(){const SA=JSON.parse(fs.readFileSync(SA_PATH,'utf8'));const now=Math.floor(Date.now()/1000);
+ const si=b64(JSON.stringify({alg:'RS256',typ:'JWT'}))+'.'+b64(JSON.stringify({iss:SA.client_email,scope:'https://www.googleapis.com/auth/content',aud:'https://oauth2.googleapis.com/token',iat:now,exp:now+3600}));
+ const s=crypto.createSign('RSA-SHA256');s.update(si);const jwt=si+'.'+b64(s.sign(SA.private_key));
+ const r=await fetch('https://oauth2.googleapis.com/token',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:new URLSearchParams({grant_type:'urn:ietf:params:oauth:grant-type:jwt-bearer',assertion:jwt})});
+ return (await r.json()).access_token;}
+const rows=JSON.parse(fs.readFileSync(new URL('./out/supp-cant-help.json',import.meta.url),'utf8')).slice(0,10);
+const tok=await mcToken(); const H={Authorization:`Bearer ${tok}`};
+async function inFeed(pid,vid){const oid=`online:en:US:shopify_US_${pid}_${vid}`;
+ const r=await fetch(`https://shoppingcontent.googleapis.com/content/v2.1/${MERCHANT}/productstatuses/${encodeURIComponent(oid)}`,{headers:H});return r.status!==404;}
+let fixed=0,stillLeaking=0;
+for(const r of rows){
+ const roll=await inFeed(r.pid,r.rollVid), samp=await inFeed(r.pid,r.sampleVid);
+ const verdict = roll&&!samp ? 'FIXED (roll in, sample out)' : roll&&samp ? 'BOTH in feed (partial)' : !roll&&samp ? 'STILL LEAKING (roll absent)' : 'off-feed';
+ if(roll&&!samp) fixed++; if(!roll&&samp) stillLeaking++;
+ console.log(`${r.pid} ${verdict}`);
+}
+console.log(`\nRESULT: ${fixed}/10 FIXED, ${stillLeaking}/10 still leaking. If majority FIXED -> reorder works -> scale to the remaining SUPP_CANT_HELP. If not -> use republish-to-channel instead.`);
← 8c108c6 canary: 10-product reorder applied (reversible, ledger); fee
·
back to Gmc 425 Supplemental Feed
·
spike: Merchant API v1 works but 7 'DW Real-Price Overrides' d734ca3 →