Drafts (draft: true) are now first-class documents: NewPost returns them (Draft set) instead of nil, LoadAll separates them into their own slice, and Site carries them as Drafts. Build, feeds, sitemap, tags and lists still see only published documents, so the built site is exactly as before; validate keeps skipping drafts.
The dev server resolves a slug against posts, pages, then drafts (published always wins a slug collision) and renders a hit in Drafts through Site.DraftPage — the normal page plus a dashed
banner making clear the document is not published. The mtime-keyed cache works for drafts unchanged, so the edit-and-refresh loop applies to them too.First tests for internal/serve (the doc/reality gap from the proposals list): published page, draft preview with banner, unknown slug 404. Docs updated; showcase rebuilt (banner CSS only).
README command reference (serve + createsite) is committed here.