0.2.3 - #34
Merged
Merged
Conversation
…rsistence, and update tests
…e mutation support
…ng and fitness sharing
…ore paths
- Thread API-level scorer into wired system adapter so scheduler path
auto-scores offspring (was nil, breaking scoring loop)
- Add initScores(0) after RunIdleEvolution in wired Evolve path
- Add ScoreWithContext(ctx, strategy) to LLMScorer for context propagation
- Cap lineages at 1000 entries to prevent unbounded memory growth
- Rename PromptPoolMutation → PromptUniform (enum, comments, wiring)
- Wire PromptCrossoverMode into createRawComponents (non-wired path)
- Add categorical tool diversity (Params[tools]) to paramDistance
- Make SetActive atomic: wrap *sql.DB in a BeginTx/Rollback/Commit
- Fix default EliteCount 2→3, BreedingPoolRatio doc 0.3→0.6
- DRY childID generation in Crossover into generateChildID helper
- Log warning in ParseMutationType default case for unknown strings
- Add uint/uint64/uint32 support to toFloat64
…across core packages
- Centralize 3 duplicate deterministic scorer implementations into a single
DeterministicScore in llm_scorer.go; remove 6 unused constants in service.go
- Fix ChaosExecutor exchange disconnect deadlock: executeExchangeDisconnect
no longer re-acquires the mutex already held by Execute (non-reentrant sync.Mutex)
- Fix GetSurvivalStatus data race: return a deep copy of the events timeline
- Fix DreamCycle.SetEnabled/IsEnabled data race: guard config.Enabled with mutex
- Add DefaultChaosExecutor.injectFaults mutex guard for e.rng concurrent access
- Fix scheduler goroutine leak with cancel-before-start lifecycle pattern
- Remove 2 unused files (arena_adapter.go, evolution_store.go), VerifyResult,
VerifyReport, FaultWindowUptime, Skipped field, and other dead code
- Add runtime warnings in RunScenarioReport for unsupported config fields
- Replace hardcoded adaptive mutation constants with named constants
- Add RetrievalGuard.Close() to prevent circuit breaker goroutine leak
- Map new arena action types to flight diagnostic categories
…l fitness sharing
…s, and guardrails
…y tracking, guardrails, and e2e tests
…erience distillation
…magic number constants
✦ - (new) — Project-level FailoverScorer abstraction: chains primary + fallback LLM clients with automatic timeout failover. Rate-limiting on primary only.
- — Added Fallbacks []LLMConfig field to LLMConfig.
-
- LLMScoreClient now wraps *llm.FailoverScorer instead of managing []*Client directly. Simpler API: NewLLMScoreClient(scorer, heuristic).
- runRealEvolution() reads from config.Config, builds config list from primary + fallbacks, creates FailoverScorer, and wires it into the evolution system.
- Removed deprecated ratelimit import (moved inside internal/llm).
- — Added fallbacks section with sensenova-u1-fast as backup model
- Ran all 32 core benchmarks with benchtime=3x on darwin/arm64 (M3 Max, Go 1.26.4) - 7 hot (<1us), 22 normal (1-100us), 3 cold (>100us) - All zero-allocation paths preserved (eval, tool exec, result creation, event conversion, error wrapping, conflict detection) - Updated README.md Benchmark Highlights and benchmark_report.md - Added BenchmarkDistillation (76.9us, end-to-end) to report
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[0.2.3] - 2026-06-24
New Features
Population,Crossover(Inherit/HalfSplit/Uniform modes),TournamentSelection, and strategy mutation engine. Supports deterministic reproduction via seed control, elite preservation, adaptive survival rates, and diversity tracking with fitness sharing. (GA Hardening Plan)sync.Once. Comprehensive error collection duringStop()with joined errors from distillation/streaming goroutines.sync.RWMutex. Workflow execution timeout (default 30s) to prevent indefinite blocking. ProperOutputStore.Close()cleanup.Close()returnsErrEventStoreClosedon double-close for idempotent shutdown.ProviderandBaseURLfields.Close()idempotency viasync.Once. OpenAI adapter properly handlesio.ReadAllerrors instead of silently discarding them.resp.Body(deferred close only inreceiveLoop).MaxTasks,MaxDistilledTasks,DistilledTaskTTL, andVectorDimare positive.Stop()collects all errors and returns them joined.Crossover.Validate()andTournamentSelection.Validate()methods for post-construction config invariance checking. Defensive nil checks and enum validation.Improvements
sync.RWMutexDistilledTaskTTLset to 30 days inDefaultMemoryConfig()CompactableEventStoreread paths against nil compactor/repoBug Fixes
DynamicExecutorrecovery path with proper timeout handlingMemoryEventStore.Close()idempotency — second+ calls returnErrEventStoreClosedresp.Body.Close()causing panic on shutdownClose()race condition viasync.Onceio.ReadAllerrors in error pathsPopulation.ScoreAgentspanic recovery logging with agent contextupdateBestEverLockedconcurrency safety with deep copy viaa.Clone()NewTaskPlanner/NewTaskPlannerWithConfigsilent fallback from invalidmaxTasksleader.New,NewTaskDispatcher, andNewMCPManager