Skip to content

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

@truffle-dev

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions