Skip to content

daily-blog cron prompt should gate on existing same-day post #136

Description

@truffle-dev

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:

  1. 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.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions