← back to Harlequin Pilot Publish
11-rollout-verify.mjs
31 lines
// PART B VERIFY: fresh-GET every product that was ADDED and confirm Single Roll @ correct retail
// AND that a Sample @ $4.25 exists. Reads the full restore-map for the authoritative added set.
import fs from 'node:fs';
import { getProductVariants } from './lib.mjs';
const RESTORE = process.env.HOME + '/.claude/yolo-queue/executed-reversible/harlequin-full-rollout-restore-map.json';
const m = JSON.parse(fs.readFileSync(RESTORE));
const work = fs.readFileSync(new URL('./data/rollout-worklist.csv', import.meta.url), 'utf8').trim().split('\n')
.reduce((a, l) => { const [dw, , , retail] = l.split(','); a[dw] = Number(retail).toFixed(2); return a; }, {});
const rows = []; let pass = 0, fail = 0;
const added = m.entries.filter(e => e.change === 'ADDED_VARIANT');
for (const e of added) {
const prod = await getProductVariants(e.product_gid);
const vs = prod.variants.edges.map(x => x.node);
const roll = vs.find(v => (v.title || '').toLowerCase() === 'single roll' || (v.sku || '').toUpperCase() === e.dw_sku.toUpperCase());
const sample = vs.find(v => (v.sku || '').toUpperCase() === (e.dw_sku + '-SAMPLE').toUpperCase());
const wantRetail = work[e.dw_sku] || Number(e.price).toFixed(2);
const rollOk = !!roll && Number(roll.price).toFixed(2) === wantRetail;
const sampleOk = !!sample && Number(sample.price).toFixed(2) === '4.25';
const active = prod.status === 'ACTIVE';
const verdict = rollOk && sampleOk && active ? 'PASS' : 'FAIL';
verdict === 'PASS' ? pass++ : fail++;
rows.push({ dw_sku: e.dw_sku, status: prod.status, roll_price: roll?.price, roll_ok: rollOk,
sample_price: sample?.price ?? null, sample_ok: sampleOk, want: wantRetail, verdict });
if (verdict === 'FAIL') console.log('FAIL', e.dw_sku, 'status=' + prod.status, 'roll=' + roll?.price + '(want ' + wantRetail + ')', 'sample=' + (sample?.price ?? 'MISSING'));
await new Promise(r => setTimeout(r, 180));
}
fs.writeFileSync(new URL('./data/rollout-verify.json', import.meta.url), JSON.stringify(rows, null, 2));
console.log(`\nPART B VERIFY: PASS ${pass}/${added.length} FAIL ${fail}/${added.length}`);