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:
- Optimize tests: Remove slow integration tests from validation
- Increase timeout (requires code change):
// src/gep/solidify.js:585
const timeoutMs = 300000; // 5 minutes
- 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:
-
Check working directory: Validation runs from repository root
pwd # Should match repoRoot
-
Add environment variables: Set in
.env
NODE_ENV=test
TEST_TIMEOUT=5000
-
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:
-
Wait for circuit breaker: Evolver will auto-switch to innovation after threshold
-
Force innovation manually:
EVOLVE_STRATEGY=innovate node index.js
-
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
-
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:
-
Check current load:
-
Increase threshold:
EVOLVE_LOAD_MAX=4.0 node index.js --loop
-
Reduce concurrent 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:
-
Increase queue limit:
EVOLVE_AGENT_QUEUE_MAX=20 node index.js --loop
-
Archive old sessions:
node -e 'require("./src/evolve").performMaintenance()'
-
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:
-
Rotate memory graph:
cd memory/evolution
mv memory_graph.jsonl memory_graph_archive_$(date +%Y%m%d).jsonl
touch memory_graph.jsonl
-
Compress archives:
gzip memory_graph_archive_*.jsonl
-
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:
-
Check session filenames:
ls ~/.openclaw/agents/main/sessions/
-
Rename sessions to include scope:
mv session_001.jsonl channel_123456_session_001.jsonl
-
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:
-
Check blast breakdown:
tail -1 assets/gep/events.jsonl | jq '.meta.blast_breakdown'
-
Increase gene’s max_files:
{
"constraints": {
"max_files": 25
}
}
-
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:
-
Increase hard caps (use with caution):
EVOLVER_HARD_CAP_FILES=100
EVOLVER_HARD_CAP_LINES=50000
-
Investigate cause: Check blast breakdown for directories with unexpected changes
tail -1 assets/gep/events.jsonl | jq '.meta.blast_breakdown'
-
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:
-
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"
]
}
-
Review gene strategy: Ensure instructions are specific and scoped
-
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:
-
Intended self-modification: Enable opt-in
EVOLVE_ALLOW_SELF_MODIFY=true node index.js
-
Unintended modification: Update gene’s
forbidden_paths
{
"constraints": {
"forbidden_paths": ["skills/evolver/"]
}
}
-
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:
-
Check token:
-
Regenerate token at https://evomap.ai/settings
-
Set token:
export A2A_HUB_TOKEN=your_token_here
-
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:
-
Check canary output:
tail -1 assets/gep/events.jsonl | jq '.meta.canary_ok, .meta.canary_skipped'
-
Run canary manually:
-
Review changes: Canary failure indicates syntax error or missing dependency
Issue: Evolution cycles are slow
Symptom: Each cycle takes >5 minutes.
Diagnosis:
-
Check cycle breakdown:
tail -1 assets/gep/events.jsonl | jq '.meta.scan_ms'
-
Profile components:
- Signal extraction: Reading too many session logs?
- Memory graph queries: File too large?
- Validation: Tests too slow?
Fix:
- Session log cleanup: Archive old sessions
- Memory graph rotation: Rotate large files
- Faster validation: Use unit tests only
- Session scope: Reduce signals with scoping