[object Object]

← back to Sample Followup Sweep

contacts.json: unblock POI + 1838, both silently skipped by the mailer (TK-11255)

a1c761affe134281802fc31e2907bcc0fcef16aa · 2026-09-12 07:44:15 -0700 · Steve Abrams

Measured against LIVE FileMaker: 11 of 129 overdue sample records in the current
10-60 day window resolve to no contact and are skipped with no error and no log.
These are two of them, and both are now recoverable.

  poi                -- already had samples@justindavid.com as of today, but
                        vidContactMap requires email AND account_number, so it
                        was still being skipped. Canonical carries a blank
                        account, so it takes the house "On File" convention
                        (already used by 32 of 58 contacts: pj, mor, green,
                        maya, twi, olp, con...).
  1838-wallcoverings -- canonical VID '1838' = scott.myer@gmail.com. Verified
                        live before adopting: Scott replied "memo has been
                        ordered. thank you scott" to our own sample request on
                        2026-09-01, and an earlier thread quotes stock and euro
                        roll pricing. A personal gmail looks wrong for a vendor
                        desk, but it clears the hardened bar on its own evidence
                        (human-authored, sample-topical, current) and matches the
                        known small-brand pattern already accepted for twi.

Note account_number is customer-facing -- send-reconciled.mjs prints "Our account
number is X" -- so "On File" is a deliberate reuse of the existing convention,
not an invented number.

Safe by construction: the scheduled job runs scheduled-run.mjs --draft, and the
code is explicit that "Nothing sends -- the draft is still the human gate." These
two vendors now produce a reviewable draft instead of silently producing nothing.

Still unroutable and NOT touched here: VAH, BRU, 1838 (bare vid) and FUT are
absent from data/fleet.json entirely, so a contacts entry alone cannot reach them
-- vidContactMap iterates fleet rows. They need the fleet regenerated first.

Undo: restore data/contacts.json.bak-1789224232

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Files touched

Diff

commit a1c761affe134281802fc31e2907bcc0fcef16aa
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sat Sep 12 07:44:15 2026 -0700

    contacts.json: unblock POI + 1838, both silently skipped by the mailer (TK-11255)
    
    Measured against LIVE FileMaker: 11 of 129 overdue sample records in the current
    10-60 day window resolve to no contact and are skipped with no error and no log.
    These are two of them, and both are now recoverable.
    
      poi                -- already had samples@justindavid.com as of today, but
                            vidContactMap requires email AND account_number, so it
                            was still being skipped. Canonical carries a blank
                            account, so it takes the house "On File" convention
                            (already used by 32 of 58 contacts: pj, mor, green,
                            maya, twi, olp, con...).
      1838-wallcoverings -- canonical VID '1838' = scott.myer@gmail.com. Verified
                            live before adopting: Scott replied "memo has been
                            ordered. thank you scott" to our own sample request on
                            2026-09-01, and an earlier thread quotes stock and euro
                            roll pricing. A personal gmail looks wrong for a vendor
                            desk, but it clears the hardened bar on its own evidence
                            (human-authored, sample-topical, current) and matches the
                            known small-brand pattern already accepted for twi.
    
    Note account_number is customer-facing -- send-reconciled.mjs prints "Our account
    number is X" -- so "On File" is a deliberate reuse of the existing convention,
    not an invented number.
    
    Safe by construction: the scheduled job runs scheduled-run.mjs --draft, and the
    code is explicit that "Nothing sends -- the draft is still the human gate." These
    two vendors now produce a reviewable draft instead of silently producing nothing.
    
    Still unroutable and NOT touched here: VAH, BRU, 1838 (bare vid) and FUT are
    absent from data/fleet.json entirely, so a contacts entry alone cannot reach them
    -- vidContactMap iterates fleet rows. They need the fleet regenerated first.
    
    Undo: restore data/contacts.json.bak-1789224232
    
    Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---
 data/contacts.json | 57 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 30 insertions(+), 27 deletions(-)

diff --git a/data/contacts.json b/data/contacts.json
index 974448a..dc8b074 100644
--- a/data/contacts.json
+++ b/data/contacts.json
@@ -107,17 +107,17 @@
     "account_number": "On File"
   },
   "san": {
-    "name": "Sancar (AS Création) — inferred",
+    "name": "Sancar (AS Cr\u00e9ation) \u2014 inferred",
     "sample_email": "sales@sancarwallcovering.com",
     "account_number": "1674444"
   },
   "chin": {
-    "name": "China Seas by Quadrille — inferred",
+    "name": "China Seas by Quadrille \u2014 inferred",
     "sample_email": "Rhaiza@quadrilleinc.com",
     "account_number": "37017"
   },
   "jofa": {
-    "name": "Lee Jofa (Kravet family) — inferred",
+    "name": "Lee Jofa (Kravet family) \u2014 inferred",
     "sample_email": "matt.schoffman@kravet.com",
     "account_number": "10087117"
   },
@@ -127,7 +127,7 @@
     "account_number": "On File"
   },
   "sand": {
-    "name": "Sanderson Design Group — Zoffany/William Morris @ Jasper Showroom",
+    "name": "Sanderson Design Group \u2014 Zoffany/William Morris @ Jasper Showroom",
     "sample_email": "Sample@jaspershowroom.com",
     "account_number": "On File"
   },
@@ -142,20 +142,20 @@
     "account_number": "On File"
   },
   "spn": {
-    "name": "Spoonflower (online — no rep desk)",
+    "name": "Spoonflower (online \u2014 no rep desk)",
     "disposition": "no-chase",
-    "disposition_reason": "online print-on-demand — no sample-order desk to email (vendor type has no rep)",
+    "disposition_reason": "online print-on-demand \u2014 no sample-order desk to email (vendor type has no rep)",
     "disposition_set": "2026-08-15"
   },
   "pf": {
     "name": "Pierre Frey",
     "sample_email": "hbarragan@kneedlerfauchere.com",
     "account_number": "On File",
-    "contact_source": "DW Sent history — Kneedler Fauchère (PF LA rep), order correspondence 2026-08-12; CONFIRM before send"
+    "contact_source": "DW Sent history \u2014 Kneedler Fauch\u00e8re (PF LA rep), order correspondence 2026-08-12; CONFIRM before send"
   },
   "rad": {
     "disposition": "no-chase",
-    "disposition_reason": "item Dig-4350114V shares Spoonflower DIG- digital-print prefix — POD/no sample desk (INFERRED; reverse if RAD is a real chaseable vendor)",
+    "disposition_reason": "item Dig-4350114V shares Spoonflower DIG- digital-print prefix \u2014 POD/no sample desk (INFERRED; reverse if RAD is a real chaseable vendor)",
     "disposition_set": "2026-08-15",
     "sample_email": "scott@radfordgraphics.com, jason@radfordgraphics.com"
   },
@@ -185,10 +185,10 @@
     "sample_email": "samples@designtex.com",
     "account_number": "On File",
     "needs_confirm": true,
-    "contact_source": "George: Donna Dawson, Representative (LA), price-check corr 8/6/2026 — rep not sample desk, CONFIRM"
+    "contact_source": "George: Donna Dawson, Representative (LA), price-check corr 8/6/2026 \u2014 rep not sample desk, CONFIRM"
   },
   "mom": {
-    "name": "Momentum (→Hollywood, INTERNAL chase only)",
+    "name": "Momentum (\u2192Hollywood, INTERNAL chase only)",
     "sample_email": "ddedic@momtex.com",
     "account_number": "On File",
     "needs_confirm": true,
@@ -199,12 +199,12 @@
     "sample_email": "sales@sancarwallcovering.com",
     "account_number": "1674444",
     "needs_confirm": true,
-    "contact_source": "George: 'sancar (VERSACE)' memo 8/17/2026 — Versace ordered through Sancar desk"
+    "contact_source": "George: 'sancar (VERSACE)' memo 8/17/2026 \u2014 Versace ordered through Sancar desk"
   },
   "sch": {
     "name": "Schumacher (F. Schumacher)",
     "disposition": "no-chase",
-    "disposition_reason": "self-service online sample ordering; only noreply@mailer.fschumacher.com exists — no rep desk to chase (George-verified 8/20)",
+    "disposition_reason": "self-service online sample ordering; only noreply@mailer.fschumacher.com exists \u2014 no rep desk to chase (George-verified 8/20)",
     "disposition_set": "2026-08-20",
     "sample_email": "la-samples@schumacher.com"
   },
@@ -213,7 +213,7 @@
     "sample_email": "sales@sir-edward.com",
     "account_number": "On File",
     "needs_confirm": true,
-    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): Désirée Ouweneel <sales@sir-edward.com>, active sample/sales corr; DWFM40xxx file-requested art items"
+    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): D\u00e9sir\u00e9e Ouweneel <sales@sir-edward.com>, active sample/sales corr; DWFM40xxx file-requested art items"
   },
   "cow": {
     "name": "Cowtan & Tout / Colefax & Fowler / Jane Churchill",
@@ -244,11 +244,11 @@
     "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): Therese Stachowiak <therese@egg-and-dart.com>, same desk as arte; BEC SKU"
   },
   "coor": {
-    "name": "Coordonné (via NewWall)",
+    "name": "Coordonn\u00e9 (via NewWall)",
     "sample_email": "tricia@newwall.com",
     "account_number": "On File",
     "needs_confirm": true,
-    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): Tricia Robb <tricia@newwall.com> handles NWD/Coordonné; DWDC 'Bike ride Fawn' A00907"
+    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): Tricia Robb <tricia@newwall.com> handles NWD/Coordonn\u00e9; DWDC 'Bike ride Fawn' A00907"
   },
   "christian-lacroix-europe": {
     "name": "Christian Lacroix (via Osborne & Little / Designers Guild)",
@@ -262,12 +262,12 @@
     "sample_email": "info@hyggeandwest.com",
     "account_number": "On File",
     "needs_confirm": true,
-    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): only Hygge & West address on file is support@hyggeandwest.com (marketing/support); DWHW2 'Be Good' SKU — CONFIRM it accepts trade sample requests"
+    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): only Hygge & West address on file is support@hyggeandwest.com (marketing/support); DWHW2 'Be Good' SKU \u2014 CONFIRM it accepts trade sample requests"
   },
   "fol": {
     "name": "Folia Fabrics (RETIRED)",
     "disposition": "no-chase",
-    "disposition_reason": "Folia source decommissioned 2026-08-18 (folia-scraper retired); Ralph LWP items were Folia-distributed — no live desk to chase",
+    "disposition_reason": "Folia source decommissioned 2026-08-18 (folia-scraper retired); Ralph LWP items were Folia-distributed \u2014 no live desk to chase",
     "disposition_set": "2026-08-20",
     "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns)",
     "sample_email": "customerservice@folia-fabrics.com"
@@ -275,19 +275,19 @@
   "phillipe-romano": {
     "name": "Phillipe Romano (private label)",
     "disposition": "no-chase",
-    "disposition_reason": "DW private label (Command54/RIGO/Justin David umbrella) — internal only, never chase a customer-facing vendor desk; PI-ACOUSTIC DWPN SKU",
+    "disposition_reason": "DW private label (Command54/RIGO/Justin David umbrella) \u2014 internal only, never chase a customer-facing vendor desk; PI-ACOUSTIC DWPN SKU",
     "disposition_set": "2026-08-20",
     "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns)"
   },
   "carl": {
     "name": "Carlsten / Desima (private label, archived)",
     "disposition": "no-chase",
-    "disposition_reason": "Carlsten/Desima private-label line (Steve: Desima/Kravet); TTF Capitone items — archived line, no live sample desk",
+    "disposition_reason": "Carlsten/Desima private-label line (Steve: Desima/Kravet); TTF Capitone items \u2014 archived line, no live sample desk",
     "disposition_set": "2026-08-20",
     "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns)"
   },
   "ftr": {
-    "name": "(unresolved) metallic-leaf vendor — GLM/GLMG SL08/B20 gunmetal/bronze/copper codes",
+    "name": "(unresolved) metallic-leaf vendor \u2014 GLM/GLMG SL08/B20 gunmetal/bronze/copper codes",
     "needs_confirm": true,
     "unresolved_email": true,
     "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): no vendor identity found in George; metallic/gilded-leaf line, distributor unknown",
@@ -297,20 +297,23 @@
     "name": "Ulrich Welter",
     "needs_confirm": true,
     "unresolved_email": true,
-    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): George: our sample requests addressed 'Attn: Sample Dept Ulrich Welter' (J-codes, DWS prefix) — vendor NAME confirmed but no reply-email captured; needs an Ulrich Welter sample-desk address before it can draft"
+    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): George: our sample requests addressed 'Attn: Sample Dept Ulrich Welter' (J-codes, DWS prefix) \u2014 vendor NAME confirmed but no reply-email captured; needs an Ulrich Welter sample-desk address before it can draft"
   },
   "1838-wallcoverings": {
     "name": "1838 Wallcoverings",
     "needs_confirm": true,
     "unresolved_email": true,
-    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): real line (1838-scraper-manager); likely distributed via Maxwell Fabrics (distribution@postmark.pdfsystems.com is order-only, not a sample desk) — no inbound sample-desk contact captured; CONFIRM the 1838/Maxwell sample email"
+    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): real line (1838-scraper-manager); likely distributed via Maxwell Fabrics (distribution@postmark.pdfsystems.com is order-only, not a sample desk) \u2014 no inbound sample-desk contact captured; CONFIRM the 1838/Maxwell sample email",
+    "sample_email": "scott.myer@gmail.com",
+    "account_number": "On File"
   },
   "poi": {
     "name": "Pointe (via Justin David private label)",
     "needs_confirm": true,
     "unresolved_email": true,
-    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): PI- codes DWPR/DWPN, 'from pointe'; Justin David desk jackie@justindavid.com is the likely source but POI may be an internal PR/JD private-label — CONFIRM whether to chase externally at all",
-    "sample_email": "samples@justindavid.com"
+    "contact_source": "George/Gmail mining 2026-08-20 (grounded on live outstanding-memo Mfr Patterns): PI- codes DWPR/DWPN, 'from pointe'; Justin David desk jackie@justindavid.com is the likely source but POI may be an internal PR/JD private-label \u2014 CONFIRM whether to chase externally at all",
+    "sample_email": "samples@justindavid.com",
+    "account_number": "On File"
   },
   "paul": {
     "name": "Paul Montgomery",
@@ -326,7 +329,7 @@
     "contact_source": "George/Gmail mining 2026-08-25 (grounded on live outstanding-memo Mfr Patterns + account#); MDC Customer Service <cs@mdcwall.com>"
   },
   "eli": {
-    "name": "Elitis (USA — Annalisa Dominguez)",
+    "name": "Elitis (USA \u2014 Annalisa Dominguez)",
     "main_email": "ANNALISA@elitis.us",
     "account_number": "1062120",
     "needs_confirm": true,
@@ -338,7 +341,7 @@
     "main_email": "rebecca.cragg@lincrusta.com",
     "account_number": "1062465",
     "needs_confirm": true,
-    "contact_source": "George/Gmail mining 2026-08-25 (grounded on live outstanding-memo Mfr Patterns + account#); active rep Rebecca Cragg (corr. through 8/18/2026) — main/rep fallback per Steve 8/25",
+    "contact_source": "George/Gmail mining 2026-08-25 (grounded on live outstanding-memo Mfr Patterns + account#); active rep Rebecca Cragg (corr. through 8/18/2026) \u2014 main/rep fallback per Steve 8/25",
     "sample_email": "federico.contigiani@lincrusta.com"
   },
   "lbi": {
@@ -346,4 +349,4 @@
     "sample_email": "jill@lbiboyd.com",
     "account_number": "On File"
   }
-}
+}
\ No newline at end of file

← e343b5f sample-followup: strip CR/whitespace from FileMaker vid — it  ·  back to Sample Followup Sweep  ·  scheduled-run: decouple the vid->contact bridge from the fle 6771f15 →