← back to Sample Followup Sweep
contacts.json: route VAH + BRU + bare-1838 — 27 of 28 live vendors now reachable (TK-11255)
5c0d68e10d65510978d0f912ac44d18ba22a7748 · 2026-09-12 07:48:51 -0700 · Steve Abrams
Closes most of the silent-skip gap measured today: of 129 live overdue sample
records, 11 across 7 vendor codes resolved to NO contact and were dropped with no
error and no log line.
vah Vahallan -> info@vahallan.com, acct "On File"
Verified live before adopting: Annie Kaufman, Senior Sales Coordinator,
replied "Thank you for your sample request. We will get these sent out"
to our own request YESTERDAY (2026-09-11) and again 2026-09-03.
bru Brunschwig & Fils (@ Kravet) -> matt.schoffman@kravet.com, acct 10087117
Canonical says "Brunswig and fils @ Kravet" and Brunschwig is a Kravet
house, so it shares Kravet's desk and account. Held to the same bar
rather than assumed: Matt Schoffman replies to our sample requests with
UPS tracking, most recently 2026-09-10.
1838 bare vid routed to the existing 1838-wallcoverings contact via
SLUG_ALIASES — same vendor (Scott Myer), so this is a routing alias
rather than a duplicated contact record.
Measured effect, live: routable vendors 24 -> 27 of 28; unroutable records
8 -> 2.
NOT adopted: FUT (2 records). Canonical has no FUT row. It is probably the same
vendor as FTR ("future Textile", ftg1@futuretextiles.com) on a name-shaped hunch,
and that is exactly the kind of guess that put Sanderson memos at Gimmersta
earlier in this ticket. It stays unroutable until something confirms it.
Both new accounts use the house "On File"/inherited-account convention rather
than an invented number, and the scheduled job runs --draft, so the effect is a
reviewable draft per vendor, never an automatic send.
Undo: restore data/contacts.json.bak-1789224483
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Files touched
M data/contacts.jsonM scripts/scheduled-run.mjs
Diff
commit 5c0d68e10d65510978d0f912ac44d18ba22a7748
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Sep 12 07:48:51 2026 -0700
contacts.json: route VAH + BRU + bare-1838 — 27 of 28 live vendors now reachable (TK-11255)
Closes most of the silent-skip gap measured today: of 129 live overdue sample
records, 11 across 7 vendor codes resolved to NO contact and were dropped with no
error and no log line.
vah Vahallan -> info@vahallan.com, acct "On File"
Verified live before adopting: Annie Kaufman, Senior Sales Coordinator,
replied "Thank you for your sample request. We will get these sent out"
to our own request YESTERDAY (2026-09-11) and again 2026-09-03.
bru Brunschwig & Fils (@ Kravet) -> matt.schoffman@kravet.com, acct 10087117
Canonical says "Brunswig and fils @ Kravet" and Brunschwig is a Kravet
house, so it shares Kravet's desk and account. Held to the same bar
rather than assumed: Matt Schoffman replies to our sample requests with
UPS tracking, most recently 2026-09-10.
1838 bare vid routed to the existing 1838-wallcoverings contact via
SLUG_ALIASES — same vendor (Scott Myer), so this is a routing alias
rather than a duplicated contact record.
Measured effect, live: routable vendors 24 -> 27 of 28; unroutable records
8 -> 2.
NOT adopted: FUT (2 records). Canonical has no FUT row. It is probably the same
vendor as FTR ("future Textile", ftg1@futuretextiles.com) on a name-shaped hunch,
and that is exactly the kind of guess that put Sanderson memos at Gimmersta
earlier in this ticket. It stays unroutable until something confirms it.
Both new accounts use the house "On File"/inherited-account convention rather
than an invented number, and the scheduled job runs --draft, so the effect is a
reviewable draft per vendor, never an automatic send.
Undo: restore data/contacts.json.bak-1789224483
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---
data/contacts.json | 10 ++++++++++
scripts/scheduled-run.mjs | 4 +++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/data/contacts.json b/data/contacts.json
index dc8b074..ee16066 100644
--- a/data/contacts.json
+++ b/data/contacts.json
@@ -348,5 +348,15 @@
"name": "LBI Boyd (Jill Carol)",
"sample_email": "jill@lbiboyd.com",
"account_number": "On File"
+ },
+ "vah": {
+ "name": "Vahallan",
+ "sample_email": "info@vahallan.com",
+ "account_number": "On File"
+ },
+ "bru": {
+ "name": "Brunschwig & Fils (@ Kravet)",
+ "sample_email": "matt.schoffman@kravet.com",
+ "account_number": "10087117"
}
}
\ No newline at end of file
diff --git a/scripts/scheduled-run.mjs b/scripts/scheduled-run.mjs
index 728073a..379620a 100644
--- a/scripts/scheduled-run.mjs
+++ b/scripts/scheduled-run.mjs
@@ -157,7 +157,9 @@ function vidContactMap(liveVids = []) {
// slug is derivable from vid, so derive the bridge directly from contacts.json
// and treat fleet as an ADDITIVE source. Union only -- this can never make a
// vendor that resolves today stop resolving.
- const SLUG_ALIASES = { 'ANNA FRENCH': 'thib', ANNA: 'thib', ARTE: 'arte-international', 'AS CREATION': 'san', BM: 'green' };
+ const SLUG_ALIASES = { 'ANNA FRENCH': 'thib', ANNA: 'thib', ARTE: 'arte-international', 'AS CREATION': 'san', BM: 'green',
+ // bare vid '1838' and '1838 Wallcoverings' are the same vendor (Scott Myer).
+ '1838': '1838-wallcoverings' };
const slugForVid = (vid) => SLUG_ALIASES[vid] || String(vid).toLowerCase().replace(/[^a-z0-9]+/g, '-');
const put = (key, slug) => {
if (!key || map[key]) return;
← 6771f15 scheduled-run: decouple the vid->contact bridge from the fle
·
back to Sample Followup Sweep
·
lib/slug-aliases.cjs: one source of truth for slug routing — 8e1807b →