[object Object]

← back to Sample Followup Sweep

add deterministic sample contact triage guard

eb0c3fa2e322f3e8af55a5d239406752c2494c0b · 2026-08-30 13:01:33 -0700 · Steve Abrams

Files touched

Diff

commit eb0c3fa2e322f3e8af55a5d239406752c2494c0b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Aug 30 13:01:33 2026 -0700

    add deterministic sample contact triage guard
---
 tk10743-deterministic-triage/README.md             |  22 +
 tk10743-deterministic-triage/test.mjs              |  24 +
 tk10743-deterministic-triage/triage-plan.json      | 602 +++++++++++++++++++++
 tk10743-deterministic-triage/triage.mjs            |  65 +++
 .../verification/e2e-proof.json                    |  35 ++
 5 files changed, 748 insertions(+)

diff --git a/tk10743-deterministic-triage/README.md b/tk10743-deterministic-triage/README.md
new file mode 100644
index 0000000..c80755c
--- /dev/null
+++ b/tk10743-deterministic-triage/README.md
@@ -0,0 +1,22 @@
+# TK-10743 deterministic contact triage
+
+This prepare-only tool reclassifies every positive-count vendor in the saved
+sample follow-up fleet using only four approved local JSON files. It never sends,
+scrapes, calls an API, stamps FileMaker, or writes a database.
+
+It fails closed when a vendor count has no corresponding SKU rows. The current
+fleet contains seven such ghost rows: ELI 1, MDC 2, PAUL 1, and LIN 3. Those
+contacts may exist locally, but no deterministic SKU-level follow-up can be
+prepared until the source snapshot carries the actual records.
+
+Statuses are intentionally operationally inert:
+
+- `PREPARED_NOT_SENT`
+- `ALREADY_IN_RESEND_QUEUE`
+- `RECENTLY_CONTACTED_HOLD`
+- `HELD_NEEDS_CONFIRM`
+- `UNRESOLVED_LOCAL_DATA`
+- `NO_CHASE`
+- `DATA_INCOMPLETE`
+
+Run `node triage.mjs && node test.mjs`.
diff --git a/tk10743-deterministic-triage/test.mjs b/tk10743-deterministic-triage/test.mjs
new file mode 100644
index 0000000..d22f4b7
--- /dev/null
+++ b/tk10743-deterministic-triage/test.mjs
@@ -0,0 +1,24 @@
+#!/usr/bin/env node
+import assert from 'node:assert/strict';
+import fs from 'node:fs';
+
+const plan = JSON.parse(fs.readFileSync(new URL('./triage-plan.json', import.meta.url)));
+const row = vid => plan.rows.find(item => item.vid === vid);
+assert.equal(plan.mode, 'LOCAL_PREPARE_ONLY');
+assert.deepEqual(plan.invariants, ['NO_SEND', 'NO_FILEMAKER_WRITE', 'NO_NETWORK', 'NO_PAID_API', 'NO_CANONICAL_DB_WRITE']);
+assert.equal(plan.integrity.fleet_declared_total, 106);
+assert.equal(plan.integrity.sum_vendor_declared_counts, 113);
+assert.equal(plan.integrity.sum_materialized_item_rows, 106);
+assert.equal(plan.integrity.count_without_items, 7);
+assert.equal(row('SCA').status, 'PREPARED_NOT_SENT');
+assert.equal(row('DGD').status, 'RECENTLY_CONTACTED_HOLD');
+assert.equal(row('YOR').status, 'RECENTLY_CONTACTED_HOLD');
+assert.equal(row('WQ').status, 'ALREADY_IN_RESEND_QUEUE');
+assert.equal(row('VER').status, 'HELD_NEEDS_CONFIRM');
+assert.equal(row('TBD').status, 'UNRESOLVED_LOCAL_DATA');
+assert.equal(row('SPN').status, 'NO_CHASE');
+assert.equal(row('SAND').status, 'NO_CHASE');
+assert.equal(row('SANDB').status, 'NO_CHASE');
+for (const vid of ['ELI', 'MDC', 'PAUL', 'LIN']) assert.equal(row(vid).status, 'DATA_INCOMPLETE');
+assert.ok(plan.rows.every(item => !/^SEND/.test(item.status)));
+console.log('PASS: deterministic buckets, gates, aliases, queue dedupe, notes, unresolved contacts, and ghost-row fail-closed behavior');
diff --git a/tk10743-deterministic-triage/triage-plan.json b/tk10743-deterministic-triage/triage-plan.json
new file mode 100644
index 0000000..e661ab5
--- /dev/null
+++ b/tk10743-deterministic-triage/triage-plan.json
@@ -0,0 +1,602 @@
+{
+  "ticket": "TK-10743",
+  "generated_at": "2026-08-30T20:01:30.755Z",
+  "mode": "LOCAL_PREPARE_ONLY",
+  "source_files": [
+    "data/fleet.json",
+    "data/contacts.json",
+    "data/resend-queue.json",
+    "data/notes-queue.json",
+    "data/recently-contacted.json"
+  ],
+  "invariants": [
+    "NO_SEND",
+    "NO_FILEMAKER_WRITE",
+    "NO_NETWORK",
+    "NO_PAID_API",
+    "NO_CANONICAL_DB_WRITE"
+  ],
+  "integrity": {
+    "fleet_declared_total": 106,
+    "sum_vendor_declared_counts": 113,
+    "sum_materialized_item_rows": 106,
+    "count_without_items": 7
+  },
+  "summary": {
+    "ALREADY_IN_RESEND_QUEUE": {
+      "vendors": 6,
+      "declared_skus": 13,
+      "materialized_skus": 13
+    },
+    "DATA_INCOMPLETE": {
+      "vendors": 4,
+      "declared_skus": 7,
+      "materialized_skus": 0
+    },
+    "HELD_NEEDS_CONFIRM": {
+      "vendors": 3,
+      "declared_skus": 5,
+      "materialized_skus": 5
+    },
+    "NO_CHASE": {
+      "vendors": 6,
+      "declared_skus": 21,
+      "materialized_skus": 21
+    },
+    "PREPARED_NOT_SENT": {
+      "vendors": 7,
+      "declared_skus": 25,
+      "materialized_skus": 25
+    },
+    "RECENTLY_CONTACTED_HOLD": {
+      "vendors": 13,
+      "declared_skus": 39,
+      "materialized_skus": 39
+    },
+    "UNRESOLVED_LOCAL_DATA": {
+      "vendors": 2,
+      "declared_skus": 3,
+      "materialized_skus": 3
+    }
+  },
+  "rows": [
+    {
+      "vid": "DGD",
+      "slug": "dgd",
+      "name": "Designers Guild @ Osborne & Little",
+      "declared_skus": 12,
+      "materialized_skus": 12,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "Polancol@oalusa.com",
+      "item_keys": [
+        "DWKK123171|Emily Guth|06/22/2026",
+        "EUR80616|Peyton Pawlicki|07/02/2026",
+        "RALPH1077|Jay RInehart|07/09/2026",
+        "DWDG987895|Alia Garcia|07/13/2026",
+        "EUR90140|Christine Levy|07/15/2026",
+        "EUR90139|Christine Levy|07/15/2026",
+        "EUR80616|The Hunter House|07/17/2026",
+        "EUR70041|Margie Pesicka|07/17/2026",
+        "EUR80616|The Hunter House|07/20/2026",
+        "RALPH1007|Kathiann Crews|07/21/2026",
+        "EUR71111|Charlotte Harrison|07/22/2026",
+        "DWBW600417|Charlotte Harrison|07/22/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "SPN",
+      "slug": "spn",
+      "name": "Spoonflower (online — no rep desk)",
+      "declared_skus": 11,
+      "materialized_skus": 11,
+      "status": "NO_CHASE",
+      "reason": "online print-on-demand — no sample-order desk to email (vendor type has no rep)"
+    },
+    {
+      "vid": "GREEN",
+      "slug": "green",
+      "name": "(vid green)",
+      "declared_skus": 7,
+      "materialized_skus": 7,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "sales@bmwallpaper.com",
+      "item_keys": [
+        "GRS800010|Janet Gaza Kolb|07/22/2026",
+        "PWV10180|Donna Horner|07/24/2026",
+        "PWV500960|JRP Design & Remodel, Inc.|07/30/2026",
+        "Cork501520|JRP Design & Remodel, Inc.|07/30/2026",
+        "Cork501530|JRP Design & Remodel, Inc.|07/30/2026",
+        "Cork501390|JRP Design & Remodel, Inc.|07/30/2026",
+        "Cork500620|JRP Design & Remodel, Inc.|07/30/2026"
+      ],
+      "evidence": "approved local contacts.json"
+    },
+    {
+      "vid": "KRA",
+      "slug": "kra",
+      "name": "Kravet",
+      "declared_skus": 7,
+      "materialized_skus": 7,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "matt.schoffman@kravet.com",
+      "item_keys": [
+        "DWKK134939|Lisa McIlhenny FEDEX|07/27/2026",
+        "DWKK134938|Lisa McIlhenny FEDEX|07/27/2026",
+        "DWKK119396|Lisa McIlhenny FEDEX|07/27/2026",
+        "DWKK119394|Lisa McIlhenny FEDEX|07/27/2026",
+        "DWKK139575|Denise Duggan|07/28/2026",
+        "DWKK142456|Kristiina Sutherland|08/03/2026",
+        "DWKK142457|Kristiina Sutherland|08/03/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "SCA",
+      "slug": "sca",
+      "name": "Scalamandre",
+      "declared_skus": 5,
+      "materialized_skus": 5,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "FLOVOS@scalamandre.com",
+      "item_keys": [
+        "DWA89306|Michelle kungis|06/30/2026",
+        "DWA82596|Leah E Ramsay|07/11/2026",
+        "DWA88957|GoldLeaf Interior|07/22/2026",
+        "DWA88660|GoldLeaf Interior|07/22/2026",
+        "DWA89455|Lisa McIlhenny FEDEX|07/27/2026"
+      ],
+      "evidence": "approved local contacts.json"
+    },
+    {
+      "vid": "WQ",
+      "slug": "wq",
+      "name": "WallQuest / Malibu",
+      "declared_skus": 5,
+      "materialized_skus": 5,
+      "status": "ALREADY_IN_RESEND_QUEUE",
+      "recipient": "orders@wallquest.com",
+      "item_keys": [
+        "GLM4134|Margie Pesicka|07/17/2026",
+        "GLM4134|Margie Pesicka|07/17/2026",
+        "GRS800776|JRP Design & Remodel, Inc.|07/30/2026",
+        "GRS800956|JRP Design & Remodel, Inc.|07/30/2026",
+        "DWC50084|JRP Design & Remodel, Inc.|07/30/2026"
+      ],
+      "reason": "existing gated queue entry; do not duplicate"
+    },
+    {
+      "vid": "THI",
+      "slug": "thi",
+      "name": "Thibaut",
+      "declared_skus": 4,
+      "materialized_skus": 4,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "cathy.dy@thibautdesign.com",
+      "item_keys": [
+        "ROP73313|Haley McKinley|07/06/2026",
+        "ROP73020|Haley McKinley|07/06/2026",
+        "ROP73216|Haley McKinley|07/06/2026",
+        "ROP73150|Shi Shi Gallery|07/06/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "PF",
+      "slug": "pf",
+      "name": "Pierre Frey",
+      "declared_skus": 4,
+      "materialized_skus": 4,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "mocampo@kneedlerfauchere.com",
+      "item_keys": [
+        "DWPF150036|Kristiina Sutherland|07/09/2026",
+        "DWPF150039|Kristiina Sutherland|07/09/2026",
+        "DWPF150040|Kristiina Sutherland|07/09/2026",
+        "DWC321345|Sincere Things, LLC|07/20/2026"
+      ],
+      "evidence": "DW Sent history — Kneedler Fauchère (PF LA rep), order correspondence 2026-08-12; CONFIRM before send"
+    },
+    {
+      "vid": "YOR",
+      "slug": "yor",
+      "name": "York",
+      "declared_skus": 4,
+      "materialized_skus": 4,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "RiveraH@yorkwall.com, orders@yorkwall.com",
+      "item_keys": [
+        "DWJS17726|lauren shapiro|07/10/2026",
+        "DWJS90066|Caitlin Rae Designs|07/29/2026",
+        "DWJS90065|Caitlin Rae Designs|07/29/2026",
+        "DWJS90067|Caitlin Rae Designs|07/29/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "SCH",
+      "slug": "sch",
+      "name": "Schumacher",
+      "declared_skus": 3,
+      "materialized_skus": 3,
+      "status": "NO_CHASE",
+      "reason": "self-service online sample ordering; only noreply@mailer.fschumacher.com exists — no rep desk to chase (George-verified 8/20)"
+    },
+    {
+      "vid": "CHIN",
+      "slug": "chin",
+      "name": "(vid Chin)",
+      "declared_skus": 3,
+      "materialized_skus": 3,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "Rhaiza@quadrilleinc.com",
+      "item_keys": [
+        "DWCS893848|Jessica Noble|07/08/2026",
+        "DWCS930248|Alison Iglehart|07/09/2026",
+        "DWCW734546|Alison Iglehart|07/09/2026"
+      ],
+      "evidence": "approved local contacts.json"
+    },
+    {
+      "vid": "MOR",
+      "slug": "mor",
+      "name": "Morris & Co",
+      "declared_skus": 3,
+      "materialized_skus": 3,
+      "status": "ALREADY_IN_RESEND_QUEUE",
+      "recipient": "Nicole.Monbarren@sandersondesigngroup.com",
+      "item_keys": [
+        "DWWM14464|Nicole Stauffer|07/12/2026",
+        "DWWM14707|Martha Ratay|08/03/2026",
+        "DWWM14752|Pamela Thomaston|08/03/2026"
+      ],
+      "reason": "existing gated queue entry; do not duplicate"
+    },
+    {
+      "vid": "QUA",
+      "slug": "qua",
+      "name": "Quadrille",
+      "declared_skus": 3,
+      "materialized_skus": 3,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "Rhaiza@quadrilleinc.com",
+      "item_keys": [
+        "DWCW777346||07/14/2026",
+        "DWCW762146|Kate Harrell|07/20/2026",
+        "DWQC600140|Sally P Brady|08/03/2026"
+      ],
+      "evidence": "approved local contacts.json"
+    },
+    {
+      "vid": "VER",
+      "slug": "ver",
+      "name": "(vid VER)",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "HELD_NEEDS_CONFIRM",
+      "recipient": "sales@sancarwallcovering.com",
+      "item_keys": [
+        "VER47203|Chanele Williams|06/22/2026",
+        "VER46222|FEDEX|07/10/2026"
+      ],
+      "evidence": "George: 'sancar (VERSACE)' memo 8/17/2026 — Versace ordered through Sancar desk"
+    },
+    {
+      "vid": "TBD",
+      "slug": "tbd",
+      "name": "(vid tbd)",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "UNRESOLVED_LOCAL_DATA",
+      "reason": "no approved local contact record"
+    },
+    {
+      "vid": "ARTE INTERNATIONAL",
+      "slug": "arte-international",
+      "name": "Arte International",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "Therese@egg-and-dart.com",
+      "item_keys": [
+        "DWAR320016|Suzi Graef|06/22/2026",
+        "DWAR320016|rachael roberts|06/30/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "SCHUMACHER",
+      "slug": "schumacher",
+      "name": "Schumacher",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "NO_CHASE",
+      "reason": "self-service online sample ordering; only noreply@mailer.fschumacher.com exists — no rep desk to chase (George-verified 8/20)"
+    },
+    {
+      "vid": "SAND",
+      "slug": "sand",
+      "name": "Sandberg",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "NO_CHASE",
+      "reason": "approved local note says samples were ordered online; do not chase as memo samples"
+    },
+    {
+      "vid": "CON",
+      "slug": "con",
+      "name": "(vid CON)",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "ALREADY_IN_RESEND_QUEUE",
+      "recipient": "info@concertex.com",
+      "item_keys": [
+        "LIN980008|Margie Pesicka|07/17/2026",
+        "LIN980008|Margie Pesicka|07/17/2026"
+      ],
+      "reason": "existing gated queue entry; do not duplicate"
+    },
+    {
+      "vid": "THIB",
+      "slug": "thib",
+      "name": "Thibaut",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "cathy.dy@thibautdesign.com",
+      "item_keys": [
+        "DWAF65004|Paola Salomon|07/20/2026",
+        "DWAF65000|Paola Salomon|07/20/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "SANDB",
+      "slug": "sandb",
+      "name": "Sandberg",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "NO_CHASE",
+      "reason": "approved local note says samples were ordered online; do not chase as memo samples"
+    },
+    {
+      "vid": "ASTSAND",
+      "slug": "astsand",
+      "name": "(vid ASTSAND)",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "amy.d@astek.com",
+      "item_keys": [
+        "PRN62373|Andrea Reiser|07/31/2026",
+        "REW6211|JODI MILLER|08/03/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "PIN",
+      "slug": "pin",
+      "name": "(vid PIN)",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "LosAngelesShowroom@pindlercorp.com",
+      "item_keys": [
+        "DWPF600399|Marci Stewart|07/31/2026",
+        "DWPF600091|Marci Stewart|07/31/2026"
+      ],
+      "evidence": "approved local contacts.json"
+    },
+    {
+      "vid": "COOR",
+      "slug": "coor",
+      "name": "(vid COOR)",
+      "declared_skus": 2,
+      "materialized_skus": 2,
+      "status": "HELD_NEEDS_CONFIRM",
+      "recipient": "tricia@newwall.com",
+      "item_keys": [
+        "DWDC330786|Kristine Bennett|08/03/2026",
+        "DWDC330787|Kristine Bennett|08/03/2026"
+      ],
+      "evidence": "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"
+    },
+    {
+      "vid": "SAN",
+      "slug": "san",
+      "name": "(vid San)",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "sales@sancarwallcovering.com",
+      "item_keys": [
+        "DWAC1010582|Susan Berghouse|06/22/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "BRE",
+      "slug": "bre",
+      "name": "Brewster",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "ALREADY_IN_RESEND_QUEUE",
+      "recipient": "brewsterorders@brewp.com",
+      "item_keys": [
+        "DWJS90185|Reed Reynolds|06/29/2026"
+      ],
+      "reason": "existing gated queue entry; do not duplicate"
+    },
+    {
+      "vid": "JOFA",
+      "slug": "jofa",
+      "name": "Lee Jofa",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "matt.schoffman@kravet.com",
+      "item_keys": [
+        "DWKK134236|Rachel Kiedrowski|06/29/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "RAD",
+      "slug": "rad",
+      "name": "(vid RAD)",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "NO_CHASE",
+      "reason": "item Dig-4350114V shares Spoonflower DIG- digital-print prefix — POD/no sample desk (INFERRED; reverse if RAD is a real chaseable vendor)"
+    },
+    {
+      "vid": "TWI",
+      "slug": "twi",
+      "name": "(vid TWI)",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "HELD_NEEDS_CONFIRM",
+      "recipient": "karinkleintextiles@gmail.com",
+      "item_keys": [
+        "DWAR320018|Edidiong Odiong|07/06/2026"
+      ],
+      "evidence": "George: Karin Klein <karinkleintextiles@gmail.com> active sample-request replies 8/2026 (Steve screenshot: VID Twi, Karin Klein Textiles)"
+    },
+    {
+      "vid": "LBI",
+      "slug": "lbi",
+      "name": "(vid LBI)",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "UNRESOLVED_LOCAL_DATA",
+      "reason": "no approved local contact record"
+    },
+    {
+      "vid": "PJ",
+      "slug": "pj",
+      "name": "Phillip Jeffries",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "jballard@phillipjeffries.com",
+      "item_keys": [
+        "DWCPJ4185LA|Lake Flato Architects|07/09/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "BREWSTER",
+      "slug": "brewster",
+      "name": "Brewster",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "ALREADY_IN_RESEND_QUEUE",
+      "recipient": "brewsterorders@brewp.com",
+      "item_keys": [
+        "DWBR170698|lauren shapiro|07/10/2026"
+      ],
+      "reason": "existing gated queue entry; do not duplicate"
+    },
+    {
+      "vid": "OSB",
+      "slug": "osb",
+      "name": "Osborne & Little",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "Polancol@oalusa.com",
+      "item_keys": [
+        "EUR70871|Lisa McIlhenny FEDEX|07/27/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "MAYA",
+      "slug": "maya",
+      "name": "Maya Romanoff",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "ari@quintushome.com",
+      "item_keys": [
+        "Maya50408|Pierce Condominium c/o FirstService Residential|07/27/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "KOR",
+      "slug": "kor",
+      "name": "(vid kor)",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "RECENTLY_CONTACTED_HOLD",
+      "recipient": "samples@koroseal.com, sshortino@koroseal.com",
+      "item_keys": [
+        "DWK29028|Sheryl Repasky|07/29/2026"
+      ],
+      "reason": "recipient appears in approved local recently-contacted suppression list"
+    },
+    {
+      "vid": "RBL",
+      "slug": "rbl",
+      "name": "Rebel Walls",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "PREPARED_NOT_SENT",
+      "recipient": "support@gimmersta.com",
+      "item_keys": [
+        "DWRW76354|Elizabeth Kent|07/30/2026"
+      ],
+      "evidence": "approved local contacts.json"
+    },
+    {
+      "vid": "OLP",
+      "slug": "olp",
+      "name": "(vid OLP)",
+      "declared_skus": 1,
+      "materialized_skus": 1,
+      "status": "ALREADY_IN_RESEND_QUEUE",
+      "recipient": "info@oliviaandpoppy.com",
+      "item_keys": [
+        "DWCOP-ART-DECO-WAVES|Andrea Reiser|07/31/2026"
+      ],
+      "reason": "existing gated queue entry; do not duplicate"
+    },
+    {
+      "vid": "ELI",
+      "slug": "eli",
+      "name": "Elitis",
+      "declared_skus": 1,
+      "materialized_skus": 0,
+      "status": "DATA_INCOMPLETE",
+      "reason": "declared 1 but materialized 0; cannot construct a SKU-level plan"
+    },
+    {
+      "vid": "MDC",
+      "slug": "mdc",
+      "name": "MDC Wallcoverings",
+      "declared_skus": 2,
+      "materialized_skus": 0,
+      "status": "DATA_INCOMPLETE",
+      "reason": "declared 2 but materialized 0; cannot construct a SKU-level plan"
+    },
+    {
+      "vid": "PAUL",
+      "slug": "paul",
+      "name": "Paul Montgomery",
+      "declared_skus": 1,
+      "materialized_skus": 0,
+      "status": "DATA_INCOMPLETE",
+      "reason": "declared 1 but materialized 0; cannot construct a SKU-level plan"
+    },
+    {
+      "vid": "LIN",
+      "slug": "lin",
+      "name": "Lincrusta",
+      "declared_skus": 3,
+      "materialized_skus": 0,
+      "status": "DATA_INCOMPLETE",
+      "reason": "declared 3 but materialized 0; cannot construct a SKU-level plan"
+    }
+  ]
+}
diff --git a/tk10743-deterministic-triage/triage.mjs b/tk10743-deterministic-triage/triage.mjs
new file mode 100644
index 0000000..4af2189
--- /dev/null
+++ b/tk10743-deterministic-triage/triage.mjs
@@ -0,0 +1,65 @@
+#!/usr/bin/env node
+// TK-10743 deterministic, prepare-only triage from approved local JSON.
+// No network, email, FileMaker, API, or database code exists in this file.
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const here = path.dirname(fileURLToPath(import.meta.url));
+const root = path.resolve(here, '..');
+const read = name => JSON.parse(fs.readFileSync(path.join(root, 'data', name), 'utf8'));
+const fleet = read('fleet.json');
+const contacts = read('contacts.json');
+const resend = read('resend-queue.json');
+const notes = read('notes-queue.json');
+const recentlyContacted = new Set(read('recently-contacted.json').map(email => String(email).trim().toLowerCase()));
+
+const aliases = { schumacher: 'sch', brewster: 'bre' };
+const contactKey = slug => aliases[slug] || slug;
+const queuedVids = new Set(resend.queue.map(row => String(row.vid).toUpperCase()));
+const noChaseSlugs = new Set(notes.queue.flatMap(row => row.slug === 'sandb' ? ['sandb', 'sand'] : [row.slug]));
+
+function classify(vendor) {
+  const actual = vendor.items?.length || 0;
+  const contact = contacts[contactKey(vendor.slug)] || null;
+  const base = { vid: vendor.vid, slug: vendor.slug, name: vendor.name, declared_skus: vendor.count, materialized_skus: actual };
+  if (vendor.count !== actual) return { ...base, status: 'DATA_INCOMPLETE', reason: `declared ${vendor.count} but materialized ${actual}; cannot construct a SKU-level plan` };
+  if (contact?.disposition === 'no-chase') return { ...base, status: 'NO_CHASE', reason: contact.disposition_reason };
+  if (noChaseSlugs.has(vendor.slug)) return { ...base, status: 'NO_CHASE', reason: 'approved local note says samples were ordered online; do not chase as memo samples' };
+  if (!contact || contact.unresolved_email || !(contact.sample_email || contact.main_email)) {
+    return { ...base, status: 'UNRESOLVED_LOCAL_DATA', reason: contact?.contact_source || 'no approved local contact record' };
+  }
+  const recipient = contact.sample_email || contact.main_email;
+  const itemKeys = vendor.items.map(item => [item.dw || item.mfr, item.client, item.req].join('|'));
+  if (contact.needs_confirm) return { ...base, status: 'HELD_NEEDS_CONFIRM', recipient, item_keys: itemKeys, evidence: contact.contact_source || 'local contact marked needs_confirm' };
+  if (queuedVids.has(vendor.vid) || queuedVids.has(aliases[vendor.slug]?.toUpperCase())) {
+    return { ...base, status: 'ALREADY_IN_RESEND_QUEUE', recipient, item_keys: itemKeys, reason: 'existing gated queue entry; do not duplicate' };
+  }
+  const recipients = recipient.split(',').map(email => email.trim().toLowerCase()).filter(Boolean);
+  if (recipients.some(email => recentlyContacted.has(email))) {
+    return { ...base, status: 'RECENTLY_CONTACTED_HOLD', recipient, item_keys: itemKeys, reason: 'recipient appears in approved local recently-contacted suppression list' };
+  }
+  return { ...base, status: 'PREPARED_NOT_SENT', recipient, item_keys: itemKeys, evidence: contact.contact_source || 'approved local contacts.json' };
+}
+
+const rows = fleet.vendors.filter(vendor => vendor.count > 0).map(classify);
+const byStatus = Object.fromEntries([...new Set(rows.map(row => row.status))].sort().map(status => [status, {
+  vendors: rows.filter(row => row.status === status).length,
+  declared_skus: rows.filter(row => row.status === status).reduce((sum, row) => sum + row.declared_skus, 0),
+  materialized_skus: rows.filter(row => row.status === status).reduce((sum, row) => sum + row.materialized_skus, 0)
+}]));
+const plan = {
+  ticket: 'TK-10743', generated_at: new Date().toISOString(), mode: 'LOCAL_PREPARE_ONLY',
+  source_files: ['data/fleet.json', 'data/contacts.json', 'data/resend-queue.json', 'data/notes-queue.json', 'data/recently-contacted.json'],
+  invariants: ['NO_SEND', 'NO_FILEMAKER_WRITE', 'NO_NETWORK', 'NO_PAID_API', 'NO_CANONICAL_DB_WRITE'],
+  integrity: {
+    fleet_declared_total: fleet.totalItems,
+    sum_vendor_declared_counts: fleet.vendors.reduce((sum, vendor) => sum + vendor.count, 0),
+    sum_materialized_item_rows: fleet.vendors.reduce((sum, vendor) => sum + (vendor.items?.length || 0), 0),
+    count_without_items: rows.filter(row => row.status === 'DATA_INCOMPLETE').reduce((sum, row) => sum + row.declared_skus, 0)
+  },
+  summary: byStatus,
+  rows
+};
+fs.writeFileSync(path.join(here, 'triage-plan.json'), JSON.stringify(plan, null, 2) + '\n');
+console.log(JSON.stringify({ integrity: plan.integrity, summary: plan.summary }, null, 2));
diff --git a/tk10743-deterministic-triage/verification/e2e-proof.json b/tk10743-deterministic-triage/verification/e2e-proof.json
new file mode 100644
index 0000000..0c21f3e
--- /dev/null
+++ b/tk10743-deterministic-triage/verification/e2e-proof.json
@@ -0,0 +1,35 @@
+{
+  "ticket": "TK-10743",
+  "intent": "Deterministically disposition every positive-count sample-followup vendor using approved local data without performing a follow-up",
+  "risk_tier": "R1",
+  "environment": "local sample-followup-sweep JSON snapshots only",
+  "timestamp": "2026-08-30T20:20:00Z",
+  "baseline": "Prior prepared plan claimed 19 vendors / 60 SKUs ready and did not incorporate later fleet/count or recently-contacted drift",
+  "commands": [
+    "node --check tk10743-deterministic-triage/triage.mjs",
+    "node tk10743-deterministic-triage/triage.mjs",
+    "node tk10743-deterministic-triage/test.mjs",
+    "git diff --check -- tk10743-deterministic-triage"
+  ],
+  "assertions": [
+    "Declared fleet total is 106, vendor count sum is 113, and materialized item rows are 106",
+    "ELI 1, MDC 2, PAUL 1, and LIN 3 fail closed as DATA_INCOMPLETE because all seven lack SKU rows",
+    "Current resend queue entries remain ALREADY_IN_RESEND_QUEUE and are never duplicated",
+    "Approved online-order/no-chase notes override contact availability",
+    "needs_confirm contacts remain held",
+    "TBD and LBI remain unresolved from local data",
+    "13 vendors / 39 SKUs are suppressed by recently-contacted.json, including York after it left resend-queue",
+    "Only 7 vendors / 25 materialized SKUs remain PREPARED_NOT_SENT",
+    "No output status starts with SEND"
+  ],
+  "side_effect_boundaries": {
+    "private_source_scrapes": 0,
+    "emails_sent": 0,
+    "filemaker_stamps": 0,
+    "paid_api_calls": 0,
+    "canonical_database_writes": 0,
+    "resend_queue_writes": 0
+  },
+  "cleanup": "Only project-local triage-plan.json retained",
+  "verdict": "PASS"
+}

← 2c52a29 auto-data-snapshot: 2026-08-30T08:29:04 (1 data files) — dat  ·  back to Sample Followup Sweep  ·  auto-data-snapshot: 2026-08-31T08:15:07 (1 data files) — dat 985d96c →