--- schema: changelog-schema-v1.0 version: "1.0" domain: changelog description: "JSON schema for Keep a Changelog format with version history validation" created: "2026-01-06" author: "MarkiTect Schema System" --- # Changelog Schema v1.0 ## Overview This schema validates CHANGELOG.md files following the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format. It enforces: - Unreleased section presence (required) - Version section format: `[X.Y.Z] - YYYY-MM-DD` - Standard change type subsections - Semantic versioning adherence - ISO 8601 date formatting ## Purpose Ensures changelog files maintain consistent structure and formatting across releases, facilitating: - Automated release note generation - Version history tracking - Release validation workflows - Documentation consistency ## Schema Definition ```json { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "Changelog Schema", "description": "Validates Keep a Changelog format for project changelogs", "x-markitect-metadata": { "schema_name": "changelog-schema-v1.0", "version": "1.0", "domain": "changelog", "created": "2026-01-06", "author": "MarkiTect Schema System" }, "x-markitect-sections": { "[Unreleased]": { "classification": "required", "heading_level": 2, "error_message": "Unreleased section is mandatory for tracking upcoming changes", "content_instruction": "Use ## [Unreleased] heading. Section can be empty if no unreleased changes.", "alternatives": ["UNRELEASED", "Unreleased"] }, "Added": { "classification": "optional", "heading_level": 3, "parent_section_pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "content_instruction": "New features added in this release" }, "Changed": { "classification": "optional", "heading_level": 3, "parent_section_pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "content_instruction": "Changes to existing functionality" }, "Deprecated": { "classification": "optional", "heading_level": 3, "parent_section_pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "content_instruction": "Features that will be removed in future versions" }, "Removed": { "classification": "optional", "heading_level": 3, "parent_section_pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "content_instruction": "Features removed in this release" }, "Fixed": { "classification": "optional", "heading_level": 3, "parent_section_pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "content_instruction": "Bug fixes in this release" }, "Security": { "classification": "optional", "heading_level": 3, "parent_section_pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "content_instruction": "Security fixes and vulnerabilities addressed" } }, "x-markitect-content-control": { "title": { "required_patterns": [ "^# Changelog$" ], "content_quality": { "min_words": 1, "max_words": 1 }, "error_message": "Title must be exactly '# Changelog'" }, "introduction": { "recommended_patterns": [ "Keep a Changelog", "Semantic Versioning" ], "content_instruction": "Introduction should reference Keep a Changelog and Semantic Versioning standards" }, "unreleased_section": { "required_patterns": [ "## \\[Unreleased\\]" ], "content_quality": { "min_words": 0 }, "error_message": "Unreleased section must use format: ## [Unreleased]" }, "version_section": { "required_patterns": [ "## \\[\\d+\\.\\d+\\.\\d+\\] - \\d{4}-\\d{2}-\\d{2}" ], "content_instruction": "Version sections must follow format: ## [X.Y.Z] - YYYY-MM-DD", "error_message": "Version sections must use semantic versioning (X.Y.Z) with ISO 8601 dates (YYYY-MM-DD)" }, "change_types": { "recommended_patterns": [ "### Added", "### Changed", "### Deprecated", "### Removed", "### Fixed", "### Security" ], "content_instruction": "Use standard Keep a Changelog change type subsections", "error_message": "Change types should be one of: Added, Changed, Deprecated, Removed, Fixed, Security" }, "link_references": { "recommended_patterns": [ "\\[Keep a Changelog\\]\\(https://keepachangelog\\.com", "\\[Semantic Versioning\\]\\(https://semver\\.org" ], "content_instruction": "Include reference links to Keep a Changelog and Semantic Versioning" } }, "x-markitect-validation-rules": { "version_format": { "pattern": "^\\[\\d+\\.\\d+\\.\\d+\\]", "description": "Version must follow semantic versioning: [MAJOR.MINOR.PATCH]" }, "date_format": { "pattern": "\\d{4}-\\d{2}-\\d{2}", "description": "Date must be in ISO 8601 format: YYYY-MM-DD" }, "version_ordering": { "rule": "descending", "description": "Versions should be listed in descending order (newest first)" }, "unreleased_position": { "rule": "first_section", "description": "Unreleased section must come before all version sections" } }, "properties": { "headings": { "type": "object", "description": "Document heading structure", "properties": { "level_1": { "type": "array", "description": "Title heading (should be 'Changelog')", "items": { "type": "object", "properties": { "content": { "type": "string", "pattern": "^Changelog$" } } }, "minItems": 1, "maxItems": 1 }, "level_2": { "type": "array", "description": "Version sections ([Unreleased] and [X.Y.Z] - YYYY-MM-DD)", "items": { "type": "object", "properties": { "content": { "type": "string", "pattern": "^(\\[Unreleased\\]|\\[\\d+\\.\\d+\\.\\d+\\] - \\d{4}-\\d{2}-\\d{2})$" } } }, "minItems": 1, "maxItems": 100 }, "level_3": { "type": "array", "description": "Change type subsections (Added, Changed, etc.)", "minItems": 0, "maxItems": 500 } }, "required": ["level_1", "level_2"] }, "paragraphs": { "type": "array", "description": "Introduction and change descriptions", "minItems": 1, "maxItems": 5000 }, "lists": { "type": "array", "description": "Change item lists", "minItems": 0, "maxItems": 1000 } }, "required": ["headings", "paragraphs"] } ``` ## Usage Examples ### Valid Changelog Structure ```markdown # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [1.0.0] - 2026-01-06 ### Added - New feature A - New feature B ### Fixed - Bug fix for issue #123 ``` ### Validation Command ```bash # Ingest schema markitect schema-ingest markitect/schemas/changelog-schema-v1.0.md # Validate changelog markitect validate CHANGELOG.md --schema changelog-schema-v1.0.md --semantic ``` ## Validation Checks ### Required Elements - ✅ Title: Must be "# Changelog" - ✅ Unreleased section: `## [Unreleased]` must be present - ✅ Version format: `## [X.Y.Z] - YYYY-MM-DD` for all releases ### Recommended Elements - ⭐ Introduction paragraph referencing Keep a Changelog - ⭐ Semantic Versioning reference - ⭐ At least one change type subsection per version ### Content Patterns - Version sections use semantic versioning (MAJOR.MINOR.PATCH) - Dates in ISO 8601 format (YYYY-MM-DD) - Change types: Added, Changed, Deprecated, Removed, Fixed, Security - Bullet point lists for change items ## Common Validation Errors ### Missing Unreleased Section **Error**: "Unreleased section is mandatory for tracking upcoming changes" **Fix**: Add `## [Unreleased]` section at the top of version history ### Invalid Version Format **Error**: "Version sections must use semantic versioning (X.Y.Z)" **Fix**: Use format `## [1.0.0] - 2026-01-06` not `## Version 1.0.0` ### Invalid Date Format **Error**: "Date must be in ISO 8601 format: YYYY-MM-DD" **Fix**: Use `2026-01-06` not `Jan 6, 2026` or `01/06/2026` ### Missing Change Type Subsections **Warning**: "Version should have at least one change type subsection" **Fix**: Add `### Added`, `### Fixed`, or other change type heading ## Schema Extension Notes ### Future Enhancements This schema could be extended with: 1. **System Call Validation** (`x-markitect-validation-hooks`): - Verify git tags match CHANGELOG versions - Check version ordering consistency - Validate date chronology 2. **Agent Validation** (`x-markitect-validation-agents`): - Semantic consistency checking - Duplicate entry detection - Version numbering logic validation 3. **Cross-Reference Validation**: - Link validation to issue trackers - Commit hash verification - Release note completeness checking ## Keep a Changelog Standard This schema enforces the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) principles: - **Changelogs are for humans**, not machines - **One entry per version** - **Group changes by type** (Added, Changed, etc.) - **Versions and dates** for each release - **Latest version first** - **Unreleased section** for upcoming changes Combined with [Semantic Versioning](https://semver.org/), this enables consistent, readable version history. ## Version History - **1.0** (2026-01-06): Initial schema release - Basic structure validation - Version and date format checking - Change type subsection validation - Keep a Changelog compliance ## Related Schemas - `schema-schema-v1.0.md` - Metaschema for validating schemas - `manpage-schema-v1.0.md` - Schema for manual pages - `api-documentation-schema-v1.0.md` - Schema for API documentation ## License Part of MarkiTect Schema System