← back to Dw Unbuyable Recovery Pilot
TK-11041: Innovations 51-cohort feed-first reconciliation — 0/51 locally recoverable + provenance guard
8085c232a5c81d2199cc60de51aeda6885814a70 · 2026-09-02 13:56:29 -0700 · Steve Abrams
Deterministic read-only recovery map for the 51 ACTIVE sample-only PR-Innovations
products. All local recovery keys yield 0 (sku/dw_sku/mfr_sku joins + feed-first
pattern-token match): the cohort carries only DW-internal collection codes with no
real Innovations item#/price, and innovations_catalog describes the Innovations USA
(DWIN-) line, not the PR private-label (236/341 no provenance URL, 81/341 fabricated
pattern-tail codes). Recovery correctly stays BLOCKED_ON_VENDOR_LINESHEET (gated email).
Ships lib/provenance.mjs guard (rejects no-URL / placeholder / lowercase-tail /
pattern-tail codes) encoding the TK-10981 fabrication caveat, with a 7/7 test incl. a
LIVE assertion that 0 fabricated catalog rows are wrongly trusted. No canonical/Shopify
writes; reads via BEGIN READ ONLY..ROLLBACK.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GUmvA1WvsNnWhXfhLgz7q2
Files touched
A tk11041-innovations-reconcile/README.mdA tk11041-innovations-reconcile/data/innovations-recovery-map.csvA tk11041-innovations-reconcile/data/innovations-recovery-map.jsonA tk11041-innovations-reconcile/data/reconcile-summary.jsonA tk11041-innovations-reconcile/lib/provenance.mjsA tk11041-innovations-reconcile/reconcile.mjsA tk11041-innovations-reconcile/test/provenance.test.mjsA tk11041-innovations-reconcile/verification/e2e-proof.json
Diff
commit 8085c232a5c81d2199cc60de51aeda6885814a70
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Sep 2 13:56:29 2026 -0700
TK-11041: Innovations 51-cohort feed-first reconciliation — 0/51 locally recoverable + provenance guard
Deterministic read-only recovery map for the 51 ACTIVE sample-only PR-Innovations
products. All local recovery keys yield 0 (sku/dw_sku/mfr_sku joins + feed-first
pattern-token match): the cohort carries only DW-internal collection codes with no
real Innovations item#/price, and innovations_catalog describes the Innovations USA
(DWIN-) line, not the PR private-label (236/341 no provenance URL, 81/341 fabricated
pattern-tail codes). Recovery correctly stays BLOCKED_ON_VENDOR_LINESHEET (gated email).
Ships lib/provenance.mjs guard (rejects no-URL / placeholder / lowercase-tail /
pattern-tail codes) encoding the TK-10981 fabrication caveat, with a 7/7 test incl. a
LIVE assertion that 0 fabricated catalog rows are wrongly trusted. No canonical/Shopify
writes; reads via BEGIN READ ONLY..ROLLBACK.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GUmvA1WvsNnWhXfhLgz7q2
---
tk11041-innovations-reconcile/README.md | 67 ++
.../data/innovations-recovery-map.csv | 52 ++
.../data/innovations-recovery-map.json | 758 +++++++++++++++++++++
.../data/reconcile-summary.json | 40 ++
tk11041-innovations-reconcile/lib/provenance.mjs | 60 ++
tk11041-innovations-reconcile/reconcile.mjs | 160 +++++
.../test/provenance.test.mjs | 63 ++
.../verification/e2e-proof.json | 31 +
8 files changed, 1231 insertions(+)
diff --git a/tk11041-innovations-reconcile/README.md b/tk11041-innovations-reconcile/README.md
new file mode 100644
index 0000000..c18e980
--- /dev/null
+++ b/tk11041-innovations-reconcile/README.md
@@ -0,0 +1,67 @@
+# TK-11041 — Innovations missing-cohort reconciliation (feed-first / local)
+
+Child of **TK-10978** (unbuyable recovery). Agent `iterm-tk11041-innovations`, finalizer `/root`, chain depth 1.
+
+**READ-ONLY. No Shopify writes. No dw_unified writes. No catalog activation. No send/deploy.**
+
+## Objective
+Determine, deterministically, whether the **51** ACTIVE, sample-only Phillipe-Romano
+private-label Innovations products can be made buyable from any **local / feed-first**
+source before falling back to the gated Innovations vendor line-sheet request.
+
+## Cohort (deterministic — reproduces exactly 51)
+```
+vendor='Phillipe Romano' AND status='ACTIVE'
+AND NOT has_product_variant -- unbuyable: only the $4.25 memo Sample
+AND supplier_name ~* 'innov'
+```
+8 collections: CSO, ENS, FLN, PRO, SKL, TTM, VCO, WHL.
+
+## Files
+| File | Role |
+|---|---|
+| `reconcile.mjs` | Read-only generator → `data/innovations-recovery-map.{json,csv}` + `data/reconcile-summary.json` |
+| `lib/provenance.mjs` | **Source-provenance guard** (the narrow hardening) — pure, unit-tested |
+| `test/provenance.test.mjs` | Proves the guard on positive/negative + LIVE corrupted rows |
+| `verification/e2e-proof.json` | R1 evidence bundle |
+
+Run: `node reconcile.mjs && node --test test/provenance.test.mjs`
+
+## Result — BLOCKED_ON_VENDOR_LINESHEET (0/51 locally recoverable)
+
+Every candidate local recovery path returns **zero** for the cohort:
+
+| Recovery key | Hits across 51 |
+|---|---|
+| `sp.sku = innovations_catalog.dw_sku` | 0 |
+| `sp.dw_sku = innovations_catalog.dw_sku` | 0 |
+| `sp.mfr_sku = innovations_catalog.mfr_sku` | 0 |
+| feed-first pattern-token word-match on `pattern_name` | 0 |
+
+### Why (provenance)
+- The 51 carry only **DW-internal collection codes** (`CSO-001`, `ENS-01`, …) in `mfr_sku`,
+ private-label `La <Pattern>` titles, an empty `dw_sku`, **no real Innovations item number,
+ and no price**. Their underlying pattern tokens (Turino, Renegado, Bologna, Youngstown,
+ Sieno, Udino, Orvito) **do not appear** anywhere in `innovations_catalog.pattern_name`.
+- `innovations_catalog` (341 rows) is a scrape of the **Innovations USA (`DWIN-`) line** — a
+ *different* product line (295 of its linked products are vendor `Innovations USA`), not the
+ Phillipe-Romano private-label. It is also **corrupted**: 236/341 rows have **no
+ `product_url`** and **81/341** carry a fabricated *pattern-name-tail* code
+ (`Sum`**`atra`** → `atra-1`, `Maz`**`arin`** → `arin-1`). Only **99/341** rows are
+ trustworthy sources.
+
+**Conclusion:** there is no honest local source; backfilling the 51 from `innovations_catalog`
+would fabricate customer-facing identity/price (same failure the TK-10981 HOLD flagged).
+Recovery genuinely requires the **gated vendor line-sheet** already drafted for Steve
+(`pending-approval/_done/2026-08-31-TK11041-innovations-pricing-request-letter.md`). On receipt,
+match the line-sheet on pattern+colorway and stage the proven add-yard variant
+(`net_trade/0.65/0.85` per yard via `scripts/innovations-reprice/stage-innov-reprice.mjs`) —
+that Shopify write stays gated.
+
+## Hardening shipped
+`lib/provenance.classifyCatalogSource(row)` gates any `*_catalog` row before it is trusted as a
+recovery source: rejects no-provenance rows, placeholder codes (`TRUE`/`NULL`), lowercase-tail
+truncations, and codes that are a tail of the pattern name. This turns the TK-10981 "plausible
+shape ≠ proof" caveat into an executable guard the reprice/backfill path can call, so a future
+re-scrape cannot silently reintroduce fabricated identity data. `test/` proves it (7/7),
+including a LIVE assertion that **0** of the catalog's fabricated rows are wrongly trusted.
diff --git a/tk11041-innovations-reconcile/data/innovations-recovery-map.csv b/tk11041-innovations-reconcile/data/innovations-recovery-map.csv
new file mode 100644
index 0000000..872362a
--- /dev/null
+++ b/tk11041-innovations-reconcile/data/innovations-recovery-map.csv
@@ -0,0 +1,52 @@
+sku,internal_code,collection,pattern_token,join_sku_hits,join_dwsku_hits,join_mfr_hits,pattern_match_hits,trustworthy_priced_sources,status
+"PRW-620145-Sample","CSO-001","CSO","Turino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620146-Sample","CSO-002","CSO","Turino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620147-Sample","CSO-003","CSO","Turino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620175-Sample","ENS-01","ENS","Renegado",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620176-Sample","ENS-02","ENS","Renegado",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620177-Sample","ENS-03","ENS","Renegado",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620178-Sample","ENS-04","ENS","Renegado",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620179-Sample","ENS-05","ENS","Renegado",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620180-Sample","ENS-06","ENS","Renegado",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620193-Sample","FLN-01","FLN","Bologna",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620194-Sample","FLN-02","FLN","Bologna",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620195-Sample","FLN-03","FLN","Bologna",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620196-Sample","FLN-04","FLN","Bologna",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620197-Sample","FLN-05","FLN","Bologna",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-920688-Sample","PRO-012","PRO","Youngstown",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620422-Sample","SKL-001","SKL","Sieno",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620423-Sample","SKL-002","SKL","Sieno",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620424-Sample","SKL-003","SKL","Sieno",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620425-Sample","SKL-004","SKL","Sieno",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620435-Sample","TTM-01","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620436-Sample","TTM-02","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620437-Sample","TTM-03","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620438-Sample","TTM-04","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620439-Sample","TTM-05","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620440-Sample","TTM-06","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620441-Sample","TTM-07","TTM","Udino",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620467-Sample","VCO-001","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620468-Sample","VCO-002","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620469-Sample","VCO-003","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620470-Sample","VCO-004","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620471-Sample","VCO-005","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620472-Sample","VCO-006","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620473-Sample","VCO-007","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620474-Sample","VCO-008","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620475-Sample","VCO-009","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620476-Sample","VCO-010","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620477-Sample","VCO-011","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620478-Sample","VCO-012","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620479-Sample","VCO-013","VCO","Le",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620480-Sample","WHL-01","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620481-Sample","WHL-02","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620482-Sample","WHL-03","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620483-Sample","WHL-04","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620484-Sample","WHL-05","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620485-Sample","WHL-06","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620486-Sample","WHL-07","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620487-Sample","WHL-08","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620488-Sample","WHL-09","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620489-Sample","WHL-10","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620490-Sample","WHL-11","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
+"PRW-620491-Sample","WHL-12","WHL","Orvito",0,0,0,0,0,"BLOCKED_ON_VENDOR_LINESHEET"
diff --git a/tk11041-innovations-reconcile/data/innovations-recovery-map.json b/tk11041-innovations-reconcile/data/innovations-recovery-map.json
new file mode 100644
index 0000000..601b5eb
--- /dev/null
+++ b/tk11041-innovations-reconcile/data/innovations-recovery-map.json
@@ -0,0 +1,758 @@
+{
+ "summary": {
+ "task": "TK-11041",
+ "generated_at": "2026-09-02T20:55:02.922Z",
+ "cohort_size": 51,
+ "recoverable_local": 0,
+ "blocked_on_vendor": 51,
+ "collections": [
+ "CSO",
+ "ENS",
+ "FLN",
+ "PRO",
+ "SKL",
+ "TTM",
+ "VCO",
+ "WHL"
+ ],
+ "join_coverage": {
+ "by_sku": 0,
+ "by_dwsku": 0,
+ "by_mfr": 0,
+ "by_pattern_token": 0
+ },
+ "catalog_provenance": {
+ "total_rows": 341,
+ "no_provenance_url": 236,
+ "fabricated_code_rows": 81,
+ "trustworthy_source_rows": 99,
+ "describes_vendor": [
+ {
+ "vendor": "Innovations USA",
+ "n": 295
+ },
+ {
+ "vendor": "Innovations",
+ "n": 9
+ }
+ ]
+ },
+ "conclusion": "BLOCKED_ON_VENDOR_LINESHEET — 0 trustworthy local recovery sources for the cohort; innovations_catalog describes the Innovations USA (DWIN-) line, not the PR private-label. Local backfill would fabricate identity/price. Recovery requires the gated vendor line-sheet."
+ },
+ "map": [
+ {
+ "sku": "PRW-620145-Sample",
+ "internal_code": "CSO-001",
+ "collection": "CSO",
+ "pattern_token": "Turino",
+ "title": "La Turino Radiant Type 2 RADIANT Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620146-Sample",
+ "internal_code": "CSO-002",
+ "collection": "CSO",
+ "pattern_token": "Turino",
+ "title": "La Turino Pearl Type 2 PEARL Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620147-Sample",
+ "internal_code": "CSO-003",
+ "collection": "CSO",
+ "pattern_token": "Turino",
+ "title": "La Turino Filigree Type 2 FILIGREE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620175-Sample",
+ "internal_code": "ENS-01",
+ "collection": "ENS",
+ "pattern_token": "Renegado",
+ "title": "La Renegado Bone Natural BONE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620176-Sample",
+ "internal_code": "ENS-02",
+ "collection": "ENS",
+ "pattern_token": "Renegado",
+ "title": "La Renegado Frost Natural FROST Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620177-Sample",
+ "internal_code": "ENS-03",
+ "collection": "ENS",
+ "pattern_token": "Renegado",
+ "title": "La Renegado Calcite Natural CALCITE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620178-Sample",
+ "internal_code": "ENS-04",
+ "collection": "ENS",
+ "pattern_token": "Renegado",
+ "title": "La Renegado Basalt Natural BASALT Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620179-Sample",
+ "internal_code": "ENS-05",
+ "collection": "ENS",
+ "pattern_token": "Renegado",
+ "title": "La Renegado Black Emerald Natural BLACK EMERALD Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620180-Sample",
+ "internal_code": "ENS-06",
+ "collection": "ENS",
+ "pattern_token": "Renegado",
+ "title": "La Renegado Sapphire Natural SAPPHIRE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620193-Sample",
+ "internal_code": "FLN-01",
+ "collection": "FLN",
+ "pattern_token": "Bologna",
+ "title": "La Bologna Heather Natural HEATHER Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620194-Sample",
+ "internal_code": "FLN-02",
+ "collection": "FLN",
+ "pattern_token": "Bologna",
+ "title": "La Bologna Bobbin Natural BOBBIN Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620195-Sample",
+ "internal_code": "FLN-03",
+ "collection": "FLN",
+ "pattern_token": "Bologna",
+ "title": "La Bologna Pepper Natural PEPPER Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620196-Sample",
+ "internal_code": "FLN-04",
+ "collection": "FLN",
+ "pattern_token": "Bologna",
+ "title": "La Bologna Cocoa Natural COCOA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620197-Sample",
+ "internal_code": "FLN-05",
+ "collection": "FLN",
+ "pattern_token": "Bologna",
+ "title": "La Bologna Jet Natural JET Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-920688-Sample",
+ "internal_code": "PRO-012",
+ "collection": "PRO",
+ "pattern_token": "Youngstown",
+ "title": "Youngstown Type 2 Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620422-Sample",
+ "internal_code": "SKL-001",
+ "collection": "SKL",
+ "pattern_token": "Sieno",
+ "title": "La Sieno Ash Type 2 ASH Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620423-Sample",
+ "internal_code": "SKL-002",
+ "collection": "SKL",
+ "pattern_token": "Sieno",
+ "title": "La Sieno Grove Type 2 GROVE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620424-Sample",
+ "internal_code": "SKL-003",
+ "collection": "SKL",
+ "pattern_token": "Sieno",
+ "title": "La Sieno Moss Type 2 MOSS Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620425-Sample",
+ "internal_code": "SKL-004",
+ "collection": "SKL",
+ "pattern_token": "Sieno",
+ "title": "La Sieno Azure Type 2 AZURE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620435-Sample",
+ "internal_code": "TTM-01",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Fuji Natural FUJI Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620436-Sample",
+ "internal_code": "TTM-02",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Hasu Natural HASU Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620437-Sample",
+ "internal_code": "TTM-03",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Bara Natural BARA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620438-Sample",
+ "internal_code": "TTM-04",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Poppi Natural POPPI Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620439-Sample",
+ "internal_code": "TTM-05",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Ajisai Natural AJISAI Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620440-Sample",
+ "internal_code": "TTM-06",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Daria Natural DARIA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620441-Sample",
+ "internal_code": "TTM-07",
+ "collection": "TTM",
+ "pattern_token": "Udino",
+ "title": "La Udino Rabenda Natural RABENDA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620467-Sample",
+ "internal_code": "VCO-001",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Platinum Type 2 PLATINUM Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620468-Sample",
+ "internal_code": "VCO-002",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Ivory Frost Type 2 IVORY FROST Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620469-Sample",
+ "internal_code": "VCO-003",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Moonlight Type 2 MOONLIGHT Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620470-Sample",
+ "internal_code": "VCO-004",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Champagne Type 2 CHAMPAGNE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620471-Sample",
+ "internal_code": "VCO-005",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Gilded Taupe Type 2 GILDED TAUPE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620472-Sample",
+ "internal_code": "VCO-006",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Argent Type 2 ARGENT Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620473-Sample",
+ "internal_code": "VCO-007",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Silver Type 2 SILVER Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620474-Sample",
+ "internal_code": "VCO-008",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Burnished Type 2 BURNISHED Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620475-Sample",
+ "internal_code": "VCO-009",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Bronze Type 2 BRONZE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620476-Sample",
+ "internal_code": "VCO-010",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Blue Type 2 BLUE Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620477-Sample",
+ "internal_code": "VCO-011",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Misty Type 2 MISTY Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620478-Sample",
+ "internal_code": "VCO-012",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Gold Type 2 GOLD Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620479-Sample",
+ "internal_code": "VCO-013",
+ "collection": "VCO",
+ "pattern_token": "Le",
+ "title": "Le Vierna Vinyl Cork Emerald Type 2 EMERALD Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620480-Sample",
+ "internal_code": "WHL-01",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Amadora Natural AMADORA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620481-Sample",
+ "internal_code": "WHL-02",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Santo Natural SANTO Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620482-Sample",
+ "internal_code": "WHL-03",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Braga Natural BRAGA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620483-Sample",
+ "internal_code": "WHL-04",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Evora Natural EVORA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620484-Sample",
+ "internal_code": "WHL-05",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Beja Natural BEJA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620485-Sample",
+ "internal_code": "WHL-06",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Faro Natural FARO Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620486-Sample",
+ "internal_code": "WHL-07",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Garda Natural GARDA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620487-Sample",
+ "internal_code": "WHL-08",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Lagos Natural LAGOS Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620488-Sample",
+ "internal_code": "WHL-09",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Lisbon Natural LISBON Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620489-Sample",
+ "internal_code": "WHL-10",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Porto Natural PORTO Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620490-Sample",
+ "internal_code": "WHL-11",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Sintra Natural SINTRA Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ },
+ {
+ "sku": "PRW-620491-Sample",
+ "internal_code": "WHL-12",
+ "collection": "WHL",
+ "pattern_token": "Orvito",
+ "title": "La Orvito Tomar Natural TOMAR Memo Sample | Phillipe Romano",
+ "join_sku_hits": 0,
+ "join_dwsku_hits": 0,
+ "join_mfr_hits": 0,
+ "pattern_match_hits": 0,
+ "trustworthy_priced_sources": 0,
+ "status": "BLOCKED_ON_VENDOR_LINESHEET",
+ "recovery_action": "no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tk11041-innovations-reconcile/data/reconcile-summary.json b/tk11041-innovations-reconcile/data/reconcile-summary.json
new file mode 100644
index 0000000..07e09a7
--- /dev/null
+++ b/tk11041-innovations-reconcile/data/reconcile-summary.json
@@ -0,0 +1,40 @@
+{
+ "task": "TK-11041",
+ "generated_at": "2026-09-02T20:55:02.922Z",
+ "cohort_size": 51,
+ "recoverable_local": 0,
+ "blocked_on_vendor": 51,
+ "collections": [
+ "CSO",
+ "ENS",
+ "FLN",
+ "PRO",
+ "SKL",
+ "TTM",
+ "VCO",
+ "WHL"
+ ],
+ "join_coverage": {
+ "by_sku": 0,
+ "by_dwsku": 0,
+ "by_mfr": 0,
+ "by_pattern_token": 0
+ },
+ "catalog_provenance": {
+ "total_rows": 341,
+ "no_provenance_url": 236,
+ "fabricated_code_rows": 81,
+ "trustworthy_source_rows": 99,
+ "describes_vendor": [
+ {
+ "vendor": "Innovations USA",
+ "n": 295
+ },
+ {
+ "vendor": "Innovations",
+ "n": 9
+ }
+ ]
+ },
+ "conclusion": "BLOCKED_ON_VENDOR_LINESHEET — 0 trustworthy local recovery sources for the cohort; innovations_catalog describes the Innovations USA (DWIN-) line, not the PR private-label. Local backfill would fabricate identity/price. Recovery requires the gated vendor line-sheet."
+}
\ No newline at end of file
diff --git a/tk11041-innovations-reconcile/lib/provenance.mjs b/tk11041-innovations-reconcile/lib/provenance.mjs
new file mode 100644
index 0000000..40b1fae
--- /dev/null
+++ b/tk11041-innovations-reconcile/lib/provenance.mjs
@@ -0,0 +1,60 @@
+// TK-11041 — catalog-source provenance guard (the narrow scraper/test hardening).
+//
+// PURPOSE: encode the TK-10981 lesson as an executable gate. Before any *_catalog
+// staging row is TRUSTED as an authoritative recovery SOURCE (to backfill a real
+// mfr item# or a net price onto a customer-facing product), it must pass this
+// guard. A plausible code SHAPE is NOT proof of provenance — the innovations_catalog
+// scrape produced 81 rows whose mfr_sku is just the *tail of the pattern name*
+// (Sum`atra` -> `atra-1`, Maz`arin` -> `arin-1`) and 236 rows with no product_url
+// at all. Backfilling from those would fabricate identity/price data.
+//
+// Pure functions, no I/O — unit-testable in isolation (see ../test/provenance.test.mjs).
+
+// A real Innovations-style vendor code: 2–4 uppercase letters + digits (ZIO-88, SOA008).
+const CODE_SHAPE = /^[A-Z]{2,4}-?\d{1,5}$/;
+// The truncation signature: an all-lowercase letter run + digits (arin-1, atra-3).
+const LOWERCASE_TAIL = /^[a-z]{2,6}-\d+$/;
+// Bare placeholders that leaked in from boolean/null scrapes.
+const PLACEHOLDER = /^(TRUE|FALSE|NULL|N\/?A|-|\?)$/i;
+
+/** Does the code's letter run appear as the TAIL of any word of the pattern name? */
+function codeIsPatternTail(code, patternName) {
+ const letters = (code || '').replace(/[^a-z]/gi, '').toLowerCase();
+ if (letters.length < 3) return false;
+ const words = (patternName || '')
+ .toLowerCase()
+ .split(/[^a-z]+/)
+ .filter(w => w && w !== 'wallcovering' && w !== 'wallpaper');
+ // truncation match: a pattern word ENDS WITH the code letters but is not equal
+ // to them (i.e. the code is a suffix chopped off the real name).
+ return words.some(w => w.length > letters.length && w.endsWith(letters));
+}
+
+/**
+ * Classify a staging-catalog row as a recovery source.
+ * @param {{mfr_sku?:string, product_url?:string, pattern_name?:string, price_trade?:number|string}} row
+ * @returns {{code:string, trustworthy:boolean, reasons:string[]}}
+ * trustworthy === true => the row may be used to backfill identity/price.
+ * reasons lists every disqualifier found (empty when trustworthy).
+ */
+export function classifyCatalogSource(row = {}) {
+ const code = (row.mfr_sku ?? '').trim();
+ const reasons = [];
+
+ if ((row.product_url ?? '').trim() === '') reasons.push('no_provenance_url');
+ if (PLACEHOLDER.test(code)) reasons.push('placeholder_code');
+ if (LOWERCASE_TAIL.test(code)) reasons.push('corrupted_lowercase_tail');
+ if (codeIsPatternTail(code, row.pattern_name)) reasons.push('code_is_pattern_tail');
+ if (!CODE_SHAPE.test(code) && !LOWERCASE_TAIL.test(code) && !PLACEHOLDER.test(code)) {
+ reasons.push('unexpected_shape');
+ }
+
+ // de-dupe while preserving order
+ const unique = [...new Set(reasons)];
+ return { code, trustworthy: unique.length === 0, reasons: unique };
+}
+
+/** Convenience boolean. */
+export function isTrustworthySource(row) {
+ return classifyCatalogSource(row).trustworthy;
+}
diff --git a/tk11041-innovations-reconcile/reconcile.mjs b/tk11041-innovations-reconcile/reconcile.mjs
new file mode 100644
index 0000000..7497d96
--- /dev/null
+++ b/tk11041-innovations-reconcile/reconcile.mjs
@@ -0,0 +1,160 @@
+#!/usr/bin/env node
+// TK-11041 — feed-first / local SKU reconciliation for the missing Innovations cohort.
+//
+// READ-ONLY. No Shopify writes. No dw_unified writes. No catalog activation.
+// Produces a DETERMINISTIC, dry-run recovery map for the 51 ACTIVE, sample-only
+// Phillipe-Romano-private-label Innovations products, proving whether any LOCAL
+// (feed-first) recovery path exists before falling back to the gated vendor line-sheet.
+//
+// Cohort definition (deterministic):
+// vendor='Phillipe Romano' AND status='ACTIVE'
+// AND NOT has_product_variant (unbuyable: only the $4.25 memo Sample)
+// AND supplier_name ~* 'innov'
+//
+// Recovery-source join keys tested (per the pilot README's proven join model):
+// sp.sku = innovations_catalog.dw_sku (numeric DW-SKU form)
+// sp.dw_sku = innovations_catalog.dw_sku
+// sp.mfr_sku= innovations_catalog.mfr_sku
+// + feed-first pattern-token word match against innovations_catalog.pattern_name
+//
+// Every candidate source is additionally run through lib/provenance.classifyCatalogSource
+// so a "match" made of fabricated (no-URL / truncated) catalog data is never counted
+// as a real recovery.
+
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { queryRows } from '../lib/db.mjs';
+import { classifyCatalogSource } from './lib/provenance.mjs';
+
+const HERE = path.dirname(fileURLToPath(import.meta.url));
+const DATA = path.join(HERE, 'data');
+fs.mkdirSync(DATA, { recursive: true });
+
+// ---------------------------------------------------------------------------
+// 1) The 51 cohort, with the identity fields + a derived pattern token.
+// ---------------------------------------------------------------------------
+const cohort = queryRows(`
+ select
+ sp.sku,
+ coalesce(sp.dw_sku,'') as dw_sku,
+ coalesce(sp.mfr_sku,'') as mfr_sku,
+ split_part(coalesce(sp.mfr_sku,''),'-',1) as collection,
+ trim(regexp_replace(
+ regexp_replace(split_part(sp.title,' | ',1),'( Type ?2| Natural| Vinyl| Memo Sample).*$','','i'),
+ '^La ','')) as base,
+ sp.title
+ from shopify_products sp
+ where sp.vendor='Phillipe Romano' and sp.status='ACTIVE'
+ and not coalesce(sp.has_product_variant,false)
+ and sp.supplier_name ~* 'innov'
+ order by sp.mfr_sku
+`);
+
+const patToken = base => (base || '').split(' ').filter(Boolean)[0] || '';
+
+// ---------------------------------------------------------------------------
+// 2) Per-item local-recovery test (all read-only lookups against the catalog).
+// ---------------------------------------------------------------------------
+const map = cohort.map(r => {
+ const tok = patToken(r.base);
+
+ const bySku = r.sku ? queryRows(
+ `select mfr_sku, product_url, pattern_name, price_trade from innovations_catalog
+ where upper(dw_sku)=upper($$${r.sku}$$)`) : [];
+ const byDwSku = r.dw_sku ? queryRows(
+ `select mfr_sku, product_url, pattern_name, price_trade from innovations_catalog
+ where upper(dw_sku)=upper($$${r.dw_sku}$$)`) : [];
+ const byMfr = r.mfr_sku ? queryRows(
+ `select mfr_sku, product_url, pattern_name, price_trade from innovations_catalog
+ where upper(mfr_sku)=upper($$${r.mfr_sku}$$)`) : [];
+ const byPattern = tok.length >= 4 ? queryRows(
+ `select mfr_sku, product_url, pattern_name, price_trade from innovations_catalog
+ where pattern_name ~* ('\\m'||$$${tok}$$||'\\M')`) : [];
+
+ const candidates = [...bySku, ...byDwSku, ...byMfr, ...byPattern];
+ // A candidate only counts as a REAL recovery if it is a trustworthy source
+ // (has provenance + a non-fabricated code) AND carries a usable net price.
+ const trustworthy = candidates.filter(c =>
+ classifyCatalogSource(c).trustworthy && Number(c.price_trade) > 0);
+
+ const recoverable = trustworthy.length > 0;
+ return {
+ sku: r.sku,
+ internal_code: r.mfr_sku,
+ collection: r.collection,
+ pattern_token: tok,
+ title: r.title,
+ join_sku_hits: bySku.length,
+ join_dwsku_hits: byDwSku.length,
+ join_mfr_hits: byMfr.length,
+ pattern_match_hits: byPattern.length,
+ trustworthy_priced_sources: trustworthy.length,
+ status: recoverable ? 'RECOVERABLE_LOCAL' : 'BLOCKED_ON_VENDOR_LINESHEET',
+ recovery_action: recoverable
+ ? 'stage add-yard variant (net_trade/0.65/0.85 per YARD) via proven stage-innov-reprice — GATED (Shopify write)'
+ : 'no trustworthy local source; match returned Innovations line-sheet on pattern+colorway, then stage add-yard — email send GATED to Steve',
+ };
+});
+
+// ---------------------------------------------------------------------------
+// 3) Catalog provenance snapshot (grounds the "no local source" conclusion).
+// ---------------------------------------------------------------------------
+const catalog = queryRows(`select mfr_sku, product_url, pattern_name from innovations_catalog`);
+let noUrl = 0, corrupted = 0, trustworthy = 0;
+for (const row of catalog) {
+ const c = classifyCatalogSource(row);
+ if (c.reasons.includes('no_provenance_url')) noUrl++;
+ if (c.reasons.includes('corrupted_lowercase_tail') || c.reasons.includes('code_is_pattern_tail')) corrupted++;
+ if (c.trustworthy) trustworthy++;
+}
+
+// links: which vendor does innovations_catalog actually describe?
+const linkage = queryRows(`
+ select sp.vendor, count(*) n from innovations_catalog ic
+ join shopify_products sp on sp.shopify_id like '%'||ic.shopify_product_id
+ where coalesce(ic.shopify_product_id,'')<>'' group by 1 order by 2 desc`);
+
+const summary = {
+ task: 'TK-11041',
+ generated_at: new Date().toISOString(),
+ cohort_size: map.length,
+ recoverable_local: map.filter(m => m.status === 'RECOVERABLE_LOCAL').length,
+ blocked_on_vendor: map.filter(m => m.status === 'BLOCKED_ON_VENDOR_LINESHEET').length,
+ collections: [...new Set(map.map(m => m.collection))].sort(),
+ join_coverage: {
+ by_sku: map.reduce((a, m) => a + m.join_sku_hits, 0),
+ by_dwsku: map.reduce((a, m) => a + m.join_dwsku_hits, 0),
+ by_mfr: map.reduce((a, m) => a + m.join_mfr_hits, 0),
+ by_pattern_token: map.reduce((a, m) => a + m.pattern_match_hits, 0),
+ },
+ catalog_provenance: {
+ total_rows: catalog.length,
+ no_provenance_url: noUrl,
+ fabricated_code_rows: corrupted,
+ trustworthy_source_rows: trustworthy,
+ describes_vendor: linkage,
+ },
+ conclusion: 'BLOCKED_ON_VENDOR_LINESHEET — 0 trustworthy local recovery sources for the cohort; '
+ + 'innovations_catalog describes the Innovations USA (DWIN-) line, not the PR private-label. '
+ + 'Local backfill would fabricate identity/price. Recovery requires the gated vendor line-sheet.',
+};
+
+// ---------------------------------------------------------------------------
+// 4) Emit artifacts.
+// ---------------------------------------------------------------------------
+fs.writeFileSync(path.join(DATA, 'innovations-recovery-map.json'),
+ JSON.stringify({ summary, map }, null, 2));
+fs.writeFileSync(path.join(DATA, 'reconcile-summary.json'),
+ JSON.stringify(summary, null, 2));
+
+const csvCols = ['sku', 'internal_code', 'collection', 'pattern_token',
+ 'join_sku_hits', 'join_dwsku_hits', 'join_mfr_hits', 'pattern_match_hits',
+ 'trustworthy_priced_sources', 'status'];
+const csv = [csvCols.join(',')]
+ .concat(map.map(m => csvCols.map(k => JSON.stringify(m[k] ?? '')).join(',')))
+ .join('\n');
+fs.writeFileSync(path.join(DATA, 'innovations-recovery-map.csv'), csv + '\n');
+
+console.log(JSON.stringify(summary, null, 2));
+console.log(`\nWrote:\n data/innovations-recovery-map.json (${map.length} items)\n data/innovations-recovery-map.csv\n data/reconcile-summary.json`);
diff --git a/tk11041-innovations-reconcile/test/provenance.test.mjs b/tk11041-innovations-reconcile/test/provenance.test.mjs
new file mode 100644
index 0000000..d238d1b
--- /dev/null
+++ b/tk11041-innovations-reconcile/test/provenance.test.mjs
@@ -0,0 +1,63 @@
+// TK-11041 — provenance-guard regression test.
+// Proves the source-of-truth hardening on synthetic positive/negative cases AND
+// against the LIVE corrupted rows in innovations_catalog (read-only).
+//
+// Run: node --test test/provenance.test.mjs
+import { test } from 'node:test';
+import assert from 'node:assert/strict';
+import { classifyCatalogSource, isTrustworthySource } from '../lib/provenance.mjs';
+import { queryRows } from '../../lib/db.mjs';
+
+// ---- POSITIVE: a real, corroborated Innovations code with provenance -------
+test('trustworthy: well-shaped code + product_url + price', () => {
+ const row = { mfr_sku: 'ZIO-088', product_url: 'https://innovationsusa.com/p/zio-088',
+ pattern_name: 'Alchemy Helio', price_trade: 42 };
+ const r = classifyCatalogSource(row);
+ assert.equal(r.trustworthy, true, JSON.stringify(r));
+ assert.deepEqual(r.reasons, []);
+});
+
+// ---- NEGATIVE 1: the truncated-tail fabrication signature -------------------
+test('rejects fabricated lowercase-tail code (Sumatra -> atra-1)', () => {
+ const r = classifyCatalogSource({ mfr_sku: 'atra-1', pattern_name: 'Sumatra Wallcovering', product_url: '' });
+ assert.equal(r.trustworthy, false);
+ assert.ok(r.reasons.includes('corrupted_lowercase_tail'));
+ assert.ok(r.reasons.includes('code_is_pattern_tail'));
+ assert.ok(r.reasons.includes('no_provenance_url'));
+});
+
+// ---- NEGATIVE 2: placeholder code leaked from a boolean scrape --------------
+test('rejects TRUE placeholder code', () => {
+ const r = classifyCatalogSource({ mfr_sku: 'TRUE', pattern_name: 'Whatever', product_url: 'https://x' });
+ assert.equal(r.trustworthy, false);
+ assert.ok(r.reasons.includes('placeholder_code'));
+});
+
+// ---- NEGATIVE 3: shape OK but NO provenance URL -> still untrusted ----------
+test('rejects well-shaped code that lacks provenance', () => {
+ const r = classifyCatalogSource({ mfr_sku: 'SOA-008', pattern_name: 'Agate', product_url: '' });
+ assert.equal(r.trustworthy, false);
+ assert.deepEqual(r.reasons, ['no_provenance_url']);
+});
+
+// ---- NEGATIVE 4: a pattern-tail code that HAPPENS to have a url still fails -
+test('code_is_pattern_tail fires even with a url (Mazarin -> arin-3)', () => {
+ const r = classifyCatalogSource({ mfr_sku: 'arin-3', pattern_name: 'Mazarin', product_url: 'https://x' });
+ assert.equal(r.trustworthy, false);
+ assert.ok(r.reasons.includes('code_is_pattern_tail'));
+});
+
+// ---- boolean convenience ----------------------------------------------------
+test('isTrustworthySource mirrors classify', () => {
+ assert.equal(isTrustworthySource({ mfr_sku: 'ZIO-1', product_url: 'https://x', pattern_name: 'Aerial' }), true);
+ assert.equal(isTrustworthySource({ mfr_sku: 'arin-1', product_url: '', pattern_name: 'Mazarin' }), false);
+});
+
+// ---- LIVE: every known-corrupted row in innovations_catalog is flagged ------
+test('LIVE: all lowercase-tail catalog rows are rejected (0 false-trust)', () => {
+ const rows = queryRows(
+ `select mfr_sku, product_url, pattern_name from innovations_catalog where mfr_sku ~ '^[a-z]+-[0-9]+$'`);
+ assert.ok(rows.length >= 1, 'expected at least one corrupted row to exist');
+ const leaked = rows.filter(isTrustworthySource);
+ assert.equal(leaked.length, 0, `fabricated rows wrongly trusted: ${JSON.stringify(leaked.slice(0,3))}`);
+});
diff --git a/tk11041-innovations-reconcile/verification/e2e-proof.json b/tk11041-innovations-reconcile/verification/e2e-proof.json
new file mode 100644
index 0000000..ac3c0d4
--- /dev/null
+++ b/tk11041-innovations-reconcile/verification/e2e-proof.json
@@ -0,0 +1,31 @@
+{
+ "intent": "TK-11041 feed-first/local SKU reconciliation for the 51 missing PR-Innovations; deterministic dry-run recovery map + provenance guard hardening",
+ "risk_tier": "R1",
+ "environment": "Mac2 local dw_unified MIRROR via /tmp socket (read-only, BEGIN READ ONLY..ROLLBACK); node v26; NO Shopify/canonical writes",
+ "build_commit_parent": "e88e5d3",
+ "timestamp": "2026-09-02T20:56:12Z",
+ "baseline": "51 ACTIVE PR-Innovations products (vendor=Phillipe Romano, supplier_name~innov, NOT has_product_variant) live as $4.25-sample-only; innovations_catalog=341 rows",
+ "commands": [
+ "node reconcile.mjs",
+ "node --test test/provenance.test.mjs"
+ ],
+ "assertions": [
+ {"boundary": "data/db", "check": "cohort size deterministic", "expected": 51, "actual": 51, "verdict": "PASS"},
+ {"boundary": "data/db", "check": "local join coverage (sku/dwsku/mfr/pattern) across 51", "expected": "0/0/0/0", "actual": "0/0/0/0", "verdict": "PASS"},
+ {"boundary": "data/provenance", "check": "innovations_catalog no_provenance_url", "actual": "236/341", "verdict": "PASS"},
+ {"boundary": "data/provenance", "check": "innovations_catalog fabricated-code rows", "actual": "81/341", "verdict": "PASS"},
+ {"boundary": "data/provenance", "check": "catalog describes vendor", "actual": "Innovations USA 295 / Innovations 9 (NOT PR private-label)", "verdict": "PASS"},
+ {"boundary": "code/unit", "check": "provenance guard positive/negative cases", "actual": "7/7 pass", "verdict": "PASS"},
+ {"boundary": "code/live", "check": "0 fabricated catalog rows wrongly trusted", "actual": "0 leaked", "verdict": "PASS"},
+ {"boundary": "artifact", "check": "recovery map emitted", "actual": "json(51)+csv(52 lines)+summary", "verdict": "PASS"}
+ ],
+ "negative_cases": [
+ "atra-1/Sumatra -> rejected (corrupted_lowercase_tail + code_is_pattern_tail + no_provenance_url)",
+ "TRUE placeholder -> rejected (placeholder_code)",
+ "SOA-008 with empty product_url -> rejected (no_provenance_url)",
+ "arin-3/Mazarin WITH url -> rejected (code_is_pattern_tail)"
+ ],
+ "gates_preserved": ["vendor line-sheet email = SEND gated to Steve (untouched)", "Shopify add-yard variant = customer-facing money write (gated)", "no dw_unified/shopify_products/canonical write fired"],
+ "cleanup": "none needed — all reads via READ ONLY txn; only local artifact files written",
+ "verdict": "PASS — 0/51 locally recoverable; recovery is correctly BLOCKED_ON_VENDOR_LINESHEET. Local backfill would fabricate identity/price."
+}
← e88e5d3 TK-11124: add per-yard $359 sellable variant to 18 sample-on
·
back to Dw Unbuyable Recovery Pilot
·
auto-data-snapshot: 2026-09-02T15:21:07 (1 data files) — tk1 3c3e915 →