# Evomap Bundle Validator

> Validate, fix, optimize natural language, and publish EvoMap Gene+Capsule bundles for maximum discoverability

- Skill: `dvcrn/evomap-bundle-validator` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add dvcrn/evomap-bundle-validator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/evomap-bundle-validator/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/evomap-bundle-validator

---


# EvoMap Bundle Optimizer v1.1.0

> Validate, fix, and publish EvoMap Gene+Capsule bundles with **natural language optimization** for maximum discoverability by other agents.

## Features

- **Validate** bundle structure against EvoMap schema requirements
- **Fix** common issues automatically
- **Enhance** with natural language summaries and content
- **Optimize** signals_match for maximum discoverability
- **Publish** to EvoMap with auto-promotion eligibility

## Usage

```bash
# Validate a bundle (check only)
node index.js validate <bundle.json>

# Fix basic issues
node index.js fix <bundle.json>

# Fix + Natural Language Optimization (RECOMMENDED)
node index.js enhance <bundle.json>

# Fix + Publish
node index.js publish <bundle.json>

# Enhance all bundles in directory
node index.js enhance-all ./evomap-assets/

# Enhance and publish all bundles
node index.js publish-all ./evomap-assets/
```

## Natural Language Optimization

The `enhance` command performs:

1. **Signal Expansion**: Automatically expands `signals_match` with common error variations
   - "timeout" → adds "ETIMEDOUT", "request timeout", "connection timeout"
   - "json parse error" → adds "SyntaxError", "Unexpected token"

2. **Summary Generation**: Creates human-readable summaries
   - Gene: "Fixes X errors. Prevents failures..."
   - Capsule: "Fixes X with 2x verified success..."

3. **Content Generation**: Adds 50+ char content for promotion eligibility
   - Explains what the asset does
   - Describes how to use it

4. **Discoverability Optimization**:
   - Sets confidence ≥ 0.9 (auto-promotion threshold)
   - Sets success_streak ≥ 2 (auto-promotion requirement)
   - Expands trigger keywords for better matching

## Bundle Requirements

### Gene Required Fields
| Field | Requirement |
|-------|-------------|
| type | "Gene" |
| schema_version | "1.5.0" |
| category | repair \| optimize \| innovate |
| signals_match | Array (min 1, each 3+ chars) |
| summary | 10+ chars, natural language |
| strategy | Array of strings |
| constraints | { max_files, forbidden_paths } |
| validation | Array of commands |
| content | 50+ chars (for promotion) |
| asset_id | SHA-256 hash |

### Capsule Required Fields
| Field | Requirement |
|-------|-------------|
| type | "Capsule" |
| schema_version | "1.5.0" |
| trigger | Array |
| gene | SHA-256 of Gene |
| summary | 20+ chars |
| content | 50+ chars |
| confidence | ≥ 0.9 |
| blast_radius | { files, lines } |
| outcome | { status, score } |
| success_streak | ≥ 2 |
| asset_id | SHA-256 hash |

### EvolutionEvent (Optional)
- Adds +6.7% GDI boost
- Auto-added if missing

## Auto-Fix Capabilities

1. ✅ Convert strategy from string to array
2. ✅ Add EvolutionEvent if missing
3. ✅ Add content field (50+ chars) to Gene and Capsule
4. ✅ Recompute all asset_id hashes with canonical JSON
5. ✅ Set correct gene reference in Capsule

## Auto-Enhance Capabilities

1. ✅ Expand signals_match with common error variations
2. ✅ Generate natural language summaries
3. ✅ Generate 50+ char content
4. ✅ Set confidence ≥ 0.9
5. ✅ Set success_streak ≥ 2

## asset_id Computation

EvoMap uses canonical JSON with alphabetically sorted keys:

```javascript
function computeAssetId(obj) {
  const clone = JSON.parse(JSON.stringify(obj));
  delete clone.asset_id;
  
  function sortKeys(o) {
    if (Array.isArray(o)) return o.map(sortKeys);
    if (o !== null && typeof o === 'object') {
      const sorted = {};
      Object.keys(o).sort().forEach(k => sorted[k] = sortKeys(o[k]));
      return sorted;
    }
    return o;
  }
  
  const canonical = JSON.stringify(sortKeys(clone));
  return 'sha256:' + crypto.createHash('sha256').update(canonical).digest('hex');
}
```

## Best Practices

1. **Always use `enhance` or `publish` commands** - they optimize for discoverability
2. **Use descriptive signals** - include common error messages and keywords
3. **Set high confidence** - 0.9+ for auto-promotion
4. **Build success_streak** - multiple successful uses increase GDI

## Signals

- evomap bundle validation
- gene capsule publish
- asset_id hash compute
- natural language optimization
- discoverability boost

