[object Object]

← back to Rebel Walls Push

TK-10029: add --hold-rollbolt flag (scope B) to relabel-units.js

080e96fd323ba2c572ff376905871a6ae0288a33 · 2026-09-03 11:07:12 -0700 · Steve Abrams

Subtractive flag that excises the roll/bolt unit-of-sale cohort
(roll / single roll / sold per roll / sold per bolt (20.5in x 33ft))
from the wrong-label set entirely, so those variants are neither FIXed
nor REVIEWed. Scope-A behavior unchanged when the flag is absent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PZBUFotX5YXv7nUtTtAa2r

Files touched

Diff

commit 080e96fd323ba2c572ff376905871a6ae0288a33
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 3 11:07:12 2026 -0700

    TK-10029: add --hold-rollbolt flag (scope B) to relabel-units.js
    
    Subtractive flag that excises the roll/bolt unit-of-sale cohort
    (roll / single roll / sold per roll / sold per bolt (20.5in x 33ft))
    from the wrong-label set entirely, so those variants are neither FIXed
    nor REVIEWed. Scope-A behavior unchanged when the flag is absent.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PZBUFotX5YXv7nUtTtAa2r
---
 scripts/relabel-units.js | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/scripts/relabel-units.js b/scripts/relabel-units.js
index e28f6a2..b69caa6 100644
--- a/scripts/relabel-units.js
+++ b/scripts/relabel-units.js
@@ -31,6 +31,14 @@ const TOKEN = getToken();
 const args = process.argv.slice(2);
 const DRY = !args.includes('--apply');
 const LIMIT = (() => { const i = args.indexOf('--limit'); return i >= 0 ? parseInt(args[i+1]) : Infinity; })();
+// TK-10029 Scope B (Steve GO 2026-09-03): --hold-rollbolt excises the roll/bolt unit-of-sale
+// cohort from the wrong-label set entirely, so those variants are NEITHER FIXed NOR REVIEWed —
+// they are held pending the separate roll/bolt unit-of-sale review (TK-10405). Purely subtractive:
+// when absent, scope-A behavior is unchanged.
+const HOLD_ROLLBOLT = args.includes('--hold-rollbolt');
+const HELD_ROLLBOLT_LABELS = new Set([
+  'roll', 'single roll', 'sold per roll', 'sold per bolt (20.5in x 33ft)',
+]);
 
 // TK-10029 / DTD 2026-08-10: canonical mural unit label = "Mural (per m²)" (Option A,
 // unanimous 7/7). This is what the live importer push.js already mints, so we converge
@@ -49,6 +57,8 @@ const WRONG_MURAL_LABELS = new Set([
 // (e.g. the mojibake "Mural (per m�)") that is NOT already the exact canonical.
 function isWrongMuralLabel(value) {
   const lower = value.toLowerCase();
+  // Scope B: hold the roll/bolt unit-of-sale cohort — never FIX, never REVIEW-into-rename.
+  if (HOLD_ROLLBOLT && HELD_ROLLBOLT_LABELS.has(lower)) return false;
   if (WRONG_MURAL_LABELS.has(lower)) return true;
   // mojibake / near-miss of the canonical: starts like "mural (per m" but isn't exact
   if (lower.startsWith('mural (per m') && value !== CORRECT_LABEL) return true;

← 59a6e8f route relabel-units to SHOPIFY_FULL_ACCESS_TOKEN (TK-10979 D  ·  back to Rebel Walls Push  ·  TK-10029: fresh complete pre-apply rollback ledger (1500 ren 789f983 →