Files
绝尘 5c539fe764 修复: 前端 TS 阻断 + G1/G2 单测 + 归档已完成项
- 修复 vue-tsc 3 阻断: i18n 重复 err key 删除 + store 补 relateIdeas
- G1: extract_pinned_goal 单测 10 条(mention剥离/截断/空输入/全角冒号)
- G2: is_empty_tool_result 单测 11 条(JSON标记/中文/英文/非空判定)
- 归档: todo.md/docs/todo.md/待决策.md/待审查.md 已完成项迁入归档
2026-06-27 22:35:37 +08:00

22 KiB
Raw Permalink Blame History

Todo 归档 2026-06-27

从 todo.md / docs/todo.md 迁移的已完成项 归档日期: 2026-06-27


灵感模块功能完善 — P0 数据安全/正确性

  • #1 软删除机制ideas 表加 deleted_at 列 + 软删除(对标 tasks/projects 的 delete + restore 全套模板)。当前 delete_idea 是硬删除,误删不可恢复。
  • #2 白名单收紧settings.rs ideas 白名单移除 id / created_at,防止主键和创建时间被篡改。(对标 B-260616-16 tasks 白名单修复)
  • #4 priority 值域校验create_idea / update_idea 加 priority 校验(parse::<i32>() ∈ 0..=3,非法返 Err对标 B-260615-15 tasks priority 修复)

灵感模块功能完善 — P1 架构/一致性

  • #5 有损转换修复record_to_idea() 不再硬编码 status=Draft / related_ids=空,从 IdeaRecord 读取真实值,评估时不丢失上下文。
  • #6 评分关键词拆文件:将 scoring.rs 硬编码关键词拆到独立 const 文件(最小改动)。启发式是过渡方案,对抗式评估上线后按需升级为 JSON 配置。不做 DB 表配置化(过度工程)。
  • #7 promote 补偿改软删除promote_idea 回写失败时的补偿删除从 purge_with_descendants(不可恢复)改为 soft_delete(软删除,可恢复)。
  • #8 关联双向同步A 关联 B 时自动在 B 的 related_ids 中补入 A解绑时同步移除保持关联关系对称。
  • #9 创建表单补 tags 输入:捕捉灵感表单增加 tags 输入(逗号分隔或 chip 组件),confirmCapture 传 tags JSON 字符串给后端。

灵感模块功能完善 — P2 前端/UX

  • #10 创建表单补全 priority/source:捕捉模态框增加 priority 下拉(低/中/高/紧急)和 source 输入框。
  • #14 雷达图正名/替换:将 i18n key 和 CSS class 中的 "radar" 改为 "score-bar"(或引入真正的雷达图组件如 ECharts radar

AI 对话目标丢失

  • G3 状态机收敛目标 文档衔接:conv_state.rs/mod.rs 注释明示 pinned_goals 内容态与 ConvState 生命周期态正交,不进 enum。
  • G5 附 bug 已排查(不改代码)dump DB 确认 seq1(thinking 独白)+seq4(tool_result 内容)均 system+早期 timestamp(旧版本遗留脏数据),非当前 compress summary 机制问题(摘要四段式正常)。最新 system(seq0 topic marker)正常。结论:历史脏数据,数据治理项(可选清 DB),非当前 bug。anthropic_compat thinking 隔离你在进行中(M)。
  • G1 多目标累积:pinned_goal: Option<String>pinned_goals: Vec<String>,每次发消息/编辑/强制发送提取目标追加到列表(去重),支持换目标且不丢失历史目标。MAX_GOALS=5 防无限膨胀。

对抗式评估接入 — 后端 IPC 接入

  • A1 evaluate_idea 命令:新增 IPC command按 Provider 配置构造 AdversarialEngine(有 Provider → new(provider),无 → heuristic()),调 evaluate(idea) 返回 AdversarialEval
  • A3 评估结果持久化:评估结果写回 ideasscores + evaluated_by + evaluated_at避免每次重新评估。
  • A4 类型导出AdversarialEval / EvaluatedBy / Recommendation 等类型经 IPC serde 暴露给前端(检查 df-types 是否需补充)— 已验证:当前通过 df_ideas::adversarial::* 路径直接可用,前端经 IdeaRecord.ai_analysis JSON 字符串消费,无需搬运到 df-types

对抗式评估接入 — 前端结果展示

  • B1 灵感详情页评估面板:展示正方论点 / 反方论点 / 分析师综合评分,evaluated_by 标签区分LLM / 启发式兜底 / 纯启发式)。
  • B2 评估触发按钮:灵感详情页加「深度评估」按钮,调 evaluate_idea IPCloading 状态 + 错误提示。
  • B3 评分维度可视化:可行性 / 影响力 / 紧急度三维度展示(复用现有 score-bar 或引入 radar

🔍 2026-06-21 AI Chat 技术债审查

P1 已即时修

  • (主代修·chat.rs:458-461 ai_approve exec_result 包 tokio::time::timeout(60s) 对齐 ai_authorize_dir:658·cargo check EXIT 0) TD-260621-05a[P1🔴] ai_approve 缺 60s 执行超时(用户"静默吞消息"bug F-260620 同型复发)。ai_authorize_dir 有超时 ai_approve 漏。卡死→generating 永真→前端 130s 看门狗吞消息。
  • (主代修·useAiConversations.ts:99 switchConversation activeConversationId 设定后加 state.streaming = state.generatingConvs.has(id)·vue-tsc EXIT 0) TD-260621-06a[P1🔴] switchConversation 不复位 streaming,真并发切非生成会话残留 stop 按钮→点 stop 发错会话。

P1 归路线

  • TD-260621-01 [P1·归 F-09 B 路线 per-conv state] (批2-A 落地·useAiStream _watchdogTimers Map<convId,timer> + _legacyWatchdog fallback 双路·onStreamTimeout 携 convId 仅清该 conv·2026-06-21) — watchdog 单计时器全清误杀并发会话
  • TD-260621-02 [P1·归 F-09 B 路线 per-conv state] (批2-A 落地·pendingMaxRounds ref<string|null> 挂起 convId + 守卫比对 activeConversationId·DirAuthDialog visibleDirAuths filter conversationId·2026-06-21) — pendingDirAuth/pendingMaxRounds 全局单 ref 非 per-conv
  • TD-260621-03 [P1·patch_file 落地债 F-260615] (读改写整体移入 _patch_guard 锁内串行化防 lost update + 删 entry().or_insert() 内存泄漏 + drop 写序列后释放·2026-06-21) — patch_file 读改写在 FILE_LOCKS 外,lost update
  • TD-260621-04 [P1·patch_file 落地债 F-260615] (read_file 三返回点返 file_hash 闭环 + 抽 compute_file_hash helper read_file/patch_file 共用消格式漂移·2026-06-21) — expected_hash 契约破裂,指纹防并发形同虚设
  • (2026-06-24·ba811ea chat.rs executed→completed 6处:460幂等读/584 ai_approve写/634判定/668 IPC返回/885 authorize_dir日志/889 authorize_dir写 + df-storage V27 迁移 UPDATE 存量 executed→completed + v27 两测试 unify/idempotent·cargo check EXIT 0 + df-storage 78 passed) TD-260621-05 [P1·归 SMELL-P1-6] — 审批状态字符串双轨(已统一)。

P2 精选 — 2026-06-24 核验销账

  • 已修(commit a7dbd50,finalize:35 let _ =→match Err tracing::error,对齐 audit_finalize) — audit_tool_call 吞错
  • 已修(a7dbd50,conversation/chat finalize_pending_placeholders pub(crate)) — switch+delete retain 占位终态化
  • 已修(TD-260621-03 06-21,_patch_guard 串行化 + 删 entry().or_insert()) — patch_file FILE_LOCKS 永不清理
  • 已是正确态(mod.rs:772 #[allow(dead_code)]+预留注释) — PerConvState.created_at
  • 已是正确态(阶段3a 下沉 enum ApprovalKind::Risk{diff}) — PendingApproval.diff

🔍 2026-06-21 查询能力缺口 + run_workflow 缺陷

  • BUG-260621-01 [P1🔴·确定修法] — run_workflow 空 dag 反序列化失败(missing field nodes),阻塞任务工作流推进 2026-06-22 修复
  • F-260621-02 [P2] — 任务/项目/灵感列表查询维度补全(下沉后端+关键词搜索+排序分页) 2026-06-22 实施

🔴 2026-06-19 BUG-260619-06 L0 clear 致冷启动审批丢失(已修复)

  • BUG-260619-06 — L0 clear 致冷启动审批丢失。方案 A 修复:lib.rs:62 clear()retain(|_, a| !a.recovered)

🔴 2026-06-18 Agentic 最大轮次设置不生效

  • (workflow wuirgcxoy) B-260618-23 [P1]Agentic 最大轮次设置不生效(设 30 仍按 10 截断)。修复sync 上提到 App.vue 根 onMounted。

🔧 2026-06-17 走查·tauri 打包目标收窄 + 状态映射 DRY

  • (主代核验·tauri.conf.json:28 ["nsis"] 已入库) B-260617-11 [P2] — tauri.conf.json 打包目标收窄

🔧 2026-06-17 走查·DeepSeek reasoning_content 实施审查

  • (2026-06-20 核验) B-260617-16 [P3·可选] — Partial(MidStream 保文)回填半截 reasoning_content 语义待评

🔧 2026-06-17 对话标题不更新

  • (2026-06-18) B-260617-17 [P2]对话标题不更新(对话很久/刷新后仍"新对话"

💡 2026-06-16 新需求UX 交互优化)

  • (F-15 全阶段完成) F-260616-15 [P1] — AI Chat 上下文管理增强:会话分段 + 手动压缩 + 智能裁剪

P1 — 重要缺陷

  • (workflow w999qdu86) BUG-260618-11[P0🔴] commands.rs:289 ai_approve 幂等路径 unwrap_or_default 吞 DB 错误。

🔴 架构坏味道全面扫描 — P0 必须修复

  • (workflow w5siwnipj) SMELL-P0-1[P0🔴] unwrap_or_default 吞错 5 高危闭环
  • (workflow w2xkw4ybh) SMELL-P0-2[P0🔴] tool_registry.rs:363 build_ai_tool_registry 1091 行单函数
  • (2026-06-20 核验) SMELL-P0-3[P0🔴] AiChat.vue 4026 行 God 组件
  • (workflow wowdnw4ba) SMELL-P0-4[P0🔴] df-execute crate 零测试

🔴 架构坏味道全面扫描 — P1 应该改进

  • (workflow w8774xcev) SMELL-P1-1[P1🟡] 生产代码 206 处 unwrap() 排查。
  • (workflow wuirgcxoy no-action) SMELL-P1-2[P1🟡] IPC 层 .map_err(err_str)? 样板。
  • (workflow wuirgcxoy no-action) SMELL-P1-3[P1🟡] Vue views try-catch-finally invoke 模式。
  • (workflow w8774xcev) SMELL-P1-4[P1🟡] df-nodes 聚合点依赖 5 crate。
  • (workflow weckqp9mv no-action) SMELL-P1-5[P1🟡] IPC 层职责泄漏。
  • (workflow weckqp9mv no-action) SMELL-P1-7[P1🟡] bool 参数陷阱。
  • (workflow wowdnw4ba) SMELL-P1-8[P1🟡] 架构文档过时 6 篇更新。
  • (agent crud-split 实施) SMELL-P1-9[P1🟡] crud.rs 2212 行按表拆分。

🔴 架构坏味道全面扫描 — P2 可选优化

  • (workflow wowdnw4ba no-action) SMELL-P2-1 — run_workflow_inner 282 行+8 参数。
  • (workflow wowdnw4ba) SMELL-P2-2 — 前端全局 ErrorBoundary。
  • (workflow w8774xcev) SMELL-P2-3 — HashMap<String,String> → 结构体。
  • (workflow w5siwnipj) SMELL-P2-4 — coordinator.rs 空壳标注 roadmap。
  • (workflow w5siwnipj) SMELL-P2-5 — #[allow(dead_code)] 7 处全部标注完成

🔴 架构坏味道全面扫描 — sweep 派生登记

  • (2026-06-22 核验) ARC-260618-01-e — adversarial evaluate_with_llm 一致性。
  • (2026-06-20) SW-260618-21 [P2] — formatRelativeZh 重命名 formatRelative
  • (2026-06-20 核验) SW-260618-22 [P2] — useAiSend resolveLang DRY

P2 — 不阻断缺陷/增强

  • (2026-06-20 核验) B-260614-05 — [P2→降级] 分离窗口detached跨窗口状态。

🔧 2026-06-18 6 域并行走查 sweep-fix — 已修 12 处

  • ① context.rs estimate_message 累加 parts Text/Image.base64 token
  • ② anthropic_compat.rs Image 转换 clone→move
  • ③ scan.rs is_pure_badge_line to_lowercase→to_ascii_lowercase
  • ④ scan.rs is_monorepo workspaces null 误判
  • ⑤ adversarial.rs MockProvider 补 reasoning_content
  • ⑥ audit.rs audit_finalize 拆 unwrap_or_default 吞错
  • ⑦ commands.rs ai_conversation_delete 补非活跃对话 pending_approvals retain
  • ⑧ audit.rs 抽 PENDING_APPROVAL_PLACEHOLDER 常量
  • ⑨ ToolCard.vue isToolFailure/commandOutput 下沉 computed
  • ⑩ AiChat.vue 清 4 处虚拟滚动残留死注释
  • ⑪ Projects.vue onUnmounted 清 _toastTimer
  • ⑫ Knowledge.vue refConvTitle parseContext 两次→一次

🔧 2026-06-18 6 域并行走查 sweep-fix — 新 todo 24 项

P1

  • (workflow wexu1isx1) SW-260618-01 [P1] — executor Ok 路径取消节点事件/状态不一致(TOCTOU 残留)
  • (workflow wexu1isx1 + 主代修) SW-260618-02 [P1] — 审批占位 tool_result 在 stop/clear/create/delete 清 pending_approvals 时未替换终态文本

P2

  • (评估暂缓) SW-260618-03 [P2] — Anthropic 图片 url 模式静默 400
  • (workflow wexu1isx1) SW-260618-04 [P2] — knowledge_events 通用 query 硬编码 ORDER BY created_at 崩溃
  • (评估暂缓) SW-260618-05 [P2] — pending 占位靠内容字符串匹配
  • (主代修·SW-06) SW-260618-06 [P2] — ToolCard 双 watch(props.tc.status) 合并
  • (主代修·SW-07) SW-260618-07 [P2] — AiChat 双 watch(currentText) 合并
  • (主代修·SW-08) SW-260618-08 [P2] — AuditLog.vue 全硬编码中文未 i18n
  • (主代修·SW-09) SW-260618-09 [P2] — AiNode/AiSelfReviewNode provider 解析+构建 DRY 重复
  • (主代修·SW-10) SW-260618-10 [P2] — reqwest Client 构建重复(OpenAI/Anthropic Provider::new)

P3

  • (评估暂缓) SW-260618-11 [P3] — OpenAI 图片构造防御缺失
  • (评估确认) SW-260618-12 [P3] — ai_conversations 白名单 pinned 与 archived 不对称
  • (评估暂缓) SW-260618-13 [P3] — find_path_conflict 跨层规范化靠文档约定
  • (评估不做) SW-260618-14 [P3] — keyring failcount sidecar 用 current_dir 跨启动不稳
  • (主代修·SW-16) SW-260618-16 [P3] — F-05 去重审计 status 固定 completed 不透传 rejected/failed
  • (评估不做) SW-260618-17 [P3] — ToolCardList 4 Set 跨会话不重置累积
  • (主代修·SW-19) SW-260618-19 [P3] — combineAndTruncateLines 与 cmdOutput 合并逻辑冗余
  • (主代修·SW-20) SW-260618-20 [P3] — Ideas 本地 parseTags 与 store 版 DRY 重复
  • (评估暂缓) SW-260618-22 [P3] — Knowledge getCategoryCount+parseTags 模板重复求值

🔧 2026-06-18 模型能力维度

  • (workflow wexu1isx1) B-260618-03 [P1] 后端路由解耦 cost_tier/intelligence
  • (workflow wexu1isx1) B-260618-04 [P2] model_probe 去瞎填 + 预设表机制存废
  • (主代修·UX-04) UX-260618-04 [P2] 前端删 cost/intel 标签
  • (workflow wexu1isx1 + 主代修前端) B-260618-05 [P3] CostTier::Free 死档 + 枚举清理

🔧 2026-06-18 AI Chat markdown 表格布局破坏

  • (workflow w5siwnipj) B-260618-06 [P1]markdown 表格 display:block 破坏布局

🔧 2026-06-18 aichat 工具结果渲染核对

  • (workflow w2drz3ppo) UX-260618-05 [P0] — run_workflow 结果丢 execution_id
  • (workflow w2drz3ppo+主代) UX-260618-06 [P1] — patch_file 丢 diff
  • (workflow w2drz3ppo+主代) UX-260618-07 [P1] — delete_file 软删丢 backup_path
  • (workflow w2drz3ppo+主代) UX-260618-08 [P1] — read_file 丢截断提示
  • (workflow w2drz3ppo+主代) UX-260618-09 [P1] — advance_task body 裸 JSON
  • (workflow w2drz3ppo+主代) UX-260618-10 [P1] — list_trash 缺 header 摘要
  • (workflow w2drz3ppo+主代) UX-260618-11 [P2] — list_directory 丢 truncated
  • (workflow w2drz3ppo+主代) UX-260618-12 [P2] — list_ body 全裸 JSON + 各工具零散字段丢失*。

🔧 2026-06-18 列表摘要 Markdown 语法字符泄露

  • (主代串行) UX-260618-13 [P2] — 列表摘要 Markdown 语法字符泄露

🔧 2026-06-18 用户实测·aichat bug 反馈

  • (workflow wwchro468) UX-260618-14 [P1]advance_task 审批卡/结果渲染缺任务名 + 显 UUID/空白
  • (agent ux15-batch1 方案A) UX-260618-15 [P1] 第一批(方案A根治N+1)流式失败重试每轮独立气泡
  • (主代串行) UX-260618-16 [P1🔴]time.ts:44 formatDate 漏 .value 致 en locale i18n 失效
  • (2026-06-20 核验) UX-260618-17 [P1🟡]ProjectDetail.handleApprovalMulti 漏 submitting 复位(防双击破口)

🔧 2026-06-19 文件拆分升级 — P0

  • (2026-06-20 核验已拆分) REFACTOR-260619-01 [P0]commands.rs(ai,1923 行)拆 5 模块
  • (2026-06-22 核验) REFACTOR-260619-02 — anthropic_compat.rs 拆模块。
  • (2026-06-20 核验已拆分) REFACTOR-260619-03 [P0]audit.rs(959 行)拆 5 模块

🔧 2026-06-19 文件拆分升级 — P1

  • (2026-06-20 核验已拆分·agentic.rs 已删除) REFACTOR-260619-05 [P1]agentic.rs(1231 行)抽 agentic_runtime.rs + agentic_stream.rs
  • (2026-06-20 核验·已拆) REFACTOR-260619-06 [P1]ai_node.rs(1107 行)拆 3 模块
  • (2026-06-20 核验已拆分) REFACTOR-260619-07 [P1](已有 SMELL-P0-3)AiChat.vue(4075)拆 ConversationSidebar/ChatHeader/MessageList/ChatInput
  • (2026-06-22 核验) REFACTOR-260619-08 — tool_registry.rs 按功能分组注册函数拆。
  • (2026-06-22) REFACTOR-260619-10 — scan.rs 拆 4 模块。
  • (2026-06-20 核验) (已有 SMELL-P1-9)crud.rs(2212)按表拆

🔧 2026-06-19 命令行黑窗修复 + GLM 1214 数据调查

  • (2026-06-19) B-260619-01 [P1]执行命令行弹黑色窗口闪烁
  • (2026-06-22) B-260619-02 — GLM 1214 tool_result 过大截断。
  • (2026-06-20) CR-260620-04 [P0]1214/400 messages 非法·配对错根因(compress 绕过 sanitize)+ 停用模型路由穿透

💡 2026-06-19 新需求(任务关联灵感)

  • (2026-06-20 核验已落地) F-260619-01 [P2]任务关联灵感TaskRecord 新增 idea_id 字段

💡 2026-06-19 新需求MCP Server

  • (2026-06-20 核验已落地) F-260619-02 [P2]DevFlow MCP Server对外暴露任务/项目/灵感管理能力

💡 2026-06-19 新需求AI 工具文件访问动态权限模型)

  • F-260619-03 [P1] AI 工具文件访问动态权限模型(Phase A-D 全完成)。

💡 灵感模块升级

  • 批1 可信度+体验
  • 批2 评估历史全栈
  • 批3 IdeasPanel 统计看板
  • 批3a 晋升携带
  • 批3b 关联关系 schema
  • 批3c 关联关系前端
  • P1 信号词否定前缀
  • 连带修:augmentation/resolvers.rsResolverRegistry import

⚠️ 灵感升级-遗留缺陷

  • (2026-06-22 核验) related_ids 白名单 — 实际已落地。

⚠️ 预存债 — ToolResult 类型缺字段

  • (2026-06-22 核验) TD-260621-07 [P2/预存债]ToolResult 类型缺 output_mode/files/counts/matches/total_files 字段
  • (workflow wf 批1) TD-260621-GUARD[P0·用户实测卡死根因] generating 状态机前端落地。

F-260620-01 跨端 AI Chat — Phase3 联调

  • (2026-06-22) F-260622-01-阶段1
  • (2026-06-22) F-260622-01-阶段2
  • (2026-06-22) F-260622-01-阶段3

AI Chat 跑题/抓不住重点改进

  • P0-P2 全完成

单对话内并行多轮推理

  • Phase1 已落

🟡 F-09 决策e 前端 newConversation 未跟进

  • 已实施(CR-260620-02 审查 PASS)

🟡 MED-1 bind/create/update_project AI 工具路径审批执行后 reload 未兑现

  • 已实施(chat.rs ai_approve)

LOW F-09 stale 注释 + 死 i18n key 清理

  • 已实施

🔍 2026-06-22 miniapp 功能走查 — 已修项

  • P1-B-260622 [P1🔴·首屏连不上·2026-06-23核验已修]
  • P1-C-260622 [P1🔴·体验阻断·2026-06-23 核验已修]
  • P1-E-260622 [P1🟡·多轮场景·2026-06-23]
  • P2-B-260622 [P2·quickfix·2026-06-23核验已修]
  • P2-C-260622 [P2·quickfix·2026-06-23]
  • P2-A-260622 [P2·defer·2026-06-23]
  • P3-A-260622 [P3·defer·2026-06-23]
  • P1-F-260622 [P1🟡·2026-06-23]
  • P1-G-260622 [P1🟡·体验·2026-06-23]
  • P2-D-260622 [P2·健壮·2026-06-23核验已修]
  • P2-E-260622 [P2·健壮·2026-06-23]
  • P3-C-260622 [P3·清理·2026-06-23 核验已清]
  • P3-D-260622 [P3·体验·2026-06-23]

2026-06-23 miniapp 全功能审查加固

  • F1 AiConvStateChanged idle/error 终态漏 clearWatchdog → 补 clearWatchdog
  • F2 regenerate() 无 generating 守卫 → 加守卫 + toast
  • F3 flushCurrentText 启发式回填错位 → 引入 currentAssistantMsgId 按 id 精确回填
  • F9 stop() 无终态兜底 + chat 页无停止按钮
  • F21 连接状态裸枚举字符串 → 中文文案
  • switch 加 default warn / ws.ts 二进制帧 warn / scheduleReconnect 加 MAX_RECONNECT_ATTEMPTS=20
  • 删 pages/test 死页

2026-06-23 miniapp 用户需求批

  • req1 会话重命名
  • req2 断网不丢消息
  • req3 审批重连恢复

2026-06-23 miniapp 收尾批

  • P1-E MaxRounds 继续/停止
  • P1-F 重发 + 复制
  • P3-D token 用量
  • P2-C 注释陈旧
  • P2-A messages 内存上限

2026-06-23 miniapp polish 批

  • P2-E 审批失败回填
  • P1-G Markdown 渲染
  • P3-A textarea 多行

2026-06-24 aichat 可靠性修复

  • BUG-260624-01 消息重叠/堆叠根治
  • BUG-260624-02 授权弹窗卡死根治
  • BUG-260624-03 工具执行心跳误报根治
  • BUG-260624-04 搜索工具误授权根治
  • BUG-260624-05 压缩后每轮停止根治
  • BUG-260625-01 grep 传单文件路径报「目录名称无效」根治
  • BUG-260625-02 read_file search 模式显示「0 行」根治

2026-06-25 generating 状态机双轨收口 + 自动压缩路径残留修复

  • (2026-06-25) Task#1 自动压缩成功路径残留
  • (2026-06-25) Task#2 双轨状态机收口

🔍 2026-06-26 灵感模块诊断待办(已完成)

  • IDEA-FIX-01 [P0🔴] — ideas 表无软删除
  • IDEA-FIX-02 [P0🔴] — ideas 白名单含 id/created_at
  • IDEA-FIX-03 [P0🔴] — priority 无值域校验
  • IDEA-FIX-04 [P1🟡] — record_to_idea 有损转换
  • IDEA-FIX-05 [P1🟡] — 评分关键词硬编码
  • IDEA-FIX-06 [P1🟡] — promote 补偿用 purge不可恢复
  • IDEA-FIX-07 [P1🟡] — 关联单向
  • IDEA-FIX-08 [P1🟡] — 创建表单无 tags 输入
  • IDEA-FIX-09 [P2🟠] — 创建表单缺 priority/source
  • IDEA-FIX-11 [P2🟠] — 假雷达图