[object Object]

← back to Dw Activation Calendar

rotation-order: explicitly exclude Fabricut from shared rotation (has dedicated full-pattern daily poster) — TK-10762

20fab0ce8e6a7f15abfbca186a371e7ef0c27c45 · 2026-08-20 16:59:26 -0700 · Steve Abrams

Fabricut was only INCIDENTALLY excluded by the sample-SKU filter (a mirror sync
bug left every Fabricut product sku as the -Sample variant). The root sync fix
(sellable-variant sku) means a future full re-sync would correct those SKUs and
silently flood Fabricut into the shared 1-colorway rotation, violating Steve's
'always complete patterns' rule + double-handling it against fabricut-daily-post.js.
Make the exclusion explicit + durable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 20fab0ce8e6a7f15abfbca186a371e7ef0c27c45
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Aug 20 16:59:26 2026 -0700

    rotation-order: explicitly exclude Fabricut from shared rotation (has dedicated full-pattern daily poster) — TK-10762
    
    Fabricut was only INCIDENTALLY excluded by the sample-SKU filter (a mirror sync
    bug left every Fabricut product sku as the -Sample variant). The root sync fix
    (sellable-variant sku) means a future full re-sync would correct those SKUs and
    silently flood Fabricut into the shared 1-colorway rotation, violating Steve's
    'always complete patterns' rule + double-handling it against fabricut-daily-post.js.
    Make the exclusion explicit + durable.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 lib/rotation-order.js | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/lib/rotation-order.js b/lib/rotation-order.js
index ecf7bdc..1a41bf0 100644
--- a/lib/rotation-order.js
+++ b/lib/rotation-order.js
@@ -77,6 +77,20 @@ const NEVER_ACTIVATE_TITLE = "\\yet cie\\y";
 // NOT on title (Phillipe Romano etc. use "memo"/"sample" as legit name tokens).
 const SAMPLE_SKU_REGEX = "-(sample|s)$";
 
+// DEDICATED-POSTER vendors (2026-08-20, TK-10762). DIFFERENT rationale from
+// NEVER_ACTIVATE_VENDORS: these vendors DO get published — but via their OWN
+// dedicated daily poster, NOT this shared round-robin rotation. They must be
+// excluded from the shared rotation because it activates ONE colorway at a time,
+// which violates Steve's HARD Fabricut rule ("ALWAYS complete patterns — every
+// colorway together, never cut off after 1 color"; fabricut-daily-post.js posts
+// whole patterns). Historically Fabricut was excluded only INCIDENTALLY by the
+// SAMPLE_SKU_REGEX above (a mirror sync bug left every Fabricut product SKU as the
+// "…-Sample" variant). Once that mirror sku is corrected to the sellable roll SKU
+// (root fix shipped in sync-shopify-products.js), the incidental exclusion vanishes
+// and Fabricut would silently flood the shared rotation. This makes the exclusion
+// EXPLICIT + durable so a future full re-sync can't reintroduce the hazard.
+const DEDICATED_POSTER_VENDORS = "fabricut";
+
 /*
  * The canonical ordered-DRAFT query. Emits every DRAFT (minus Schumacher + noise)
  * in the exact textures-first + vendor-round-robin order, with the columns both
@@ -108,6 +122,7 @@ WITH pool AS (
     AND lower(coalesce(title,'')) !~ '${NEVER_ACTIVATE_TITLE}'         -- Et Cie (rights revoked 2026-08-13): brand in TITLE, both "Et Cie …" and "… by Et Cie" forms; vendor is "Designer Wallcoverings"
     AND lower(coalesce(title,'')) !~ '${NOISE_REGEX}'       -- drop help-doc noise rows
     AND lower(coalesce(sku, dw_sku, '')) !~ '${SAMPLE_SKU_REGEX}' -- exclude memo/sample SKUs (…-Sample / …-S): never a standalone live listing
+    AND lower(coalesce(vendor,'')) !~ '${DEDICATED_POSTER_VENDORS}' -- Fabricut (TK-10762): published via its OWN full-pattern daily poster, never the shared 1-colorway rotation
     AND NOT EXISTS (                                        -- re-introduction guard (TITLE): skip a DRAFT whose title was EVER on the store
       SELECT 1 FROM shopify_products a                      -- (ACTIVE now, or intentionally ARCHIVED/DELETED before) — no resurrecting retired patterns
        WHERE a.status IN ('ACTIVE','ARCHIVED','DELETED_FROM_SHOPIFY')

← a964c07 auto-data-snapshot: 2026-08-20T11:53:54 (2 data files) — dat  ·  back to Dw Activation Calendar  ·  auto-data-snapshot: 2026-08-20T17:52:14 (1 data files) — bac 3bf2037 →