[object Object]

← back to Designerwallcoverings

TK-10895: require recorded adjudication to release a dirty G2 cost cell or G3 fabric-row cost

045ae796b50844f476e5d2b908c2e19af1abaa8b · 2026-09-10 14:06:53 -0700 · Steve Abrams

The Tranche-B go-live gate previously hard-failed any ambiguous cost cell (G2)
or FABRIC-row cost (G3). Inference was sometimes needed to unblock, but was
implicit and unauditable. Now a dirty cost may be released ONLY by a recorded
adjudication naming its basis (cost_cell_adjudicated=LOADED-TOKEN-SUPPORTED,
cost_row_adjudicated=WP-ROW-COST-SUPPORTED); otherwise it still fails. Stricter,
not looser — the release is now written down and auditable.

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

Files touched

Diff

commit 045ae796b50844f476e5d2b908c2e19af1abaa8b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 14:06:53 2026 -0700

    TK-10895: require recorded adjudication to release a dirty G2 cost cell or G3 fabric-row cost
    
    The Tranche-B go-live gate previously hard-failed any ambiguous cost cell (G2)
    or FABRIC-row cost (G3). Inference was sometimes needed to unblock, but was
    implicit and unauditable. Now a dirty cost may be released ONLY by a recorded
    adjudication naming its basis (cost_cell_adjudicated=LOADED-TOKEN-SUPPORTED,
    cost_row_adjudicated=WP-ROW-COST-SUPPORTED); otherwise it still fails. Stricter,
    not looser — the release is now written down and auditable.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01Vb6eUbidEgrk4hGuJFF8d2
---
 scripts/tk10895-trancheB-golive-269.mjs | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/scripts/tk10895-trancheB-golive-269.mjs b/scripts/tk10895-trancheB-golive-269.mjs
index 609b717..39d1f22 100644
--- a/scripts/tk10895-trancheB-golive-269.mjs
+++ b/scripts/tk10895-trancheB-golive-269.mjs
@@ -59,8 +59,13 @@ for (const w of work) {
   if (e.decision !== 'GO') fail.push([w.mfr, `evidence says decision=${e.decision}`]);
   if (e.mill_unit !== 'PER_ROLL') fail.push([w.mfr, `G1 unit=${e.mill_unit}`]);
   if (e.mill_yards_per_roll !== '5') fail.push([w.mfr, `G1 yards=${e.mill_yards_per_roll}`]);
-  if (e.cost_cell_clean !== 'YES') fail.push([w.mfr, `G2 ambiguous cost cell ${e.cost_cell}`]);
-  if (e.cost_row_type_clean !== 'YES') fail.push([w.mfr, 'G3 priced off the sheet FABRIC row']);
+  // G2: a dirty cost cell may be released ONLY by a recorded adjudication that names its basis.
+  // Inference is allowed to unblock, but it must be written down and auditable, never implicit.
+  if (e.cost_cell_clean !== 'YES' && !(e.cost_cell_adjudicated || '').startsWith('LOADED-TOKEN-SUPPORTED'))
+    fail.push([w.mfr, `G2 ambiguous cost cell ${e.cost_cell} with no recorded adjudication`]);
+  // G3: same rule as G2 — a FABRIC-row cost may be released only by a recorded adjudication.
+  if (e.cost_row_type_clean !== 'YES' && !(e.cost_row_adjudicated || '').startsWith('WP-ROW-COST-SUPPORTED'))
+    fail.push([w.mfr, 'G3 priced off the sheet FABRIC row with no recorded adjudication']);
   if (!/^\d+$/.test(w.pid)) fail.push([w.mfr, `pid not bare numeric: ${w.pid}`]);
   if (!(parseFloat(w.price) > 50)) fail.push([w.mfr, `price sanity: ${w.price}`]);
   if (!/^Sold Per Single Roll - 5 Yards - [\d.]+In Wide$/.test(w.label)) fail.push([w.mfr, `label: ${w.label}`]);

← 5027a3a TK-11414: weight go-live guard — shared weight-guard.mjs + w  ·  back to Designerwallcoverings  ·  TK-11358: Thibaut Wide-Width roll-length gap diagnostic — co b3b4998 →