← 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}`);