Files
DevFlow/docs/07-项目管理/待决策归档/2026-06.md
绝尘 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

446 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 待决策归档(历史已决)
> 从 [待决策.md](../../待决策.md) 拆出的已决策 / 已实施 / 已排期 / 已解决历史项。
> 决策点已闭合,实施进度见 [todo.md](../../todo.md)。
>
> 创建:2026-06-17 | 维护:待决策.md 当前队列项拍板后迁入对应月份文件(本文件承载 2026-06)。
---
## ③类 — 产品取舍(已决)
#### CR-13-O1 in_progress 模板失败退回语义
- **背景**:in_progress 模板失败→`regression_target("in_progress")=Some("todo")`,但状态机 `backward_to_todo_rejected` 全拒(task_state_machine.rs:188-193)→回调 advance_task_atomic 被 InvalidState 拦截,任务原地保留 in_progress。
- **决策点**:in_progress 执行失败应如何退回?
- **选项**:
- a: 接受现状(原地 in_progress)+ 补 UI 提示「执行失败,请手动处理」
- b: 改 `regression_target("in_progress")=None` 对齐状态机(失败不自动退回,留 in_progress 等人介入)
- c: 放开 todo 回退(破坏闸门,执行失败可回 todo 重来)
- **推荐**:**b**(对齐状态机现状,失败留 in_progress 显式待人介入,不破坏闸门语义)
- **关联**:todo CR-13-O1 / CR-260616-13
- **状态**:✅ 已决(2026-06-16)— **决策:b**。对齐状态机,失败留 in_progress 等人介入,blocked 状态已提供合法通道。
#### DEC-260616-03 CR-04/CR-06 流式核心改造授权
- **背景**:splitBlocks 手写正则切块(CR-04,行中裸 ```/4+ backtick 嵌套切错)+ loadMarkdown 重算(CR-06)是流式渲染核心改造,中风险(回归可能)。
- **决策点**:是否授权推进流式核心改造?
- **选项**:
- a: ①授权巡检推进(主代理重点核查流式渲染/审批/输入不破坏)
- b: ②单独立项谨慎做(不混巡检快推,独立验证)
- c: ③暂不碰(保留自研块级 memo 现状)
- **推荐**:**a ①**(自研 memo 已稳,CR-04/06 是增强非阻断,授权巡检推进+重点核查)
- **关联**:todo DEC-260616-03 / CR-260615-04
- **状态**:✅ 已决(2026-06-16)— **决策:a**。授权巡检推进,自研 memo 已稳,CR-04/06 是增强非阻断。
#### CR-260615-04 splitBlocks→marked.lexer
- **背景**:splitBlocks 手写正则 `/```[^\n]*\n[\s\S]*?(?:```|$)/g` 不要求行首+固定 3 backtick,与 marked 围栏规则不一致;行中裸 ```/4+ backtick 嵌套围栏切错,前块缓存固化错误 html。
- **决策点**:是否改用 marked.lexer 原生切块?(依赖 DEC-260616-03 授权)
- **选项**:
- a: 改 marked.lexer(机制2原生,根治切错)
- b: 补正则边界(治标,维护成本)
- c: 不改(现状可接受,极端输入才触发)
- **推荐**:**a**(根治,依赖 DEC-03 授权)
- **关联**:todo CR-260615-04 / DEC-260616-03
- **状态**:✅ 已决(2026-06-16)— **决策:a 改 marked.lexer**。DEC-260616-03 已决a 授权推进,batch57 workflow(w4h5ygko1) Agent B 已实施 AiChat.vue splitBlocks 改 marked.lexer(tokenize),vue-tsc 0err + cargo check 0 err。todo CR-260615-04 同步销账。
#### F-260616-06 审批「未找到挂起的审批」体验
- **背景**:pending_approvals 内存态(commands.rs:130 remove None 报错)与前端刷新/重复点击不同步;重试场景旧 id 已被处理;前端 useAiSend.ts:221 IPC 失败不回滚 pendingApprovals,按钮残留。
- **决策点**:修法组合选哪些?
- **选项**:
- a: 后端 ai_approve 幂等(找不到 pending 查审计表,已 executed/rejected 返回「已处理」成功非报错)
- b: 前端审批按钮防抖(同一 id 短期多次只发一次 IPC)
- c: 前端刷新后 pending 态正确同步(核对 useAiConversations.ts:119 边界)
- **推荐**:**a + b**(后端幂等治本 + 前端防抖治标,c 已部分由现有恢复逻辑覆盖)
- **关联**:todo F-260616-06
- **状态**:✅ 已决(2026-06-16)— **决策:a + b**。先 b 前端防抖止血(5 分钟改动),后 a 后端幂等治本。**子决策:实施顺序=A(先 b 防抖,后 a 幂等)**。
#### F-260616-07 流式对话失败自动重试
- **背景**:流式 stream_llm 零重试(agentic.rs:231-238 返回 None 直接放弃);df-ai retry.rs 只覆盖非流式 complete();手工重试已存在(错误气泡「重试」按钮)。
- **决策点**(4 个子决策):
- (a) 流中途失败如何重试:a1 只重试流前失败(简单稳妥)/ a2 流中途失败截断已流文本重请求(复杂)
- (b) 重试计数器粒度:每条消息预算 N 次(倾向)/ 每轮独立
- (c) 退避策略:复用 retry.rs(1s→2s→4s 倾向)/ 用户可配
- (d) 重试期 UI:错误气泡内「重试 n/m」(倾向)/ 独立 toast
- **推荐**:**a1 + 每条消息预算 + 复用 retry.rs 退避 + 错误气泡内更新**
- **关联**:todo F-260616-07
- **状态**:✅ 已决(2026-06-16)— **决策:a1 + 每条消息预算3次 + 复用 retry.rs 退避 + 错误气泡内更新**。流前失败重试,不碰流中途。**子决策:不加 Settings UI,硬编码默认 3 次(A)**。
#### F-260616-08 AI 数据获取工具突破 50 条上限
- **背景**:MAX_LIST_RESULTS=50 硬覆盖 6 工具(list_projects/tasks/ideas/trash/search_files/read_file 搜索),配套只给 has_more/truncated 提示无 offset 翻页;knowledge_search min(3) 钳死。
- **决策点**(4 子):
- (a) 翻页范围:全量工具补 offset(对齐 read_file 统一)/ 仅 hot 工具(list_tasks/search_files)
- (b) 翻页 limit 默认:沿用 50 / 提到 100-200
- (c) knowledge_search 上限:20 / 50
- (d) 是否加 get_count/list_all 探总量工具
- **推荐**:原推荐不加探总量;用户决策:**需加 get_count/list_all 探总量工具**(AI 需知总量做分页策略,has_more 仅告知"还有"不知多少)
- **关联**:todo F-260616-08
- **状态**:✅ 已决(2026-06-16)— **决策:全量 offset + 沿用 50 + knowledge 20 + 加探总量工具(get_count/list_all)**。用户要求 AI 具备探总量能力。
#### F-260616-09 AiSession 单例→多会话并发架构
- **背景**:用户需求(3 条消息强化):「应用级支持同时具备多会话」+「多个会话窗口来回切,**并行执行**」。现状 `AiSession` 应用级单例(state.rs:164 `ai_session: Arc<Mutex<AiSession>>`),messages/generating/stop_flag/pending_approvals 全一份;同一时刻只一个对话能跑。残留 bug:新建会话上下文残留(前端 newConversation 漏清 queue/generatingConvId/agentRound;后端 ai_conversation_create 漏清 agent_language/stop_flag)。
- **决策点**(5 个子决策):
- (a) **推进路径**:A 先做隔离修复(补漏清字段维持单例,解残留,低风险) vs 直接 B 架构升级 — 倾向 **A 先**(残留真 bug 立即解,B 另立项)
- (b) **B 多会话形态**:AiSession 整体 HashMap<conv_id, SessionState> vs 仅拆 generating/stop_flag per-conv(messages/pending 已可按 conv reload) — 倾向**后者**(侵入小)
- (c) **B 并发上限**:复用 llm_concurrency.global 限并发会话数防 token 暴增 vs 无上限 — 倾向**复用限并发**
- (d) **多窗口 UI 形态**:(d1) 单面板侧栏会话列表切换+后台并行(改动小) vs (d2) 每会话独立 Tauri 窗口(useAiWindow.ts detached 已有基础可扩,改动大但「窗口来回切」语义最贴) — **待用户定**,倾向先 d1 后 d2
- (e) **旧 loop 切换处理**:不退出各自跑完(真并发) vs 仍退出 — 倾向**不退出真并发**
- **选项**:
- a: A 先做隔离修复(B 前置,解残留) + B 立项排期(UI 待用户定 d1/d2)
- b: 直接 B 架构升级(一步到位,大改+高风险)
- c: 仅 A 隔离修复(满足"切会话不残留",并行执行缓做)
- **推荐**:**a**(A 先解燃眉真 bug,B 按架构演进另立项;UI 形态 d 待用户拍板再定 B 的工作量)
- **关联**:todo F-260616-09 / memory aichat-arch-extensibility(AiSession 单例未动架构债)
- **状态**:✅ 已决(2026-06-16)— **决策:a**(A 先隔离修复 + B 立项)。**UI 形态:d1+d2 都做**——侧边栏可切换,也可多窗口打开。先 d1(侧栏切换+后台并行),再 d2(独立 Tauri 窗口,detached 已有基础)。**🔥 用户要求(2026-06-16):B 阶段架构升级提升为高优先级,尽快实施。**
#### F-260615-14 AiChat 气泡截图拷贝
- **背景**:截图拷贝(气泡 DOM→图片→剪贴板)需加依赖 html2canvas(~90KB)或 dom-to-image-more(~3KB)。
- **决策点**:选型?
- **选项**:
- a: html2canvas(~90KB,CSS 支持有限但社区成熟)
- b: dom-to-image-more(~3KB,轻量,CSS 支持更弱)
- c: 不做(文本拷贝 F-13 已够,截图 ROI 低)
- **推荐**:**b**(做减法,3KB 轻量,气泡样式简单风险低)或 **c**(等用户反馈需求强度)
- **关联**:todo F-260615-14
- **状态**:✅ 已决(2026-06-16)— **决策:c 不做**。文本拷贝+代码块复制已覆盖核心需求,等用户真实反馈再定。
#### F-260616-11 审批续跑 iteration 计数策略
- **背景**:`try_continue_agent_loop` 审批后续跑 iteration 从 0 重计(agentic.rs:418 注释,F-260616-03 续跑决策 a 延伸),多次审批(Med/High 工具)=反复重跑 max_iterations 轮,token 消耗不受 max_iterations 严格控制。
- **决策点**:iteration 累计 vs 重置?
- **选项**:
- a: 累计计数(try_continue 不重置 iteration,跨审批续跑延续累计)
- b: 重置 + 独立「审批次数」配额
- c: token 总量兜底(不碰 iteration,加 token 硬上限)
- **推荐**:**a + c**(累计防超配 + token 兜底)
- **关联**:todo F-260616-11 / F-260616-03
- **状态**:✅ 已决(2026-06-16)— **决策:a**。累计计数,try_continue 不重置 iteration 跨审批累计,防多次审批 token 失控。token 兜底 c 暂不加(避免过度设计,iteration 累计已控)。实施待 batch60 完成(agentic.rs 锁释放)。
#### F-260616-07b AiNode 自审闸门 — 自审对象来源(架构决策)
- **背景**:推进链阶段3 AiNode 自审闸门,AiNode 自审拓扑(testing 模板 `ai_self_review→human_review`)+ AiNode 通用执行(ai_node.rs:116-164)已就绪,缺口:run_workflow 不注入 ai 节点 config(workflow.rs:84-115 dag 选模板后直接 build_dag 执行,无 config 注入步骤)+ **自审对象无来源**。核心瓶颈:推进链每次 run_workflow 独立执行,executor.rs 内存跑 DAG(outputs HashMap :94/:145)产出**不持久化**(node_executions 表 executor 不写,state.rs:150 NodeExecutionRepo dead_code 印证),TaskRecord(models.rs:53-56)无产出字段,NodeContext(node.rs:13-26)无 task 数据。ai_self_review(testing 模板 in_review→testing)自审什么无来源——ai_execute(in_progress 模板)产出跨执行不传。
- **决策点**:ai_self_review 自审对象来源?
- **选项**:
- a: **TaskRecord 加 `output_json` 产出字段**(ai_execute 写 / ai_self_review 读 / human_review 展示)+ run_workflow 注入 task 数据到 NodeContext + 自审 prompt 模板(需求符合度+产出完整性,产出 通过/不通过+理由+建议)。task 中心,最直接解锁自审闭环,human_review 读产出展示给人核受益。
- b: ai_self_review 自审 task.title+description(任务定义)。无需改数据模型,但语义弱(自审任务定义非产出,意义存疑)。
- c: 补 executor 写 node_executions(output_json)+ ai_self_review 跨执行读 task 最近 ai_execute 产出。通用(任何节点产出可查),但 executor 改动+跨执行查 task_id 关联。
- d: 等 git 集成(阶段4 F-260616-08 暂缓),自审代码改动 diff。最贴切(自审代码)但阻塞于阶段4。
- **推荐**:**a**(task 中心,最直接解锁自审闭环+人核,数据模型变更小:TaskRecord 加 output_json+迁移+run_workflow 注入 task 到 NodeContext+自审 prompt 模板,中等工作量)。c 通用但 executor 改动大,b 语义弱,d 阻塞阶段4。
- **关联**:todo F-260616-07 阶段3(AiNode 自审 ⏳ 子条) / task_workflow_templates.rs:57-72(testing 模板) / ai_node.rs(AiNode 通用执行) / memory aichat-arch-extensibility(AiNode 空壳架构债)
- **状态**:✅ 已决(2026-06-16)— **决策:a**。TaskRecord 加 `output_json` 产出字段,ai_execute 写 / ai_self_review 读 / human_review 展示。task 中心,产出跟着 task 走,跨工作流执行可传递。**阶段1迁移+方案✅(539b5ed+25409e5) 阶段2②③④⑤✅(c10adaf ai 侧 + 741b0b9 前端),⑥联调阻塞 P0 provider 注入见 F-260616-07c**。
#### F-260616-07c AiNode provider 注入安全(FR-S1 api_key 下沉)
- **背景**:AiNode 自审闭环②③④⑤已实施(c10adaf+741b0b9),provider 配置注入阻塞⑥联调。根因:secret 解析(ensure_resolved_key)在 src-tauri/commands/ai/secret.rs(app crate),df-nodes 不可依赖 src-tauri(单向 app→df-nodes),AiNode/AiSelfReviewNode 只能从 config 读明文 api_key,违背 FR-S1 mask 设计(前端/LLM tool_call schema 可拿明文 key)。
- **决策点**:secret 解析下沉方式?
- **选项**:
- a: 完整下沉 secret.rs → df-storage(新建 df-storage/src/secret.rs,src-tauri 改调 df-storage::secret)
- b: df-storage 加薄 secret 查询方法(AiProviderRepo::resolve_api_key(id) 封装 mask/env 解析,df-nodes 调此)
- c: provider_id 注入 config + df-nodes 直查 ai_providers.api_key(不走 secret.rs,df-nodes 自实现解析)
- **推荐**:**方案 B**(df-storage 加薄 secret 查询,纯密钥逻辑下沉不含 build_provider_for 避循环依赖)
- **关联**:todo F-260616-07 阶段3(⑥联调) / secret.rs / FR-S1 / memory FR-S1 api_key IPC mask
- **状态**:✅ 已决+实施(2026-06-16)— **方案 B 落地**:①secret 纯密钥逻辑下沉 df-storage/src/secret.rs(766f235,避循环依赖 build_provider_for 留 src-tauri 转发壳,12 调用点零改)②AiNode provider_id 注入链(84a6fc4,resolve_provider 三路径:provider_id 优先/老明文兼容 warn/空兜底 is_default)。**FR-S1 闭环**:api_key 经 df_storage::secret 解析 AiNode 内存内,不进 config/NodeOutput/schema。⑥联调代码层解锁,待实测(tauri dev)。
---
## ④类 — 设计方向(已决)
#### F-260614-03 灵感对抗评估接 LLM
- **背景**:df-ideas adversarial.rs `evaluate()` 纯启发式,接 LLM 需改签名注入 provider。
- **决策点**:注入方式?
- **选项**:
- a: trait 解耦(df-ideas 定义 IdeaAnalyzer trait,推荐)
- b: df-ideas 直接依赖 df-ai
- c: closure 注入
- **推荐**:**a**(trait 解耦,但前置 F-07 trait 下沉)
- **关联**:todo F-260614-03 / F-07
- **状态**:✅ 已实施(F-07 batch61·2069f79 解锁 + F-03 batch62·dfe0096 evaluate_with_llm 真实实现落地,19单测过,CR-40审查中)
#### F-260616-07 阶段3 AI 执行闭环 + F-03 收口三件
- **背景**:advance_task/run_workflow 注册为 AI 工具 + AiNode 自审闸门;F-03 收口三件(advance_task 注册 + update_task 描述/schema 移 status + df-storage tasks 白名单移 status)须同步落地防 AI 工具行为不一致。
- **决策点**:阶段3 范围/优先级?(依赖 F-07 trait 下沉让 AiNode 可复用)
- **选项**:
- a: 全量(三件 + AiNode 自审 + run_workflow 工具)
- b: 仅 F-03 收口三件(防行为不一致,先小步)
- c: 暂缓(等 F-07 + 真实推进场景)
- **推荐**:**b 先做 F-03 收口**(防现状行为不一致),AiNode 自审等 F-07
- **关联**:todo F-260616-07 阶段3 / F-07
- **状态**:✅ 决策b 实施中(F-07 batch61·2069f79 解锁,F-03收口三件 batch64·workflow wii1u1lnm 推进中,AiNode自审等后续批)
#### F-260616-08 阶段4 Git 集成
- **背景**:kind 字段 + git 闸门节点 + worktree 隔离。
- **决策点**:阶段4 是否进路线?(工作流当前内部基础设施无真实 CI/CD 场景,R-PD-12 已否决做实 run_workflow)
- **选项**:
- a: 进路线(设计+实施)
- b: 暂缓(等工作流有真实使用场景)
- **推荐**:**b 暂缓**(对齐 R-PD-12 否决,等真实场景)
- **关联**:todo F-260616-08 阶段4
- **状态**:✅ 已决(2026-06-16)— **决策:b 暂缓**。对齐 R-PD-12 否决,等工作流有真实 CI/CD 场景。
#### F-260614-08 决策治理产品化
- **背景**:活契约/规格契约自检机制(当前散落文档机制)产品化为可操作功能。
- **决策点**:产品化形态?(规格契约机制 devflow-spec-contract-mechanism 文档已定稿,落地链②-⑤未做)
- **选项**:
- a: 独立功能页(规格契约自检 UI)
- b: 嵌入现有流程(锚点+AI自检+子代理活契约化)
- c: 暂缓(机制先行文档化,产品化等需求)
- **推荐**:**c 暂缓**(机制文档已定稿,产品化等真实需求驱动)
- **关联**:todo F-260614-08 / memory devflow-spec-contract-mechanism
- **状态**:✅ 已决(2026-06-16)— **决策:c 暂缓**。机制文档已定稿,产品化等真实需求驱动。
#### F-260614-09 项目 status 字段治理
- **背景**:status 状态机规范化(planning/active/archived 等枚举约束)。F-09 前端已对齐(planning/active/completed),后端 df-core enum 7 值是独立大改。
- **决策点**:后端 status 枚举收口范围?
- **选项**:
- a: 后端 enum 收窄对齐前端(planning/active/archived)
- b: 双字段(status 生命周期 + stage 开发阶段,已否决过度设计)
- c: 暂缓(DB 实际只产生 planning + deleted_at 软删二态,现状可接受)
- **推荐**:**c 暂缓**(DB 实际二态,收口 ROI 低,等真实多态需求)
- **关联**:todo F-260614-09 / F-09
- **状态**:✅ 已决(2026-06-16)— **决策:c 暂缓**。DB 实际只产生 planning 二态,收口 ROI 低。
#### F-260614-10 知识库 MCP Server + Tier 2/3
- **背景**:对外 MCP 暴露 + 分层存储(当前仅 Tier 1 全栈)。
- **决策点**:MCP 暴露范围 + Tier 2/3 存储选型?
- **选项**:
- a: 全量(MCP Server + Tier2 向量 + Tier3 冷归档)
- b: 仅 MCP Server(对外暴露 Tier1)
- c: 暂缓(等知识库真实外部消费需求)
- **推荐**:**c 暂缓**(Tier1 全栈已满足当前,等外部消费需求)
- **关联**:todo F-260614-10
- **状态**:✅ 已决(2026-06-16)— **决策:c 暂缓**。Tier1 全栈已满足当前,等知识库真实外部消费需求。
---
## 重投入排期(已排期/实施)
> 方案已定(📐设计完成/完备),非"待决策方向",而是"待排期投入"。
#### F-260614-07(F-07) df-ai-core trait 下沉拆 crate
- **背景**:架构前置,4 项决策全定稿。退路可放 df-core。解锁 F-03/F-01。
- **设计状态**:📐 完备(决策记录已收敛:原 F-03 A/B/C 作废,统一全局 AI trait 下沉独立 crate)
- **决策点**:排期?(解锁多项后续,但拆 crate 重投入)
- **推荐**:原推荐优先(可先放 df-core 过渡);用户决策:**拆独立 crate df-ai-core**(不放 df-core,一步到位)
- **关联**:todo F-260614-07 / F-03
- **状态**:✅ 已决(2026-06-16)— **决策:拆独立 crate df-ai-core**。不放 df-core 过渡,LlmProvider trait + 核心数据结构下沉独立 crate,df-ai/df-ideas/df-nodes 均依赖 df-ai-core。**✅ 已实施(batch61·2026-06-16·commit 2069f79·workflow wwtn2knn6+主代核查,cargo 0err+7单测)**。解锁 F-01/F-03 注入。
#### F-260614-01 模型能力系统 Phase 1
- **背景**:ModelConfig 数据模型(模态/能力/价格/智力 4 维度) + ModelRouter 智能路由 + 多源探测(预设表+启发式) + 厂商模型列表自动拉取(适配 OpenAI/Anthropic 协议差异) + 7 调用点接入 + Settings 模型池 UI + AiChat 模型下拉。按需求自动匹配合适模型。
- **设计状态**:📐 设计定稿(2026-06-16,含 7 角度佐证 + 厂商适配 + 用户流程,见 [F-01-模型能力系统与智能路由设计-2026-06-16.md](../../02-架构设计/已编号方案/F-01-模型能力系统与智能路由设计-2026-06-16.md))
- **决策点**:排期?(依赖 F-07 trait 下沉)
- **推荐**:F-07 后接续
- **关联**:todo F-260614-01 / F-07
- **状态**:✅ 已排期(2026-06-16)— 用户确认推进。设计已定稿,F-07 已完成解除阻塞,列为 P1🔥 可立即实施。6 阶段子任务已拆解见 todo.md。
#### F-260614-06 导入历史项目(scan 第二步)
- **背景**:description 走 LLM(复用 scan_project_with_ai)+ 采样保留内容图(待 F-260614-05 多模态)+ monorepo 一层 + 批量并发;抽 create_with_binding 缓解 TODO。
- **设计状态**:📐 设计定稿(6 决策 06-14)
- **决策点**:排期?(依赖 F-260614-05 多模态采样)
- **推荐**:F-05 多模态后接续
- **关联**:todo F-260614-06 / memory devflow-project-path-binding
- **状态**:✅ 已实施(batch61·2026-06-16·commit 2069f79·workflow wwtn2knn6+主代核查,cargo 0err+vue-tsc 0err)。6 决策全落地,image 多模态留接口待 F-260614-05。
#### F-260614-02 技能联想「使用」
- **背景**:首批 3 类联想已做,联想后实际触发/执行技能未实现。
- **决策点**:「使用」语义?(执行本机 claude 技能?AI 调用?需明确)
- **推荐**:需先澄清语义(关联 memory aichat-skill-slash-autocomplete)
- **关联**:todo F-260614-02
- **状态**:✅ 已决(2026-06-16)— **决策:ai调用**。**✅ 主干已实施(batch62·2026-06-16 走查发现 commands.rs:172-175 已注入 system_prompt 头尾标注隔离+前端全链路通)**。设计文档推荐方案 A(注入 system),剩 P1(argument_hint 参数 UI)/P2(空文本标题)边界打磨。详见 docs/02-架构设计/已编号方案/F-02-技能联想使用-实施机制设计-2026-06-16.md。
#### F-260614-04 多 Provider 负载均衡池
- **背景**:备用模型/多账号聚合,全局容量=min(各 provider 上限之和, global_cap)。
- **决策点**:排期?(增强非阻断)
- **推荐**:低优先(等 F-01 模型能力后)
- **关联**:todo F-260614-04
- **状态**:✅ 已排期(2026-06-16)— 用户确认推进。P2 优先级,等 F-01 模型能力系统落地后接续(路由器需要知道哪些模型可用)。
#### F-260614-05 模型能力系统 Phase 2(多模态)
- **背景**:ChatMessage.content: String → Vec<ContentPart>(Text/Image);前端粘贴/拖拽图片;vision 模型自动路由。
- **决策点**:排期?(解锁 F-06 导入采样)
- **推荐**:中等(解锁 F-06)
- **关联**:todo F-260614-05 / F-01
- **状态**:✅ 已排期(2026-06-16)— 用户确认推进。P2 优先级,F-01 后接续。设计已定稿见 [F-05-多模态实施方案设计-2026-06-16.md](../../02-架构设计/已编号方案/F-05-多模态实施方案设计-2026-06-16.md)。
#### AE-2025-04 会话级授权(Session Trust)
- **背景**:同会话内用户批准过某类操作后,后续同类自动放行;换会话清空重审。首批 write_file + run_command。设计已定(目录级粒度 + 仅写+执行首批 + Webhook 走独立 execution_token)。
- **设计状态**:📐 设计定(2026-06-16)
- **决策点**:排期?(涉及 mod.rs AiSession + audit.rs 审批链)
- **推荐**:中高(写→跑→看→改闭环高频连续操作,体验提升大)
- **关联**:todo AE-2025-04
- **状态**:✅ 已排期(2026-06-16)— 用户确认推进。P1 优先级,写→跑→看→改闭环高频连续操作体验提升大。设计已定(目录级粒度 + 仅写+执行首批)。
#### T-260614-06 Settings.vue 拆 panel 子组件
- **背景**:1042 行 god file,4 大功能域(AI 模型/Provider 表单/连接管理/通用设置)可拆 src/components/settings/。评估非低风险(纯重构零功能价值,新建 4 子组件 + props/emits + CSS 拆)。
- **决策点**:排期?(单独立项做更稳)
- **推荐**:低(纯重构零功能,等 god file 痛点加剧)
- **关联**:todo T-260614-06
- **状态**:✅ 已排期(2026-06-16)— 用户确认推进。P3 优先级(纯重构零功能),等 god file 痛点加剧或配合 F-01 模型池 UI 一并做。
---
## ④类续 — 设计方向(已决·batch55迁移)
#### UX-2025-04 断线保文(incomplete标志)
- **背景**:流式中断时已接收文本不丢弃;stream_llm mid-stream error 改返回 partial_text + incomplete 标志;agentic 收 incomplete→正常入库+AiCompleted(非AiError)+「⚠ 响应因网络中断不完整」+「继续生成」按钮。
- **决策点**:改 stream_recv.rs 流式核心是否做?(中风险,回归可能)
- **选项**: a:授权推进(关联 DEC-260616-03 已决a) / b:暂不碰
- **推荐**:**a**(DEC-03 已授权,断线保文是用户体验硬伤)
- **关联**:todo UX-2025-04 / DEC-260616-03
- **状态**:✅ 已决(2026-06-16)— **决策:a**(授权推进。DEC-03 已授权,断线保文是用户体验硬伤)。
#### ARC-260615-03 df-execute 归宿
- **背景**:df-execute 非空壳(shell.rs execute() 已完整实现+被 tool_registry.rs run_command 复用)。原todo「76行/1函数+TODO」基于 lib.rs 空判过时。
- **决策点**:合并进 df-nodes(破职责分离+动依赖树) vs 维持独立?
- **选项**: a:维持独立(职责清晰:节点定义vs执行运行时) / b:合并df-nodes(减少crate数)
- **推荐**:**a**(维持独立,转架构维护记录非清债)
- **关联**:todo ARC-260615-03
- **状态**:✅ 已决(2026-06-16)— **决策:a**(维持独立,df-execute 非空壳 shell.rs execute() 已完整实现 + 被 run_command 复用,转架构维护记录非清债)。
#### ARC-260615-07 中期技术债7件
- **背景**:df-core改名df-types / IPC层抽取df-app / AI loop下沉df-ai / 3 view绕store调api / 类型契约ts-rs代码生成 / AiSession多会话 / AppState分组 / IPC命名统一。
- **决策点**:哪些值得投?哪些暂缓?
- **选项**: a:逐项评估后挑高ROI的做 / b:全部暂缓(等业务功能优先)
- **推荐**:**b 暂缓**(当前业务功能未饱和,技术债不急)
- **关联**:todo ARC-260615-07
- **状态**:✅ 已决(2026-06-16)— **决策:a**(逐项评估挑高 ROI 的做,用户要求推进非暂缓)。
#### B-260615-41 工作流执行无进度指示
- **背景**:长时间工作流执行用户不知进度/剩余时间。需进度条+步骤提示+预估剩余时间。
- **决策点**:实现深度?纯前端 vs 后端emit事件驱动
- **选项**: a:轻量(WorkflowDetail.vue 进度条+步骤文本,后端复用已有NodeStarted/Completed事件) / b:完整(后端新progress事件+预估算法)
- **推荐**:**a 轻量**(复用现有事件,最小改动)
- **关联**:todo B-260615-41
- **状态**:✅ 已决(2026-06-16)— **决策:a 轻量**(复用现有 NodeStarted/Completed 事件,纯前端消费)。
#### B-260615-43 无撤销重做功能
- **背景**:AI操作(delete_project等)无撤销。操作历史栈+撤销/重做UI。
- **决策点**:撤销范围?全局vs仅AI操作?
- **选项**: a:仅AI工具操作(delete_task/delete_project/restore/run_command等) / b:全局(含项目/任务CRUD) / c:暂缓(二次确认已部分覆盖)
- **推荐**:**c 暂缓**(High-risk工具已有二次确认AE-05,撤销复杂度高)
- **关联**:todo B-260615-43
- **状态**:✅ 已决(2026-06-16)— **决策:c 暂缓**(High-risk 已有二次确认 AE-05,撤销复杂度高)。
---
## C类 — 已解决
#### ~~S-260615-01 aichat API Key 401 根因~~
- **状态**:✅ 已解决(2026-06-16)— 用户确认已解决。
#### ~~S-260614-01 「显示多开」需求澄清~~
- **状态**:✅ 已解决(2026-06-16)— 用户澄清:需求本质是「会话来回切并行处理」(A 对话回复中切到 B 发消息,A 后台继续跑),非设置页开关。已被 F-260616-09(决策 a:d1 侧栏切换+后台并行)完整覆盖收编。
---
## 当前队列已决项迁入2026-06-18
#### B-260617-01 run_workflow 作为 AI 工具无法执行 + 无意义重试 + 审批混淆
- **背景**2026-06-17 实测发现AI 对话中调用 `run_workflow(task_id, target_status)` 推进任务状态,审批通过后 handler 返回 Err 提示字符串(`tool_registry.rs:530-546``ai_approve``commands.rs:329-334`)将其包成 `"failed"` tool_result 回传 LLM → LLM 认为失败 → 重试(1/4) → 又进审批 → 循环。三个关联问题:
- **问题 1**run_workflow handler 仅持有 `db: Arc<Database>`,无法访问 `AppHandle/State`registry/event_bus/workflows Repo返回 Err 提示前端走 IPC。但 `ai_approve` 审批通过后直接 `ai_tools.execute()` 调 handler → 必然 Err。
- **问题 2**handler Err → tool_result = 错误提示 → LLM 重试 → 同结果循环(工具定义未标 `no_retry`)。
- **问题 3**:前端渲染的是 AI 工具审批tool_call pending非工作流 HumanNode 审批。用户批准后工作流引擎从未启动。
- **决策点**run_workflow 审批通过后如何真正执行工作流?
- **选项**
- a: **前端拦截**`ai_approve` 中识别 `run_workflow` → 不走 `ai_tools.execute` → 直接 `invoke('run_workflow', {task_id, target_status})` → 结果回填 tool_result
- b: **后端注入 State**`build_ai_tool_registry` 传入 `AppHandle` 使 handler 可直接执行,改 state.rs + tool_registry 签名)
- c: **从 AI 工具移除 run_workflow**(仅保留 advance_task 推进状态,工作流由用户手动在前端触发)
- **推荐****a 前端拦截**(改动最小,`ai_approve` 一处分支即可;方案 b 需改 tool_registry 签名链路较长;方案 c 退回手动不符合 AI 驱动目标)。问题 2/3 随 a 自动消解。
- **关联**todo B-260617-01 / tool_registry.rs:530-546 / commands.rs:329-334 / audit.rs:590-630
- **状态**:✅ 已决(2026-06-17·波9 e23b316)— **决策:a 细化为 a2(后端分支)**。ai_approve 已持 app+state,后端直接调 run_workflow_inner 最干净(无需新 IPC/前端分支/工作流知识泄漏),符合 a 大方向(绕开 ai_tools.execute 必 Err)。问题 2 随 a2 消解(成功 tool_result + High 去重缓存双层断循环);问题 3 渲染区分记观察项(tool_display_hint 已含「触发工作流」语义)。详单见待审查 CR-52。
### ~~S-260614-01 多会话来回切(A/B 路线)~~ — 已并入 F-260616-09
- **状态**:✅ 已并入 F-260616-09(2026-06-16 已决 a:A 隔离修复 + B 立项高优先实施)。A/B 路线决策统一收口于 F-260616-09,本条不再独立维护。A 路线实施待 T-260614-02 实测确认是否升 B。
#### B-260617-11 tauri.conf.json 打包目标收窄确认
- **背景**:工作区改动 `bundle.targets: "all" → ["nsis"]`(src-tauri/tauri.conf.json:28),收窄到仅 Windows NSIS。若随其他改动一并提交,macOS(dmg/app)/Linux(deb/appimage)构建将不可用,影响其他开发者/CI。
- **决策点**:临时本地构建 vs 有意入库?
- **选项**:A 临时本地构建(提交前 revert 此行) / B 有意入库(改按平台条件配置而非硬编码单 target)
- **状态**:✅ 已决(2026-06-18) — **决策:A 临时本地构建,要求高速**`["nsis"]` 已是 Windows 单一最快安装包目标。提交前须 revert 为 `"all"`。若进一步提速可用 `["app"]`(裸 .exe 无安装包)或 `tauri build --no-bundle`
### 当前队列已决项迁入2026-06-26 ~ 2026-06-27
> 来源:待决策.md ✅ 2026-06-26 任务图谱推进待决策 + 🟡 各节已决项批量迁入。
#### ✅ DEC-260626-01 父② 知识图谱 Phase 1 多工程合并
- **决策**:**b** — 知识图谱独立 Phase 1(**V29**,V28 已被灵感软删除占用)。多工程代码零行(grep 全空),合并无理由,多工程后续 V30+。
- **关联**:todo 父②
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-02 ⑤.2 #7 promote 补偿删除方式
- **决策**:**b** — 保留 purge。补偿是内部回滚建错的 project(非用户删除),purge 干净不污染回收站。
- **关联**:todo ⑤.2 #7(标"保留 purge 不改")
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-03 ⑤.2 #6 评分关键词配置形式
- **决策**:**c** — 先拆 const 到独立文件(中/英两套,最小改动)。原推荐 a 修正:启发式是过渡(scoring.rs TODO 接 LLM 语义评分),接 LLM 后按需升 a(JSON 文件)。
- **关联**:todo ⑤.2 #6
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-04 ⑤.2 #9/#10 表单补全交互
- **决策**:**a** — tags 逗号分隔输入框(对标 Knowledge.vue 先例)+ priority 下拉 + source 输入。chip 组件留 UX 升级。
- **关联**:todo ⑤.2 #9/#10
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-05 BUG-260620-05 层2 授权政策
- **决策**:**a** — 维持方案①(白名单+弹窗三档)。层1(工程内免授权,F-260619-03 方案①)已解痛点,层2 黑名单制安全风险 + 分发冲突。
- **关联**:todo BUG-260620-05 层2(标"维持①不做")
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-06 父③ ToolCard 跨轮合并 + 审批状态机排期
- **决策**:**b** — 等 G1 实测 + 父② 后再做。审批是高危路径,AiChat.vue 仍在频繁改动,择稳定窗口专项。
- **关联**:todo 父③(排父②后)
- **状态**:✅ 已决(2026-06-26)
#### ✅ DEC-260626-07 父④ F-09 per-conv 真多会话排期
- **决策**:**a** — 父② Phase 1 后启动。F-09 是 Phase 4 前置,大改不与父② 并行(回归交叉)。
- **关联**:todo 父④(排父②后)
- **状态**:✅ 已决(2026-06-26)
#### ✅ 专题-1 workspace_root 分发适配
- **决策**:**① 先行**(去默认白名单,dev 自用 projects.path 自动授权够),**分发前定②**(去相对锚)。
- **状态**:✅ 已决(2026-06-26,① 立即/② 分发前)
#### ✅ 专题-2 BUG-260623-03 审批 pending 超时兜底
- **决策**:**c 无超时**(不做超时兜底)。用户:等待审批就是等待,一直等待,超时概念多余。审批是用户主动行为,不审批自然挂起等待,无需超时强制 reject/倒计时。
- **状态**:✅ 已决(2026-06-26,不做超时,关闭 BUG-260623-03)
#### ✅ 专题-3 F-09 streaming/currentText per-conv
- **决策**:**暂缓**(随 B 路线多会话并发同批做,即 DEC-07 父④)。
- **状态**:✅ 已决(2026-06-26,归父④)
#### ✅ S-260623-01 「自托管」含义澄清
- **决策**:**自用阶段定案(2026-06-23)** —— 用户决策:小程序当前自用(开发阶段),分发是产品终态但留后续(过渡期靠改 device_id 实现多机)。故「自托管」现阶段 = 已实现的自主执行(autoExecuteMode all 含高危),无另义。分发阶段再做配置层(MINIDEC-01)+ 配对(MINIDEC-02)。
- **关联**:task105 / memory(设置自主执行已实现)
- **状态**:✅ 自用阶段定案(2026-06-23)
#### ✅ B-260618-03 路由解耦 cost_tier/intelligence(用户已全局决策去掉,工程大需专项)
- **决策**:用户已全局决策去掉。自主推进(2026-06-18 workflow wexu1isx1,主代核查 cargo check --workspace EXIT 0 + cargo test df-ai 109 passed + vue-tsc EXIT 0)。title/compress 纯 weight 选模型退化点:用户核对 Settings weight 配置(同 weight 并列 max_by_key 返回最后一个)。
- **关联**:todo B-260618-03/04/05 · UX-260618-04 前端 cost/intel 标签(依赖本项)
- **状态**:✅ 已实施(2026-06-18)
#### ✅ SW-260618-21 死代码预留功能清理批(清理 vs 保留)
- **决策**:**b 保留+标 allow**(预留设计意图明确·清理失去未来扩展点 ROI 低;标 allow 消 warning 即可·零波及)。risk_level 删 + 预留/diff 标 allow·cargo 0 warning。
- **关联**:批次7 transition_status 已删 / CR-22 删 risk_level / CR-23 标 allow 5 处
- **状态**:✅ 已实施 b(2026-06-18)
#### ✅ F-260616-09-B 多会话并发架构 B 阶段实施决策(设计完成 2026-06-19·待拍板)
- **决策**:**✅ b-1 采纳(messages per-conv,技术必然)+ c-1 保持 3 + Settings 配置 + e-1 原路径**。主代自主裁决采纳(2026-06-19)。用户授权「自主推进,能多角度确定的方案不等审批」。启动阶段2 批1。
- **关联**:todo F-260616-09 / 设计文档 / memory aichat-arch-extensibility
- **状态**:✅ 主代自主裁决采纳(2026-06-19)
#### ✅ F-260619-05 任务可关联灵感(产品粒度/方向决策·todo 已登记)
- **决策**:tasks 加 `idea_id REFERENCES ideas(id)`(复用 projects 模式,1对1 起步,单向,后续按需扩展)。**已实施**(2026-06-20 调研确认)。前端任务卡片展示灵感来源(可选增强)待补。
- **关联**:todo.md F-260619-05
- **状态**:✅ 已实施(2026-06-20)
#### ✅ MINIDEC-260623-03 WS 重连续流策略(F10·行为差异·需拍板)
- **决策**:**已实施 a**(2026-06-23)——用户决策「断网不丢消息 + 从远端拉完整」。useAiChat syncOnConnect:ws 'connected' → 发 load_messages 拉完整历史。cargo check 0 + vue-tsc 0 + build DONE。
- **状态**:✅ 已实施(2026-06-23)
#### ✅ MINIDEC-260623-04 审批双源状态分裂统一(F4/F5/F6/F13·渲染源决策)
- **决策**:**已实施 a 单一渲染源**(2026-06-23)——用户决策「审批断网重连恢复卡片状态」。审批卡改从 pendingApprovals 独立面板渲染;remote_bridge 加 sync_pending 路由;useAiChat onStatus 'connected' 清 pendingApprovals + 发 sync_pending 重建;handleEvent 加同 id 去重。cargo 0 + vue-tsc 0 + build DONE。
- **状态**:✅ 已实施(2026-06-23)
#### ✅ MINIDEC-260623-05 会话页管理缺口(删除/重命名·需后端命令)
- **决策**:**重命名已实施 / 删除暂缓**(2026-06-23)——用户决策「小程序对齐桌面端能改会话名」。remote_bridge 加 rename_conversation 路由;useAiChat renameConversation 方法;conversations/index.vue 长按会话编辑。删除会话暂不做(桌面端管理)。cargo 0 + vue-tsc 0 + build DONE。
- **状态**:✅ 重命名已实施 / 删除暂缓(2026-06-23)
#### ✅ MINIDEC-260623-07 regenerate 零调用方 + 备份组件漂移(P3 收尾)
- **决策**:**随 P1-F 选 a**(2026-06-23)—— 🟡 收尾批给 regenerate 加「重发」UI 入口(对齐桌面端),故保留函数不再删;备份组件(MdView/MentionInput)保留预留注释(绕工具解析 bug,未来拆回)。
- **状态**:✅ 随 P1-F 选 a(2026-06-23)