[object Object]

← back to Allnewsdaily

allnewsdaily Short: publish 3x/day (6/12/18) + min-gap guard + guard follows each publish

1a87806a02162382558d4ef88ffdd0475d27fe98 · 2026-09-09 23:04:35 -0700 · Steve Abrams

Daily-short launchd → 3 fire times (6am/12pm/6pm); replaced once-per-day lock with a 120min
min-gap guard so the 3 runs proceed while an accidental double-fire is blocked. History-based
dedupe already gives each run distinct headlines. Delete-canary → 09:30/13:30/19:30/21:30 to
follow each publish.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 1a87806a02162382558d4ef88ffdd0475d27fe98
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 9 23:04:35 2026 -0700

    allnewsdaily Short: publish 3x/day (6/12/18) + min-gap guard + guard follows each publish
    
    Daily-short launchd → 3 fire times (6am/12pm/6pm); replaced once-per-day lock with a 120min
    min-gap guard so the 3 runs proceed while an accidental double-fire is blocked. History-based
    dedupe already gives each run distinct headlines. Delete-canary → 09:30/13:30/19:30/21:30 to
    follow each publish.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 com.steve.allnewsdaily-daily-short.plist | 11 ++++++-----
 com.steve.allnewsdaily-short-guard.plist |  9 +++++----
 scripts/short/make-daily-short.mjs       |  9 +++++++--
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/com.steve.allnewsdaily-daily-short.plist b/com.steve.allnewsdaily-daily-short.plist
index 0bd363c..4fbeed5 100644
--- a/com.steve.allnewsdaily-daily-short.plist
+++ b/com.steve.allnewsdaily-daily-short.plist
@@ -29,12 +29,13 @@
   <key>WorkingDirectory</key>
   <string>/Users/macstudio3/Projects/allnewsdaily</string>
 
-  <!-- 6:00 AM local, daily. -->
+  <!-- 3x daily: 6:00 AM, 12:00 PM, 6:00 PM local. Each run picks different (non-repeat) headlines. -->
   <key>StartCalendarInterval</key>
-  <dict>
-    <key>Hour</key><integer>6</integer>
-    <key>Minute</key><integer>0</integer>
-  </dict>
+  <array>
+    <dict><key>Hour</key><integer>6</integer><key>Minute</key><integer>0</integer></dict>
+    <dict><key>Hour</key><integer>12</integer><key>Minute</key><integer>0</integer></dict>
+    <dict><key>Hour</key><integer>18</integer><key>Minute</key><integer>0</integer></dict>
+  </array>
 
   <key>RunAtLoad</key>
   <false/>
diff --git a/com.steve.allnewsdaily-short-guard.plist b/com.steve.allnewsdaily-short-guard.plist
index 6d07691..a36571e 100644
--- a/com.steve.allnewsdaily-short-guard.plist
+++ b/com.steve.allnewsdaily-short-guard.plist
@@ -27,12 +27,13 @@
   <key>WorkingDirectory</key>
   <string>/Users/macstudio3/Projects/allnewsdaily</string>
 
-  <!-- 10:00, 14:00, 18:00 local — several passes through the 24-48h algorithm/retraction window. -->
+  <!-- Follows each 6/12/18 publish (checks ~1-3h after): 09:30, 13:30, 19:30, 21:30 local. -->
   <key>StartCalendarInterval</key>
   <array>
-    <dict><key>Hour</key><integer>10</integer><key>Minute</key><integer>0</integer></dict>
-    <dict><key>Hour</key><integer>14</integer><key>Minute</key><integer>0</integer></dict>
-    <dict><key>Hour</key><integer>18</integer><key>Minute</key><integer>0</integer></dict>
+    <dict><key>Hour</key><integer>9</integer><key>Minute</key><integer>30</integer></dict>
+    <dict><key>Hour</key><integer>13</integer><key>Minute</key><integer>30</integer></dict>
+    <dict><key>Hour</key><integer>19</integer><key>Minute</key><integer>30</integer></dict>
+    <dict><key>Hour</key><integer>21</integer><key>Minute</key><integer>30</integer></dict>
   </array>
 
   <key>RunAtLoad</key>
diff --git a/scripts/short/make-daily-short.mjs b/scripts/short/make-daily-short.mjs
index 79a9d86..f93d151 100644
--- a/scripts/short/make-daily-short.mjs
+++ b/scripts/short/make-daily-short.mjs
@@ -100,11 +100,16 @@ const releaseLock = () => { try { fs.rmSync(LOCK); } catch {} };
 (async () => {
   if (!acquireLock()) { console.error('[daily-short] another run holds the lock (< 30min old) — aborting.'); process.exit(0); }
   try {
-    // #7 — already published today?
+    // #7 — min-gap guard: allow the scheduled 3x/day (runs ~6h apart) but block an accidental
+    // rapid double-fire. (Different headlines each run are handled by the history.json dedupe.)
     if (!FORCE && !NO_UPLOAD && !DRY) {
       try {
         const prev = JSON.parse(fs.readFileSync(path.join(DATA, 'latest-run.json'), 'utf8'));
-        if (prev.airedDate === todayStamp() && prev.videoId) { releaseLock(); return void writeStatus('PASS', `already published today (${prev.url}) — skipping (use --force to re-run)`, prev); }
+        const MIN_GAP_MIN = Number(process.env.AND_MIN_GAP_MIN || 120);
+        if (prev.videoId && prev.ts) {
+          const gap = (Date.now() - Date.parse(prev.ts)) / 60000;
+          if (gap < MIN_GAP_MIN) { releaseLock(); return void writeStatus('PASS', `last upload ${gap.toFixed(0)}min ago (< ${MIN_GAP_MIN}min min-gap) — skipping to avoid double-post (use --force)`, prev); }
+        }
       } catch {}
     }
 

← e68bd39 allnewsdaily Short: Steve's cloned voice + natural model + s  ·  back to Allnewsdaily  ·  allnewsdaily: cut outlet directory to top-20 most-popular gl c16abe8 →