Validates generated artifacts against Fractary plugin standards using automated validators. Checks XML markup, frontmatter, naming conventions, and structure.
Validates generated artifacts against Fractary plugin standards using automated validators. Checks XML markup, frontmatter, naming conventions, and structure.
/plugin marketplace add fractary/claude-plugins/plugin install fractary-faber-agent@fractaryThis skill inherits all available tools. When active, it can use any tool Claude has access to.
You invoke validator scripts and report compliance status. </CONTEXT>
<CRITICAL_RULES> IMPORTANT: Rules that must never be violated
Complete Validation
Standards Enforcement
Error Reporting
Fail Fast
Example:
{
"artifact_path": "plugins/faber-data/agents/data-analyzer.md",
"artifact_type": "agent"
}
</INPUTS>
<WORKFLOW>
**OUTPUT START MESSAGE:**
```
šÆ STARTING: Validate Artifact
Artifact: {artifact_path}
Type: {artifact_type}
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
```
EXECUTE STEPS:
Verify all required inputs:
if [ -z "$ARTIFACT_PATH" ]; then
echo "Error: artifact_path is required"
exit 1
fi
if [ -z "$ARTIFACT_TYPE" ]; then
echo "Error: artifact_type is required"
exit 1
fi
if [ ! -f "$ARTIFACT_PATH" ]; then
echo "Error: Artifact file not found: $ARTIFACT_PATH"
exit 1
fi
Execute XML validator based on artifact type:
VALIDATOR_DIR="$PLUGIN_DIR/validators"
"$VALIDATOR_DIR/xml-validator.sh" "$ARTIFACT_PATH" "$ARTIFACT_TYPE"
XML_EXIT_CODE=$?
if [ $XML_EXIT_CODE -eq 0 ]; then
echo "ā
XML markup validation passed"
XML_STATUS="passed"
elif [ $XML_EXIT_CODE -eq 1 ]; then
echo "ā XML markup validation failed"
XML_STATUS="failed"
XML_ERRORS=$(cat /tmp/xml-errors.txt 2>/dev/null || echo "See validator output above")
else
echo "ā ļø XML markup validation completed with warnings"
XML_STATUS="passed_with_warnings"
fi
The XML validator checks:
Execute frontmatter validator:
"$VALIDATOR_DIR/frontmatter-validator.sh" "$ARTIFACT_PATH" "$ARTIFACT_TYPE"
FRONTMATTER_EXIT_CODE=$?
if [ $FRONTMATTER_EXIT_CODE -eq 0 ]; then
echo "ā
Frontmatter validation passed"
FRONTMATTER_STATUS="passed"
elif [ $FRONTMATTER_EXIT_CODE -eq 1 ]; then
echo "ā Frontmatter validation failed"
FRONTMATTER_STATUS="failed"
FRONTMATTER_ERRORS=$(cat /tmp/frontmatter-errors.txt 2>/dev/null || echo "See validator output above")
else
echo "ā ļø Frontmatter validation completed with warnings"
FRONTMATTER_STATUS="passed_with_warnings"
fi
The frontmatter validator checks:
Execute naming validator to check naming standards:
# Extract artifact name from path
ARTIFACT_NAME=$(basename "$ARTIFACT_PATH" .md)
# For commands, extract from frontmatter
if [ "$ARTIFACT_TYPE" = "command" ]; then
ARTIFACT_NAME=$(grep -Po "^name:\s*\K.*" "$ARTIFACT_PATH" | head -1)
fi
"$VALIDATOR_DIR/naming-validator.sh" "$ARTIFACT_NAME" "$ARTIFACT_TYPE"
NAMING_EXIT_CODE=$?
if [ $NAMING_EXIT_CODE -eq 0 ]; then
echo "ā
Naming convention validation passed"
NAMING_STATUS="passed"
elif [ $NAMING_EXIT_CODE -eq 1 ]; then
echo "ā Naming convention validation failed"
NAMING_STATUS="failed"
NAMING_ERRORS=$(cat /tmp/naming-errors.txt 2>/dev/null || echo "See validator output above")
else
echo "ā ļø Naming convention validation completed with warnings"
NAMING_STATUS="passed_with_warnings"
fi
The naming validator checks:
For agents and skills, validate cross-references:
if [ "$ARTIFACT_TYPE" = "agent" ] || [ "$ARTIFACT_TYPE" = "skill" ]; then
"$VALIDATOR_DIR/cross-reference-validator.sh" "$ARTIFACT_PATH" "$ARTIFACT_TYPE"
CROSSREF_EXIT_CODE=$?
if [ $CROSSREF_EXIT_CODE -eq 0 ]; then
echo "ā
Cross-reference validation passed"
CROSSREF_STATUS="passed"
elif [ $CROSSREF_EXIT_CODE -eq 1 ]; then
echo "ā ļø Cross-reference validation found missing references"
CROSSREF_STATUS="passed_with_warnings"
# Missing refs are warnings, not blockers (they may not be created yet)
else
echo "ā ļø Cross-reference validation completed with warnings"
CROSSREF_STATUS="passed_with_warnings"
fi
else
# Commands don't have cross-references to validate
CROSSREF_STATUS="skipped"
fi
The cross-reference validator checks:
Determine overall validation status:
OVERALL_STATUS="passed"
# Check for failures
if [ "$XML_STATUS" = "failed" ] || [ "$FRONTMATTER_STATUS" = "failed" ] || [ "$NAMING_STATUS" = "failed" ]; then
OVERALL_STATUS="failed"
# Check for warnings
elif [ "$XML_STATUS" = "passed_with_warnings" ] || \
[ "$FRONTMATTER_STATUS" = "passed_with_warnings" ] || \
[ "$NAMING_STATUS" = "passed_with_warnings" ] || \
[ "$CROSSREF_STATUS" = "passed_with_warnings" ]; then
OVERALL_STATUS="passed_with_warnings"
fi
Output detailed validation report.
OUTPUT COMPLETION MESSAGE (Success):
ā
COMPLETED: Validate Artifact
Status: All validation checks passed
ā
XML markup valid
ā
Frontmatter valid
ā
Naming conventions valid
ā
Cross-references valid (or skipped)
ā
Standards compliance verified
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Next: Save and document the artifact
OUTPUT COMPLETION MESSAGE (Warnings):
ā ļø COMPLETED: Validate Artifact
Status: Passed with warnings
ā
XML markup valid
ā
Frontmatter valid
ā ļø Naming conventions have warnings
ā ļø Cross-references have warnings (missing references found)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Next: Review warnings, then proceed
IF FAILURE:
ā FAILED: Validate Artifact
Status: Validation errors found
XML Markup:
{xml_errors}
Frontmatter:
{frontmatter_errors}
Naming Conventions:
{naming_errors}
Resolution:
1. Review errors above
2. Fix violations in generated artifact
3. Re-run validation
4. Do not proceed until errors are resolved
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
</WORKFLOW>
<COMPLETION_CRITERIA> This skill is complete and successful when ALL verified:
ā 1. All Validators Executed
ā 2. Validation Results Clear
ā 3. Pass or Acceptable Warnings
FAILURE CONDITIONS - Stop and report if: ā XML markup validation failed (exit code 1) ā Frontmatter validation failed (exit code 1) ā Naming convention validation failed (exit code 1) ā Artifact file not found ā Validators cannot execute
PARTIAL COMPLETION - Not acceptable: ā ļø Validators ran but artifact has errors ā Report failure, do not proceed ā ļø Validators have warnings ā Report warnings, may proceed ā ļø Missing cross-references ā Report as warnings, may proceed (refs may not exist yet) </COMPLETION_CRITERIA>
<OUTPUTS> After successful completion, return:{
"status": "success",
"artifact_path": "{artifact_path}",
"artifact_type": "{artifact_type}",
"validation": {
"xml_markup": "passed|passed_with_warnings|failed",
"frontmatter": "passed|passed_with_warnings|failed",
"naming": "passed|passed_with_warnings|failed",
"cross_references": "passed|passed_with_warnings|skipped",
"overall": "passed|passed_with_warnings"
},
"errors": [],
"warnings": [
"{warning1}",
"{warning2}"
]
}
On validation failure:
{
"status": "validation_failed",
"artifact_path": "{artifact_path}",
"artifact_type": "{artifact_type}",
"validation": {
"xml_markup": "passed",
"frontmatter": "passed",
"naming": "failed",
"cross_references": "passed_with_warnings",
"overall": "failed"
},
"errors": [
"{error1}",
"{error2}"
]
}
On error (cannot validate):
{
"status": "error",
"error": "{error_message}",
"step": "{failed_step}"
}
</OUTPUTS>
<DOCUMENTATION>
After completing work:
- Validation results are logged in completion message
- Errors and warnings documented in return JSON
- No separate documentation needed for this skill
</DOCUMENTATION>
<ERROR_HANDLING>
Pattern: Specified artifact path does not exist
Action:
Pattern: Validator script cannot be executed
Action:
Pattern: Required sections missing or malformed
Action:
Example:
ā XML Markup Validation Failed
Missing required sections:
⢠COMPLETION_CRITERIA
⢠OUTPUTS
Lowercase tags found:
⢠<inputs> should be <INPUTS>
Resolution:
1. Check template file has all required sections
2. Ensure template uses UPPERCASE tags
3. Re-generate artifact
Pattern: Invalid frontmatter format or content
Action:
Example:
ā Frontmatter Validation Failed
Errors:
⢠Command name has leading slash: /fractary-faber:create-agent
Should be: fractary-faber:create-agent
⢠Missing required field: description
Resolution:
1. Remove leading slash from command name in frontmatter
2. Add description field to frontmatter
3. Re-generate artifact
Pattern: Non-critical issues found
Action:
Example:
ā ļø Validation passed with warnings:
Frontmatter warnings:
⢠Description is very long (250 chars, recommend < 200)
⢠Argument-hint could be more specific
These are suggestions, not blockers.
Artifact meets minimum standards.
</ERROR_HANDLING>
Invoked By:
Invokes:
Validators:
validators/xml-validator.sh - Checks XML sections and structurevalidators/frontmatter-validator.sh - Checks YAML frontmattervalidators/naming-validator.sh - Checks naming conventions (kebab-case, length, patterns)validators/cross-reference-validator.sh - Checks agent/skill references existThis skill ensures 100% standards compliance for all generated artifacts.