← back to Gmc Titlefix
TK-10993: track read-only Track-C roll-leak enumerator (produced the already-committed data/genuine-rollleaks.json in d3daab6)
51a533bf4119dac179d66feb8a7c00482e2a4d0a · 2026-09-03 14:00:53 -0700 · Steve Abrams
Resolves the 'unknown-owner dirty enumerator' blocker that held TK-10993:
the file is the READ-ONLY enumerator whose output was committed by the
auto-data-snapshot job on 2026-08-31 but whose source was never added.
No behavior change; nothing external touched.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011CMTNwhCcyjeem27QgYMJS
Files touched
A enumerate-genuine-rollleaks.mjs
Diff
commit 51a533bf4119dac179d66feb8a7c00482e2a4d0a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Sep 3 14:00:53 2026 -0700
TK-10993: track read-only Track-C roll-leak enumerator (produced the already-committed data/genuine-rollleaks.json in d3daab6)
Resolves the 'unknown-owner dirty enumerator' blocker that held TK-10993:
the file is the READ-ONLY enumerator whose output was committed by the
auto-data-snapshot job on 2026-08-31 but whose source was never added.
No behavior change; nothing external touched.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011CMTNwhCcyjeem27QgYMJS
---
enumerate-genuine-rollleaks.mjs | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/enumerate-genuine-rollleaks.mjs b/enumerate-genuine-rollleaks.mjs
new file mode 100644
index 0000000..ccebfbe
--- /dev/null
+++ b/enumerate-genuine-rollleaks.mjs
@@ -0,0 +1,30 @@
+// READ-ONLY: enumerate GENUINE roll-variant leaks in the live GMC feed.
+// A leak candidate = offer served price <= 4.26. EXCLUDE sample offers
+// (title starts "Sample:" OR offerId/title signals sample). Classify variant, not pid.
+import fs from 'fs';
+import { createRequire } from 'module';
+const require = createRequire(import.meta.url);
+const { token, MERCHANT } = require('./_auth.js');
+const tok = await token(); const H = { Authorization: 'Bearer '+tok };
+const isSampleTitle = t => /^\s*sample\b|\bsample\b.*wallpaper|\bmemo\b|\bswatch\b/i.test(t||'');
+let page=null, scanned=0, leakAll=0, sampleLeak=0, rollLeak=0, nonUS=0;
+const roll=[];
+do{
+ const r = await (await fetch(`https://shoppingcontent.googleapis.com/content/v2.1/${MERCHANT}/products?maxResults=250`+(page?`&pageToken=${page}`:''),{headers:H})).json();
+ if(r.error){ console.error('MC err',JSON.stringify(r.error).slice(0,150)); break; }
+ for(const p of (r.resources||[])){
+ const price=parseFloat(p.price?.value||'0');
+ if(!(price<=4.26)) continue;
+ leakAll++;
+ if(p.feedLabel!=='US'){ nonUS++; continue; }
+ if(isSampleTitle(p.title)){ sampleLeak++; continue; }
+ rollLeak++;
+ roll.push({offerId:p.offerId, title:(p.title||'').slice(0,60), price, link:p.link||''});
+ }
+ page=r.nextPageToken; scanned+=(r.resources||[]).length;
+ if(scanned%10000<250) process.stderr.write(` ...${scanned} scanned, rollLeak ${rollLeak}\n`);
+}while(page);
+fs.writeFileSync('data/genuine-rollleaks.json', JSON.stringify({generated_at:new Date().toISOString(), scanned, leakAll, sampleLeak, nonUS, rollLeak, offers:roll},null,2));
+console.log(JSON.stringify({scanned, leakAll_le426:leakAll, sampleLeak_excluded:sampleLeak, nonUS_excluded:nonUS, GENUINE_ROLL_LEAK:rollLeak},null,2));
+console.log('--- first 20 genuine roll leaks ---');
+roll.slice(0,20).forEach(o=>console.log(` ${o.offerId} $${o.price} ${o.title}`));
← 4cadd62 auto-data-snapshot: 2026-08-31T11:55:57 (1 data files) — dat
·
back to Gmc Titlefix
·
TK-10993: CA/GB recovery verifier + pre-change baseline 74802ae →