| schema_version | 4 |
| name | markdown-post-frontmatter-validation |
| description | Use when authoring or reviewing the frontmatter of a markdown post — checking required fields (title, date, slug, tags), validating against the content schema in `lib/content/schema.ts`, catching ambiguous date formats or tags not in the controlled vocabulary, and ensuring the slug matches the file path. Activate this skill whenever the task touches files under `content/posts/**/*.md`, the `parsePostFrontmatter()` helper, or any code path that reads YAML frontmatter from a content file. Do NOT use for general YAML schema design (use a generic schema-design skill) or for chasing a specific build-time validation failure (use debugging). |
| version | 0.1.0 |
| type | capability |
| category | content |
| domain | content/markdown/frontmatter |
| scope | codebase |
| owner | markdown-static-site-maintainer |
| freshness | 2026-05-06 |
| drift_check | {"last_verified":"2026-05-06"} |
| eval_artifacts | none |
| eval_state | unverified |
| routing_eval | absent |
| stability | experimental |
| license | MIT |
| compatibility | {"runtimes":["node"],"node":">=20","notes":"Astro / Next / Eleventy / Hugo all read YAML frontmatter; the validation pattern is portable across them."} |
| allowed-tools | Read Grep |
| keywords | ["markdown frontmatter","post frontmatter","frontmatter validation","content schema","parsePostFrontmatter","YAML frontmatter","title required","tag vocabulary","slug mismatch","date format","controlled vocabulary","markdown post metadata"] |
| triggers | ["markdown-post-frontmatter-validation"] |
| paths | ["content/posts/**/*.md","lib/content/schema.ts","lib/content/parse-frontmatter.ts","!**/*.test.md"] |
| examples | ["validate the frontmatter of a new post against our content schema","why does the build fail when I add a tag like `Politics` (capital P)?","review this post's frontmatter — is the date format correct?","explain how the slug is derived from the file path"] |
| anti_examples | ["design a YAML schema for a different domain","the build is failing — what's the actual error?","rewrite parsePostFrontmatter for performance"] |
| relations | {"boundary":[{"skill":"documentation","reason":"documentation writes prose explaining the frontmatter format; this skill enforces the validation contract in code"},{"skill":"debugging","reason":"debugging chases a specific build-time validation failure from logs; this skill is the authoring discipline applied before failure"},{"skill":"refactor","reason":"refactor changes code shape; this skill enforces a specific validation contract that must survive any refactor"}],"verify_with":["testing-strategy"]} |
| grounding | {"domain_object":"Markdown post frontmatter — the YAML block at the top of every content file that drives the site's index, routing, and rendering","grounding_mode":"repo_specific","truth_sources":["content/posts/_template.md","lib/content/schema.ts","lib/content/parse-frontmatter.ts"],"failure_modes":["missing_required_title_field","ambiguous_date_format_no_timezone","tag_not_in_controlled_vocabulary","slug_mismatch_with_file_path","frontmatter_block_not_terminated"],"evidence_priority":"repo_code_first"} |
| portability | {"readiness":"scripted","targets":["skill-md"]} |
| workspace_tags | ["content","static-site","markdown"] |
| lifecycle | {"stale_after_days":90,"review_cadence":"quarterly"} |