Skip to content
Back to skills

1860 6767 E Wa Wflw Extensions Validation Ci Gates 188c8a0f

ASecurity

**Document Type**: Workflow & Automation - Standard (WA-STND) **Document ID**: 6767-e-WA-STND-extensions-validation-and-ci-gates **Title**: Extensions Validation and CI Gates **Version**: 3.0.0 **Status**: CANONICAL (Enterprise-Only) **Date**: 2025-12-20 **Companion To**: 6767-c (Extensions Standard), 6767-d (Schema) **Authority**: Intent Solutions (Enterprise Marketplace) ---

  • 9 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 1, 2026
toolspythongoshellbashawstestinggitapici/cdsecurity

Works with

  • claude code
  • vscode
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned June 1, 2026

npx -y skills add tools-only/X-Skills --skill 1860-6767-e-wa-wflw-extensions-validation-ci-gates_188c8a0f --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1860 6767 E Wa Wflw Extensions Validation Ci Gates 188c8a0f?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1860 6767 E Wa Wflw Extensions Validation Ci Gates 188c8a0f
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1860-6767-e-wa-wflw-extensions-validation-ci-gates/badge)](https://www.skillsdirectory.com/skills/tools-only-1860-6767-e-wa-wflw-extensions-validation-ci-gates)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# 6767-e-WA-WFLW-wa-stnd-extensions-validation-ci.md

**Document Type**: Workflow & Automation - Standard (WA-STND)
**Document ID**: 6767-e-WA-STND-extensions-validation-and-ci-gates
**Title**: Extensions Validation and CI Gates
**Version**: 3.0.0
**Status**: CANONICAL (Enterprise-Only)
**Date**: 2025-12-20
**Companion To**: 6767-c (Extensions Standard), 6767-d (Schema)
**Authority**: Intent Solutions (Enterprise Marketplace)

---

## TRUTH INVARIANTS (ENTERPRISE MODE)

**MODE**: ENTERPRISE MODE ALWAYS ON. No "Anthropic-minimum" fallback. All fields marked "REQUIRED" are REQUIRED.

**CORE RULES**:

1. **allowed-tools Format**:
   - ✅ CORRECT: CSV string → `allowed-tools: "Read,Write,Grep,Glob"`
   - ❌ WRONG: YAML array → `allowed-tools: [Read, Write, Grep]`
   - Violation: CRITICAL ERROR (`SKILL_022`)

2. **Bash Scoping**:
   - ✅ CORRECT: Scoped → `Bash(git:*)`, `Bash(npm:*)`, `Bash(python:*)`
   - ❌ WRONG: Unscoped → `Bash`
   - Violation: CRITICAL ERROR (`SKILL_024`)

3. **Path Portability**:
   - ✅ CORRECT: `${CLAUDE_PLUGIN_ROOT}/...` or `{baseDir}/...`
   - ❌ WRONG: `/home/user/...` or `~/...`
   - Violation: CRITICAL ERROR (`SKILL_103`, `SEC_005`)

4. **Naming Convention**:
   - Pattern: `^[a-z0-9-]+$` (kebab-case only)
   - Max length: 64 chars
   - Reserved words: NO "claude" or "anthropic"
   - Violation: CRITICAL ERROR (`NAMING_001`, `NAMING_002`, `NAMING_003`)

5. **Versioning**:
   - Format: SemVer `MAJOR.MINOR.PATCH` (3 parts)
   - Example: `1.0.0`, `2.3.1`
   - Violation: CRITICAL ERROR (`PLUGIN_012`, `SKILL_032`)

6. **Directory Structure**:
   - `.claude-plugin/` contains ONLY `plugin.json`
   - Component dirs (skills/, agents/, commands/) at plugin root, NOT inside `.claude-plugin/`
   - Violation: CRITICAL ERROR (`DIR_002`, `DIR_005`)

7. **Security**:
   - NO hardcoded secrets, API keys, .env files committed
   - Secrets via environment variables ONLY
   - Exemptions: ONLY `tests/fixtures/**` + known test patterns (EXAMPLE, DUMMY, test-)
   - Violation: CRITICAL ERROR (`SEC_001`, `SEC_002`, `SEC_003`, `SEC_004`)

8. **Context Hygiene**:
   - SKILL.md body ≤ 5,000 words / 500 lines / ~7,500 tokens
   - Heavy content in `references/` directory (loaded on-demand)
   - Violation: HIGH ERROR (`SKILL_100`, `SKILL_101`)

9. **Discoverability**:
   - Description MUST include "Use when..." phrase
   - Description MUST include 2-6 trigger phrases
   - Violation: HIGH ERROR (`SKILL_015`, `SKILL_016`)

10. **Required Fields (Enterprise)**:
    - Plugin: name, version, description, author (name + email), license, keywords
    - Skill: name, description, allowed-tools (CSV), version, author, license, tags
    - Violation: CRITICAL ERROR (various `PLUGIN_*`, `SKILL_*` codes)

**VALIDATION**:
- Validator runs in ENTERPRISE MODE ONLY
- CRITICAL/HIGH errors BLOCK PR merge
- Deterministic error codes (6767-d schema)

**NO EXCEPTIONS**: These rules apply to ALL plugins/skills, regardless of size or complexity.

---

## 1. Purpose

This specification defines **enforcement mechanisms** for Claude Code extensions:
- Validator implementation requirements
- CI/CD pipeline gates and workflows
- Auto-fix policies
- Compliance reporting

All rules herein operate in **ENTERPRISE MODE ONLY**. There is no Anthropic-minimum fallback.

---

## 2. Validator Requirements

### 2.1 Execution Modes

#### 2.1.1 Enterprise Mode (ONLY MODE)

**Command**:
```bash
python validate_standards.py --plugin-root /path/to/plugin
```

**Behavior**:
- Enforce ALL enterprise requirements from 6767-c and 6767-d
- No "Anthropic-minimum" fallback
- All fields marked "REQUIRED" in 6767-c are REQUIRED
- Exit code 1 on CRITICAL or HIGH errors
- Exit code 2 on MEDIUM or LOW warnings
- Exit code 0 on success

**Flags**:
- `--plugin-root PATH`: Plugin root directory (REQUIRED)
- `--verbose`: Detailed output
- `--json`: JSON report output
- `--fix`: Auto-fix simple issues (use with caution)

### 2.2 Validation Categories

| Category | Checks | Severity Range |
|----------|--------|----------------|
| **Manifest** | plugin.json schema, required fields, name/version format | CRITICAL |
| **Directory** | .claude-plugin/ ONLY plugin.json, components at root | CRITICAL |
| **Skills** | Frontmatter, CSV allowed-tools, body limits | CRITICAL - HIGH |
| **Agents** | Frontmatter, required fields | CRITICAL - HIGH |
| **Security** | Secrets, .env files, paths, Bash scoping | CRITICAL |
| **Naming** | Kebab-case, reserved words, max length | CRITICAL - HIGH |
| **Context** | Body size limits, progressive disclosure | HIGH - MEDIUM |

### 2.3 Required Checks (Comprehensive List)

#### 2.3.1 Plugin Manifest

- [ ] plugin.json exists at `.claude-plugin/plugin.json`
- [ ] JSON is valid (parseable)
- [ ] `name` field present, string, kebab-case, max 64 chars
- [ ] `name` does NOT contain "claude" or "anthropic"
- [ ] `version` field present, string, SemVer format `\d+\.\d+\.\d+`
- [ ] `description` field present, string, max 1024 chars
- [ ] `author` field present, object with `name` and `email`
- [ ] `author.name` present, string, min 1 char
- [ ] `author.email` present, string, valid email format
- [ ] `license` field present, string, min 1 char
- [ ] `keywords` field present, array, min 1 item
- [ ] `homepage` (if present) is valid URL
- [ ] `repository` (if present) is valid URL

#### 2.3.2 Directory Structure

- [ ] `.claude-plugin/` directory exists
- [ ] `.claude-plugin/` contains ONLY `plugin.json` (no other files)
- [ ] `plugin.json` exists at `.claude-plugin/plugin.json`
- [ ] Component dirs (skills/, agents/, commands/, hooks/) at plugin root (NOT in .claude-plugin/)
- [ ] No empty directories

#### 2.3.3 Skills (if present)

- [ ] Skills located at `skills/<skill-name>/SKILL.md`
- [ ] Frontmatter is valid YAML
- [ ] `name` present, string, kebab-case, max 64 chars, no reserved words
- [ ] `description` present, string, max 1024 chars
- [ ] `description` contains "Use when" phrase (case-insensitive)
- [ ] `description` contains trigger phrases
- [ ] `allowed-tools` present, **string** (NOT array)
- [ ] `allowed-tools` is CSV format (comma-separated)
- [ ] Bash tool (if present) is scoped: `Bash(command:*)` NOT just `Bash`
- [ ] `version` present, string, SemVer format
- [ ] `author` present, string, min 1 char
- [ ] `license` present, string, min 1 char
- [ ] `tags` present, array, min 1 item
- [ ] Body ≤ 5,000 words
- [ ] Body ≤ 500 lines
- [ ] No absolute paths in body (e.g., `/home/...`)
- [ ] Paths use `{baseDir}` for repo-relative references

#### 2.3.4 Agents (if present)

- [ ] Agents located at `agents/<agent-name>.md`
- [ ] Frontmatter is valid YAML
- [ ] `name` present, string
- [ ] `description` present, string
- [ ] `tools` (if present) is string (CSV format)

#### 2.3.5 Security

- [ ] No hardcoded secrets (API keys, AWS keys, SSH keys)
  - Exempt only `tests/fixtures/**` OR files with known test markers (EXAMPLE, DUMMY, test-)
- [ ] No `.env` files committed
- [ ] No absolute paths (e.g., `/home/`, `/usr/`)
- [ ] All paths use `${CLAUDE_PLUGIN_ROOT}` or `{baseDir}`
- [ ] Bash tool scoping enforced (no unscoped Bash)

#### 2.3.6 Naming

- [ ] Plugin name is kebab-case (`^[a-z0-9-]+$`)
- [ ] Skill names are kebab-case
- [ ] Agent names are kebab-case (recommended)
- [ ] No uppercase letters in names
- [ ] No underscores in names
- [ ] No reserved words (claude, anthropic)

---

## 3. CI/CD Workflows

### 3.1 PR Validation Workflow

**File**: `.github/workflows/pr.yml`

**Trigger**: Every pull request to `main` branch

**Purpose**: Block non-compliant code from merging

**Steps**:
```yaml
name: PR Validation

on:
  pull_request:
    branches: [main]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: |
          cd plugins/my-plugin
          pip install -r scripts/requirements.txt

      - name: Validate standards compliance (ENTERPRISE MODE)
        run: |
          cd plugins/my-plugin
          python scripts/validate_standards.py --plugin-root . --verbose
        continue-on-error: false       # ← BLOCKING GATE

      - name: Run security tests
        run: |
          cd plugins/my-plugin
          pytest tests/test_security.py -v

      - name: Run component tests
        run: |
          cd plugins/my-plugin
          pytest tests/ -v

      - name: Lint check
        run: |
          cd plugins/my-plugin
          black --check src/ tests/
          isort --check-only src/ tests/
          flake8 src/ tests/ --count --statistics
```

**Blocking Behavior**:
- Validator runs FIRST (fail-fast)
- If validator exits with code 1 (CRITICAL/HIGH errors), PR is BLOCKED
- All other steps run only if validation passes
- Developer must fix errors locally and push again

**Expected Output (Success)**:
```
✓ Checkout code
✓ Set up Python 3.10
✓ Install dependencies
✓ Validate standards compliance (ENTERPRISE MODE)
  ✅ ALL VALIDATIONS PASSED!
✓ Run security tests
✓ Run component tests
✓ Lint check
```

**Expected Output (Failure)**:
```
✓ Checkout code
✓ Set up Python 3.10
✓ Install dependencies
✗ Validate standards compliance (ENTERPRISE MODE)
  [CRITICAL] skills/my-skill/SKILL.md
    Field: allowed-tools
    Expected: CSV string (e.g., "Read,Write,Grep")
    Actual: YAML array format
    Fix: Change frontmatter to: allowed-tools: "Read,Write,Grep"

  FAILED: 1 error found (1 CRITICAL)

  ❌ PR BLOCKED - Fix errors above and push again
```

### 3.2 Main Branch Workflow

**File**: `.github/workflows/main.yml`

**Trigger**: Every push to `main` branch (post-merge)

**Purpose**: Comprehensive validation + reporting

**Steps**:
```yaml
name: Main Branch CI

on:
  push:
    branches: [main]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: |
          cd plugins/my-plugin
          pip install -r scripts/requirements.txt

      - name: Validate standards (ENTERPRISE MODE)
        run: |
          cd plugins/my-plugin
          python scripts/validate_standards.py --plugin-root . --verbose --json > validation-report.json

      - name: Run all tests with coverage
        run: |
          cd plugins/my-plugin
          pytest tests/ -v --cov=src --cov-report=term --cov-report=html

      - name: Lint and format check
        run: |
          cd plugins/my-plugin
          black --check src/ tests/
          isort --check-only src/ tests/
          flake8 src/ tests/ --count --statistics

      - name: Upload validation report
        uses: actions/upload-artifact@v4
        with:
          name: validation-report
          path: plugins/my-plugin/validation-report.json

      - name: Upload coverage report
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: plugins/my-plugin/htmlcov/
```

**Purpose**:
- Comprehensive validation (same rigor as PR)
- Generate coverage reports
- Archive validation artifacts
- Catch issues that might slip through PR review

---

## 4. Auto-Fix Policy

### 4.1 Safe Auto-Fixes (Allowed)

**Command**: `python validate_standards.py --plugin-root . --fix`

**Allowed Auto-Fixes**:

1. **Trailing whitespace removal**
   - Severity: LOW
   - Risk: None
   - Example: `"description": "...  "` → `"description": "..."`

2. **JSON/YAML formatting**
   - Severity: LOW
   - Risk: None (preserves semantics)
   - Example: Indent to 2 spaces, sort keys alphabetically

3. **SemVer normalization**
   - Severity: LOW
   - Risk: Low (only adds missing zeros)
   - Example: `"version": "1.0"` → `"version": "1.0.0"`

4. **Keyword de-duplication**
   - Severity: LOW
   - Risk: None
   - Example: `["test", "test", "demo"]` → `["test", "demo"]`

### 4.2 Unsafe Auto-Fixes (NEVER Automatic)

**NEVER auto-fix** (require manual intervention):

1. **allowed-tools YAML array → CSV string**
   - Risk: High (semantic change, may alter tool list)
   - Reason: Must verify tool list is correct
   - Action: Flag as CRITICAL, require developer fix

2. **Bash scoping**
   - Risk: Critical (security implications)
   - Reason: Cannot infer correct scope
   - Action: Flag as CRITICAL, require developer to scope

3. **Description content**
   - Risk: High (semantic change)
   - Reason: Cannot generate "Use when" or trigger phrases
   - Action: Flag as HIGH, require developer to enhance

4. **Secret removal**
   - Risk: Critical (may break functionality)
   - Reason: Unknown if secret is needed elsewhere
   - Action: Flag as CRITICAL, require developer to replace with env var

5. **Absolute path conversion**
   - Risk: High (may break paths)
   - Reason: Cannot infer correct relative path
   - Action: Flag as CRITICAL, require developer to fix

### 4.3 Auto-Fix Reporting

**Output Format**:
```
Running validator with --fix enabled...

✅ AUTO-FIXED:
  - plugins/my-plugin/plugin.json:
    Normalized version "1.0" → "1.0.0"
  - skills/my-skill/SKILL.md:
    Removed trailing whitespace (3 lines)

⚠️  CANNOT AUTO-FIX (manual intervention required):
  - [CRITICAL] skills/my-skill/SKILL.md
    Field: allowed-tools
    Issue: YAML array format
    Fix: Change frontmatter to: allowed-tools: "Read,Write,Grep"

SUMMARY: 2 auto-fixed, 1 requires manual fix
```

---

## 5. Compliance Reporting

### 5.1 JSON Report Schema

```json
{
  "validator_version": "3.0.0",
  "enterprise_mode": true,
  "plugin_root": "/path/to/plugin",
  "timestamp": "2025-12-20T10:00:00Z",
  "summary": {
    "total_checks": 42,
    "passed": 40,
    "failed": 2,
    "errors": {
      "critical": 1,
      "high": 1,
      "medium": 0,
      "low": 0
    }
  },
  "errors": [
    {
      "code": "SKILL_022",
      "severity": "CRITICAL",
      "category": "skills",
      "file": "skills/my-skill/SKILL.md",
      "line": 5,
      "field": "allowed-tools",
      "expected": "CSV string (e.g., \"Read,Write,Grep\")",
      "actual": "YAML array format",
      "fix": "Change frontmatter to: allowed-tools: \"Read,Write,Grep\"",
      "docs_url": "https://docs.example.com/6767-d#skill-allowed-tools"
    }
  ],
  "warnings": [],
  "passed_checks": [
    "PLUGIN_001: plugin.json exists",
    "PLUGIN_002: name field present",
    "PLUGIN_003: name is kebab-case",
    ...
  ]
}
```

### 5.2 Console Output (Human-Readable)

```
================================================================================
🔍 STANDARDS VALIDATOR (ENTERPRISE MODE)
================================================================================

🔍 Validating plugin at: /path/to/plugin
📋 Enterprise mode: ENABLED (no fallback)

📦 Validating plugin manifest...
  ✓ plugin.json exists
  ✓ name field present and valid
  ✓ version field present and valid (SemVer)
  ✓ author object complete (name + email)
  ✓ license field present
  ✓ keywords array present (3 items)

📁 Validating directory structure...
  ✓ .claude-plugin/ contains ONLY plugin.json
  ✓ No components inside .claude-plugin/

🎯 Validating skills (2 skills found)...
  ✓ skills/skill-1/SKILL.md frontmatter valid
  ✗ skills/skill-2/SKILL.md has errors (1 CRITICAL)

🔒 Running security scans...
  ✓ No hardcoded secrets detected
  ✓ No .env files committed
  ✓ All paths relative or use ${CLAUDE_PLUGIN_ROOT}

📝 Validating naming conventions...
  ✓ All names kebab-case
  ✓ No reserved words detected

================================================================================
📊 VALIDATION RESULTS
================================================================================

❌ 2 ERRORS FOUND:

[CRITICAL] skills/skill-2/SKILL.md
  Field: allowed-tools
  Expected: CSV string (e.g., "Read,Write,Grep")
  Actual: YAML array format
  Fix: Change frontmatter to: allowed-tools: "Read,Write,Grep"
  Docs: https://docs.example.com/6767-d#skill-allowed-tools

[HIGH] skills/skill-2/SKILL.md
  Field: description
  Expected: Must contain "Use when" phrase
  Actual: Missing usage scenarios
  Fix: Add "Use when [scenarios]" to description

================================================================================
Summary: 40 passed, 2 failed (1 CRITICAL, 1 HIGH)
================================================================================

❌ FAILED: Fix errors above before merging to main branch
```

---

## 6. Flat 000-docs/ Validation

### 6.1 Document Filing System Checks

**Applies to**: Plugins with `000-docs/` directory

**Checks**:
- [ ] `000-docs/` is flat (no subdirectories)
- [ ] All filenames match pattern: `NNN-CC-ABCD-short-description.ext`
- [ ] NNN are unique (no duplicates unless valid suffix: `005a`, `006-1`)
- [ ] CC codes valid (DR, RA, PP, AT, TQ, PM, AA, etc.)
- [ ] ABCD codes valid for their CC category
- [ ] Short descriptions 1-4 words, kebab-case

**Error Codes**:
- `DOC_001`: 000-docs/ is not flat (has subdirectories)
- `DOC_002`: Invalid filename pattern
- `DOC_003`: Duplicate NNN
- `DOC_004`: Invalid CC code
- `DOC_005`: Invalid ABCD for CC
- `DOC_006`: Short description too long or not kebab-case

**Severity**: CRITICAL (doc filing violations block PRs)

### 6.2 Example Validation

**Good**:
```
000-docs/
├── 001-DR-STND-document-filing-system.md      ✓
├── 002-RA-ANLY-canonical-ruleset.md           ✓
├── 003-AA-AACR-phase-1-cleanup.md             ✓
```

**Bad**:
```
000-docs/
├── planned-plugins/                            ✗ Subdirectory not allowed
│   └── README.md
├── 001-AA-TMPL-template.md                     ✗ TMPL is DR not AA
├── 001-DR-STND-another-doc.md                  ✗ Duplicate NNN 001
├── 002_REPORT_analysis.md                      ✗ Invalid pattern (underscores)
```

---

## 7. Integration with Development Workflow

### 7.1 Pre-Commit Hook (Recommended)

**File**: `.git/hooks/pre-commit`

```bash
#!/bin/bash

echo "Running standards validation..."
cd plugins/my-plugin
python scripts/validate_standards.py --plugin-root .

if [ $? -ne 0 ]; then
    echo "❌ Standards validation failed. Commit aborted."
    echo "Fix errors above and try again."
    exit 1
fi

echo "✅ Standards validation passed"
exit 0
```

**Installation**:
```bash
chmod +x .git/hooks/pre-commit
```

### 7.2 Pre-Push Hook (Alternative)

**File**: `.git/hooks/pre-push`

```bash
#!/bin/bash

echo "Running comprehensive standards validation..."
cd plugins/my-plugin
python scripts/validate_standards.py --plugin-root . --verbose

if [ $? -ne 0 ]; then
    echo "❌ Standards validation failed. Push aborted."
    exit 1
fi

echo "✅ All validations passed"
exit 0
```

### 7.3 IDE Integration (VS Code)

**File**: `.vscode/tasks.json`

```json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Validate Standards (Enterprise)",
      "type": "shell",
      "command": "cd plugins/my-plugin && python scripts/validate_standards.py --plugin-root . --verbose",
      "group": {
        "kind": "test",
        "isDefault": true
      },
      "presentation": {
        "reveal": "always",
        "panel": "new"
      },
      "problemMatcher": []
    }
  ]
}
```

**Usage**: `Ctrl+Shift+B` → Select "Validate Standards (Enterprise)"

---

## 8. Validator Test Suite

### 8.1 Required Test Coverage

Validator MUST have tests for:

1. **Manifest Validation**:
   - Valid plugin.json passes
   - Missing required fields fail (CRITICAL)
   - Invalid name pattern fails (CRITICAL)
   - Invalid version format fails (CRITICAL)
   - Missing author.email fails (CRITICAL)

2. **Directory Structure**:
   - .claude-plugin/ with ONLY plugin.json passes
   - Extra files in .claude-plugin/ fail (CRITICAL)
   - Components inside .claude-plugin/ fail (CRITICAL)

3. **Skills**:
   - Valid skill passes
   - YAML array allowed-tools fails (CRITICAL)
   - Unscoped Bash fails (CRITICAL)
   - Missing "Use when" fails (HIGH)
   - Body >5,000 words fails (HIGH)

4. **Security**:
   - Hardcoded API key fails (CRITICAL)
   - test/fixtures/ secret allowed (passes)
   - Known test pattern (EXAMPLE) allowed (passes)
   - Real secret in test file fails (CRITICAL)

5. **Naming**:
   - Kebab-case name passes
   - Uppercase in name fails (CRITICAL)
   - Reserved word fails (CRITICAL)

### 8.2 Test Pattern

```python
def test_allowed_tools_yaml_array_fails():
    """YAML array for allowed-tools should fail (CRITICAL)"""
    skill_path = create_temp_skill(frontmatter={
        'name': 'test-skill',
        'description': 'Test skill. Use when testing.',
        'allowed-tools': ['Read', 'Write', 'Bash'],  # ← YAML array (wrong)
        'version': '1.0.0',
        'author': 'Test <test@example.com>',
        'license': 'MIT',
        'tags': ['test']
    })

    errors, warnings = validate_skill_file(skill_path)

    assert len(errors) > 0
    assert any(e.code == 'SKILL_022' and e.severity == 'CRITICAL' for e in errors)
    assert 'CSV string' in str(errors[0].expected)
```

---

## 9. Rollout Strategy

### 9.1 Phase 1: Validator Creation

- [ ] Implement validator per 6767-d schema
- [ ] Add comprehensive test suite (>90% coverage)
- [ ] Validate against reference plugins (known good/bad)
- [ ] Document all error codes in README

### 9.2 Phase 2: Template Updates

- [ ] Update skill-template.md: `allowed-tools` → CSV string
- [ ] Update gemini-prompt-template.md: enterprise fields required
- [ ] Update generation-config.json: enterprise-only validation
- [ ] Regenerate any auto-generated skills

### 9.3 Phase 3: CI Integration

- [ ] Add PR workflow (.github/workflows/pr.yml)
- [ ] Add main workflow (.github/workflows/main.yml)
- [ ] Test on sample PRs
- [ ] Document workflow behavior in README

### 9.4 Phase 4: Enforcement

- [ ] Enable PR blocking (set `continue-on-error: false`)
- [ ] Monitor first week for false positives
- [ ] Adjust validator if needed
- [ ] Publish rollout AAR

---

## 10. Deprecation of Old Validators

### 10.1 Legacy Validators (Deprecated)

**Deprecated**:
- Any validator that supports "Anthropic-minimum" mode
- Any validator that treats `allowed-tools` YAML array as valid
- Any validator that doesn't enforce enterprise fields

**Action**: Update or replace with 6767-c/d/e compliant validator

### 10.2 Migration Path

**For existing plugins**:
1. Run new validator to identify violations
2. Fix CRITICAL errors first (blocking)
3. Fix HIGH errors next (important)
4. Address MEDIUM/LOW warnings over time
5. Update CI to use new validator

**Grace Period**: None (enterprise mode enforced immediately)

---

## 11. References

### 11.1 Related Standards

- **6767-c**: Extensions Standard (policy and rationale)
- **6767-d**: Extensions Schema (validation rules)
- **Document Filing System v4.2**: 000-docs/ structure

### 11.2 Tools

- **Validator Reference Implementation**: `/scripts/validate_standards.py`
- **CI Workflow Templates**: `.github/workflows/`
- **Pre-commit Hook Template**: Included in section 7.1

---

**END OF SPECIFICATION**

**Version**: 3.0.0
**Status**: CANONICAL (Enterprise-Only)
**Date**: 2025-12-20

Files in this skill

  • README.md1.1 KB
  • skill.md22.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.