| name | validate-artifact |
| model | claude-haiku-4-5 |
| description | Validates generated artifacts against Fractary plugin standards using automated validators. Checks XML markup, frontmatter, naming conventions, and structure. |
| tools | Bash |
Validate Artifact Skill
You invoke validator scripts and report compliance status.
Complete Validation
- ALWAYS run all applicable validators
- NEVER skip validation steps
- ALWAYS report all errors found
Standards Enforcement
- ALWAYS enforce FRACTARY-PLUGIN-STANDARDS.md
- NEVER allow non-compliant artifacts to pass
- ALWAYS provide clear error messages
Error Reporting
- ALWAYS report specific violations
- ALWAYS suggest how to fix errors
- NEVER report false positives
Fail Fast
- ALWAYS stop on critical errors
- ALLOW warnings but report them
- NEVER continue if artifact is invalid
Example:
{
"artifact_path": "plugins/faber-data/agents/data-analyzer.md",
"artifact_type": "agent"
}
EXECUTE STEPS:
Step 1: Validate Inputs
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
Step 2: Run XML Markup Validator
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:
- All required XML sections present
- Proper UPPERCASE tag naming
- All tags properly closed
- No malformed structure
Step 3: Run Frontmatter Validator
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:
- Required fields present (name, description)
- Name follows conventions (no leading slash for commands, plugin:command pattern)
- YAML syntax valid
- Description within limits
Step 4: Run Naming Convention Validator
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:
- Artifact follows naming conventions (kebab-case, length, patterns)
- Commands follow plugin:command format
- Plugins have fractary- prefix
- No consecutive hyphens or invalid characters
Step 5: Run Cross-Reference Validator (Agents & Skills only)
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:
- Agent references (@agent-plugin:name) exist
- Skill references (@skill-plugin:name) exist
- Reference format is correct
Step 6: Aggregate Results
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
Step 7: Report Results
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
───────────────────────────────────────
✅ 1. All Validators Executed
- XML markup validator ran
- Frontmatter validator ran
- Naming convention validator ran
- Cross-reference validator ran (for agents/skills) or skipped (for commands)
- All applicable validators invoked
✅ 2. Validation Results Clear
- XML status determined (passed/failed/warnings)
- Frontmatter status determined (passed/failed/warnings)
- Naming status determined (passed/failed/warnings)
- Cross-reference status determined (passed/warnings/skipped)
- Overall status computed
✅ 3. Pass or Acceptable Warnings
- Overall status is "passed" OR "passed_with_warnings"
- No critical errors remain
- Artifact meets standards
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)
{
"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}"
}
Artifact File Not Found
Pattern: Specified artifact path does not exist
Action:
- Report exact path that was checked
- Verify artifact was generated in Build phase
- Suggest checking Build phase output
Validator Script Not Found
Pattern: Validator script cannot be executed
Action:
- Report which validator is missing
- Check validators/ directory
- Suggest reinstalling faber-agent plugin
XML Markup Validation Failed
Pattern: Required sections missing or malformed
Action:
- List specific violations:
- Missing sections (e.g., COMPLETION_CRITERIA)
- Lowercase tags that should be UPPERCASE
- Unclosed tags
- Show expected structure
- Suggest fixing template or generation logic
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
Frontmatter Validation Failed
Pattern: Invalid frontmatter format or content
Action:
- List specific violations:
- Missing required fields
- Invalid name pattern (e.g., leading slash in command)
- Malformed YAML
- Show correct format
- Suggest fixing template frontmatter
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
Validators Pass with Warnings
Pattern: Non-critical issues found
Action:
- List warnings
- Allow proceeding but inform user
- Suggest improvements for future
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.
Integration
Invoked By:
- agent-creator agent (Phase 4: Evaluate)
- skill-creator agent (Phase 4: Evaluate)
- command-creator agent (Phase 4: Evaluate)
- plugin-creator agent (Phase 4: Evaluate)
Invokes:
- validators/xml-validator.sh (XML markup validation)
- validators/frontmatter-validator.sh (frontmatter validation)
- validators/naming-validator.sh (naming convention validation)
- validators/cross-reference-validator.sh (cross-reference validation)
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 exist
Best Practices
- Run all validators - Don't skip any validation steps
- Fail on errors - Never allow non-compliant artifacts through
- Clear error messages - Help users understand what's wrong
- Allow warnings - Non-critical issues shouldn't block progress
- Aggregate results - Provide overall status at the end
This skill ensures 100% standards compliance for all generated artifacts.