[object Object]

← back to George Gmail

Add launchd KeepAlive supervisor for george-gmail :9850 (durable fix for the unsupervised-death outage)

918647cd0afe1ebf6b2d918c82e0e863df802bfc · 2026-06-17 11:56:15 -0700 · Steve Abrams

Tracked plist + install note. Not bootstrapped here — Steve runs the bootstrap
(starts the email service + touches launchd). RunAtLoad+KeepAlive so the :9850
send service self-respawns; daily-overnight-skus + idea-loop-digest were only
failing because this send path died.

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

Files touched

Diff

commit 918647cd0afe1ebf6b2d918c82e0e863df802bfc
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jun 17 11:56:15 2026 -0700

    Add launchd KeepAlive supervisor for george-gmail :9850 (durable fix for the unsupervised-death outage)
    
    Tracked plist + install note. Not bootstrapped here — Steve runs the bootstrap
    (starts the email service + touches launchd). RunAtLoad+KeepAlive so the :9850
    send service self-respawns; daily-overnight-skus + idea-loop-digest were only
    failing because this send path died.
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 KEEPALIVE-INSTALL.md         | 25 +++++++++++++++++++++++++
 com.steve.george-gmail.plist | 44 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)

diff --git a/KEEPALIVE-INSTALL.md b/KEEPALIVE-INSTALL.md
new file mode 100644
index 0000000..f0c9fbb
--- /dev/null
+++ b/KEEPALIVE-INSTALL.md
@@ -0,0 +1,25 @@
+# george-gmail :9850 — launchd KeepAlive supervisor
+
+The send service (`server.js`, :9850) is a fleet send-path dependency
+(daily-overnight-skus, idea-loop-digest, contact-mailer, launchd reminders).
+It died unsupervised on 2026-06-17, taking the morning send jobs down. This
+plist keeps it up (RunAtLoad + KeepAlive) so that can't recur.
+
+Tracked copy: `com.steve.george-gmail.plist` (live copy lives in
+`~/Library/LaunchAgents/`).
+
+## Install (Steve runs — starts the email service + touches launchd)
+```sh
+cp com.steve.george-gmail.plist ~/Library/LaunchAgents/
+launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.george-gmail.plist
+launchctl kickstart gui/$(id -u)/com.steve.george-gmail
+curl -s -m3 -o /dev/null -w 'george-gmail :9850 -> HTTP %{http_code}\n' http://localhost:9850/
+```
+Once up, `daily-overnight-skus` + `idea-loop-digest` go green on their next fire.
+
+## Stop / reload
+```sh
+launchctl kickstart -k gui/$(id -u)/com.steve.george-gmail   # restart
+launchctl bootout gui/$(id -u)/com.steve.george-gmail        # stop+unload
+```
+Logs: `~/Library/Logs/george-gmail.{out,err}.log`.
diff --git a/com.steve.george-gmail.plist b/com.steve.george-gmail.plist
new file mode 100644
index 0000000..21f79a1
--- /dev/null
+++ b/com.steve.george-gmail.plist
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>Label</key>
+  <string>com.steve.george-gmail</string>
+
+  <!-- George email-send service (:9850) — fleet send path for daily-overnight-skus,
+       idea-loop-digest, contact-mailer, launchd reminders, etc. Self-finds creds at
+       ~/Projects/Designer-Wallcoverings/DW-MCP/.env via $HOME. -->
+  <key>ProgramArguments</key>
+  <array>
+    <string>/usr/local/bin/node</string>
+    <string>/Users/stevestudio2/Projects/george-gmail/server.js</string>
+  </array>
+
+  <key>WorkingDirectory</key>
+  <string>/Users/stevestudio2/Projects/george-gmail</string>
+
+  <key>EnvironmentVariables</key>
+  <dict>
+    <key>PORT</key>
+    <string>9850</string>
+    <key>HOME</key>
+    <string>/Users/stevestudio2</string>
+    <key>PATH</key>
+    <string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
+  </dict>
+
+  <!-- Keep it up: start at load/login and respawn if it dies (the whole point —
+       it died unsupervised on 2026-06-17, taking the morning send jobs down). -->
+  <key>RunAtLoad</key>
+  <true/>
+  <key>KeepAlive</key>
+  <true/>
+  <key>ThrottleInterval</key>
+  <integer>10</integer>
+
+  <key>StandardOutPath</key>
+  <string>/Users/stevestudio2/Library/Logs/george-gmail.out.log</string>
+  <key>StandardErrorPath</key>
+  <string>/Users/stevestudio2/Library/Logs/george-gmail.err.log</string>
+</dict>
+</plist>

← 8c22e56 secret-strip george-gmail: env-first the hardcoded George ba  ·  back to George Gmail  ·  George external-send guard: block outbound sends to non-Stev a42bc74 →