7.3 KiB
7.3 KiB
Operation: Validate CHANGELOG Format
Validate CHANGELOG.md format compliance with "Keep a Changelog" standard.
Parameters from $ARGUMENTS
- file: Path to CHANGELOG file (optional, default: CHANGELOG.md)
- format: Expected format (optional, default: keepachangelog)
- strict: Enable strict validation (optional, default: false)
- require-unreleased: Require [Unreleased] section (optional, default: true)
CHANGELOG Requirements
Keep a Changelog Format (https://keepachangelog.com/):
# 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]
### Added
- New features not yet released
## [1.0.0] - 2025-01-15
### Added
- Initial release feature
### Changed
- Modified behavior
### Fixed
- Bug fixes
Required Elements:
- Title: "Changelog" or "Change Log"
- Version Headers:
## [X.Y.Z] - YYYY-MM-DDformat - Change Categories: Added, Changed, Deprecated, Removed, Fixed, Security
- Unreleased Section:
## [Unreleased]for upcoming changes - Chronological Order: Newest versions first
Valid Change Categories:
- Added: New features
- Changed: Changes in existing functionality
- Deprecated: Soon-to-be removed features
- Removed: Removed features
- Fixed: Bug fixes
- Security: Security vulnerability fixes
Workflow
-
Locate CHANGELOG File
Check for CHANGELOG.md in plugin root Also check: CHANGELOG, CHANGELOG.txt, changelog.md, HISTORY.md If not found, report as missing (WARNING, not CRITICAL) -
Execute CHANGELOG Validator
Execute .scripts/changelog-validator.sh with parameters: - File path to CHANGELOG - Expected format (keepachangelog) - Strict mode flag - Require unreleased flag Script returns: - has_title: Boolean - has_unreleased: Boolean - version_headers: Array of version entries - categories_used: Array of change categories - issues: Array of format violations - compliance_score: 0-100 -
Validate Version Headers
For each version header: - Check format: ## [X.Y.Z] - YYYY-MM-DD - Validate semantic version (X.Y.Z) - Validate date format (YYYY-MM-DD) - Check chronological order (newest first) Common violations: - Missing brackets: ## 1.0.0 - 2025-01-15 (should be [1.0.0]) - Wrong date format: ## [1.0.0] - 01/15/2025 - Invalid semver: ## [1.0] - 2025-01-15 -
Validate Change Categories
For each version section: - Check for valid category headers (### Added, ### Fixed, etc.) - Warn if no categories used - Recommend appropriate categories Invalid category examples: - "### New Features" (should be "### Added") - "### Bugs" (should be "### Fixed") - "### Updates" (should be "### Changed") -
Calculate Compliance Score
score = 100 score -= (!has_title) ? 10 : 0 score -= (!has_unreleased) ? 15 : 0 score -= (invalid_version_headers × 10) score -= (invalid_categories × 5) score -= (wrong_date_format × 5) score = max(0, score) -
Format Output
Display: - ✅/⚠️/❌ File presence - ✅/❌ Format compliance - ✅/⚠️ Version headers - ✅/⚠️ Change categories - Compliance score - Specific violations - Improvement recommendations
Examples
# Validate default CHANGELOG.md
/documentation-validation changelog file:CHANGELOG.md
# Validate with custom path
/documentation-validation changelog file:./HISTORY.md
# Strict validation (all elements required)
/documentation-validation changelog file:CHANGELOG.md strict:true
# Don't require Unreleased section
/documentation-validation changelog file:CHANGELOG.md require-unreleased:false
# Part of full documentation check
/documentation-validation full-docs path:.
Error Handling
Error: CHANGELOG not found
⚠️ WARNING: CHANGELOG.md not found in <path>
Remediation:
1. Create CHANGELOG.md in plugin root directory
2. Use "Keep a Changelog" format (https://keepachangelog.com/)
3. Include [Unreleased] section for upcoming changes
4. Document version history with proper headers
Example:
# Changelog
## [Unreleased]
### Added
- Features in development
## [1.0.0] - 2025-01-15
### Added
- Initial release
Note: CHANGELOG is recommended but not required for initial submission.
It becomes important for version updates.
Error: Invalid version header format
❌ ERROR: Invalid version header format detected
Invalid headers found:
- Line 10: "## 1.0.0 - 2025-01-15" (missing brackets)
- Line 25: "## [1.0] - 01/15/2025" (invalid semver and date format)
Correct format:
## [X.Y.Z] - YYYY-MM-DD
Examples:
- ## [1.0.0] - 2025-01-15
- ## [2.1.3] - 2024-12-20
- ## [0.1.0] - 2024-11-05
Remediation:
1. Add brackets around version numbers: [1.0.0]
2. Use semantic versioning: MAJOR.MINOR.PATCH
3. Use ISO date format: YYYY-MM-DD
Error: Missing Unreleased section
⚠️ WARNING: Missing [Unreleased] section
The Keep a Changelog format recommends an [Unreleased] section for tracking
upcoming changes before they're officially released.
Add to top of CHANGELOG (after title):
## [Unreleased]
### Added
- Features in development
### Changed
- Planned changes
Error: Invalid change categories
⚠️ WARNING: Non-standard change categories detected
Invalid categories found:
- "### New Features" (should be "### Added")
- "### Bug Fixes" (should be "### Fixed")
- "### Updates" (should be "### Changed")
Valid categories:
- Added: New features
- Changed: Changes in existing functionality
- Deprecated: Soon-to-be removed features
- Removed: Removed features
- Fixed: Bug fixes
- Security: Security vulnerability fixes
Remediation:
Replace non-standard categories with Keep a Changelog categories.
Output Format
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CHANGELOG VALIDATION RESULTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
File: ✅ CHANGELOG.md found
Format: Keep a Changelog
Compliance: <0-100>% ✅/⚠️/❌
Structure:
✅ Title present
✅ [Unreleased] section present
✅ Version headers formatted correctly
✅ Change categories valid
Version Entries: <count>
- [1.0.0] - 2025-01-15 ✅
- [0.2.0] - 2024-12-20 ✅
- [0.1.0] - 2024-11-05 ✅
Change Categories Used:
✅ Added (3 versions)
✅ Changed (2 versions)
✅ Fixed (3 versions)
Issues Found: <N>
Violations:
<List specific issues if any>
Recommendations:
1. Add Security category for vulnerability fixes
2. Expand [Unreleased] section with upcoming features
3. Add links to version comparison (optional)
Overall: <PASS|WARNINGS|FAIL>
Integration
This operation is invoked by:
/documentation-validation changelog file:CHANGELOG.md(direct)/documentation-validation full-docs path:.(as part of complete validation)/validation-orchestrator comprehensive path:.(via orchestrator)
Results contribute to documentation quality score:
- Present and compliant: +10 points
- Present but non-compliant: +5 points
- Missing: 0 points (warning but not blocking)
Request: $ARGUMENTS