[object Object]

← back to Fentucci Naturals

add sanity report script

b4b07f81870d1b25666a06cb6f0ffbab8b8a97d3 · 2026-07-22 17:40:44 -0700 · Steve Abrams

Files touched

Diff

commit b4b07f81870d1b25666a06cb6f0ffbab8b8a97d3
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 22 17:40:44 2026 -0700

    add sanity report script
---
 scripts/report.js | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/scripts/report.js b/scripts/report.js
new file mode 100644
index 0000000..5acd97f
--- /dev/null
+++ b/scripts/report.js
@@ -0,0 +1,23 @@
+#!/usr/bin/env node
+// Sanity report: patterns/SKUs per category, image coverage, shared-image flags, sample rows.
+const fs = require('fs');
+const path = require('path');
+const ROOT = path.join(__dirname, '..');
+const products = JSON.parse(fs.readFileSync(path.join(ROOT, 'data', 'products.json')));
+const audit = JSON.parse(fs.readFileSync(path.join(ROOT, 'data', 'image-audit.json')));
+
+const perCat = new Map();
+for (const p of products) {
+  const c = perCat.get(p.source_category) || { skus: 0, patterns: new Set() };
+  c.skus++; c.patterns.add(p.pattern_key);
+  perCat.set(p.source_category, c);
+}
+console.log('category            skus  patterns');
+for (const [c, v] of [...perCat].sort()) console.log(c.padEnd(20), String(v.skus).padStart(4), String(v.patterns.size).padStart(6));
+console.log('\nTOTAL skus:', products.length, ' patterns:', new Set(products.map(p => p.pattern_key)).size);
+console.log('image coverage:', audit.coverage_pct + '%', `(missing ${audit.missing.length}, small ${audit.small.length})`);
+console.log('shared-image flagged patterns:', audit.shared_image_patterns.length);
+for (const f of audit.shared_image_patterns) console.log(' ', f.pattern, `${f.distinct_images}/${f.colorways} distinct`, f.shared.slice(0, 3));
+console.log('\nsample rows:');
+for (const p of [products[0], products[100], products[220], products[350], products[503]].filter(Boolean))
+  console.log(` ${p.mfr_sku} -> ${p.dw_sku} | ${p.pattern_name} ${p.color_name || '(no color)'} | ${p.material} | ${p.source_category}`);

← 20606ea gitignore images/ — full-res originals project to >1GB (task  ·  back to Fentucci Naturals  ·  stage: 504 SKUs / 64 patterns into dw_unified.tokiwa_catalog 7824e0c →