Initial commit
This commit is contained in:
195
commands/schema-validation/validate-formats.md
Normal file
195
commands/schema-validation/validate-formats.md
Normal file
@@ -0,0 +1,195 @@
|
||||
## Operation: Validate Formats
|
||||
|
||||
Validate format compliance for semver, URLs, email addresses, and naming conventions.
|
||||
|
||||
### Parameters from $ARGUMENTS
|
||||
|
||||
- **path**: Path to plugin directory or marketplace file (required)
|
||||
- **type**: Target type: `plugin` or `marketplace` (optional, auto-detect)
|
||||
- **strict**: Enforce HTTPS for all URLs (optional, default: false)
|
||||
|
||||
### Workflow
|
||||
|
||||
1. **Locate Configuration File**
|
||||
```
|
||||
Auto-detect or use specified type:
|
||||
Plugin: plugin.json
|
||||
Marketplace: marketplace.json or .claude-plugin/marketplace.json
|
||||
```
|
||||
|
||||
2. **Execute Format Validation**
|
||||
```
|
||||
Execute .scripts/format-validator.py --file "$config" --type "$type" --strict "$strict"
|
||||
|
||||
Validates:
|
||||
- Semantic versioning (X.Y.Z)
|
||||
- Lowercase-hyphen naming (^[a-z0-9]+(-[a-z0-9]+)*$)
|
||||
- URL formats (http/https)
|
||||
- Email addresses (RFC 5322 compliant)
|
||||
- License identifiers (SPDX)
|
||||
- Category names (10 approved categories)
|
||||
```
|
||||
|
||||
3. **Report Results**
|
||||
```
|
||||
For each field:
|
||||
✅ Valid format
|
||||
❌ Invalid format with specific error and remediation
|
||||
|
||||
Summary:
|
||||
- Total fields checked
|
||||
- Passed count
|
||||
- Failed count
|
||||
- Exit code: 0 (all pass) or 1 (any fail)
|
||||
```
|
||||
|
||||
### Format Validation Rules
|
||||
|
||||
**Semantic Versioning (version field)**:
|
||||
- Pattern: `X.Y.Z` where X, Y, Z are non-negative integers
|
||||
- Valid: `1.0.0`, `2.5.3`, `10.20.30`
|
||||
- Invalid: `1.0`, `v1.0.0`, `1.0.0-beta` (pre-release allowed but optional)
|
||||
|
||||
**Lowercase-Hyphen Naming (name field)**:
|
||||
- Pattern: `^[a-z0-9]+(-[a-z0-9]+)*$`
|
||||
- Valid: `my-plugin`, `test-marketplace`, `plugin123`
|
||||
- Invalid: `My-Plugin`, `test_plugin`, `plugin.name`, `-plugin`, `plugin-`
|
||||
|
||||
**URL Format (homepage, repository fields)**:
|
||||
- Must start with `http://` or `https://`
|
||||
- Strict mode: Only `https://` allowed
|
||||
- Valid: `https://example.com`, `http://localhost:3000`
|
||||
- Invalid: `example.com`, `www.example.com`, `ftp://example.com`
|
||||
|
||||
**Email Format (owner.email, author.email fields)**:
|
||||
- RFC 5322 compliant pattern
|
||||
- Valid: `user@example.com`, `name.surname@company.co.uk`
|
||||
- Invalid: `user@`, `@example.com`, `user example.com`
|
||||
|
||||
**License Identifier (license field)**:
|
||||
- SPDX identifier or "Proprietary"
|
||||
- Common: MIT, Apache-2.0, GPL-3.0, BSD-3-Clause
|
||||
- Valid: `MIT`, `Apache-2.0`, `ISC`, `Proprietary`
|
||||
- Invalid: `mit`, `Apache 2.0`, `BSD`
|
||||
|
||||
**Category (category field)**:
|
||||
- One of 10 approved categories
|
||||
- Valid: development, testing, deployment, documentation, security, database, monitoring, productivity, quality, collaboration
|
||||
- Invalid: coding, devops, tools, utilities
|
||||
|
||||
### Examples
|
||||
|
||||
```bash
|
||||
# Validate plugin formats
|
||||
/schema-validation formats path:.
|
||||
|
||||
# Validate marketplace with strict HTTPS enforcement
|
||||
/schema-validation formats path:./test-marketplace type:marketplace strict:true
|
||||
|
||||
# Validate specific plugin
|
||||
/schema-validation formats path:./my-plugin type:plugin
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
- **File not found**: Show expected locations
|
||||
- **Invalid JSON**: Suggest running json validation first
|
||||
- **Format violation**: Specific error with correct pattern
|
||||
- **Unknown field**: Warn but don't fail
|
||||
|
||||
### Output Format
|
||||
|
||||
**Success (all formats valid)**:
|
||||
```
|
||||
✅ Format Validation: PASS
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Target: plugin.json
|
||||
Type: plugin
|
||||
|
||||
Format Checks (7/7):
|
||||
✅ name: "my-plugin" (lowercase-hyphen)
|
||||
✅ version: "1.0.0" (semver)
|
||||
✅ description: Valid length (73 chars)
|
||||
✅ license: "MIT" (SPDX identifier)
|
||||
✅ homepage: "https://example.com" (valid URL)
|
||||
✅ repository: "https://github.com/user/repo" (valid URL)
|
||||
✅ category: "development" (approved category)
|
||||
|
||||
Status: PASS
|
||||
```
|
||||
|
||||
**Failure (format violations)**:
|
||||
```
|
||||
❌ Format Validation: FAIL
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Target: plugin.json
|
||||
Type: plugin
|
||||
|
||||
Format Checks (4/7):
|
||||
❌ name: "My-Plugin"
|
||||
Invalid: Must use lowercase-hyphen format
|
||||
Pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
|
||||
Example: my-plugin, test-tool, plugin123
|
||||
|
||||
❌ version: "1.0"
|
||||
Invalid: Must use semantic versioning (X.Y.Z)
|
||||
Expected: Three version numbers separated by dots
|
||||
Example: 1.0.0, 2.1.5
|
||||
|
||||
✅ description: Valid (80 characters)
|
||||
|
||||
❌ license: "Apache 2.0"
|
||||
Invalid: Must be SPDX identifier
|
||||
Expected: Apache-2.0
|
||||
Valid identifiers: MIT, Apache-2.0, GPL-3.0, BSD-3-Clause
|
||||
|
||||
⚠️ homepage: "http://example.com"
|
||||
Warning: Consider using HTTPS for security
|
||||
Current: http://example.com
|
||||
Recommended: https://example.com
|
||||
|
||||
✅ repository: "https://github.com/user/repo"
|
||||
|
||||
❌ category: "coding"
|
||||
Invalid: Must be one of 10 approved categories
|
||||
Valid: development, testing, deployment, documentation,
|
||||
security, database, monitoring, productivity,
|
||||
quality, collaboration
|
||||
|
||||
Failed: 4
|
||||
Warnings: 1
|
||||
Status: FAIL
|
||||
|
||||
Action Required:
|
||||
Fix format violations:
|
||||
- name: Convert to lowercase-hyphen (my-plugin)
|
||||
- version: Use semver format (1.0.0)
|
||||
- license: Use SPDX identifier (Apache-2.0)
|
||||
- category: Choose approved category (development)
|
||||
```
|
||||
|
||||
**Marketplace Example**:
|
||||
```
|
||||
✅ Format Validation: PASS
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Target: marketplace.json
|
||||
Type: marketplace
|
||||
|
||||
Format Checks (4/4):
|
||||
✅ name: "enterprise-marketplace" (lowercase-hyphen)
|
||||
✅ owner.email: "devtools@company.com" (valid email)
|
||||
✅ metadata.homepage: "https://company.com/plugins" (valid HTTPS URL)
|
||||
✅ metadata.repository: "https://github.com/company/plugins" (valid HTTPS URL)
|
||||
|
||||
Status: PASS
|
||||
Strict HTTPS: Enforced ✅
|
||||
```
|
||||
|
||||
### Integration
|
||||
|
||||
This operation is called by:
|
||||
- `full-schema-validation.md` - Third validation step after fields check
|
||||
- `best-practices` skill - Naming and versioning validation
|
||||
- Direct user invocation for format checking
|
||||
|
||||
**Request**: $ARGUMENTS
|
||||
Reference in New Issue
Block a user