From 6d979d6646e1ee5c03b2a5a65b6187d31d1d142d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Fri, 26 Jun 2026 20:48:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20record=5Fto=5Fidea=20?= =?UTF-8?q?=E8=AF=BB=E7=9C=9F=E5=AE=9E=20status/related=5Fids(=E7=88=B6?= =?UTF-8?q?=E2=91=A4=E2=91=A4.2=20#5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 不改(注释明示评估不用)。 --- docs/todo.md | 2 +- src-tauri/src/commands/idea.rs | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/docs/todo.md b/docs/todo.md index 73a63f9..70e3597 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -58,7 +58,7 @@ graph TD | **父②** 知识图谱Phase1 | 📋 待办 | ②.1 V28迁移(queue/parent_id/content_json/task_links) / ②.2 TaskRecord+TaskLinkRepo / ②.3 IPC+move_queue / ②.4 父聚合 / ②.5 AI工具12 | G1(弱) | | **父③** AI对话体验 | 📋 待办 | ③.1 B-260619-04 ToolCard / ③.2 REFACTOR-260619-04 审批状态机 | — | | **父④** F-09 per-conv | 📋 待办 | ④.1 streaming/currentText per-conv | — | -| **父⑤** 灵感模块 | 🔨 进行中 | ⑤.1 软删除✅(V28+Repo+IPC+6测试) / ①.4 雷达图✅ / ⑤.2 #05-#10 P1待办(#07→父②) | ⑤.2#07→②.1 | +| **父⑤** 灵感模块 | 🔨 进行中 | ⑤.1 软删除✅ / ①.4 雷达图✅ / ⑤.2 #05 record_to_idea✅ / #06 配置化·#09·#10 表单待办 / #07 promote补偿待定(soft_delete 污染回收站 vs purge 内部回滚干净?) | ⑤.2#07→②.1 | | **父⑥** Phase2-5 | 📋 待办 | ⑥.1事件流 / ⑥.2基础设施 / ⑥.3注入 / ⑥.4前端 | ⑥→父②, ⑥.3→父②+父④+G1 | | **父⑦** 技术债 | 📋 待办 | SMELL-P1-6 / conditions / CR缓存 / UX分页 / 审批超时 / miniapp / 双监听器 | — (穿插) | diff --git a/src-tauri/src/commands/idea.rs b/src-tauri/src/commands/idea.rs index 20b9281..ffde2aa 100644 --- a/src-tauri/src/commands/idea.rs +++ b/src-tauri/src/commands/idea.rs @@ -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 = match record.related_ids.as_deref() { + Some(r) => match serde_json::from_str::>(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::*;