[object Object]

← back to Sample Followup Sweep

TK-11409: anti-dup keys on the CHASE subject, not the new-order subject (DTD 6/7 verdict B)

b4d9ec1b7c116a07ec728909c7bf8116bd6b27dc · 2026-09-10 11:51:16 -0700 · Steve Abrams

The filter matched subject:'New Sample Request' -- a brand-new ORDER, a different
message type that happens to go to the same vendor desk. So a chase was suppressed
because we had placed an order. Our busiest accounts (Kravet, Thibaut, Osborne, York)
get orders almost daily and were therefore effectively un-chaseable; 33 overdue memos
went unchased for weeks.

Now matches the chase letter's own subject. The -subject:'Re:' exclusion is load-bearing,
not cosmetic: verified against 90 days of info@ Sent, a bare subject:'Sample Follow-Up'
also matches humans replying inside a chase thread AND the 'HAPPY LABOR DAY FROM DW! Re:'
auto-responder -- so without it this fix would have traded one over-suppression bug for
a new one. That correction came from the reviewer's dissent, after the panel had voted.

Verified live: 10 matches, 0 Re:/autoresponder false positives, suppressed recipients
40 -> 10.

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

Files touched

Diff

commit b4d9ec1b7c116a07ec728909c7bf8116bd6b27dc
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 10 11:51:16 2026 -0700

    TK-11409: anti-dup keys on the CHASE subject, not the new-order subject (DTD 6/7 verdict B)
    
    The filter matched subject:'New Sample Request' -- a brand-new ORDER, a different
    message type that happens to go to the same vendor desk. So a chase was suppressed
    because we had placed an order. Our busiest accounts (Kravet, Thibaut, Osborne, York)
    get orders almost daily and were therefore effectively un-chaseable; 33 overdue memos
    went unchased for weeks.
    
    Now matches the chase letter's own subject. The -subject:'Re:' exclusion is load-bearing,
    not cosmetic: verified against 90 days of info@ Sent, a bare subject:'Sample Follow-Up'
    also matches humans replying inside a chase thread AND the 'HAPPY LABOR DAY FROM DW! Re:'
    auto-responder -- so without it this fix would have traded one over-suppression bug for
    a new one. That correction came from the reviewer's dissent, after the panel had voted.
    
    Verified live: 10 matches, 0 Re:/autoresponder false positives, suppressed recipients
    40 -> 10.
    
    Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---
 scripts/scheduled-run.mjs | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/scripts/scheduled-run.mjs b/scripts/scheduled-run.mjs
index 01a47c8..5e7a8b9 100644
--- a/scripts/scheduled-run.mjs
+++ b/scripts/scheduled-run.mjs
@@ -210,7 +210,16 @@ function georgeDraft(payload) {
 // (harvested straight from info@ Sent via George). Self-updating — no manual list to maintain.
 function georgeRecentRecipients(days = 14) {
   const { auth } = georgeCreds();
-  const q = encodeURIComponent(`in:sent subject:"New Sample Request" newer_than:${days}d`);
+  // DTD 6/7 verdict B (2026-09-10, TK-11409). The old query matched subject:"New Sample Request"
+  // — a brand-new ORDER, a DIFFERENT message type that happens to go to the same vendor desk. So a
+  // chase was suppressed because we'd placed an order. Our busiest accounts (Kravet, Thibaut,
+  // Osborne, York) get orders almost daily, so they were effectively un-chaseable: 33 overdue memos
+  // went unchased for weeks. Now it matches the CHASE letter's own subject.
+  // The `-subject:"Re:"` exclusion is NOT cosmetic — verified against 90 days of info@ Sent, a bare
+  // subject:"Sample Follow-Up" also matches (a) humans replying inside a chase thread and (b) the
+  // "HAPPY LABOR DAY FROM DW! Re: Sample Follow-Up …" auto-responder. Without it this fix would
+  // trade one over-suppression bug for a new one.
+  const q = encodeURIComponent(`in:sent subject:"Sample Follow-Up — Outstanding Memos" -subject:"Re:" newer_than:${days}d`);
   return new Promise((resolve) => {
     const req = http.request({ host: '127.0.0.1', port: 9850, path: `/api/messages?account=info&maxResults=100&q=${q}`, method: 'GET',
       headers: { Authorization: auth } },

← b128bf8 auto-data-snapshot: 2026-09-10T11:43:04 (2 data files) — dat  ·  back to Sample Followup Sweep  ·  TK-11409: rescue the text of two Aug-15 drafts ~4 days from 42b4eba →