fix(growth): Evolution Engine 穷尽审计 3CRITICAL + 3HIGH 全部修复
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

C-01: ExperienceExtractor 接入 ExperienceStore
- GrowthIntegration.new() 创建 ExperienceExtractor 时注入 ExperienceStore
- 经验持久化路径打通:extract_combined → persist_experiences → ExperienceStore

C-02+C-03: 进化触发链路全链路接通
- create_middleware_chain() 注册 EvolutionMiddleware (priority 78)
- MemoryMiddleware 持有 Arc<EvolutionMiddleware> 共享引用
- after_completion 中调用 check_evolution() → 推送 PendingEvolution
- EvolutionMiddleware 在下次对话前注入进化建议到 system prompt

H-01: FeedbackCollector loaded 标志修复
- load() 失败时保留 loaded=false,下次 save 重试
- 日志级别 debug → warn

H-03: FeedbackCollector 内部可变性
- EvolutionEngine.feedback 改为 Arc<Mutex<FeedbackCollector>>
- submit_feedback() 从 &mut self → &self,支持中间件 &self 调用路径
- GrowthIntegration.initialize() 从 &mut self → &self

H-05: 删除空测试 test_parse_empty_response (无 assert)

H-06: infer_experiences_from_memories() fallback
- Outcome::Success → Outcome::Partial (反映推断不确定性)
This commit is contained in:
iven
2026-04-19 00:43:02 +08:00
parent 72b3206a6b
commit e94235c4f9
7 changed files with 107 additions and 58 deletions

View File

@@ -13,7 +13,7 @@
use std::sync::Arc;
use zclaw_growth::{
AggregatedPattern, CombinedExtraction, EvolutionConfig, EvolutionEngine,
ExperienceExtractor, GrowthTracker, InjectionFormat,
ExperienceExtractor, ExperienceStore, GrowthTracker, InjectionFormat,
LlmDriverForExtraction, MemoryExtractor, MemoryRetriever, PromptInjector,
RetrievalResult, UserProfileUpdater, VikingAdapter,
};
@@ -79,14 +79,15 @@ impl GrowthIntegration {
let retriever = MemoryRetriever::new(viking.clone());
let injector = PromptInjector::new();
let tracker = GrowthTracker::new(viking.clone());
let evolution_engine = Some(EvolutionEngine::new(viking));
let evolution_engine = Some(EvolutionEngine::new(viking.clone()));
Self {
retriever,
extractor,
injector,
tracker,
experience_extractor: ExperienceExtractor::new(),
experience_extractor: ExperienceExtractor::new()
.with_store(Arc::new(ExperienceStore::new(viking))),
profile_updater: UserProfileUpdater::new(),
profile_store: None,
evolution_engine,
@@ -120,10 +121,8 @@ impl GrowthIntegration {
///
/// **注意**FeedbackCollector 内部已实现 lazy-load首次 save() 时自动加载),
/// 所以此方法为可选优化 — 提前加载可避免首次反馈提交时的延迟。
/// 在中间件持有 GrowthIntegration 的场景中,由于 `&self` 限制无法调用此方法,
/// lazy-load 机制会兜底处理。
pub async fn initialize(&mut self) -> Result<()> {
if let Some(ref mut engine) = self.evolution_engine {
pub async fn initialize(&self) -> Result<()> {
if let Some(ref engine) = self.evolution_engine {
match engine.load_feedback().await {
Ok(count) => {
if count > 0 {