Skip to content

Commit f1cc8df

Browse files
committed
docs(v0.13.8): 画布可视化交付记录与变更同步
- v0.13.md:状态行/总览行转交付 + 交付记录(差异登记:规格 3 命令补 get_canvas_viewport 第 4 条读命令闭环、概念/模型浮动参照不持久等) - CHANGELOG:v0.13.8 交付条目(数据层/4 命令/辐射布局/前端/验证口径) - README 索引 + line-limit 豁免登记(KnowledgePage 310 行 + 拆分计划)
1 parent 03d7111 commit f1cc8df

4 files changed

Lines changed: 46 additions & 3 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@
55

66
## [Unreleased] - 2026-08-24
77

8+
### v0.13.8 知识体系画布(React Flow 节点式无限画布,2026-08-24 交付,详见 [设计规格](docs/superpowers/specs/2026-08-24-v0.13.8-knowledge-canvas-design.md) 与 [v0.13 系列](docs/versions/v0.13.md#v0138-交付记录2026-08-24))
9+
10+
- **画布=手动画布非自动图(REQ-029 P3 维持)**:节点位置由用户拖拽决定;首次打开无位置节点以辐射布局初始化(BFS 算法,只算一次),之后「自动排列」按钮显式触发才整体重排覆盖;连线只反映既有 parent_id(用户不能画线即建引用,§二.4/§九)
11+
- **数据层(M1)**:knowledge_nodes 补 `canvas_x/canvas_y`(REAL,NULL=未布局;新库建表内联 + 旧库 ensure_column 零破坏);新表 `knowledge_canvas_states`(system_id 1:1:视口 x/y/zoom,upsert 覆盖,切回画布恢复);概念/模型无画布列——浮动参照,每次打开重排且置 `draggable:false`(拖了不持久,禁拖防困惑)
12+
- **4 命令(M1)**:`update_node_canvas_position`(拖拽落点防抖保存)/`batch_initialize_canvas_positions`(辐射布局首批 + 自动排列覆盖;全量预校验——跨体系/重复/缺失整体拒绝,零部分写入,事务原子)/`save_canvas_viewport`/`get_canvas_viewport`(**规格列 3 条,复盘补第 4 条**——§4.5 视口恢复需要读路径,第 4 条为读写闭环补全,差异登记见 v0.13.8 交付记录);校验:id>0、坐标有限值(拒 NaN/Infinity)、zoom (0,10]
13+
- **辐射布局纯函数(M2,TDD 8 golden)**:`layoutRadial`——核心问题虚拟圆心(coreQuestion 渲染不可拖/不可选核心卡)/无核心时首根圆心;ring1=220px 每环+200px;环≥2 子节点父角度扇区(spread=60°/(子数+1));碰撞沿角度+50px 最多 2 次后下一环;孤儿/概念/模型 golden angle 确定性兜底——零随机零 React,可复现可断言
14+
- **前端(M2)**:`canvasElements` 纯转换(`q/c/m` 前缀 key 防三表 id 冲突、parent_id→smoothstep 边、links→概念/模型徽标+引用计数与树视图同口径);三自定义节点(§七 缩放分级:>0.7 全文/0.4-0.7 仅标题/<0.4 缩略卡);`KnowledgeCanvasView`(MiniMap/Controls/适配视图/自动排列工具栏;拖拽与视口防抖保存;切回 setViewport 恢复、未存 fitView 兜底;首次缺位批量初始化);KnowledgePage「🗺 画布」标签 + 树视图「🎨 画布」浮钮双入口(§4.5)——树常驻 display 切换(折叠展开保持),画布激活才挂载(首次切换语义精确;视口恢复走持久化)
15+
- **只展示+拖拽(§九 全守)**:画布上不新建/编辑节点、不手动连线、无颜色/标签自定义、无导出图片、无框选批量移动、无移动端、无 AI 建议布局
16+
- 验证:`cargo test --test app_lib_tests knowledge` **151/151 全绿**(本版新增 11:命令 8 + 数据层 3);全量 1721 passed / 3 failed(预存基线:ai_client 默认 Provider 断言旧 SiliconFlow、note_filter 两条黄金用例,与本版无关)/ 6 ignored;clippy 新文件零警告;`tsc --noEmit` 零错误;vitest **34 文件 188 用例全绿**(新增 layoutRadial 8 / canvasElements 7 / CanvasNodes 6 / KnowledgeCanvasView 9 / KnowledgePage 画布入口 2);vite build 通过;真机走查待 REQ-146 批执行
17+
818
### v0.13.7 知识体系上手路径(2026-08-24 交付,详见 [v0.13 系列](docs/versions/v0.13.md) 与 [设计规格](docs/archive/2026-08-24/2026-08-24-v0.13.7-knowledge-system-onboarding-design.md)([ ] 已归档))
919

1020
- **入口补全三触点(体系不再是孤岛)**:① 组行体系徽标(SystemBadge + GroupSidebar——组被体系引用即显示徽标,点击跨页直达体系页并自动选中,`focusSystemId` 与既有 focusNoteId 同模式);② 笔记「挂到体系」(NoteLinkToSystem——修复手工输 id 断点:选体系→选节点→确认,targetType/targetId 自动携带,已挂可取消);③ 结算体系简报(RouteInfoPopover——本组 model 卡可纳入体系 + 体系概念 90 天未引用提醒,纯只读提示)

‎docs/standards/line-limit-exemptions.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
| app/src/components/NoteEditView.tsx | —— | v0.12.2 行数修正:实测 299 行(登记值 315 过期),本版新增 autoFocus 一行后仍 300 行以内——登记移除,见"已拆分/登记移除记录" | —— |
7878
| app/src/pages/NotesPage.tsx | 359 | v0.12.2 三栏编排(GroupSidebar/FeedFragmentList/NoteListView 插槽 + 收件箱动线 onPromoted 接线 + 新建零对话框)——编排层内聚(数据获取/选中态/快捷键/辅助面板插槽),组件已全部下沉拆件;2026-08-23 审查修复(onPromoted 同步清搜索态/onOpenInbox 清组过滤)+6 行;v0.12.8 列表级批量删除(runBatchDelete 确认+逐条 invoke+刷新,confirm 导入,+27 行);v0.13.6(REQ-223)编辑退出统一刷新回调 + 审查轮(ESC flush 出口) | 若再增长:键盘监听与收件箱动线回调拆至 useNotesPageShortcuts.ts / useInboxFlow.ts |
7979
| app/src/components/AiProviderSettings.tsx | 329 | v0.11.6 M1 code-review 修复(2026-08-22):删除/清钥加 window.confirm、window.prompt 改卡片内联 password 输入(+2 state + 内联表单)、模型列表 input 改 textarea、fallbackOrder 透传 initial、run 置"处理中"反馈、预设双源 presetOptions 后端拉取——修复净增约 13 行越线(实测 329,含 4 行豁免头注释) | 若再增长:内联密钥表单拆至 AiProviderKeyInput.tsx |
80+
| app/src/pages/KnowledgePage.tsx | 310 | v0.13.8 画布接线越线(原 296):中栏新增「画布」标签 + 树/画布双入口(树视图浮钮 + 标签栏)+ 中栏 display 切换(树常驻/画布激活挂载)——页面编排层内聚(数据获取/选中态/标签态为页面本地状态),子组件已全部下沉(Tree/Canvas/DetailPanel/Wizard/ConceptCardRow/Sample) | 若再增长:中栏视图块(树/画布/概念/模型 + 标签栏)拆至 KnowledgeMiddlePane.tsx,SystemCard 拆至 SystemSidebarCard.tsx |
8081

8182
> 前端 **拆分中**(Task #9 笔记域修复进行中,暂不登记行数):`app/src/types.ts`——待前端拆分完成后以实测行数重新评估。
8283
> 前端 SessionsPage.tsx 审查快照 304 行(登记值),v0.7.1 硬拆后长期 ≤300,本轮审查期间轻微越线;随 NotesPage/types.ts 拆分任务一并复核,若仍越线按上表模式登记。

‎docs/versions/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
| v0.12.6 | [v0.12.6.md](./v0.12.6.md) — 采集浮窗显隐链路修复:启动自动显示(预创建参数传反)+ 浮窗出现→主窗隐藏/收起→回显 + 锁定自解锁(ADR-025:全局快捷键 Ctrl+Shift+F,float_toggle 单一语义)+ 浮窗窗口级 CSS 重置(两侧透明条/滚条) | 版本文档(代码已交付 2026-08-23,真机验收待执行) |
3939
| v0.12.7 | [v0.12.7.md](./v0.12.7.md) — 会话内部 ID 不外显:采集/导入/融合/任务中心等用户可见文案全部去掉「会话 #N」,仅保留显示序号 display_no(与内部 id 解耦) | 版本文档(代码已交付 2026-08-23) |
4040
| v0.12.8 | [v0.12.8.md](./v0.12.8.md) — 笔记列表级批量删除:行内勾选 + 底部批量操作栏(全选三态/计数/批量删除),与会话管理台同操作逻辑,无需先打开笔记 | 版本文档(代码已交付 2026-08-23) |
41-
| v0.13 | [v0.13.md](./v0.13.md) — 大目标版本系列:知识体系层(v0.13.0 理念修订批/ADR-024 / v0.13.1 体系基建 / v0.13.2 概念双面体 / v0.13.3 决策与应用 / v0.13.4 审计与整合;方案 B:全局+领域双层、组仍唯一容器、REQ-202~212;v0.13.7 体系上手路径:入口补全+具象化;v0.13.8 画布可视化:React Flow 节点式无限画布) | 系列文档(v0.13.1 代码已交付 2026-08-23,真机验收待执行;v0.13.2~4 未启动,REQ-146 门控;v0.13.7 代码已交付 2026-08-24;v0.13.8 已立项 2026-08-24) |
41+
| v0.13 | [v0.13.md](./v0.13.md) — 大目标版本系列:知识体系层(v0.13.0 理念修订批/ADR-024 / v0.13.1 体系基建 / v0.13.2 概念双面体 / v0.13.3 决策与应用 / v0.13.4 审计与整合;方案 B:全局+领域双层、组仍唯一容器、REQ-202~212;v0.13.7 体系上手路径:入口补全+具象化;v0.13.8 画布可视化:React Flow 节点式无限画布) | 系列文档(v0.13.1 代码已交付 2026-08-23,真机验收待执行;v0.13.2~4 未启动,REQ-146 门控;v0.13.7 代码已交付 2026-08-24;v0.13.8 代码已交付 2026-08-24,真机验收待执行) |
4242

4343
## 沉淀规则
4444

‎docs/versions/v0.13.md‎

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# v0.13 大目标版本系列:知识体系层(方案 B)
22

3-
> 状态:**v0.13.0 已交付;v0.13.1 代码已交付(2026-08-23,M1-M3,真机验收待执行);v0.13.2~4 已立项(仅系列规划与 REQ 登记,设计规格未写、开发未启动);v0.13.5 已立项(规划);v0.13.6 已交付(2026-08-23,全量 M1-M5,设计规格 + 代码;真机验收待执行);v0.13.7 代码已交付(2026-08-24,上手路径:入口补全 + 具象化,设计规格已批准;真机验收待执行);v0.13.8 已立项(2026-08-24,画布可视化:React Flow 节点式无限画布,设计规格已批准)**;发布门控:REQ-146 真机验收(组级学习循环通过)
3+
> 状态:**v0.13.0 已交付;v0.13.1 代码已交付(2026-08-23,M1-M3,真机验收待执行);v0.13.2~4 已立项(仅系列规划与 REQ 登记,设计规格未写、开发未启动);v0.13.5 已立项(规划);v0.13.6 已交付(2026-08-23,全量 M1-M5,设计规格 + 代码;真机验收待执行);v0.13.7 代码已交付(2026-08-24,上手路径:入口补全 + 具象化,设计规格已批准;真机验收待执行);v0.13.8 代码已交付(2026-08-24,画布可视化:React Flow 节点式无限画布,设计规格已批准;真机验收待执行)**;发布门控:REQ-146 真机验收(组级学习循环通过)
44
> 依据:[整合分析·方案 B](../Foresight/personal-knowledge-system-layer-integration.md)(已裁决:B 模块新增型+全局/领域双层+保持定位局部修订理念)·
55
> [竞品调研](../Foresight/competitive-analysis-knowledge-system-layer.md)(零竞品带=应用/决策层)· [品类深化调研](../Foresight/competitive-analysis-knowledge-system-software.md) ·
66
> [指南原文](../Foresight/source-personal-knowledge-system-guide-v2.md)(源文档)·
@@ -23,7 +23,7 @@
2323
| **v0.13.5**(立项 2026-08-23) | 书籍笔记组+知识树附加(方案 C) | `books` 元数据壳(group_id UNIQUE——一本书=一个组;不存书内容)+`note_groups.kind='book'`+书籍组卡片(书名/作者/状态/评分)+体会模板(含"应用"字段)+体会→应用记录/升卡接线(复用)+知识树节点/概念"附加书籍"区(link 复用,树侧零 schema)+阅读状态生命周期与 `book_stale` 审计联动;REQ-213~218;[规划 §](#v0135-规划书籍笔记组与知识树附加方案-c2026-08-23-立项) |
2424
| **v0.13.6**(✅ 已交付 2026-08-23,全量 M1-M5;[设计规格](../archive/2026-08-24/2026-08-23-v0.13.6-video-profile-classification-refinement-design.md)([ ] 已归档)) | 视频档案分类细化+修复批 | 形态 7→10(新增会议/直播/影视——挂既有模板)+领域两层(粗 15→20:美食/摄影视频/历史人文/写作阅读/数码硬件;细目 curated 84 项多选 chips)+检测链升级(平台分区映射表+词表扩展+细目种子 hotwords 细分+领域记忆)+修复批(add_knowledge_node 契约 type→nodeType;笔记编辑完成即时刷新);REQ-219~223;用户裁决"是 全量" |
2525
| **v0.13.7**(✅ 代码已交付 2026-08-24,真机验收待执行;[设计规格](../archive/2026-08-24/2026-08-24-v0.13.7-knowledge-system-onboarding-design.md)([ ] 已归档)) | 体系上手路径 | **入口补全三触点**:组行体系徽标(GroupSidebar + SystemBadge)/ 笔记详情「挂到体系」(NoteLinkToSystem,修复手工输 id 断点)/ 结算体系简报(RouteInfoPopover 两行只读提示);**具象化**:摄影示例体系(knowledgeSample 浏览 + 一键复制,全局前置检查)/ 向导内嵌「例如」参照行;纪律裁决:示例≠预填(假燃料纪律局部修订);全部前端零新命令;M1→M3 |
26-
| **v0.13.8**(📋 已立项 2026-08-24;[设计规格](../superpowers/specs/2026-08-24-v0.13.8-knowledge-canvas-design.md)([ ] 已批准)) | 画布可视化 | **React Flow 节点式无限画布**(@xyflow/react):问题/概念/模型三类自定义节点 + 父子连线 + MiniMap/Controls;辐射布局初始位置(BFS 算法,用户拖拽后不再自动排布);canvas_x/y 两列 + knowledge_canvas_states 表;3 条新命令(update_node_canvas_position/batch_initialize_canvas_positions/save_canvas_viewport);树视图↔画布浮钮切换;REQ-029 力导向图仍 P3 维持(画布=手动画布非自动图);M1→M3
26+
| **v0.13.8**(✅ 代码已交付 2026-08-24,真机验收待执行;[设计规格](../superpowers/specs/2026-08-24-v0.13.8-knowledge-canvas-design.md)([ ] 已批准)) | 画布可视化 | **React Flow 节点式无限画布**(@xyflow/react):问题/概念/模型三类自定义节点 + 父子连线 + MiniMap/Controls;辐射布局初始位置(BFS 算法,用户拖拽后不再自动排布);canvas_x/y 两列 + knowledge_canvas_states 表;4 条新命令(update_node_canvas_position/batch_initialize_canvas_positions/save_canvas_viewport/**get_canvas_viewport**——规格列 3 条但视口恢复需读路径,复盘补第 4 条闭环,见交付记录);树视图↔画布浮钮切换;REQ-029 力导向图仍 P3 维持(画布=手动画布非自动图);M1→M3
2727

2828
## 关键决策与纪律
2929

@@ -141,3 +141,35 @@ CREATE TABLE IF NOT EXISTS books ( -- 元数据壳,不存内容
141141
## 四、需求登记
142142

143143
REQ-213 books 表+note_groups.kind='book' 扩展 · REQ-214 书籍组 CRUD 命令+组卡片(元数据/状态徽标)· REQ-215 知识树"附加书籍"(节点/概念面板+挂接)· REQ-216 体会模板(应用字段)+应用记录接线 · REQ-217 阅读状态生命周期+`book_stale` 审计联动 · REQ-218 体会升卡与复习(复用接线+书组徽标)
144+
145+
---
146+
147+
# v0.13.8 交付记录(2026-08-24)
148+
149+
> 交付范围=设计规格全部 M1→M3(画布可视化);详细测试口径见根目录 [CHANGELOG](../../CHANGELOG.md)。
150+
151+
## 一、与规格的差异登记(实现裁决)
152+
153+
| 差异 | 内容 | 理由 |
154+
|------|------|------|
155+
| 命令数 3 → 4 | 增补 `get_canvas_viewport`(只读) | 规格 §4.5 要求"切回画布时视口恢复",§4.6 只列 save——恢复需要读路径,无读命令则 `knowledge_canvas_states` 无法生效(写死数据)。第 4 条为规格遗漏的闭环补全,非新需求 |
156+
| 概念/模型位置不持久 | 仅 knowledge_nodes 有 canvas_x/y;概念/模型每次打开按辐射布局重排并置 `draggable:false` | 规格 DB 变更只给 nodes 两列(§4.6);浮动参照无存储列,拖了不持久——禁拖防"拖了没反应"困惑 |
157+
| 核心问题虚拟节点 | coreQuestion 存在时圆心渲染不可拖/不可选的核心卡(非 DB 实体) | 规格 §4.4 步骤 2 允许"coreQuestion 虚拟节点在圆心";渲染侧实现,不落库(零破坏) |
158+
| 自动排列按钮语义 | 触发全量重算 + 批量覆盖 + fitView | 规格 §4.4 明确"用户想重置布局可点自动排列(覆盖已存位置)" |
159+
| 缩放分级边界 | >0.7 全文 / 0.4~0.7 仅标题 / <0.4 缩略卡 | 规格 §七(React Flow zoom 量纲 1=100%) |
160+
161+
## 二、交付清单
162+
163+
- **M1 数据层**:db_migrations 幂等——knowledge_nodes 补 `canvas_x/canvas_y`(新库建表内联 + 旧库 ensure_column,零破坏 §二.3)+ 新表 `knowledge_canvas_states`(system_id 1:1,upsert 覆盖);`db_knowledge_canvas.rs`(单写/批量事务写入/视口读写)+ `types.rs` 扩 `KnowledgeNode.canvas_x/y`(serde default 兼容旧 JSON)
164+
- **M1 命令层**:`commands_knowledge_canvas.rs` 4 命令——坐标有限值(拒 NaN/Infinity)、zoom (0,10]、batch 全量预校验(体系归属/重复/缺失→原子拒绝,零部分写入)
165+
- **M2 纯函数(TDD,8 golden)**:`layoutRadial`(BFS 辐射:核心问题虚拟圆心/首根圆心;ring1=220px 每环+200px;环≥2 父角度扇区 spread=60°/(子数+1);碰撞沿角度+50px 最多 2 次后下一环;孤儿/概念/模型 golden angle 确定性兜底——零随机零 React 可复现)
166+
- **M2 前端**:`canvasElements`(实体→RF 元素纯转换:q/c/m 前缀 key、parent_id→smoothstep 边、links→概念/模型徽标+引用计数);三自定义节点(缩放分级 §七);`KnowledgeCanvasView`(ReactFlow+MiniMap+Controls+工具栏;拖拽防抖保存/视口防抖保存/切回 setViewport 恢复/未存 fitView 兜底/首次缺位批量初始化);KnowledgePage「🗺 画布」标签 + 树视图「🎨 画布」浮钮双入口(§4.5)——树常驻 display 切换(折叠展开保持),画布激活才挂载(首次切换语义精确;视口恢复走持久化)
167+
- **不做**(§九 全守):画布新建/编辑节点、手动连线、节点颜色自定义、导出图片、框选批量移动、移动端、AI 建议布局、力导向图(REQ-029 P3 维持)
168+
169+
## 三、验证
170+
171+
- `cargo test --test app_lib_tests knowledge`:**151/151 全绿**(本版新增 11:命令 8 + 数据层 3)
172+
- 全量 `cargo test --test app_lib_tests`:1721 passed / **3 failed(预存基线**:ai_client 默认 Provider 断言旧 SiliconFlow、note_filter 两条黄金用例——v0.12.4/v0.13.1 已登记,与本版无关)/ 6 ignored
173+
- clippy:本版新增文件零警告(预存警告 3 条与本版无关)
174+
- `tsc --noEmit` 零错误;vitest **34 文件 188 用例全绿**(新增 layoutRadial 8 / canvasElements 7 / CanvasNodes 6 / KnowledgeCanvasView 9 / KnowledgePage 画布入口 2);vite build 通过
175+
- 真机走查(REQ-146 批):创建体系 → 点「画布」→ 辐射布局出现 → 拖拽节点 → 切树/切回视口恢复 → 自动排列 全链路待执行

0 commit comments

Comments
 (0)