diff --git a/.blueprint/modules/governance-feedback-loop.md b/.blueprint/modules/governance-feedback-loop.md index c6dd83b..4892734 100644 --- a/.blueprint/modules/governance-feedback-loop.md +++ b/.blueprint/modules/governance-feedback-loop.md @@ -147,12 +147,19 @@ R 规则层=CONVENTIONS 规则库(炼境强项,业务侧反而隐式)|E ## 任务卡 -### 📋 notes 档案落地(可拆除性修复:双写 + 存量回填) -- status: todo +### ✅ notes 档案落地(可拆除性修复:双写 + 存量回填)· done 2026-09-11 +- status: done - complexity: M -- files: src-tauri/src/mcp_tools.rs, src-tauri/src/db.rs -- acceptance: agent_verify: [Tauri command] append_project_note(pid, content) → DB 有记录**且** `.blueprint/notes-archive.jsonl` 尾行 JSON 可解析出同一 content;存量回填命令执行后 JSONL 行数 = project_notes 表行数;cargo test 覆盖双写 + 并发追加不交错 -- 备注:project_notes 是全系统唯一不在 git 的原创资产(飞轮全部原料)。格式选 JSONL 而非 md——机器可重放重建 DB,才是真「重生配方」。归宿:炼境仓库 `.blueprint/notes-archive.jsonl`,沿 usage.json「炼境自动写文件 + chore commit」先例。这即本模块缺口①「结构化落账」的地基 +- files: src-tauri/src/mcp_tools.rs, src-tauri/src/mcp_inject.rs(原卡列 db.rs 实际未动——无新表,纯双写层) +- acceptance: agent_verify: [Tauri command] append_project_note(pid, content) → DB 有记录**且** `.blueprint/notes-archive.jsonl` 尾行 JSON 可解析出同一 content;存量回填命令执行后 JSONL 行数 = project_notes 表行数;cargo test 覆盖双写 + 并发追加不交错 ✅(110 测试全绿含新增 3:双写行匹配 / 回填幂等+死登记跳过 / 8 线程并发不交错) +- **归宿翻转声明(动工前辩证,偏离原卡设计)**:原卡「炼境仓库集中式档案」→ 改为**按项目分片** + (各项目 `.blueprint/notes-archive.jsonl` 存自己的笔记)。理由:① 安装态进程无法可靠定位「炼境仓库」路径; + ② 与「资产=纯文件在项目 git、可拆除性按项目」哲学一致(透镜节 .blueprint 分片描述);③ 子项目会话 + (含 DSH,文件直读)就地消费自家档案;④ usage.json 先例本就是 per-project 写入 +- 实现留痕:双写失败不回滚笔记(DB 事实源)仅 log_event warn;`backfill_notes_archive` MCP 工具 + 全量重建幂等自愈;死登记(空/相对路径)跳过并报告(复用 validate_registered_path 防护, + project_root 重构出依赖注入版 project_root_with_conn) +- **待重建终验**:MCP 实调(append 双写 + backfill 存量 78+ 条笔记落盘)需重建安装炼境后执行 ### 📋 /ship 模板体检(第二轮分诊待行动 ×4) - status: todo