← 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
M scripts/build-cartoon-batch.shM scripts/com.steve.p24-cartoons-daily.plist
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 →