355 lines
7.5 KiB
Markdown
355 lines
7.5 KiB
Markdown
---
|
|
name: fluxwing-validator
|
|
description: Validate uxscii components and screens against schema with interactive menu or direct script calls
|
|
version: 1.0.0
|
|
author: Fluxwing Team
|
|
allowed-tools: Read, Bash, AskUserQuestion, TodoWrite
|
|
---
|
|
|
|
# Fluxwing Validator
|
|
|
|
Validate uxscii components and screens against JSON Schema with interactive workflows.
|
|
|
|
## Overview
|
|
|
|
This skill provides two modes of operation:
|
|
|
|
1. **Interactive Mode**: User invocation with menu and minimal output
|
|
2. **Direct Mode**: Script calls from other skills with verbose output
|
|
|
|
## When to Use This Skill
|
|
|
|
**User says:**
|
|
- "Validate my components"
|
|
- "Check if everything is valid"
|
|
- "Run validation on my screens"
|
|
- "Validate the project"
|
|
|
|
**Other skills:** Call validator scripts directly (see Technical Reference below)
|
|
|
|
## Interactive Validation Workflow
|
|
|
|
### Step 1: Present Validation Options
|
|
|
|
Use AskUserQuestion to present menu:
|
|
|
|
```
|
|
What would you like to validate?
|
|
```
|
|
|
|
**Options:**
|
|
1. **Everything in this project** - Validates all components and screens
|
|
2. **Just components** - Validates `./fluxwing/components/*.uxm`
|
|
3. **Just screens** - Validates `./fluxwing/screens/*.uxm`
|
|
4. **Let me specify a file or pattern** - Custom path/glob pattern
|
|
|
|
### Step 2: Check What Exists
|
|
|
|
Before running validation, check if directories exist:
|
|
|
|
```bash
|
|
# Check for components
|
|
test -d ./fluxwing/components
|
|
|
|
# Check for screens
|
|
test -d ./fluxwing/screens
|
|
```
|
|
|
|
**If neither exists:**
|
|
- Inform user: "No components or screens found. Create some first!"
|
|
- Exit cleanly
|
|
|
|
**If option 4 (custom) selected:**
|
|
- Ask user for the pattern/file path
|
|
- Validate it's not empty
|
|
- Proceed with user-provided pattern
|
|
|
|
### Step 3: Run Validation
|
|
|
|
Based on user selection:
|
|
|
|
**Option 1: Everything**
|
|
```bash
|
|
# 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**
|
|
```bash
|
|
node {SKILL_ROOT}/validate-batch.js \
|
|
"./fluxwing/components/*.uxm" \
|
|
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
|
|
--json
|
|
```
|
|
|
|
**Option 3: Just screens**
|
|
```bash
|
|
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**
|
|
```bash
|
|
# Use user-provided pattern
|
|
node {SKILL_ROOT}/validate-batch.js \
|
|
"${userPattern}" \
|
|
"{SKILL_ROOT}/../fluxwing-component-creator/schemas/uxm-component.schema.json" \
|
|
--json
|
|
```
|
|
|
|
### Step 4: Parse Results and Show Minimal Summary
|
|
|
|
Parse JSON output from validator to extract:
|
|
- `total`: Total files validated
|
|
- `passed`: Number of valid files
|
|
- `failed`: Number of failed files
|
|
- `warnings`: Total warning count
|
|
|
|
**Display 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
|
|
```
|
|
|
|
### Step 5: Ask About Details
|
|
|
|
Use AskUserQuestion to ask:
|
|
|
|
```
|
|
Show error details?
|
|
```
|
|
|
|
**Options:**
|
|
1. **Yes** - Display full validation output
|
|
2. **No** - Clean exit
|
|
|
|
### Step 6: Display Details (if requested)
|
|
|
|
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
|
|
...
|
|
```
|
|
|
|
## Edge Cases
|
|
|
|
### No fluxwing directory exists
|
|
```
|
|
No components or screens found. Create some first!
|
|
```
|
|
|
|
### Empty directories
|
|
```
|
|
✓ 0/0 components valid
|
|
```
|
|
|
|
### Invalid glob pattern (option 4)
|
|
```
|
|
No files found matching pattern: ${pattern}
|
|
```
|
|
|
|
### Validation script fails to execute
|
|
```
|
|
Error: Cannot execute validator. Node.js required.
|
|
```
|
|
|
|
## Technical Reference (For Other Skills)
|
|
|
|
### Direct Script Calls
|
|
|
|
Other skills (component-creator, screen-scaffolder) call validator scripts directly:
|
|
|
|
**Validate single component:**
|
|
```bash
|
|
node {SKILL_ROOT}/../fluxwing-validator/validate-component.js \
|
|
./fluxwing/components/button.uxm \
|
|
{SKILL_ROOT}/schemas/uxm-component.schema.json
|
|
```
|
|
|
|
**Validate single screen:**
|
|
```bash
|
|
node {SKILL_ROOT}/../fluxwing-validator/validate-screen.js \
|
|
./fluxwing/screens/login-screen.uxm \
|
|
{SKILL_ROOT}/schemas/uxm-component.schema.json
|
|
```
|
|
|
|
**Batch validate:**
|
|
```bash
|
|
node {SKILL_ROOT}/../fluxwing-validator/validate-batch.js \
|
|
"./fluxwing/components/*.uxm" \
|
|
{SKILL_ROOT}/schemas/uxm-component.schema.json
|
|
```
|
|
|
|
**Output modes:**
|
|
- Default: Human-readable (verbose, full errors/warnings)
|
|
- `--json`: Machine-readable JSON
|
|
|
|
**Exit codes:**
|
|
- `0`: All files valid
|
|
- `1`: One or more files invalid
|
|
- `2`: Missing dependencies or invalid arguments
|
|
|
|
### Validator Scripts
|
|
|
|
**Available scripts:**
|
|
- `validate-component.js` - Validate single component file
|
|
- `validate-screen.js` - Validate single screen file (with screen-specific checks)
|
|
- `validate-batch.js` - Validate multiple files with glob patterns
|
|
- `test-validator.js` - Test component templates
|
|
- `test-screen-validator.js` - Test screen templates
|
|
|
|
### npm Scripts (for testing)
|
|
|
|
```bash
|
|
cd {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
|
|
```
|
|
|
|
## Example Interactions
|
|
|
|
### Example 1: 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**
|
|
|
|
### Example 2: Validate Specific Pattern
|
|
|
|
**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?
|
|
```
|
|
|
|
## Implementation Notes
|
|
|
|
**Parse JSON output:**
|
|
```javascript
|
|
const result = JSON.parse(bashOutput);
|
|
const total = result.total;
|
|
const passed = result.passed;
|
|
const failed = result.failed;
|
|
const warnings = result.warnings;
|
|
```
|
|
|
|
**Summary formatting:**
|
|
- Show passed/failed ratio for quick scan
|
|
- Highlight failures prominently
|
|
- Warnings shown but not intrusive
|
|
- Clean, minimal output by default
|
|
|
|
**Error detail formatting:**
|
|
- Group by status (failed, warnings, passed)
|
|
- Show file path and error count
|
|
- Display first 2-3 errors per file
|
|
- Indicate if more errors exist
|
|
|
|
---
|
|
|
|
**Skill Status:** Ready for use
|
|
**Version:** 1.0.0
|