A genetic algorithm over forkable AgentDefs, run in two iterations across five loomcycle releases. exp6 (v0.25.2 static + v0.26.2 fully-dynamic) was prompt-only evolution — three genes (creativity / courage / caution) baked as literal text into each solver's system_prompt and inherited via AgentDef.fork + parent_def_id lineage. exp6.5 closes the experiment cleanly across v0.28.0 → v0.30.0 with all three previously-open gaps now fixed. (1) Per-agent model tunings (#447, v0.28.0) make AgentDef.sampling a real fork-overlay field — content-hashed, round-tripping through mergedDef + applyOverlay + lookup.SubstrateAgentDef, exposed via Context op=self. The creativity gene now sets sampling.temperature = round(creativity/10, 2) — 0.0 focused, 1.0 wild — so a gene mutation actually changes the model's sampling, not just prompt text. Real evolution, not pretend. (2) F41 fixed (#446, v0.28.0, RFC X Phase 1) — cooperative now parks in-flight sub-runs at iteration boundaries, gates new POST /v1/runs with HTTP 503 during the quiesce window, and emits a precise warning when a fan-out parent can't yet park. (3) F42 fixed (#456, v0.30.0, RFC X Phase 2) — cross-instance resume of a snapshotted mid-run. ResumedRuns reconstructs a d run's loop from its restored transcript and re-enters loop.Run under the same run_id, fired after a snapshot restore (response reports d_runs_resumed) and at boot (crash recovery). The killer demo: the breeder mid-MUTATE (after gen:1:summary was written but only gen:2:var:0 was seeded — three of four planned forks for gen 2 hadn't happened yet), snapshot capturing d_runs:1, agent=exp6-breeder, 91 transcript events. Wipe the DB. Boot a fresh loomcycle instance. Restore the file — response: {agent_defs_restored:10, memory_restored:18, evaluations_restored:4, d_runs_restored:1, d_runs_resumed:1}. Boot log: "resume: re-dispatched 1 d run(s); 0 skipped/flagged". The re-dispatched breeder finishes its work autonomously with no external driver — right after restore gen 2 had only var0, with nothing else running the resumed breeder seeded var1-3 on its own, completing the very mutate it was parked in the middle of. The experiment then continues to completion: result:summary {generations:5, best_score:0.91, winner_def_id:def_e7a3, stopped:max_gen}, mean score climbing 0.763 → 0.865, genes converging (creativity 3.0 → 8.8, courage 3.5 → 8.2, caution 7.0 → 4.5). The per-agent temperature gene survived the mid-run restore too — the v0.30.0 winner has sampling.temperature 0.8, set during a forked variant on instance #1 and preserved through snapshot → wipe → restore on instance #2. Cross-instance lineage check, sharper this time: a gen-2 variant forged on the fresh instance by the re-dispatched breeder has parent_def_id resolving to exp6-solver v8 — a gen-1 def that exists on instance #2 only because it was restored from the file. The genetic lineage chain crossed not just the instance boundary but the mid-run instance boundary. The new gen-2 variants weren't just runs the driver spawned afterward; they were the breeder's own work, picked up from where it had been parked, and committed back to the substrate of the new machine. The single failure mode that previously forced "snapshot only at a quiescent boundary" is fixed: /snapshot truly anytime. One residual tracked in RFC X Phase 3 (not blocking): parking the fan-out parent itself during parallel_spawn so a mid-SOLVE snapshot also captures the orchestrator — orthogonal to the F42 restore-side fix, doesn't block any real workflow since the breeder's MUTATE phase is where the interesting mid-run state lives anyway (which the v0.30.0 demo captures cleanly). F40 (history, still load-bearing): the AgentDef create/fork overlay was silently dropping the entire *_def_scopes capability family on v0.25.2; a runtime-authored meta-agent couldn't fork. Fixed in v0.26.2 (#436, RFC W) by round-tripping the five *_def_scopes through the substrate, deliberately not part of content_sha256 since ACLs are authority not content. The fix persists through snapshot — the breeder's agent_def_scopes survives the file, so a restored breeder can still fork. exp6.5 relies on this every time it crosses an instance boundary. The engineering lessons worth keeping: an evolutionary substrate needs more than forkable defs — it needs gene-to-runtime mappings that go past prompt text (sampling.temperature is the first); an experiment that fits in a 76 KB file and resumes from any point is a different kind of artifact than one that lives in a process; " anytime" is a contract that requires both halves of the runtime to participate — the F41 fix made wait for in-flight runs to park and gated new spawns, the F42 fix made d runs come back to life on the other side of a snapshot. Either alone would have been a soft promise; together they make "checkpoint and continue, anytime, anywhere" a real guarantee. What this unlocks: long-running production experiments — prompt evolution, A/B routing of competing agent versions, auto-tuning loops, durable workflows that span days — can be checkpointed at any moment, handed to another developer or another machine, and continue from exactly where they were. The first experiment in the series that needed no new substrate primitives — and now the first portable experiment artifact that survives a mid-run boundary, a DB wipe, and resumes autonomously on a clean machine.
Collapsing four hallucinating LLM orchestrators into zero tokens — and the two bugs the migration found