修复: record_to_idea 读真实 status/related_ids(父⑤⑤.2 #5)

IDEA-FIX-05: record_to_idea 原 status 硬编码 Draft / related_ids 硬编码空,
评估时丢失真实上下文。改读 record.status(加 status_from_str 映射 DB snake_case
→ IdeaStatus 枚举,fallback Draft)+ related_ids(parse JSON Vec,同 tags 模式)。
scores/time 不改(注释明示评估不用)。
This commit is contained in:
2026-06-26 20:48:31 +08:00
parent 005079f762
commit 6d979d6646
2 changed files with 30 additions and 3 deletions

View File

@@ -398,16 +398,28 @@ fn record_to_idea(record: &IdeaRecord) -> Idea {
},
None => Vec::new(),
};
// IDEA-FIX-05: 读真实 related_ids(原硬编码 Vec::new() 丢关联上下文)。解析同 tags 模式。
let related_ids: Vec<String> = match record.related_ids.as_deref() {
Some(r) => match serde_json::from_str::<Vec<String>>(r) {
Ok(v) => v,
Err(e) => {
tracing::warn!(error = %e, idea_id = %record.id, "[ideas] related_ids JSON 解析失败,降级空");
Vec::new()
}
},
None => Vec::new(),
};
Idea {
id: record.id.clone(),
title: record.title.clone(),
description: record.description.clone(),
status: df_types::types::IdeaStatus::Draft,
// IDEA-FIX-05: 读真实 status(原硬编码 Draft 丢真实状态,评估上下文完整性)
status: status_from_str(&record.status),
priority: priority_from_i32(record.priority),
scores: None,
tags,
source: record.source.clone(),
related_ids: Vec::new(),
related_ids,
created_at: chrono::Utc::now(),
updated_at: chrono::Utc::now(),
}
@@ -423,6 +435,21 @@ fn priority_from_i32(p: i32) -> Priority {
}
}
/// IDEA-FIX-05: idea status 字符串(DB snake_case)→ IdeaStatus 枚举。
/// record_to_idea 读真实 status 用(原硬编码 Draft 丢真实状态)。未知值 fallback Draft(同原行为)。
fn status_from_str(s: &str) -> df_types::types::IdeaStatus {
use df_types::types::IdeaStatus;
match s {
"draft" => IdeaStatus::Draft,
"pending_review" => IdeaStatus::PendingReview,
"approved" => IdeaStatus::Approved,
"rejected" => IdeaStatus::Rejected,
"promoted" => IdeaStatus::Promoted,
"archived" => IdeaStatus::Archived,
_ => IdeaStatus::Draft,
}
}
/// Recommendation → 前端 assessmentLabel 期望的全小写空格分隔(匹配 map key
fn recommendation_str(r: &df_ideas::adversarial::Recommendation) -> &'static str {
use df_ideas::adversarial::Recommendation::*;