Help us improve
Share bugs, ideas, or general feedback.
From fluxwing-skills
Validates Fluxwing uxscii components and screens against JSON schemas via interactive menu options or direct Node.js script calls. Use to check project files like ./fluxwing/components/*.uxm.
npx claudepluginhub joshuarweaver/cascade-content-creation-misc-1 --plugin trabian-fluxwing-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/fluxwing-skills:skills/fluxwing-validatorThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Validate uxscii components and screens against JSON Schema with interactive workflows.
Browses and previews uxscii components from bundled templates, project components, library, and screens in Fluxwing workspaces. Use for .uxm file browsing, listing, or searching.
Validates JSON artifacts in looplia workflows against criteria from validation.json using deterministic TypeScript scripts via bun. Outputs pass/fail status and check details for manual retry, debugging failures, or ad-hoc verification.
Runs validator checks only (no AI reviews) when explicitly requested with phrases like 'run validator checks' or 'checks only'. Extracts failures and guides fixes.
Share bugs, ideas, or general feedback.
Validate uxscii components and screens against JSON Schema with interactive workflows.
This skill provides two modes of operation:
User says:
Other skills: Call validator scripts directly (see Technical Reference below)
Use AskUserQuestion to present menu:
What would you like to validate?
Options:
./fluxwing/components/*.uxm./fluxwing/screens/*.uxmBefore running validation, check if directories exist:
# Check for components
test -d ./fluxwing/components
# Check for screens
test -d ./fluxwing/screens
If neither exists:
If option 4 (custom) selected:
Based on user selection:
Option 1: Everything
# Validate components
node {SKILL_ROOT}/validate-batch.js \
"./fluxwing/components/*.uxm" \
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
--json
# Validate screens
node {SKILL_ROOT}/validate-batch.js \
"./fluxwing/screens/*.uxm" \
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
--screens \
--json
Option 2: Just components
node {SKILL_ROOT}/validate-batch.js \
"./fluxwing/components/*.uxm" \
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
--json
Option 3: Just screens
node {SKILL_ROOT}/validate-batch.js \
"./fluxwing/screens/*.uxm" \
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
--screens \
--json
Option 4: Custom pattern
# Use user-provided pattern
node {SKILL_ROOT}/validate-batch.js \
"${userPattern}" \
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
--json
Parse JSON output from validator to extract:
total: Total files validatedpassed: Number of valid filesfailed: Number of failed fileswarnings: Total warning countDisplay minimal summary:
✓ 12/14 components valid
✗ 2/14 components failed
⚠ 3 warnings total
If all passed:
✓ All 14 components valid
⚠ 3 warnings
If everything failed:
✗ All 14 components failed
If nothing to validate:
No files found matching pattern
Use AskUserQuestion to ask:
Show error details?
Options:
If user selects "Yes", show full validation output including:
Failed files section:
Failed Files:
✗ broken-button (./fluxwing/components/broken-button.uxm)
Errors: 2
1. must have required property 'fidelity'
2. ASCII template file not found
✗ old-card (./fluxwing/components/old-card.uxm)
Errors: 1
1. invalid version format
Passed with warnings section:
Passed with Warnings:
✓ login-screen (2 warnings)
✓ dashboard (1 warning)
Fully passed section (optional, only if not too many):
Fully Passed:
✓ primary-button
✓ secondary-button
✓ email-input
...
No components or screens found. Create some first!
✓ 0/0 components valid
No files found matching pattern: ${pattern}
Error: Cannot execute validator. Node.js required.
Other skills (component-creator, screen-scaffolder) call validator scripts directly:
Validate single component:
node {SKILL_ROOT}/../fluxwing-validator/validate-component.js \
./fluxwing/components/button.uxm \
{SKILL_ROOT}/schemas/uxm-component.schema.json
Validate single screen:
node {SKILL_ROOT}/../fluxwing-validator/validate-screen.js \
./fluxwing/screens/login-screen.uxm \
{SKILL_ROOT}/schemas/uxm-component.schema.json
Batch validate:
node {SKILL_ROOT}/../fluxwing-validator/validate-batch.js \
"./fluxwing/components/*.uxm" \
{SKILL_ROOT}/schemas/uxm-component.schema.json
Output modes:
--json: Machine-readable JSONExit codes:
0: All files valid1: One or more files invalid2: Missing dependencies or invalid argumentsAvailable scripts:
validate-component.js - Validate single component filevalidate-screen.js - Validate single screen file (with screen-specific checks)validate-batch.js - Validate multiple files with glob patternstest-validator.js - Test component templatestest-screen-validator.js - Test screen templatescd {SKILL_ROOT}
# Run tests
npm test # Test component templates
npm run test:screens # Test screen templates
# Batch validation
npm run validate:components # Validate all components
npm run validate:screens # Validate all screens
npm run validate:all # Validate everything
User: "Validate my components"
Skill:
What would you like to validate?
1. Everything in this project
2. Just components
3. Just screens
4. Let me specify a file or pattern
User selects: Option 1
Skill runs validation and shows:
✓ 12/14 components valid
✗ 2/14 components failed
⚠ 3 warnings total
✓ 2/2 screens valid
⚠ 1 warning
Show error details?
User: "yes"
Skill shows full error details for failed files
User: "Validate my components"
Skill: (presents menu)
User selects: Option 4 (custom pattern)
Skill: "What file or pattern would you like to validate?"
User: "./fluxwing/components/*-button.uxm"
Skill validates and shows:
✓ 3/3 files valid
Show error details?
Parse JSON output:
const result = JSON.parse(bashOutput);
const total = result.total;
const passed = result.passed;
const failed = result.failed;
const warnings = result.warnings;
Summary formatting:
Error detail formatting:
Skill Status: Ready for use Version: 1.0.0