POSTS.md
WebholeInk Posts Contract (v1 — Locked)
Purpose Posts are time-based, publishable content entries in WebholeInk. They are designed for: - Long-form writing - Chronological publishing - Stable URLs - File-first ownership Posts are not pages and are treated as a distinct content type.
Directory Structure All posts MUST live in: /content/posts/
Example: content/posts/ ├── 2026-01-01-hello-world.md ├── 2026-01-03-core-stable.md └── *.md No subdirectories are allowed in v1.
Filename Rules Each post filename MUST follow this format:
YYYY-MM-DD-slug.md
Rules - Date MUST be ISO-8601 (YYYY-MM-DD) - Slug MUST be lowercase - Words separated by hyphens - File extension MUST be .md
Example 2026-01-03-core-stable.md
Resulting URL: /posts/core-stable The date prefix is never exposed in the URL.
Required Front Matter Every post MUST contain valid front matter.
---
title: Core Stable Release date: 2026-01-03
published: true
description: WebholeInk v0.1.0 is now stable
---
Required Fields
Field Type Description title string Display title and<title> date YYYY-MM-DD Used for sorting and validation published boolean Controls visibility
Optional Fields (v1)
Field Purpose
description Meta description
Visibility Rules
• published: false • Post is NOT routable • Post is NOT listed • File may still exist for drafts No preview URLs exist in v1.
Routing Rules
Single Post /posts/{slug} Conditions: • File MUST exist • published MUST be true Otherwise: • Return 404 Not Found
Posts Index
/posts Behavior: • Lists published posts only • Sorted by date (newest → oldest) • Displays: • Title • Date • Description (if present) • URL No pagination in v1.
Rendering Pipeline
Posts follow the same rendering pipeline as Pages with additional validation. • Resolve file from slug • Parse front matter • Validate required fields • Parse Markdown → HTML • Render post template • Wrap in Layout No step may be skipped.
Sorting Rules
• Posts MUST be sorted by front matter date • Filename date is ignored after slug resolution • Invalid dates MUST result in a hard failure (500)
What Posts Do NOT Include (v1)
• Tags • Categories • Pagination • RSS feeds • Comments • Database storage • Admin UI Any of the above require: • New contract • Version bump • Explicit approval
Stability Guarantee
This contract is LOCKED for v1. Changes require: • Documentation update • Version bump • Explicit decision record No silent changes are permitted.