← back to Hollywood Mfr Trim
Add recover24: write recovered Momentum SKUs->manufacturer_sku + mint HWC-61320..61343 for Goat Rock(Seto)+Hearst Castle(Layout); dry-run 144/24 clean, gated
651e394fd46f065cfc09bebf98899f511c45adaa · 2026-08-18 10:27:53 -0700 · steve
Files touched
Diff
commit 651e394fd46f065cfc09bebf98899f511c45adaa
Author: steve <steve@designerwallcoverings.com>
Date: Tue Aug 18 10:27:53 2026 -0700
Add recover24: write recovered Momentum SKUs->manufacturer_sku + mint HWC-61320..61343 for Goat Rock(Seto)+Hearst Castle(Layout); dry-run 144/24 clean, gated
---
remediate.mjs | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/remediate.mjs b/remediate.mjs
index 056beb8..c02b9fc 100644
--- a/remediate.mjs
+++ b/remediate.mjs
@@ -56,7 +56,39 @@ if(PART==='archived'){
UNION ALL SELECT pid,'global',code FROM r WHERE g
)
SELECT COALESCE(json_agg(json_build_object('ownerId','gid://shopify/Product/'||pid,'namespace',ns,'key','dw_sku','type','single_line_text_field','value',code) ORDER BY pid,ns),'[]') FROM w;`;
-} else { console.error('Pass --part archived | mint75'); process.exit(1); }
+} else if(PART==='recover24'){
+ // 24 no-mfr (Goat Rock=Seto, Hearst Castle=Layout): recover per-color Momentum sku into manufacturer_sku
+ // AND mint HWC-61320+ into dw_sku. mint75 consumed HWC-61245..61319, so this continues at 61320.
+ SQL = `WITH b AS (
+ SELECT DISTINCT regexp_replace(shopify_id,'\\D','','g') AS pid, title,
+ regexp_replace(title,'^(Goat Rock|Hearst Castle) - ([A-Za-z]+).*','\\2') AS color,
+ CASE WHEN title LIKE 'Goat Rock%' THEN 'Seto' WHEN title LIKE 'Hearst Castle%' THEN 'Layout' END AS mpat,
+ (metafields->'custom'->'dw_sku'->>'value' ~ '^DWH[DW]') c,
+ (metafields->'dwc'->'dw_sku'->>'value' ~ '^DWH[DW]') d,
+ (metafields->'global'->'dw_sku'->>'value' ~ '^DWH[DW]') g
+ FROM shopify_products
+ WHERE (vendor='Hollywood Wallcoverings' OR dw_sku LIKE 'HWC-%')
+ AND status='ACTIVE' AND dw_sku IS NULL AND ${FAB}
+ AND (mfr_sku IS NULL OR TRIM(mfr_sku)='')
+ ), r AS (
+ SELECT b.pid, b.c, b.d, b.g, m.momentum_sku AS msku,
+ 'HWC-'||(61319 + row_number() OVER (ORDER BY b.pid))::text AS hwc
+ FROM b JOIN LATERAL (
+ SELECT momentum_sku FROM momentum_colorways m
+ WHERE m.pattern_name=b.mpat AND TRIM(m.color_name)=b.color LIMIT 1
+ ) m ON true
+ ), w AS (
+ -- mint HWC into all 3 line-standard dw_sku namespaces (matches mint75; clears the fabricated code + populates the mirror)
+ SELECT pid,'custom' ns,'dw_sku' k,hwc v FROM r
+ UNION ALL SELECT pid,'dwc','dw_sku',hwc FROM r
+ UNION ALL SELECT pid,'global','dw_sku',hwc FROM r
+ -- write recovered Momentum sku into manufacturer_sku across the same 3 namespaces
+ UNION ALL SELECT pid,'custom','manufacturer_sku',msku FROM r
+ UNION ALL SELECT pid,'dwc','manufacturer_sku',msku FROM r
+ UNION ALL SELECT pid,'global','manufacturer_sku',msku FROM r
+ )
+ SELECT COALESCE(json_agg(json_build_object('ownerId','gid://shopify/Product/'||pid,'namespace',ns,'key',k,'type','single_line_text_field','value',v) ORDER BY pid,k,ns),'[]') FROM w;`;
+} else { console.error('Pass --part archived | mint75 | recover24'); process.exit(1); }
const payload = psql(SQL); // json_agg -> a single JSON array, parsed by the psql() helper
@@ -65,7 +97,7 @@ console.log(`Part: ${PART} | ${payload.length} dw_sku metafield writes across
console.log(APPLY ? '>>> APPLY MODE — writing to LIVE Shopify' : '>>> DRY RUN (no writes). Pass --apply to execute.');
if(!APPLY){
- const byProd={}; for(const p of payload){ (byProd[p.ownerId] ||= []).push(`${p.namespace}=${p.value}`); }
+ const byProd={}; for(const p of payload){ (byProd[p.ownerId] ||= []).push(`${p.namespace}.${p.key}=${p.value}`); }
for(const [gid,sets] of Object.entries(byProd)) console.log(` ${gid.split('/').pop()} ${sets.join(' ')}`);
console.log(`\nDry run complete. ${payload.length} writes staged across ${prods.size} products.`);
process.exit(0);
← 92f7fd7 Fan-out resolves deferred Group-B: 12/14 collides safe, 24 n
·
back to Hollywood Mfr Trim
·
recover24 APPLIED (144/144, verified live); add mint14 for t 71a981d →