← back to Sample Followup Sweep
TK-11409: stop shipping the internal 'From job:' banner to vendors
de5df55810d4855bc0c259b1527aba378ad18dec · 2026-09-10 11:56:00 -0700 · Steve Abrams
George's withSourceFooter() prepends a visible 'From job: node - <timestamp>' block
INSIDE the message body unless the caller passes no_source_tag. Nothing in this pipeline
passed it, so that internal provenance tag reached vendors on every chase -- confirmed
present in the current drafts AND in chases already SENT on 09/01 and 09/04.
Fixed centrally in the transport rather than at each of the four call sites
(scheduled-run draft + send, send-drafts, send-reconciled, server.js one-click send).
Every path through this transport is a vendor-facing letter -- /api/send and /api/drafts
are its only sendable paths -- and a per-caller flag is a step someone must remember,
which is the failure mode this entire ticket documents. An explicit no_source_tag:false
is still respected.
Verified: unit test confirms the flag on both paths and that explicit-false wins; a live
draft came back source='' with a snippet starting at the real first line instead of
'From job: unspecified'.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Files touched
M lib/george-transport.js
Diff
commit de5df55810d4855bc0c259b1527aba378ad18dec
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Sep 10 11:56:00 2026 -0700
TK-11409: stop shipping the internal 'From job:' banner to vendors
George's withSourceFooter() prepends a visible 'From job: node - <timestamp>' block
INSIDE the message body unless the caller passes no_source_tag. Nothing in this pipeline
passed it, so that internal provenance tag reached vendors on every chase -- confirmed
present in the current drafts AND in chases already SENT on 09/01 and 09/04.
Fixed centrally in the transport rather than at each of the four call sites
(scheduled-run draft + send, send-drafts, send-reconciled, server.js one-click send).
Every path through this transport is a vendor-facing letter -- /api/send and /api/drafts
are its only sendable paths -- and a per-caller flag is a step someone must remember,
which is the failure mode this entire ticket documents. An explicit no_source_tag:false
is still respected.
Verified: unit test confirms the flag on both paths and that explicit-false wins; a live
draft came back source='' with a snippet starting at the real first line instead of
'From job: unspecified'.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---
lib/george-transport.js | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/lib/george-transport.js b/lib/george-transport.js
index c32aabd..c274412 100644
--- a/lib/george-transport.js
+++ b/lib/george-transport.js
@@ -18,9 +18,25 @@ function createGmailDraftArtifact(payload) {
return assertSendablePayload(payload);
}
+// TK-11409: strip George's internal provenance banner from every vendor-facing message.
+// George's withSourceFooter() prepends a visible "From job: node · <timestamp>" block INSIDE the
+// message body unless the caller passes no_source_tag. Nothing in this pipeline was passing it, so
+// that banner shipped to vendors on every chase — verified present in the drafts AND in chases
+// already SENT on 09/01 and 09/04. Every path through this transport is a vendor-facing letter
+// (/api/send and /api/drafts are the only sendable paths), so the flag belongs HERE rather than at
+// each of the four call sites: a per-caller flag is a step someone must remember, and this ticket
+// is a catalogue of what happens when a safety step depends on being remembered.
+function stripSourceBanner(payload) {
+ if (payload && typeof payload === 'object' && payload.no_source_tag === undefined) {
+ payload.no_source_tag = true;
+ }
+ return payload;
+}
+
async function georgeRequest({ path, payload, headers = {}, requestImpl = http.request }) {
if (!SENDABLE_PATHS.has(path)) throw new Error(`Unsupported sendable George path: ${path}`);
assertSendablePayload(payload); // Must run before serialization, credential reads, or network setup.
+ stripSourceBanner(payload);
const body = JSON.stringify(payload);
return new Promise((resolve) => {
const req = requestImpl({
@@ -37,4 +53,4 @@ async function georgeRequest({ path, payload, headers = {}, requestImpl = http.r
});
}
-module.exports = { assertSendablePayload, createGmailDraftArtifact, georgeRequest, SENDABLE_PATHS };
+module.exports = { assertSendablePayload, createGmailDraftArtifact, georgeRequest, stripSourceBanner, SENDABLE_PATHS };
← 42b4eba TK-11409: rescue the text of two Aug-15 drafts ~4 days from
·
back to Sample Followup Sweep
·
auto-data-snapshot: 2026-09-10T12:25:41 (1 data files) — dat 17b5c5c →