Commitlint configuration and GitHub Copilot commit message instruction templates with validation logic for conventional commit enforcement. Includes 6 required standards (conventional format, relaxed subject rules for Copilot compatibility, optional scope, Husky integration, required dependencies, Copilot instruction consistency). Use when creating or auditing commitlint.config.js and .copilot-commit-message-instructions.md files.
Creates commitlint.config.js and .copilot-commit-message-instructions.md templates with validation logic for conventional commit enforcement. Use when creating or auditing commit message configuration files.
/plugin marketplace add metasaver/metasaver-marketplace/plugin install core-claude-plugin@metasaver-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
templates/commitlint.config.template.jsThis skill provides commitlint.config.js and .copilot-commit-message-instructions.md templates and validation logic for conventional commit message enforcement.
Manage commitlint configuration to:
This skill is invoked by the commitlint-agent when:
Standard templates are located at:
templates/commitlint.config.template.js # Commitlint validation rules (relaxed for Copilot)
templates/.copilot-commit-message-instructions.template.md # GitHub Copilot guidance
MUST enforce conventional commit message structure:
type(scope?): subject
body?
footer?
Valid types: feat, fix, docs, style, refactor, perf, test, chore, ci, build, revert
Validation:
type-enum rule has all 11 standard typesIMPORTANT: GitHub Copilot currently does NOT honor commitlint configuration files. MetaSaver uses RELAXED RULES for Copilot compatibility.
Requirements:
Validation:
// Verify relaxed rules configuration
config.rules["subject-case"] === [0]; // DISABLED (allows any case)
config.rules["subject-empty"] === [2, "never"]; // STRICT
config.rules["subject-full-stop"] === [1, "never", "."]; // WARNING
config.rules["header-max-length"] === [1, "always", 120]; // WARNING
config.rules["body-max-line-length"] === [0]; // DISABLED
Scope is optional but useful for monorepos:
✅ CORRECT:
feat(auth): add JWT middleware
fix(database): resolve connection pooling
docs(readme): update installation steps
Validation:
Commitlint MUST be integrated with Husky for pre-commit enforcement:
File structure:
repo-root/
├── commitlint.config.js ← Commitlint rules
├── .husky/
│ └── commit-msg ← Hook that runs commitlint
└── package.json ← Dependencies
Validation:
.husky/commit-msg hook existscommitlint --edit{
"devDependencies": {
"@commitlint/cli": "^19.0.0",
"@commitlint/config-conventional": "^19.0.0",
"husky": "^9.0.0"
}
}
Validation:
GitHub Copilot commit message instructions MUST be consistent with commitlint rules:
File: .copilot-commit-message-instructions.md
Requirements:
Validation:
function validateConsistency(commitlintConfig, copilotInstructions) {
const errors = [];
// Check types match
const commitlintTypes = commitlintConfig.rules["type-enum"][2];
const copilotTypes = extractTypesFromMarkdown(copilotInstructions);
if (!arraysEqual(commitlintTypes, copilotTypes)) {
errors.push("Types mismatch between commitlint and copilot instructions");
}
// Check relaxed rules documented
if (
!copilotInstructions.includes("sentence-case") &&
!copilotInstructions.includes("any case")
) {
errors.push("Copilot instructions missing relaxed case requirement");
}
// Check length limits documented
if (!copilotInstructions.includes("120 characters")) {
errors.push("Copilot instructions missing header length limit");
}
return errors;
}
To validate commitlint configuration:
# Rule 1: Check type-enum rule
node -e "const config = require('./commitlint.config.js'); console.log(config.default.rules['type-enum'])"
# Rule 2: Check relaxed rules
grep -q "subject-case.*\[0\]" commitlint.config.js || echo "VIOLATION: subject-case not disabled"
grep -q "subject-empty.*\[2" commitlint.config.js || echo "VIOLATION: subject-empty not strict"
# Rule 4: Check Husky integration
[ -f ".husky/commit-msg" ] || echo "VIOLATION: Missing commit-msg hook"
grep -q "commitlint" .husky/commit-msg || echo "VIOLATION: Hook doesn't call commitlint"
# Rule 5: Check dependencies
jq '.devDependencies | has("@commitlint/cli")' package.json
jq '.devDependencies | has("@commitlint/config-conventional")' package.json
# Rule 6: Check copilot instructions consistency
[ -f ".copilot-commit-message-instructions.md" ] || echo "VIOLATION: Missing copilot instructions"
This skill integrates with:
scope parameter. If not provided, use /skill scope-check/skill audit-workflow - Bi-directional comparison workflow/skill remediation-options - Conform/Update/Ignore choiceshusky-agent - For commit-msg hook integration