Skip to content
Back to skills

Frontmatter Validation

ASecurity

Validate and fix YAML frontmatter in markdown documentation

  • 13 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added February 7, 2026
documentationgobashapisecuritydocumentation

Works with

  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add Everyone-Needs-A-Copilot/claude-copilot --skill frontmatter-validation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Frontmatter Validation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Frontmatter Validation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/everyone-needs-a-copilot-frontmatter-validation/badge)](https://www.skillsdirectory.com/skills/everyone-needs-a-copilot-frontmatter-validation)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
skill_name: frontmatter-validation
skill_category: documentation
description: Validate and fix YAML frontmatter in markdown documentation
allowed_tools: [Read, Edit, Glob, Grep]
token_estimate: 950
version: 1.0
last_updated: 2025-12-21
owner: Claude Copilot
status: active
tags: [frontmatter, yaml, documentation, validation, metadata, shared-docs]
related_skills: [token-budget-check, link-validation]
trigger_files: ["*.md", "**\/SKILL.md"]
trigger_keywords: [frontmatter, yaml, metadata, validation, headers]
---

# Frontmatter Validation

Validate and fix YAML frontmatter metadata in markdown documentation files.

## Purpose

Frontmatter enables efficient AI navigation of documentation. This skill ensures all files have correct, complete metadata for their document type.

## Frontmatter Schemas by Document Type

### Tier 1: Skills (SKILL.md)

```yaml
---
skill_name: forces-analysis          # required, kebab-case
skill_category: analysis             # required: analysis, engineering, facilitation, strategy
description: One-line description    # required, max 100 chars
allowed_tools: [Read, Write, Edit]   # required, array
token_estimate: 1850                 # required, integer
version: 1.2                         # required, semver
last_updated: 2025-01-15             # required, ISO date
owner: Service Design Team           # required
status: active                       # required: active, deprecated, draft
tags: [forces, organization]         # required, array
related_skills: [moments-mapping]    # optional, array
methodology: path/to/methodology.md  # optional, relative path
---
```

### Tier 2: Product Documentation

```yaml
---
product: Insights Copilot            # required
status: active                       # required: active, beta, deprecated
last_updated: 2025-01-15             # required, ISO date
owner: Platform Team                 # required
token_estimate: 650                  # required, integer
doc_type: architecture               # required: overview, architecture, api, integration, security
source_of_truth: ../repo/docs/...    # optional, path to canonical doc
dependencies: [product-a, product-b] # optional, array
summary: Brief description           # optional, 1-2 sentences
key_entities: [Force, Pattern]       # optional, domain entities
integration_endpoints: [POST /api/x] # optional, for API docs
---
```

### Tier 3: Operational Documentation

```yaml
---
title: Documentation Strategy Guide  # required
doc_type: guide                       # required: guide, standard, reference, runbook
category: operations                  # required: operations, security, development
last_updated: 2025-01-15              # required, ISO date
version: 2.1                          # optional
status: active                        # required: active, deprecated, draft
primary_audience: [developers]        # optional, array
required_reading: false               # optional, boolean
token_estimate: 2500                  # required, integer
replaces: _archive/old-doc.md         # optional, path to replaced doc
related: [other-doc.md]               # optional, array
---
```

## Procedure

### 1. Identify Target Files

```bash
find . -name "*.md" -type f -not -path "./_archive/*"
```

### 2. Detect Document Type

Infer from path and filename:

| Pattern | Document Type |
|---------|---------------|
| `*/SKILL.md` | Tier 1: Skill |
| `02-products/*` | Tier 2: Product |
| `03-ai-enabling/03-operations/*` | Tier 3: Operational |
| `*/00-overview.md` | Product overview |
| `*-profile.md` or `02-profiles/*` | Agent profile |

### 3. Extract Existing Frontmatter

Frontmatter is YAML between `---` markers at file start:

```bash
sed -n '/^---$/,/^---$/p' file.md | head -n -1 | tail -n +2
```

### 4. Validate Against Schema

Check for:

| Check | Severity | Description |
|-------|----------|-------------|
| Required fields missing | ERROR | Must be present |
| Wrong type | ERROR | e.g., string instead of array |
| Invalid value | ERROR | e.g., status: "live" not in enum |
| Missing token_estimate | WARNING | Should be calculated and added |
| Stale last_updated | WARNING | Older than file modification |
| Broken path reference | WARNING | source_of_truth doesn't exist |

### 5. Auto-Fix Where Possible

| Missing Field | Auto-Fix Strategy |
|---------------|-------------------|
| `token_estimate` | Calculate from word count × 1.4 |
| `last_updated` | Use current date |
| `status` | Default to "active" |
| `skill_name` | Derive from directory name |
| `doc_type` | Infer from path/filename |

### 6. Generate Missing Frontmatter

For files without frontmatter, generate based on type:

```yaml
---
title: [Derived from H1 or filename]
doc_type: [Inferred from path]
last_updated: 2025-12-21
status: active
token_estimate: [Calculated]
---
```

## Output Format

```markdown
## Frontmatter Validation Report

### Summary
- Files scanned: N
- Valid: N
- Errors: N
- Warnings: N
- Fixed: N

### Errors (Must Fix)

| File | Issue | Field | Details |
|------|-------|-------|---------|
| skills/x/SKILL.md | Missing required | skill_name | Add skill name |
| products/y.md | Invalid value | status | "live" not valid, use "active" |

### Warnings

| File | Issue | Field | Suggestion |
|------|-------|-------|------------|
| docs/guide.md | Missing | token_estimate | Add: 1,250 (calculated) |
| docs/api.md | Stale | last_updated | Update to current date |

### Auto-Fixes Applied

| File | Field | Old Value | New Value |
|------|-------|-----------|-----------|
| docs/setup.md | token_estimate | (missing) | 890 |
| docs/setup.md | last_updated | 2024-06-01 | 2025-12-21 |
```

## Validation Rules

### Field Value Rules

| Field | Valid Values |
|-------|--------------|
| `status` | active, deprecated, draft, beta |
| `skill_category` | analysis, engineering, facilitation, strategy, documentation |
| `doc_type` | overview, architecture, api, integration, security, guide, standard, reference, runbook |
| `allowed_tools` | Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch |

### Path Validation

For path fields (`source_of_truth`, `methodology`, `replaces`, `related`):
- Resolve relative to file location
- Check target exists
- Warn if external to repository

### Token Estimate Accuracy

Compare `token_estimate` to actual:
- Within 10%: OK
- 10-25% off: WARNING
- >25% off: ERROR (likely stale)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…