# 待决策归档(历史已决)

> 从 [待决策.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)
