Make scheduled blog posts reliably go live before social snippets publish, and prevent dead-link social posts when the site is not yet updated.
The current system treats _posts/ and _snippets/ as parallel tracks:
main changes.publish_social.yml posts snippets every day at 22:00 UTC.That leaves a gap for future-dated posts. A post can exist on main and still be excluded from the built site until its publish timestamp passes. Because there is no scheduled rebuild at publish time, the site can stay stale while social still posts the snippet.
Add a workflow that runs daily after the expected publish window for scheduled posts.
12:10 UTC12:00 UTC, which is 05:00 PT during daylight saving timemainThis keeps the site deployment model simple and works with the current GitHub Pages style push-based setup.
Extend scripts/publish_social.py so it can verify the post URL before posting.
Checks:
canonical_url200<title> contains the expected post title, orog:title matches the snippet/post titleIf the page is not live, the script must exit non-zero and publish nothing.
The social workflow should tolerate a late deploy without posting too early.
Defaults:
300 seconds1260 minutesThe workflow should wait and recheck until the URL is live or the retry budget is exhausted.
Extend scripts/validate_posts.py so it validates scheduled-post timing against the operational window.
Rules:
2026-03-23, require the front matter timestamp to equal 12:00:00 +0000This turns the “05:00 PT” publishing expectation into an enforced repository rule instead of tribal knowledge.
Update all future posts from 2026-03-23 onward so their front matter date uses 12:00:00 +0000.
This aligns:
.github/workflows/rebuild_scheduled_posts.ymldocs/superpowers/specs/2026-03-22-scheduled-post-deploy-and-social-gating-design.mddocs/superpowers/plans/2026-03-22-scheduled-post-deploy-and-social-gating-implementation-plan.md.github/workflows/publish_social.ymlscripts/publish_social.pyscripts/validate_posts.py_posts/2026-03-23-*.md and later scheduled post files that need timestamp normalizationworkflow_dispatch. URL verification should still run unless a future explicit bypass flag is added. This change does not add such a bypass.If GitHub Actions cannot push a rebuild marker commit to main, the workflow will fail. In that case, the fallback remains the social preflight gate, which stops dead-link posting.
Retries reduce false negatives, but the workflow should still fail loudly when the page never becomes live.
This design targets the current 05:00 PT == 12:00 UTC policy and encodes that explicitly. If the policy changes, the workflow cron and validator constant must change together.
2026-03-23 12:00:00 +0000 is included in a rebuild that runs at 12:10 UTC.200 or the title check fails.12:00:00 +0000.