← back to Dw Yolo Loop
cycle 71: root-cause 111 RL $0 Sample = NEVER-PRICED (RL in no pipeline: product_map=0, ~0pct costed, Schu-only seeders, no RL importer); 2025 import != the 33 legacy; fix=reprice $4.25 now + DG cost separate
ddadd0873d8fbc02212b83c1b2c7e1acc6ca11a2 · 2026-06-17 20:14:46 -0700 · Steve Abrams
Files touched
A scripts/rl-zero-rootcause/rl-diag.mjs
Diff
commit ddadd0873d8fbc02212b83c1b2c7e1acc6ca11a2
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jun 17 20:14:46 2026 -0700
cycle 71: root-cause 111 RL $0 Sample = NEVER-PRICED (RL in no pipeline: product_map=0, ~0pct costed, Schu-only seeders, no RL importer); 2025 import != the 33 legacy; fix=reprice $4.25 now + DG cost separate
---
scripts/rl-zero-rootcause/rl-diag.mjs | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/scripts/rl-zero-rootcause/rl-diag.mjs b/scripts/rl-zero-rootcause/rl-diag.mjs
new file mode 100644
index 0000000..416fe93
--- /dev/null
+++ b/scripts/rl-zero-rootcause/rl-diag.mjs
@@ -0,0 +1,23 @@
+import fs from 'fs';
+const ENV=fs.readFileSync('/Users/stevestudio2/Projects/secrets-manager/.env','utf8');
+const TOK=(ENV.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m)||[])[1].replace(/['"\r]/g,'').trim();
+const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/graphql.json';
+const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+async function gql(q,v){for(let a=0;a<6;a++){const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}return null;}
+const Q=`query($cursor:String){ products(first:100, after:$cursor, query:"status:active vendor:'Ralph Lauren'"){ pageInfo{hasNextPage endCursor} edges{node{handle createdAt variants(first:10){edges{node{title price position inventoryPolicy createdAt sku}}}}} } }`;
+let cursor=null, pages=0, total=0; const zero=[];
+while(pages<15){ const j=await gql(Q,{cursor}); if(!j?.data){console.log('fail',JSON.stringify(j?.errors||'').slice(0,200));break;} const c=j.data.products;
+ for(const e of c.edges){ const n=e.node; total++;
+ const vs=(n.variants?.edges||[]).map(x=>x.node).map(v=>({t:v.title,price:parseFloat(v.price),pos:v.position,ip:v.inventoryPolicy,created:v.createdAt,sku:v.sku})).filter(v=>!isNaN(v.price));
+ const mx=vs.length?Math.max(...vs.map(v=>v.price)):null;
+ if(vs.length===1 && mx===0){ zero.push({h:n.handle,prodCreated:n.createdAt,v:vs[0]}); } }
+ if(!c.pageInfo.hasNextPage)break; cursor=c.pageInfo.endCursor; pages++; await sleep(200); }
+console.log(`RL active products: ${total} | single-variant zero-dollar: ${zero.length}`);
+const years={},titles={},ipc={},vcreatedYears={};
+zero.forEach(z=>{ const py=(z.prodCreated||'').slice(0,4); years[py]=(years[py]||0)+1; titles[z.v.t]=(titles[z.v.t]||0)+1; ipc[z.v.ip]=(ipc[z.v.ip]||0)+1; const vy=(z.v.created||'').slice(0,4); vcreatedYears[vy]=(vcreatedYears[vy]||0)+1; });
+console.log('product createdAt year:', JSON.stringify(years));
+console.log('VARIANT createdAt year:', JSON.stringify(vcreatedYears));
+console.log('variant title:', JSON.stringify(titles));
+console.log('inventoryPolicy:', JSON.stringify(ipc));
+console.log('\nexamples:'); zero.slice(0,5).forEach(z=>console.log(` ${z.h.slice(0,40)} prodCreated=${z.prodCreated.slice(0,10)} v="${z.v.t}" $${z.v.price} vCreated=${z.v.created.slice(0,10)} sku=${z.v.sku} ${z.v.ip}`));
+fs.writeFileSync('/tmp/rl-diag.json',JSON.stringify({total,zeroCount:zero.length,years,vcreatedYears,titles,ipc,examples:zero.slice(0,10)},null,2));
← 60247d9 cycle 70: officer CONFIRMED + reframed (producer-elimination
·
back to Dw Yolo Loop
·
cycle 71: officer CONFIRMED+REVISE+FLAG; reframed fix (confi c2c95d8 →