← back to Designer Wallcoverings
auto-data-snapshot: 2026-09-11T10:08:53 (4 data files) — DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.md shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.json shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl
0001f171cc897310a727d253a046a748c6edd3e5 · 2026-09-11 10:12:58 -0700 · auto-commit-fleet
Files touched
M DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.mdM shopify/scripts/cadence/data/cadence-cursor.jsonM shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.jsonM shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl
Diff
commit 0001f171cc897310a727d253a046a748c6edd3e5
Author: auto-commit-fleet <steve@designerwallcoverings.com>
Date: Fri Sep 11 10:12:58 2026 -0700
auto-data-snapshot: 2026-09-11T10:08:53 (4 data files) — DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.md shopify/scripts/cadence/data/cadence-cursor.json shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.json shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl
---
.../lib/PENDING-WIREIN-price-gate.md | 124 +++++++++----
shopify/scripts/cadence/data/cadence-cursor.json | 2 +-
.../cadence/data/cadence-plan-am-2026-09-11.json | 202 ++++++++++-----------
.../cadence/data/upload-restore-2026-09-11.jsonl | 15 ++
4 files changed, 200 insertions(+), 143 deletions(-)
diff --git a/DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.md b/DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.md
index 98508f29..76af9394 100644
--- a/DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.md
+++ b/DW-Programming/ImportNewSkufromURL/lib/PENDING-WIREIN-price-gate.md
@@ -27,19 +27,42 @@ for Steve:
the gate actually "shared" and kills the recurrence class fleet-wide.
- **Option C:** #1 now; file follow-up tickets for #2 and #3.
-## What the gate catches (and the headline-bug fix)
+## A-with-teeth (DTD verdict, 2026-09-11) — cost-unknown WARNs, does NOT block
+
+The gate now returns **`{ ok, violations, warnings }`**. `violations` are
+**block-severity** (fail `ok`, thrown by `enforcePriceIntegrity`); `warnings` are
+**warn-severity** — recorded, **non-blocking**. `ok = violations.length === 0`.
+
+Why: the original contract blocked on unknown cost (`cost-unknown`). That would
+**halt ~97 of 108 vendors** that have no cost feed — an import outage. The panel
+committed 5/5 to Option A: **cost-unknown → a WARNING (`cost-unverified`), not a
+block**, PLUS a **cost-free absolute-dollar floor** so unknown-cost is not a blind
+allow. Class A and Class C stay HARD BLOCKS.
+
+> **CRITICAL (TK-11431 amendment 2 — a swallowed warning is a false green):** the
+> wire-in call site MUST record `warnings[]` to a MONITORED channel, not a
+> `console.log`. The parallel skill `~/.claude/skills/dw-price-integrity-gate`
+> emits the fleet-health `data/latest.json`; the call site must call its
+> **`recordOutcome()`** so the `cost-unverified` WARN count is visible on the
+> morning panel. This is a hard dependency of the wire-in — see the diff below.
+
+## What the gate catches
`enforcePriceIntegrity(input)` from `./price-integrity-gate` throws
-`PriceIntegrityError` (with `.violations`) on any block. Classes:
-
-- **A** — `sample-not-expected` (a sample not == $4.25); **`sellable-equals-sample`**
- (a sellable priced at ≈ the $4.25 sample — the headline LEAK; a numeric backstop
- that fires even when cost is low enough that 4.25 clears the markup floor);
- **`sellable-defaulted-price`** (a sellable whose `priceSource==='defaulted'` —
- provenance catch).
-- **B** — `below-markup-floor` (sellable < 1.5× cost) and `cost-unknown`
- (cost null/≤0 → cannot prove markup → fail-closed BLOCK).
-- **C** — `zero-price-orderable` ($0/NaN orderable) and `negative-price`
+`PriceIntegrityError` (with block-severity `.violations`) **only** on a block.
+Classes:
+
+- **A (BLOCK)** — `sample-not-expected` (a sample not == $4.25);
+ **`sellable-equals-sample`** (a sellable priced at ≈ the $4.25 sample — the
+ headline LEAK; a numeric backstop that fires even when cost is low enough that
+ 4.25 clears the markup floor); **`sellable-defaulted-price`** (a sellable whose
+ `priceSource==='defaulted'` — provenance catch).
+- **B** — `below-markup-floor` (cost KNOWN and sellable < 1.5× cost → **BLOCK**);
+ `below-absolute-floor` (any orderable variant priced > 0 but < `absoluteFloor`,
+ **default $5.00, tunable** — a **cost-FREE** anomaly guard → **BLOCK**,
+ regardless of whether cost is known); `cost-unverified` (cost null/≤0 →
+ **WARN**, non-blocking — the ~97-vendor allow path).
+- **C (BLOCK)** — `zero-price-orderable` ($0/NaN orderable) and `negative-price`
(negative orderable, its own honest code).
### Why Class A `sample-not-expected` is a NO-OP AT choke point #1
@@ -50,7 +73,8 @@ At `addSampleVariant` the sample variant is created with the **hardcoded literal
future callers can pass a wrong sample price, and it guards against a future edit
that stops hardcoding 4.25), but at site #1 the real value is:
-- **Class B** (markup floor + cost-unknown fail-closed),
+- **Class B** (markup floor when cost known; the cost-free `below-absolute-floor`
+ block; a `cost-unverified` WARN when cost is unknown),
- **Class C** ($0-orderable — the 6×-recurring bug),
- **`sellable-equals-sample` + provenance** on the DTO-sourced sellable price
(`numericUnitPrice`), which is exactly where the $4.25 default leaks in.
@@ -72,68 +96,88 @@ default flows into `numericUnitPrice`. So:
## What the gate needs
-- `enforcePriceIntegrity(input)` from `./price-integrity-gate`.
+- `assertPriceIntegrity(input)` / `enforcePriceIntegrity(input)` from `./price-integrity-gate`.
- `resolveNetCost(vendor, sku)` from `./price-integrity-cost` (returns
- `number | null`; null → gate blocks via Class B `cost-unknown`).
+ `number | null`; null → gate emits a `cost-unverified` **WARN**, not a block).
+- The skill `~/.claude/skills/dw-price-integrity-gate` `recordOutcome()` sink for
+ the `warnings[]` (fleet-health `data/latest.json`).
-### Threading `vendor` (still required)
+### Threading `vendor` (still required, but NO LONGER blocks everything)
`addSampleVariant` currently has **no `vendor` parameter**. The memo authors must
thread it — add a `vendor: string` param passed from the caller, or carry it on
the `ProductDTO`. **Until vendor is available, `resolveNetCost` returns null and
-the gate blocks fail-closed on `cost-unknown`** — the correct safe default, but it
-would block ALL publishes, so threading vendor is required for the gate to pass
-real products.
+the gate WARNs `cost-unverified` (non-blocking)** — so imports keep flowing
+(A-with-teeth). The absolute-dollar floor still blocks a sub-$5 orderable price
+even with no vendor, so a mis-price is still caught. Threading vendor upgrades
+the WARN into a real markup PROOF, so it remains required for full coverage.
-## The ~12-line diff (conceptual, choke point #1)
+## The ~15-line diff (conceptual, choke point #1)
+
+Use `assertPriceIntegrity` (not just `enforce`) so the call site can RECORD the
+`warnings[]` before deciding to block — a swallowed warning is a false green.
```ts
// at top of lib/shopify.ts
-import { enforcePriceIntegrity } from './price-integrity-gate';
+import { assertPriceIntegrity } from './price-integrity-gate';
import { resolveNetCost } from './price-integrity-cost';
+// recordOutcome sink from the parallel skill (fleet-health data/latest.json):
+import { recordOutcome } from '../../.claude/skills/dw-price-integrity-gate/record'; // path per that skill
// inside addSampleVariant(productId, sku, price, unitLabel, unitKind, vendor),
// AFTER computing `numericUnitPrice` and BEFORE the productVariantsBulkUpdate call:
-const netCost = await resolveNetCost(vendor, sku); // number | null (fail-closed)
+const netCost = await resolveNetCost(vendor, sku); // number | null → cost-unverified WARN when null
// priceSource: 'defaulted' when numericPrice was empty and we fell back to '0.00'
// (or when the DTO price was the 4.25 default) — else 'scraped'.
const sellableSource = numericPrice ? 'scraped' : 'defaulted';
-try {
- enforcePriceIntegrity({
- dwSku: sku,
- netCost,
- variants: [
- { role: 'sellable', price: Number(numericUnitPrice), orderable: true,
- sku: `${sku}-${unitKind}`, priceSource: sellableSource },
- { role: 'sample', price: 4.25, orderable: false, sku: `${sku}-Sample` },
- ],
- });
-} catch (err) {
- const violations = (err as any)?.violations ?? [];
- console.error(JSON.stringify({ event: 'price_integrity_block', dwSku: sku, vendor, violations }));
+const gate = assertPriceIntegrity({
+ dwSku: sku,
+ netCost, // absoluteFloor defaults to 5.00; pass to tune
+ variants: [
+ { role: 'sellable', price: Number(numericUnitPrice), orderable: true,
+ sku: `${sku}-${unitKind}`, priceSource: sellableSource },
+ { role: 'sample', price: 4.25, orderable: false, sku: `${sku}-Sample` },
+ ],
+});
+// ALWAYS surface warnings to the monitored channel (NOT a swallowed console.log):
+if (gate.warnings.length) {
+ await recordOutcome({ event: 'price_integrity_warn', dwSku: sku, vendor, warnings: gate.warnings });
+}
+if (!gate.ok) {
+ console.error(JSON.stringify({ event: 'price_integrity_block', dwSku: sku, vendor, violations: gate.violations }));
+ await recordOutcome({ event: 'price_integrity_block', dwSku: sku, vendor, violations: gate.violations });
return; // DO NOT WRITE — block publish
}
// ... existing productVariantsBulkUpdate + productVariantsBulkCreate calls unchanged ...
```
-## Behavior on block
+(Equivalently, keep `enforcePriceIntegrity` for the throw and call `assertPriceIntegrity`
+first only to read `warnings` — but the single-call form above avoids running the
+gate twice.)
+
+## Behavior on block vs warn
-- Structured log: `{event:'price_integrity_block', dwSku, vendor, violations}`.
-- `return` WITHOUT calling either `productVariantsBulk*` mutation — nothing
+- **Block** (Class A / C, `below-markup-floor`, `below-absolute-floor`): structured
+ log `{event:'price_integrity_block', …, violations}` + `recordOutcome`, then
+ `return` WITHOUT calling either `productVariantsBulk*` mutation — nothing
orderable is written; the product stays whatever status it was.
+- **Warn** (`cost-unverified`): the import PROCEEDS (product writes normally), but
+ the warning is recorded via `recordOutcome` so the cost-unknown count is visible
+ on the fleet-health panel. It is counted, never swallowed.
## Why each guarded value maps this way
| Gate field | Source in `addSampleVariant` | Note |
|---|---|---|
-| sellable `price` | `Number(numericUnitPrice)` | `numericUnitPrice = numericPrice \|\| '0.00'` — missing scrape → 0 → Class C catches it |
+| sellable `price` | `Number(numericUnitPrice)` | `numericUnitPrice = numericPrice \|\| '0.00'` — missing scrape → 0 → Class C block; a sub-$5 orderable → `below-absolute-floor` block |
| sellable `orderable` | `true` | update sets `inventoryPolicy:'CONTINUE'` + `setInventoryQuantity(iid,2025)` |
-| sellable `priceSource` | `numericPrice ? 'scraped' : 'defaulted'` | defaulted → Class A `sellable-defaulted-price` |
+| sellable `priceSource` | `numericPrice ? 'scraped' : 'defaulted'` | defaulted → Class A `sellable-defaulted-price` block |
| sample `price` | `4.25` | fixed literal → Class A `sample-not-expected` is a no-op at THIS site |
| sample `orderable` | `false` | sample is not a stocked orderable unit |
-| `netCost` | `resolveNetCost(vendor, sku)` | null → Class B `cost-unknown` (fail-closed) |
+| `netCost` | `resolveNetCost(vendor, sku)` | null → Class B `cost-unverified` **WARN** (non-blocking; recorded) |
+| `absoluteFloor` | default `5.00` | tunable cost-free floor; blocks a sub-$5 orderable even when cost is unknown |
## Verification after wire-in
diff --git a/shopify/scripts/cadence/data/cadence-cursor.json b/shopify/scripts/cadence/data/cadence-cursor.json
index f8ff0210..8e6f78b0 100644
--- a/shopify/scripts/cadence/data/cadence-cursor.json
+++ b/shopify/scripts/cadence/data/cadence-cursor.json
@@ -1,5 +1,5 @@
{
- "idx": 6,
+ "idx": 2,
"lastSlot": "am",
"lastRun": "2026-09-11"
}
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.json b/shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.json
index 9c4662c7..4aa6295e 100644
--- a/shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.json
+++ b/shopify/scripts/cadence/data/cadence-plan-am-2026-09-11.json
@@ -1,184 +1,182 @@
[
{
- "vendor": "Romo",
- "dw_sku": "DWRM-240167",
- "cost": 1302,
- "retail": 2356.56,
+ "vendor": "Schumacher",
+ "dw_sku": "DWLK-810070",
+ "cost": 28,
+ "retail": 50.68,
"sample": "4.25",
"sampleOnly": false,
- "title": "Bakbak, Indigo Wallcoverings | Romo",
+ "title": "Topiary, Bluebell Wallcoverings | Schumacher",
"willActivate": false
},
{
- "vendor": "Romo",
- "dw_sku": "DWRM-240187",
- "cost": 490.6,
- "retail": 887.96,
+ "vendor": "Schumacher",
+ "dw_sku": "DWLK-810080",
+ "cost": 28,
+ "retail": 50.68,
"sample": "4.25",
"sampleOnly": false,
- "title": "Suru, Typhoon Wallcoverings | Romo",
+ "title": "Reaching Out, Spectrum Multi Wallcoverings | Schumacher",
"willActivate": false
},
{
- "vendor": "Romo",
- "dw_sku": "DWRM-240194",
- "cost": 451,
- "retail": 816.29,
+ "vendor": "Schumacher",
+ "dw_sku": "DWLK-810090",
+ "cost": 28,
+ "retail": 50.68,
"sample": "4.25",
"sampleOnly": false,
- "title": "Palm, Harvest Wallcoverings | Romo",
+ "title": "Reaching Out, Lemonade Wallcoverings | Schumacher",
"willActivate": false
},
{
- "vendor": "Osborne & Little",
- "dw_sku": "DWOL-290041",
- "cost": 130,
- "retail": 235.29,
+ "vendor": "Quadrille",
+ "dw_sku": "DWQC-600478",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Wilde Chrysanthemum, Colorway 03 Wallcoverings | Osborne & Little",
+ "sampleOnly": true,
+ "title": "Victoria, Mojave on Tint Fabric | Quadrille",
"willActivate": false
},
{
- "vendor": "Osborne & Little",
- "dw_sku": "DWOL-290043",
- "cost": 113,
- "retail": 204.52,
+ "vendor": "Quadrille",
+ "dw_sku": "DWQC-600479",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Salome, Colorway 02 Wallcoverings | Osborne & Little",
+ "sampleOnly": true,
+ "title": "Victoria, Mocha on Tint Fabric | Quadrille",
"willActivate": false
},
{
- "vendor": "Osborne & Little",
- "dw_sku": "DWOL-290044",
- "cost": 113,
- "retail": 204.52,
+ "vendor": "Quadrille",
+ "dw_sku": "DWQC-600480",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Salome, Colorway 04 Wallcoverings | Osborne & Little",
+ "sampleOnly": true,
+ "title": "Victoria, French Green on Tint Fabric | Quadrille",
"willActivate": false
},
{
- "vendor": "Designtex",
- "dw_sku": "DWDX-220516",
- "cost": 58,
- "retail": 104.98,
+ "vendor": "Phillip Jeffries",
+ "dw_sku": "DWPJ-14611",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Fragments, New York Wallcoverings | Designtex",
- "willActivate": false,
- "held": true,
- "heldReason": "\"York Wallcoverings\" is a banned front-facing trade-parent name"
+ "sampleOnly": true,
+ "title": "Marfa Weave, Nomadic Blue Wallcoverings | Phillip Jeffries",
+ "willActivate": false
},
{
- "vendor": "Designtex",
- "dw_sku": "DWDX-220705",
- "cost": 56,
- "retail": 101.36,
+ "vendor": "Phillip Jeffries",
+ "dw_sku": "DWPJ-14612",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Color Bars, Snow Wallcoverings | Designtex",
+ "sampleOnly": true,
+ "title": "Marfa Weave, Purple Horizon Wallcoverings | Phillip Jeffries",
"willActivate": false
},
{
- "vendor": "Designtex",
- "dw_sku": "DWDX-220706",
- "cost": 56,
- "retail": 101.36,
+ "vendor": "Phillip Jeffries",
+ "dw_sku": "DWPJ-14613",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Color Bars, Light Gray Wallcoverings | Designtex",
+ "sampleOnly": true,
+ "title": "Marfa Weave, Titanium Trek Wallcoverings | Phillip Jeffries",
"willActivate": false
},
{
- "vendor": "Newwall",
- "dw_sku": "DWXW-1006147",
- "cost": 216,
- "retail": 390.95,
+ "vendor": "Pierre Frey",
+ "dw_sku": "FQ030001",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Zanjan Ecru, Sample Wallcoverings | Newwall",
+ "sampleOnly": true,
+ "title": "Aloe Vera Wallcoverings | Pierre Frey",
"willActivate": false
},
{
- "vendor": "Newwall",
- "dw_sku": "DWXW-1006168",
- "cost": 88,
- "retail": 159.28,
+ "vendor": "Pierre Frey",
+ "dw_sku": "",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Garzas Rose, Sample Type II Vinyl Wallcoverings | Newwall",
+ "sampleOnly": true,
+ "title": "Glais, Amande Wallcoverings | Pierre Frey",
"willActivate": false
},
{
- "vendor": "Newwall",
- "dw_sku": "DWXW-1006169",
- "cost": 88,
- "retail": 159.28,
+ "vendor": "Pierre Frey",
+ "dw_sku": "",
+ "cost": 0,
+ "retail": 0,
"sample": "4.25",
- "sampleOnly": false,
- "title": "Garzas Coal, Sample Type II Vinyl Wallcoverings | Newwall",
+ "sampleOnly": true,
+ "title": "Tralee, Anis Wallcoverings | Pierre Frey",
"willActivate": false
},
{
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-171159",
- "cost": 90,
- "retail": 162.9,
+ "vendor": "Romo",
+ "dw_sku": "DWRM-240167",
+ "cost": 1302,
+ "retail": 2356.56,
"sample": "4.25",
"sampleOnly": false,
- "title": "Morningtide, Grey Wallcoverings | Malibu Wallcovering",
+ "title": "Bakbak, Indigo Wallcoverings | Romo",
"willActivate": false
},
{
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-171160",
- "cost": 90,
- "retail": 162.9,
+ "vendor": "Romo",
+ "dw_sku": "DWRM-240187",
+ "cost": 490.6,
+ "retail": 887.96,
"sample": "4.25",
"sampleOnly": false,
- "title": "Massar, Black Wallcoverings | Malibu Wallcovering",
+ "title": "Suru, Typhoon Wallcoverings | Romo",
"willActivate": false
},
{
- "vendor": "Brewster & York",
- "dw_sku": "DWBR-171161",
- "cost": 90,
- "retail": 162.9,
+ "vendor": "Romo",
+ "dw_sku": "DWRM-240194",
+ "cost": 451,
+ "retail": 816.29,
"sample": "4.25",
"sampleOnly": false,
- "title": "Massar, Silver Wallcoverings | Malibu Wallcovering",
+ "title": "Palm, Harvest Wallcoverings | Romo",
"willActivate": false
},
{
- "vendor": "Kravet",
- "dw_sku": "DWKK-103197",
- "cost": 57.5,
- "retail": 86.25,
+ "vendor": "Osborne & Little",
+ "dw_sku": "DWOL-290045",
+ "cost": 138,
+ "retail": 249.77,
"sample": "4.25",
"sampleOnly": false,
- "title": "Kravet Smart, Beige Wallcoverings | Kravet",
+ "title": "Mandara, Colorway 01 Wallcoverings | Osborne & Little",
"willActivate": false
},
{
- "vendor": "Kravet",
- "dw_sku": "DWKK-103198",
- "cost": 57.5,
- "retail": 86.25,
+ "vendor": "Osborne & Little",
+ "dw_sku": "DWOL-290046",
+ "cost": 138,
+ "retail": 249.77,
"sample": "4.25",
"sampleOnly": false,
- "title": "Kravet Smart, Beige Wallcoverings | Kravet",
+ "title": "Mandara, Colorway 03 Wallcoverings | Osborne & Little",
"willActivate": false
},
{
- "vendor": "Kravet",
- "dw_sku": "DWKK-103199",
- "cost": 57.5,
- "retail": 86.25,
+ "vendor": "Osborne & Little",
+ "dw_sku": "DWOL-290047",
+ "cost": 138,
+ "retail": 249.77,
"sample": "4.25",
"sampleOnly": false,
- "title": "Kravet Smart, Gray Wallcoverings | Kravet",
+ "title": "Mandara, Colorway 04 Wallcoverings | Osborne & Little",
"willActivate": false
}
]
\ No newline at end of file
diff --git a/shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl b/shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl
index aab1721f..6e32da87 100644
--- a/shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl
+++ b/shopify/scripts/cadence/data/upload-restore-2026-09-11.jsonl
@@ -13,3 +13,18 @@
{"table":"kravet_catalog","mfr_sku":"37017.16.0","dw_sku":"DWKK-103197","shopify_product_id":"7953160437811","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-28-11-140Z","ts":"2026-09-11T16:28:50.079Z"}
{"table":"kravet_catalog","mfr_sku":"37017.166.0","dw_sku":"DWKK-103198","shopify_product_id":"7953160536115","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-28-11-140Z","ts":"2026-09-11T16:28:52.586Z"}
{"table":"kravet_catalog","mfr_sku":"37017.21.0","dw_sku":"DWKK-103199","shopify_product_id":"7953160634419","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-28-11-140Z","ts":"2026-09-11T16:28:55.230Z"}
+{"table":"schumacher_catalog","mfr_sku":"5012701","dw_sku":"DWLK-810070","shopify_product_id":"7953188552755","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:10.055Z"}
+{"table":"schumacher_catalog","mfr_sku":"5012710","dw_sku":"DWLK-810080","shopify_product_id":"7953188847667","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:12.529Z"}
+{"table":"schumacher_catalog","mfr_sku":"5012711","dw_sku":"DWLK-810090","shopify_product_id":"7953189077043","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:14.834Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"302312F-CU","dw_sku":"DWQC-600478","shopify_product_id":"7952699719731","action":"linked-existing","activated":false,"batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:15.692Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"302319F-CU","dw_sku":"DWQC-600479","shopify_product_id":"7952699752499","action":"linked-existing","activated":false,"batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:16.412Z"}
+{"table":"quadrille_house_catalog","mfr_sku":"302310F-CU","dw_sku":"DWQC-600480","shopify_product_id":"7952903209011","action":"linked-existing","activated":false,"batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:17.148Z"}
+{"table":"pj_draft_catalog","mfr_sku":"2944","dw_sku":"DWPJ-14611","shopify_product_id":"7953189371955","action":"created","activated":false,"published":false,"sampleOnly":true,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:19.523Z"}
+{"table":"pj_draft_catalog","mfr_sku":"2945","dw_sku":"DWPJ-14612","shopify_product_id":"7953189568563","action":"created","activated":false,"published":false,"sampleOnly":true,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:21.823Z"}
+{"table":"pj_draft_catalog","mfr_sku":"2946","dw_sku":"DWPJ-14613","shopify_product_id":"7953189765171","action":"created","activated":false,"published":false,"sampleOnly":true,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:24.024Z"}
+{"table":"pierre_frey_catalog","mfr_sku":"Nova","dw_sku":"FQ030001","shopify_product_id":"7953189929011","action":"created","activated":false,"published":false,"sampleOnly":true,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:26.160Z"}
+{"table":"pierre_frey_catalog","mfr_sku":"FQ026002","dw_sku":"","shopify_product_id":"7953190256691","action":"created","activated":false,"published":false,"sampleOnly":true,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:31.990Z"}
+{"table":"pierre_frey_catalog","mfr_sku":"FP299001","dw_sku":"","shopify_product_id":"7953190453299","action":"created","activated":false,"published":false,"sampleOnly":true,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:34.258Z"}
+{"table":"osborne_catalog","mfr_sku":"W5511-01","dw_sku":"DWOL-290045","shopify_product_id":"7953190813747","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:41.318Z"}
+{"table":"osborne_catalog","mfr_sku":"W5511-03","dw_sku":"DWOL-290046","shopify_product_id":"7953191010355","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:43.524Z"}
+{"table":"osborne_catalog","mfr_sku":"W5511-04","dw_sku":"DWOL-290047","shopify_product_id":"7953191206963","action":"created","activated":false,"published":false,"sampleOnly":false,"status":"DRAFT","batch_id":"upload-am-2026-09-11T16-40-05-312Z","ts":"2026-09-11T16:40:45.889Z"}
← ca0a4ab8 auto-data-snapshot: 2026-09-11T09:31:49 (6 data files) — DW-
·
back to Designer Wallcoverings
·
auto-data-snapshot: 2026-09-11T10:49:53 (3 data files) — sho e23cb5c5 →