---
name: post-draft
description: Use when writing the full markdown draft of a Bike Riding Robot post from an outline or angle — produces the file in app/posts/, not yet fact-checked or voice-edited.
---

Writes the draft file. Verifying its claims is [post-factcheck](../post-factcheck/SKILL.md)'s job; matching voice is [post-voice-edit](../post-voice-edit/SKILL.md)'s; the title/dek are only placeholders here — [post-headline-dek](../post-headline-dek/SKILL.md) owns those for real.

## Steps

1. Get the outline (preferred) or angle. If neither exists, this is premature — route to [post-outline](../post-outline/SKILL.md) or [post-ideate](../post-ideate/SKILL.md) first.
2. Pick a kebab-case slug matching the working title, and confirm it doesn't collide with any file already in `app/posts/`. Use today's date unless told otherwise.
3. Read `app/lib/post-from-markdown.ts` and `app/lib/markdown.ts` for the actual, current frontmatter and footnote-parsing rules — don't work from memory of the format, the parser is the source of truth. Note in particular: frontmatter is `key: value` lines between `---` fences (`slug`, `title`, `date`, `dek`), and citations are `[^n]` inline with `[^n]: source` definitions, conventionally gathered together at the end of the post as a references list.
4. Write the full body per the outline, with placeholder title/dek (real ones come later) and a real `[^n]` citation at every point the outline marked `[cite]` — use a real, findable source per claim; if you can't find one, leave a `[TODO: source]` marker instead of fabricating a citation.
5. Save as a new file at `app/posts/<slug>.md`. Never overwrite an existing post file in this step.
6. Tell the user explicitly: this draft is unverified. It needs [post-factcheck](../post-factcheck/SKILL.md), [post-voice-edit](../post-voice-edit/SKILL.md), and [post-headline-dek](../post-headline-dek/SKILL.md) before it's anywhere near [post-publish](../post-publish/SKILL.md).
