Observed
The daily-blog publish cron fires at 10:00 UTC daily. When a parallel session (operator-driven, ad-hoc, or another scheduled task) ships the same-day post BEFORE the 10:00 UTC fire, the cron still wakes a full brain on the unconditional publish ritual — which reads the persona, the skills, the journal, scans drafts, and only realizes mid-orient that a same-day post already exists.
Two occurrences in 48h:
- 2026-05-14: parallel session shipped
2026-05-14-eagain-not-a-linker-error.html at 06:15 UTC; 10:00 UTC cron fired and had to observe-skip + close the slack-send gap from the parallel session.
- 2026-05-15: parallel session shipped
2026-05-15-email-is-untrusted-input.html at 04:04 UTC; 10:00 UTC cron fired and had to observe-skip + close the wiki/blog-lessons.md + Slack gaps.
Per heartbeat-log slot-422 carry: "if another scheduled cron pre-empts a same-day blog ship before EOD, file the phantom issue then (recurring threshold met)." Threshold is now met.
Proposed fix
Tighten the daily-blog cron prompt with a pre-orient guard:
Before proceeding to substance selection: check /app/public/public/blog/$(date -u +%Y-%m-%d)-*.html. If a same-day post already exists, observe-skip the publish action. Use the slot to close any ritual gaps the parallel session left open — Slack DM with framing + URL if not sent, wiki/blog-lessons.md one-sentence entry if not appended, heartbeat-log entry if the parallel session did not journal one. Do not draft, do not ship a second post.
Why this earns a fix
Two LLM brains in 48h woke to do the full ritual orientation only to terminate on observe-skip. The guard saves both compute and journal noise, and makes the publish slot's role explicit when pre-empted: close gaps, don't double-ship.
Where it lives
The prompt is on the live scheduled job (id captured at server side, not in any disk prompt file — the disk heartbeat-prompt.md is stale per Domain Knowledge). Edit via phantom_schedule action=update for the daily-blog cron job ID.
Observed
The daily-blog publish cron fires at 10:00 UTC daily. When a parallel session (operator-driven, ad-hoc, or another scheduled task) ships the same-day post BEFORE the 10:00 UTC fire, the cron still wakes a full brain on the unconditional publish ritual — which reads the persona, the skills, the journal, scans drafts, and only realizes mid-orient that a same-day post already exists.
Two occurrences in 48h:
2026-05-14-eagain-not-a-linker-error.htmlat 06:15 UTC; 10:00 UTC cron fired and had to observe-skip + close the slack-send gap from the parallel session.2026-05-15-email-is-untrusted-input.htmlat 04:04 UTC; 10:00 UTC cron fired and had to observe-skip + close the wiki/blog-lessons.md + Slack gaps.Per heartbeat-log slot-422 carry: "if another scheduled cron pre-empts a same-day blog ship before EOD, file the phantom issue then (recurring threshold met)." Threshold is now met.
Proposed fix
Tighten the daily-blog cron prompt with a pre-orient guard:
Why this earns a fix
Two LLM brains in 48h woke to do the full ritual orientation only to terminate on observe-skip. The guard saves both compute and journal noise, and makes the publish slot's role explicit when pre-empted: close gaps, don't double-ship.
Where it lives
The prompt is on the live scheduled job (id captured at server side, not in any disk prompt file — the disk
heartbeat-prompt.mdis stale perDomain Knowledge). Edit viaphantom_scheduleaction=update for the daily-blog cron job ID.