Skip to main content

Git Repository Requirement

Error: Not a git repository

Symptom:
[Evolver] FATAL: Not a git repository (/path/to/workspace/skills/evolver).
[Evolver] Evolver requires git for rollback, blast radius calculation, and solidify.
Cause: Evolver requires Git for:
  • Rollback on failure (git reset --hard or git stash)
  • Blast radius calculation (git diff --numstat)
  • Change tracking (git ls-files)
  • Diff capture for event log
Location: src/evolve.js:752-762, src/gep/solidify.js:1002-1014 Fix:
cd /path/to/workspace
git init
git add -A
git commit -m "Initial commit for Evolver"
Without Git, blast radius calculations produce empty results, leading to undetected constraint violations and potential data loss.

Validation Failures

Issue: Validation command blocked

Symptom:
BLOCKED: validation command rejected by safety check (allowed prefixes: node/npm/npx; shell operators prohibited)
Cause: Validation command contains shell operators or non-whitelisted prefix. Location: src/gep/solidify.js:569-581 Fix: Rewrite using Node.js:
# Before (blocked)
"validation": ["bash scripts/check.sh && npm test"]

# After (allowed)
"validation": [
  "node scripts/check.js",
  "npm test"
]
See: Validation Safety

Issue: Validation timeout

Symptom:
validation_failed: npm test => Command timed out after 180000ms
Cause: Validation command exceeds 180-second timeout. Location: src/gep/solidify.js:585 Fix:
  1. Optimize tests: Remove slow integration tests from validation
  2. Increase timeout (requires code change):
    // src/gep/solidify.js:585
    const timeoutMs = 300000;  // 5 minutes
    
  3. Split validation: Run fast tests only
    {
      "validation": [
        "npm run test:unit",  // Fast
        "npm run lint"        // Fast
      ]
    }
    

Issue: Tests pass locally, fail in validation

Symptom:
validation_failed: npm test => Test suite failed
But running npm test manually succeeds. Cause: Environment differences:
  • Different working directory
  • Missing environment variables
  • Race conditions in async tests
Fix:
  1. Check working directory: Validation runs from repository root
    pwd  # Should match repoRoot
    
  2. Add environment variables: Set in .env
    NODE_ENV=test
    TEST_TIMEOUT=5000
    
  3. Fix race conditions: Increase timeouts in tests
    // test.js
    jest.setTimeout(10000);  // 10 seconds
    

Repair Loops

Issue: Stuck in repair loop

Symptom:
[CircuitBreaker] Detected 3 consecutive failed repairs (gene: gene_repair_001). Forcing innovation intent to break the loop.
Cause: Same repair gene selected repeatedly, but evolution fails validation. Location: src/evolve.js:787-811 Diagnosis:
# Check last N events for repair failures
tail -10 assets/gep/events.jsonl | jq 'select(.intent == "repair" and .outcome.status == "failed")'

# Identify problematic gene
grep '"status":"failed"' assets/gep/events.jsonl | jq -r .genes_used[] | sort | uniq -c | sort -rn
Fix:
  1. Wait for circuit breaker: Evolver will auto-switch to innovation after threshold
  2. Force innovation manually:
    EVOLVE_STRATEGY=innovate node index.js
    
  3. Fix the problematic gene:
    • Inspect gene strategy: jq -r '.[] | select(.id == "gene_repair_001")' assets/gep/genes.json
    • Update validation commands
    • Increase max_files if blast radius is the issue
  4. Ban the gene (temporary):
    # Edit memory graph to inject negative outcome
    echo '{"type":"Outcome","gene_id":"gene_repair_001","status":"failed","score":0.0}' >> memory/evolution/memory_graph.jsonl
    

Memory/Load Issues

Issue: Evolver backs off due to high load

Symptom:
[Evolver] System load 2.50 exceeds max 2.0. Backing off 60000ms.
Cause: 1-minute load average exceeds EVOLVE_LOAD_MAX. Location: src/evolve.js:685-697 Fix:
  1. Check current load:
    uptime
    
  2. Increase threshold:
    EVOLVE_LOAD_MAX=4.0 node index.js --loop
    
  3. Reduce concurrent processes:
    pm2 stop other-processes
    

Issue: Too many active sessions

Symptom:
[Evolver] Agent has 15 active user sessions (max 10). Backing off 60000ms to avoid starving user conversations.
Cause: Too many active agent sessions in ~/.openclaw/agents/main/sessions/. Location: src/evolve.js:667-679 Fix:
  1. Increase queue limit:
    EVOLVE_AGENT_QUEUE_MAX=20 node index.js --loop
    
  2. Archive old sessions:
    node -e 'require("./src/evolve").performMaintenance()'
    
  3. Wait for sessions to complete: Evolver will resume automatically

Issue: Memory graph file too large

Symptom:
memory/evolution/memory_graph.jsonl: 500MB
Slow evolution cycles due to large file reads. Fix:
  1. Rotate memory graph:
    cd memory/evolution
    mv memory_graph.jsonl memory_graph_archive_$(date +%Y%m%d).jsonl
    touch memory_graph.jsonl
    
  2. Compress archives:
    gzip memory_graph_archive_*.jsonl
    
  3. Clean up old events (>90 days):
    node -e '
    const fs = require("fs");
    const cutoff = Date.now() - 90 * 24 * 60 * 60 * 1000;
    const lines = fs.readFileSync("memory/evolution/memory_graph.jsonl", "utf8").split("\n");
    const kept = lines.filter(l => {
      if (!l.trim()) return false;
      const obj = JSON.parse(l);
      return new Date(obj.created_at || obj.at).getTime() > cutoff;
    });
    fs.writeFileSync("memory/evolution/memory_graph.jsonl", kept.join("\n") + "\n");
    '
    

Session Cleanup

Issue: Too many evolver hand sessions

Symptom:
ls ~/.openclaw/agents/main/sessions/ | grep evolver_hand | wc -l
# 500 files
Cause: Evolver creates single-use Hand Agent sessions that accumulate over time. Fix: Maintenance runs automatically and cleans up evolver hand sessions:
# Manual cleanup
rm ~/.openclaw/agents/main/sessions/evolver_hand_*.jsonl
Location: src/evolve.js:456-474

Issue: Session scope not filtering

Symptom:
[SessionScope] No sessions match scope "channel_123456". Using all sessions (fallback).
Cause: Session filenames don’t contain the scope identifier. Fix:
  1. Check session filenames:
    ls ~/.openclaw/agents/main/sessions/
    
  2. Rename sessions to include scope:
    mv session_001.jsonl channel_123456_session_001.jsonl
    
  3. Adjust scope identifier to match existing filenames:
    EVOLVER_SESSION_SCOPE=session  # Match "session_*" files
    
See: Session Scope

Version Checking Guidance

Issue: Unexpected errors or behavior

Always verify your version before debugging:
node -e "const p=require('./package.json'); console.log(p.version)"
If not on the latest release:
# If installed via git
git pull && npm install

# If installed via npm (global install)
npm install -g evolver@latest
Check latest releases:
curl -s https://api.github.com/repos/autogame-17/evolver/releases/latest | jq -r .tag_name
Location: SKILL.md:111-130
Most reported issues are already fixed in newer versions. Always update before filing a bug report.

Blast Radius Issues

Issue: max_files exceeded

Symptom:
constraint: max_files exceeded: 25 > 12
Cause: Evolution touched more files than gene’s max_files constraint. Fix:
  1. Check blast breakdown:
    tail -1 assets/gep/events.jsonl | jq '.meta.blast_breakdown'
    
  2. Increase gene’s max_files:
    {
      "constraints": {
        "max_files": 25
      }
    }
    
  3. Or reduce scope: Split evolution into smaller steps

Issue: Hard cap breach

Symptom:
HARD CAP BREACH: 65 files / 25000 lines exceeds system limit (60 files / 20000 lines)
Cause: Evolution exceeded system-wide hard caps. Location: src/gep/solidify.js:403-404 Fix:
  1. Increase hard caps (use with caution):
    EVOLVER_HARD_CAP_FILES=100
    EVOLVER_HARD_CAP_LINES=50000
    
  2. Investigate cause: Check blast breakdown for directories with unexpected changes
    tail -1 assets/gep/events.jsonl | jq '.meta.blast_breakdown'
    
  3. Prevent bulk operations: Add constraints to genes to prevent accidental mass edits

Issue: Estimate drift

Symptom:
Estimate drift: actual 25 files is 5.0x the estimated 5. Agent did not plan accurately.
Cause: Agent estimated small blast radius but actual changes were much larger. Fix:
  1. Improve agent planning: Add explicit blast radius estimation step to gene strategy
    {
      "strategy": [
        "Estimate blast radius (files, lines) before editing and record it",
        "Apply changes"
      ]
    }
    
  2. Review gene strategy: Ensure instructions are specific and scoped
  3. Use stricter constraints: Lower max_files to force smaller evolutions

Self-Modification Issues

Issue: Critical path modified

Symptom:
constraint: critical_path_modified: skills/evolver/src/evolve.js
Cause: Evolution attempted to modify protected evolver source files. Location: src/gep/solidify.js:306-319 Fix:
  1. Intended self-modification: Enable opt-in
    EVOLVE_ALLOW_SELF_MODIFY=true node index.js
    
  2. Unintended modification: Update gene’s forbidden_paths
    {
      "constraints": {
        "forbidden_paths": ["skills/evolver/"]
      }
    }
    
  3. Review gene strategy: Ensure it doesn’t target evolver files
See: Protected Files

Hub/Network Issues

Issue: Hub search timeout

Symptom:
[SearchFirst] Hub search failed (non-fatal): timeout
Cause: Hub request exceeded timeout (default: 8 seconds). Location: src/gep/hubSearch.js:108 Fix: Non-fatal, evolver continues with local evolution. To disable:
EVOLVER_REUSE_MODE=never node index.js

Issue: Worker task claim failed

Symptom:
[WorkerPool] Task selection failed (non-fatal): HTTP 409 Conflict
Cause: Another worker claimed the task first. Fix: Expected behavior in multi-worker setups. Evolver will pick up the next available task.

Issue: Auto-publish failed

Symptom:
[Solidify] Auto-publish failed (non-fatal): 401 Unauthorized
Cause: Missing or invalid A2A_HUB_TOKEN. Fix:
  1. Check token:
    echo $A2A_HUB_TOKEN
    
  2. Regenerate token at https://evomap.ai/settings
  3. Set token:
    export A2A_HUB_TOKEN=your_token_here
    
  4. Or disable auto-publish:
    EVOLVER_AUTO_PUBLISH=false node index.js
    

Rollback Issues

Issue: Rollback deleted critical files

Symptom: After rollback, skills/evolver/src/evolve.js is missing. Cause: Bug in rollback logic (should never happen with current protections). Location: src/gep/solidify.js:700-723 Recovery:
# Check if file is in Git history
git log --all -- skills/evolver/src/evolve.js

# Restore from Git
git checkout HEAD -- skills/evolver/src/evolve.js

# Or restore from backup
cp backup/evolver/src/evolve.js skills/evolver/src/evolve.js

Issue: Rollback stash failed

Symptom:
[Rollback] Stash failed or no changes, using hard reset
Cause: No changes to stash (all changes were already committed or discarded). Fix: Expected behavior when EVOLVER_ROLLBACK_MODE=stash but no changes exist. Evolver falls back to hard reset.

Canary Issues

Issue: Canary check failed

Symptom:
constraint: canary_failed: index.js cannot load in child process
Cause: Evolution broke index.js or its dependencies. Location: src/gep/solidify.js:1098-1107 Fix:
  1. Check canary output:
    tail -1 assets/gep/events.jsonl | jq '.meta.canary_ok, .meta.canary_skipped'
    
  2. Run canary manually:
    node src/canary.js
    
  3. Review changes: Canary failure indicates syntax error or missing dependency
    git diff HEAD~1
    

Performance Issues

Issue: Evolution cycles are slow

Symptom: Each cycle takes >5 minutes. Diagnosis:
  1. Check cycle breakdown:
    tail -1 assets/gep/events.jsonl | jq '.meta.scan_ms'
    
  2. Profile components:
    • Signal extraction: Reading too many session logs?
    • Memory graph queries: File too large?
    • Validation: Tests too slow?
Fix:
  1. Session log cleanup: Archive old sessions
  2. Memory graph rotation: Rotate large files
  3. Faster validation: Use unit tests only
  4. Session scope: Reduce signals with scoping

Build docs developers (and LLMs) love