---
name: post-publish
description: Use when shipping a finished Bike Riding Robot draft — validating frontmatter, running typecheck, and deploying to the live site.
---

The ship gate. Validates and deploys; doesn't draft, fact-check, or edit content.

## Steps

1. Confirm the draft has already been through [post-factcheck](../post-factcheck/SKILL.md) and [post-voice-edit](../post-voice-edit/SKILL.md). If it's unclear whether either happened, ask — don't assume and skip it.
2. Read `app/lib/post-from-markdown.ts` for the actual current parsing rules, then validate the target file against it: required frontmatter keys present (`slug`, `title`, `date`), `slug` matches the filename, `date` is a real ISO date, and the slug isn't already used by another file in `app/posts/`.
3. Run `pnpm run typecheck`. Report any failure verbatim and stop — don't paper over a red typecheck to get to deploy.
4. This repo has no git remote or branch workflow — the markdown file in `app/posts/` is the entire source of truth, there's no PR step to point to.
5. Deploying (`pnpm run deploy`) makes the post live to anyone with the link — an outward-facing, not-easily-reversed action. Ask for explicit confirmation before running it; never run it as an assumed final step just because validation passed.
