← back to Hollywood Import

hollywood-remap-score.mjs

42 lines

// TK-10679 Phase 2 — score recovery tiers on the dumped affected set. Pure local, no I/O to Shopify.
import { FABRICATED } from '/Users/macstudio3/.claude/skills/dw-hollywood-sku-canary/lib.mjs';
import { readFileSync, writeFileSync } from 'node:fs';
const rows = JSON.parse(readFileSync(new URL('./remap-affected-raw.json', import.meta.url).pathname));
const ORIG = /^([A-Z]{2,5})-?(\d{2,})$/i;
const isFab = s => !!s && FABRICATED.test(s);
const clean = s => !!s && !isFab(s) && ORIG.test(s);      // non-fabricated, original-shaped code
const isBareNum = s => /^\d{5,}$/.test((s || '').trim());  // raw momentum number (never customer-facing)

const tiers = { A_variant_clean: [], B_metafield_clean: [], C_has_pattern_color: [], D_truly_held: [] };
for (const r of rows) {
  const vClean = r.vbases.find(clean);
  const mfClean = [r.mf.global, r.mf.dwc, r.mf.custom].find(clean);
  if (vClean)            { tiers.A_variant_clean.push({ ...r, recover: vClean }); continue; }
  if (mfClean)           { tiers.B_metafield_clean.push({ ...r, recover: mfClean }); continue; }
  if (r.pat && r.col)    { tiers.C_has_pattern_color.push(r); continue; }  // candidate for staging join
  tiers.D_truly_held.push(r);
}
// Extra signal: of held/tier-C, how many carry a real momentum_sku or manufacturer_sku metafield (→ HW-hash path)?
const withMom = rows.filter(r => r.mom && !isFab(r.mom)).length;
const withMan = rows.filter(r => r.man && clean(r.man)).length;
const bareNumMf = rows.filter(r => isBareNum(r.mf.global) || isBareNum(r.mf.dwc) || isBareNum(r.mf.custom)).length;

const summary = {
  affected: rows.length,
  A_variant_clean: tiers.A_variant_clean.length,
  B_metafield_clean: tiers.B_metafield_clean.length,
  C_has_pattern_color: tiers.C_has_pattern_color.length,
  D_truly_held: tiers.D_truly_held.length,
  with_real_momentum_sku_mf: withMom,
  with_clean_manufacturer_sku_mf: withMan,
  bare_number_in_dw_sku_mf: bareNumMf,
};
writeFileSync(new URL('./remap-tiers.json', import.meta.url).pathname, JSON.stringify({ summary, tiers }, null, 1));
console.log(JSON.stringify(summary, null, 2));
console.log('\n--- sample tier B (metafield-clean) ---');
for (const r of tiers.B_metafield_clean.slice(0, 5)) console.log(`${r.handle}  mf=${JSON.stringify(r.mf)}  vbases=${r.vbases}  -> ${r.recover}`);
console.log('\n--- sample tier C (pattern+color, needs staging join) ---');
for (const r of tiers.C_has_pattern_color.slice(0, 5)) console.log(`${r.handle}  pat="${r.pat}" col="${r.col}"  vbases=${r.vbases}`);
console.log('\n--- sample tier D (truly held) ---');
for (const r of tiers.D_truly_held.slice(0, 5)) console.log(`${r.handle}  mf=${JSON.stringify(r.mf)}  vbases=${r.vbases}`);