← back to Designer Wallcoverings
Accept phthalate-free material copy in activation validation
1d91950f608a6970dd3152ed99dcb1f6439e856a · 2026-09-09 10:20:14 -0700 · Steve Abrams
Files touched
M shopify/scripts/lib/validate-before-activate.jsA shopify/scripts/lib/validate-before-activate.test.jsA verification/e2e-proof-before-TK11314.jsonM verification/e2e-proof.json
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 →