You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Configurable fitness — define custom metrics with regex extraction in .evo.yaml. Each metric key gets a direction (higher or lower) and feeds into the Pareto gate with the same statistical rigor as built-in metrics.
Goal field — goal: in .evo.yaml injects a high-level objective into ANALYZE and PROPOSE prompts, steering the LLM toward feature implementation rather than generic weakness-finding.
feature_development strategy — new built-in strategy with feature, test_addition, and bug_fix categories. Focuses ANALYZE on missing functionality and implementation tasks instead of test gaps.
Category.FEATURE — new proposal category for implementing new functionality. Passes through the enforcement gate automatically (only test_addition is restricted to test files).
Dynamic Pareto keys — get_pareto_keys() unions built-in metric sets with custom keys from config. The DECIDE phase evaluates user-defined metrics with Welch's t-test + Holm-Bonferroni, same as standard metrics.
Fitness floor for custom metrics — when only custom metrics are configured (no standard test suite), passing commands floor the fitness score at tier_high so the DECIDE phase has signal to work with.
Custom metric values in prompts — ANALYZE and PROPOSE now render custom metric values alongside standard metrics, giving the LLM full visibility into what it's optimizing.
Changed
Strategy-aware propose phase — _format_metrics_hint() no longer hardcodes "Prefer test_addition" when the strategy supports feature development. Coverage-safe guard only activates when test_addition is in the strategy's categories.
Strategy-aware analyze phase — coverage gap injection is conditional on strategy; feature-focused strategies skip the coverage lens to avoid drowning out the goal signal.
Default proposal category from strategy — _parse_proposal() defaults to the strategy's first category instead of hardcoded test_addition. LLM failure fallback follows the same rule.