[object Object]

← back to Crazy News Channel Shadowman

P24 cartoon batch: build one at a time (no parallel rate-limit risk), start 5:15 ET (2:15 PT) to post by 6:30 ET, 15-min per-build timeout

bd41b0ba34faf3a7793d2a3e13f1c333b2b6b42f · 2026-09-24 15:28:31 -0700 · Steve Abrams

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

Files touched

Diff

commit bd41b0ba34faf3a7793d2a3e13f1c333b2b6b42f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 24 15:28:31 2026 -0700

    P24 cartoon batch: build one at a time (no parallel rate-limit risk), start 5:15 ET (2:15 PT) to post by 6:30 ET, 15-min per-build timeout
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---
 scripts/build-cartoon-batch.sh             | 18 ++++++++----------
 scripts/com.steve.p24-cartoons-daily.plist |  2 +-
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/scripts/build-cartoon-batch.sh b/scripts/build-cartoon-batch.sh
index 31c65ef..9f10381 100644
--- a/scripts/build-cartoon-batch.sh
+++ b/scripts/build-cartoon-batch.sh
@@ -68,14 +68,13 @@ QFILE="$DIR/cartoons/queue/$DATE.json"
 [ -f "$QFILE" ] || { echo "$TS no queue file for $DATE" >>"$LOG"; exit 1; }
 
 python3 - "$QFILE" "$DRY" "$LOG" "$TS" "$DIR" <<'PYEOF'
-# PARALLEL build (2026-09-24, Steve: start 6:00 ET, finish + post by 6:30 ET).
-# Sequential took ~48 min for 6; all briefs now build concurrently with a hard
-# 25-min timeout. Builders write ONLY their HTML + a meta sidecar; this parent
-# alone appends manifest.js / stories-data.js and commits, so parallel sessions
-# can't race on shared files or git's index.lock. Keeps the TK-12158 real-article
+# SEQUENTIAL build, one claude -p at a time (Steve 2026-09-24: "run in order" —
+# no parallel sessions hitting Anthropic rate limits). ~8 min each, ~48 min for 6,
+# so the plist starts at 5:15 ET to post by 6:30 ET; each build gets a hard
+# 15-min timeout. Builders write ONLY their HTML + a meta sidecar; this parent
+# alone appends manifest.js / stories-data.js and commits once at the end. Keeps the TK-12158 real-article
 # story_id rule and the TK-12165 non-empty tags rule, now checked on the sidecar.
 import json, sys, subprocess, os, datetime, re
-from concurrent.futures import ThreadPoolExecutor
 qfile, dry, log, ts, root = sys.argv[1:6]
 q = json.load(open(qfile))
 todo = [b for b in q['briefs'] if b.get('status') == 'queued']
@@ -107,13 +106,13 @@ def build(b):
         f"HARD RULE (TK-12165) — the story's tags must be non-empty (3-6 short lowercase-ish tags reusing "
         f"the shared vocabulary in stories-data.js, e.g. 'city council', 'bureaucracy', 'small town news'), "
         f"and the sidecar tags = that story's tags plus at most 1-2 cartoon tags (e.g. 'editorial cartoon'). "
-        f"HARD LIMIT: finish within 20 minutes. Do NOT edit cartoons/manifest.js or stories-data.js and do "
+        f"HARD LIMIT: finish within 12 minutes. Do NOT edit cartoons/manifest.js or stories-data.js and do "
         f"NOT git commit — the batch process registers and commits your work. Do not deploy, push, or "
         f"touch anything else."
     )
     try:
         r = subprocess.run(["claude", "-p", prompt, "--permission-mode", "acceptEdits", "--allowedTools", tools],
-                           cwd=root, capture_output=True, text=True, timeout=1500)
+                           cwd=root, capture_output=True, text=True, timeout=900)
         rc = r.returncode
     except subprocess.TimeoutExpired:
         rc = 124
@@ -123,8 +122,7 @@ if dry == "1":
     for b in todo: print(f"[DRY RUN] would build: {b['id']} — {b['title']}")
     sys.exit(0)
 
-with ThreadPoolExecutor(max_workers=len(todo) or 1) as ex:
-    results = list(ex.map(build, todo))
+results = [build(b) for b in todo]
 
 def load_js_array(path, var):
     head, arr = open(path).read().split(f"window.{var} = ", 1)
diff --git a/scripts/com.steve.p24-cartoons-daily.plist b/scripts/com.steve.p24-cartoons-daily.plist
index ae95e30..b2433e9 100644
--- a/scripts/com.steve.p24-cartoons-daily.plist
+++ b/scripts/com.steve.p24-cartoons-daily.plist
@@ -9,7 +9,7 @@
     <string>/Users/macstudio3/Projects/crazy-news-channel/scripts/build-cartoon-batch.sh</string>
     <string>--count=6</string>
   </array>
-  <key>StartCalendarInterval</key><dict><key>Hour</key><integer>3</integer><key>Minute</key><integer>0</integer></dict>
+  <key>StartCalendarInterval</key><dict><key>Hour</key><integer>2</integer><key>Minute</key><integer>15</integer></dict>
   <key>StandardOutPath</key><string>/Users/macstudio3/Projects/crazy-news-channel/yolo/daily-wrapper.log</string>
   <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/crazy-news-channel/yolo/daily-wrapper.log</string>
   <key>RunAtLoad</key><false/>

← 7b23cb1 P24 cartoon batch: 6:00 ET start (3:00 PT), build all briefs  ·  back to Crazy News Channel Shadowman  ·  Add googly eyes (/eyes skill) pinned bottom-right above the 2d4bee0 →