[object Object]

← back to Designer Wallcoverings

Accept phthalate-free material copy in activation validation

1d91950f608a6970dd3152ed99dcb1f6439e856a · 2026-09-09 10:20:14 -0700 · Steve Abrams

Files touched

Diff

commit 1d91950f608a6970dd3152ed99dcb1f6439e856a
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 9 10:20:14 2026 -0700

    Accept phthalate-free material copy in activation validation
---
 shopify/scripts/lib/validate-before-activate.js    |   5 +-
 .../scripts/lib/validate-before-activate.test.js   |  29 ++++++
 verification/e2e-proof-before-TK11314.json         |  34 +++++++
 verification/e2e-proof.json                        | 113 ++++++++++++++++-----
 4 files changed, 152 insertions(+), 29 deletions(-)

diff --git a/shopify/scripts/lib/validate-before-activate.js b/shopify/scripts/lib/validate-before-activate.js
index a2532eaa..68fbd225 100644
--- a/shopify/scripts/lib/validate-before-activate.js
+++ b/shopify/scripts/lib/validate-before-activate.js
@@ -135,7 +135,10 @@ function validateBeforeActivate(product) {
   } else if (descText.length < 24) {
     reasons.push('description too short (placeholder-grade)');
     tags.push('Needs-Description');
-  } else if (LEGAL_TERMS.test(descText) && descText.length < 200) {
+  } else if (LEGAL_TERMS.test(descText.replace(/\bwithout\s+prop\s*65\s+phthalates\b/gi, '')) && descText.length < 200) {
+    // Designtex's "without Prop 65 Phthalates" is a material specification,
+    // not a disclaimer. Remove only that phrase for this check; any actual
+    // warning/disclaimer elsewhere in the description still blocks.
     // short body that is mostly legal boilerplate = not a real product description
     reasons.push('description is legal/disclaimer boilerplate, not product copy');
     tags.push('Needs-Description');
diff --git a/shopify/scripts/lib/validate-before-activate.test.js b/shopify/scripts/lib/validate-before-activate.test.js
new file mode 100644
index 00000000..789e9c78
--- /dev/null
+++ b/shopify/scripts/lib/validate-before-activate.test.js
@@ -0,0 +1,29 @@
+'use strict';
+const test = require('node:test');
+const assert = require('node:assert/strict');
+const { validateBeforeActivate } = require('./validate-before-activate.js');
+const product = descriptionHtml => ({ title: 'Cork, Dove Wallcoverings | Designtex',
+  vendor: 'Designtex', dwSku: 'DWDX-220334', tags: ['Wallcovering', 'Cork'],
+  specs: { width: '54 Inches' }, descriptionHtml,
+  images: ['https://cdn.shopify.com/example.jpg'], variants: [{ sku: 'DWDX-220334-Sample' }] });
+const description = '<p>Cork in Dove is a designer wallcovering from the Biophilia collection by Designtex. Priced per yard.</p><ul><li><strong>Material:</strong> 100% Vinyl (without Prop 65 Phthalates)</li><li><strong>Width:</strong> 54 Inches</li><li><strong>Sold By:</strong> yard</li></ul>';
+test('actual Designtex material specification is product copy', () => {
+  assert.deepEqual(validateBeforeActivate(product(description)).reasons, []);
+});
+test('real disclaimers remain blocked even with the exempt material phrase', () => {
+  for (const text of ['This product is sold subject to our terms and conditions.',
+    'Disclaimer: without Prop 65 Phthalates. All rights reserved.',
+    'WARNING: Prop 65 chemicals may cause cancer or reproductive harm.',
+    'Copyright © Designtex. All rights reserved.',
+    'Settlement agreement restrictions apply to this product.']) {
+    assert.ok(validateBeforeActivate(product(text)).reasons.some(r => /legal\/disclaimer/.test(r)), text);
+  }
+});
+test('empty, placeholder and short descriptions still fail', () => {
+  for (const description of ['', 'Unknown product coming soon', 'TBD', 'Short'])
+    assert.equal(validateBeforeActivate(product(description)).ok, false);
+});
+test('description correction cannot bypass image, width, sample or internal gates', () => {
+  for (const override of [{ images: [] }, { specs: {} }, { variants: [] }, { tags: ['internal'] }])
+    assert.equal(validateBeforeActivate({ ...product(description), ...override }).ok, false);
+});
diff --git a/verification/e2e-proof-before-TK11314.json b/verification/e2e-proof-before-TK11314.json
new file mode 100644
index 00000000..63d24f0e
--- /dev/null
+++ b/verification/e2e-proof-before-TK11314.json
@@ -0,0 +1,34 @@
+{
+  "ticket": "TK-11047",
+  "intent": "Recover exact Carnegie application identities and place all evidenced manufacturer specifications in canonical dw_unified and Shopify metafields, never product bodies.",
+  "risk_tier": "R4",
+  "environment": "canonical dw_unified on 45.61.58.125 plus designer-laboratory-sandbox Shopify",
+  "timestamp": "2026-09-01T20:16:00Z",
+  "baseline": {
+    "active_carnegie_products": 5962,
+    "products_held_without_manufacturer_specs": 1289
+  },
+  "assertions": {
+    "identity": "PASS — 1289/1289 Shopify variant DW SKUs joined uniquely to one carnegie_catalog row; zero collisions",
+    "canonical": "PASS — 1289/1289 exact title, product type, manufacturer SKU, structured specs, brand and real vendor",
+    "shopify": "PASS — 1289/1289 exact title, product type, vendor and custom.manufacturer_specs",
+    "individual_metafields": "PASS — every non-empty source field exists exactly in a defined carnegie.* metafield",
+    "body_exclusion": "PASS — manufacturer specifications absent from canonical and Shopify bodies",
+    "dw_sku": "PASS — 1289/1289 exact retained DW variant SKU",
+    "images": "PASS — 1289/1289 have at least one Shopify image",
+    "whole_catalog_regression": "PASS — 5962/5962 active Carnegie products pass title suffix, brand, real vendor, clean body, DW SKU and visible metafield checks",
+    "negative_auth": "PASS — invalid Shopify token returned HTTP 401",
+    "idempotency": "PASS — recovery dry-run returns zero pending",
+    "remaining": "PASS — zero active Carnegie products lack manufacturer_specs"
+  },
+  "evidence": [
+    "data/carnegie-held-identity-debug.json",
+    "data/carnegie-held-recovery-E2E.json",
+    "data/carnegie-visible-title-E2E.json",
+    "data/carnegie-held-recovery-RESTORE-*.json",
+    "data/carnegie-held-recovery-RESULT-*.json"
+  ],
+  "rollback": "Retained Shopify restore artifacts per tranche plus canonical carnegie_spec_restore_20260831 and local carnegie_catalog_spec_restore_tk11047 tables.",
+  "cleanup": "Test state retained because all writes are requested production catalog corrections; no synthetic product was created.",
+  "verdict": "PASS"
+}
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
index 63d24f0e..8b3c885b 100644
--- a/verification/e2e-proof.json
+++ b/verification/e2e-proof.json
@@ -1,34 +1,91 @@
 {
-  "ticket": "TK-11047",
-  "intent": "Recover exact Carnegie application identities and place all evidenced manufacturer specifications in canonical dw_unified and Shopify metafields, never product bodies.",
+  "ticket": "TK-11314",
+  "timestamp": "2026-09-09T17:17:00.070133+00:00",
   "risk_tier": "R4",
-  "environment": "canonical dw_unified on 45.61.58.125 plus designer-laboratory-sandbox Shopify",
-  "timestamp": "2026-09-01T20:16:00Z",
+  "authorization": "Steve: go do it (approved rollout and one-product canary)",
+  "environment": "Running hourly DW jobs on Mac; Shopify designer-laboratory-sandbox live store",
+  "verdict": "PASS for rollout/canary; image-dependent throughput BLOCKED by depleted Gemini prepaid credits",
   "baseline": {
-    "active_carnegie_products": 5962,
-    "products_held_without_manufacturer_specs": 1289
+    "product_id": "gid://shopify/Product/7867560886323",
+    "sku": "DWDX-220334",
+    "status_before": "DRAFT",
+    "ledger_before": {
+      "date": "2026-09-09",
+      "used": 0,
+      "file_absent": true
+    }
   },
-  "assertions": {
-    "identity": "PASS — 1289/1289 Shopify variant DW SKUs joined uniquely to one carnegie_catalog row; zero collisions",
-    "canonical": "PASS — 1289/1289 exact title, product type, manufacturer SKU, structured specs, brand and real vendor",
-    "shopify": "PASS — 1289/1289 exact title, product type, vendor and custom.manufacturer_specs",
-    "individual_metafields": "PASS — every non-empty source field exists exactly in a defined carnegie.* metafield",
-    "body_exclusion": "PASS — manufacturer specifications absent from canonical and Shopify bodies",
-    "dw_sku": "PASS — 1289/1289 exact retained DW variant SKU",
-    "images": "PASS — 1289/1289 have at least one Shopify image",
-    "whole_catalog_regression": "PASS — 5962/5962 active Carnegie products pass title suffix, brand, real vendor, clean body, DW SKU and visible metafield checks",
-    "negative_auth": "PASS — invalid Shopify token returned HTTP 401",
-    "idempotency": "PASS — recovery dry-run returns zero pending",
-    "remaining": "PASS — zero active Carnegie products lack manufacturer_specs"
-  },
-  "evidence": [
-    "data/carnegie-held-identity-debug.json",
-    "data/carnegie-held-recovery-E2E.json",
-    "data/carnegie-visible-title-E2E.json",
-    "data/carnegie-held-recovery-RESTORE-*.json",
-    "data/carnegie-held-recovery-RESULT-*.json"
+  "checks": [
+    {
+      "check": "Reviewed runtime bytes installed under both existing worker locks",
+      "verdict": "PASS",
+      "files": 19
+    },
+    {
+      "check": "Installed regressions and guards",
+      "verdict": "PASS",
+      "tests": 45,
+      "notes": "34 activation,4 validator,7 repair; existing reintroduction and never-activate guard also passed"
+    },
+    {
+      "check": "Canary DRAFT to ACTIVE with correct publication",
+      "verdict": "PASS",
+      "product_id": "gid://shopify/Product/7867560886323",
+      "storefront": {
+        "url": "https://www.designerwallcoverings.com/products/cork-dove-dwdx-220334",
+        "status": 200,
+        "product_id_found": true
+      },
+      "googlePublished": false
+    },
+    {
+      "check": "Price/variant preservation and activation ledger",
+      "verdict": "PASS",
+      "notes": "Independent fresh query matches all before variants; ledger increased exactly0to1"
+    },
+    {
+      "check": "Independent verifier",
+      "verdict": "PASS",
+      "implementation": "Separate read-only Shopify2026-07 query + public storefrontHTTP, no activation-module imports",
+      "evidence": "/Users/macstudio3/Projects/dw-activation-debug-TK11314/verification/rollout/canary-verified.json"
+    },
+    {
+      "check": "Existing repair worker read-only operational path",
+      "verdict": "PASS",
+      "notes": "--max1 --dry-run reads20034 tasks,17445 completed,2589 unmatched; first blankDW SKU safely skipped,no Shopify write or budget debit"
+    },
+    {
+      "check": "Vision failure classification",
+      "verdict": "PASS",
+      "provider_result": {
+        "verdict": "HELD",
+        "tier": "vision",
+        "reason": "vision-http-429",
+        "diagnostics": {
+          "httpStatus": 429,
+          "status": "RESOURCE_EXHAUSTED",
+          "message": "Your prepayment credits are depleted. Please go to AI Studio at https://ai.studio/projects to manage your project and billing. Learn more at https://ai.google.dev/gemini-api/docs/billing#prepay. ",
+          "quota": [],
+          "retryAfterMs": 0
+        },
+        "retryAt": "2026-09-09T18:15:49.630Z",
+        "cost": 0
+      },
+      "notes": "One configured-key request; no product mutation or charge; confirmed depleted prepayment credits"
+    },
+    {
+      "check": "Image-review recovery",
+      "verdict": "BLOCKED",
+      "reason": "Gemini prepaid credits depleted; funding/credential changes outside approved rollout"
+    },
+    {
+      "check": "Source rollback",
+      "verdict": "PASS",
+      "evidence": "/Users/macstudio3/Projects/dw-activation-debug-TK11314/verification/rollback-rehearsal.json"
+    }
   ],
-  "rollback": "Retained Shopify restore artifacts per tranche plus canonical carnegie_spec_restore_20260831 and local carnegie_catalog_spec_restore_tk11047 tables.",
-  "cleanup": "Test state retained because all writes are requested production catalog corrections; no synthetic product was created.",
-  "verdict": "PASS"
+  "evidence_directory": "/Users/macstudio3/Projects/dw-activation-debug-TK11314/verification/rollout",
+  "rollback": "Exact pre-files in deployment-manifest backups. Source reversal rehearsed; retains one approved live canary product. No product rollback required.",
+  "schedule": "Existing minute25 activations21/hour,500/day; minute10 field repairs. No schedule changes.",
+  "project": "Designer-Wallcoverings"
 }

← a0294b56 Gate below-images Pattern Description block on live theme (s  ·  back to Designer Wallcoverings  ·  Record live validator rollout and scheduled publication proo 26f38a63 →