Skip to content

Commit 2548a27

Browse files
committed
docs(versions): v0.20.6 批 1 交付记录(AI 任务数据安全与刷新修复)+ REQ-306/307 备注
1 parent 23b349a commit 2548a27

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

‎docs/product/requirements-pool.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,8 @@
586586
| REQ-303 | web 采集阶段 1 内核:课堂助手动线区「URL 采集」入口 → 本地抽取管线(静态直取 + 隐藏 wry 注入 readability 系兜底)→ `kind=web` 会话 + `BodySource::Web` + 元数据(URL/站点/作者/时间入 properties)+ 标题锚点回链 → 转笔记复用 | P1 | 已实施(2026-09-06 v0.20.4 批:c47e394~1f0bace 提交链——URL 内核/扩展收件薄壳/整页快照静态档;渲染型快照与截图兜底登记后置,见 v0.20.md 与协议文档) | v0.20 系列 | [Foresight 定案](../Foresight/web-capture-ingestion-path.md);正文失败降级原 HTML 附件;SPA 缺口由阶段 2 覆盖 |
587587
| REQ-304 | web 采集阶段 2 扩展薄壳:浏览器扩展(登录态 DOM 抽取:readability+turndown → MD+元数据)→ 本地 loopback 收件服务(127.0.0.1+随机 token+/ping 探测)→ 图 base64 落盘改写引用 | P2 | 已实施(2026-09-06 v0.20.4 批:c47e394~1f0bace 提交链——URL 内核/扩展收件薄壳/整页快照静态档;渲染型快照与截图兜底登记后置,见 v0.20.md 与协议文档) | v0.20 系列 | 登录墙(公众号/知乎)正解;只绑 loopback+CORS+单向投递安全边界 |
588588
| REQ-305 | web 采集阶段 3 整页快照:隐藏 wry 窗口 DOM+子资源内联(自研 core.js,规避 SingleFile AGPL)+ monolith(CC0)静态降级 + 截图兜底链 | P2 | 已实施(2026-09-06 v0.20.4 批:c47e394~1f0bace 提交链——URL 内核/扩展收件薄壳/整页快照静态档;渲染型快照与截图兜底登记后置,见 v0.20.md 与协议文档) | v0.20 系列 | 富格式/整页快照;WebView2 无 MHTML API 已否决 |
589+
| REQ-306 | AI 任务 id 数据安全(重启防复用顶替历史行):启动恢复的 id 序列基准由「恢复集(succeeded 且未采纳)max」改为「ai_tasks 表全表 max」——已采纳/failed/proofread/goal_plan 等 id 更大的行不再被重启后新任务复用(insert_ai_task 的 INSERT OR REPLACE 曾静默顶替含已采纳的历史行——结果/成本/轨迹丢失) | P1 | 已实施(2026-09-09 批 1 审查修复:db_ai_tasks max_ai_task_id + commands_ai_refine task_seq_lower_bound 纯函数(配单测)+ app_setup 恢复块基准改造,提交见 v0.20.md v0.20.6 交付记录) | v0.20 系列 | 审查清单批 1 项 1(数据安全);查询失败降级为旧恢复集口径不放大风险 |
590+
| REQ-307 | AI 任务视图刷新与标题/采纳口径:ChatPage active 门控切回重同步 + ai:task-update 终态事件订阅(保活挂载下别页完成的任务侧栏即时新增);任务标题按 target_kind 分发(笔记级精修查笔记标题、enrich 恒笔记级、target_kind=NULL 旧数据 session 兜底——entityLabel.taskRefLabel 单一来源);AiTaskPanel 精修采纳按 target_kind 分发(笔记级走 ai_note_refine_apply,原恒传 sessionId 报「会话不存在」);AI 任务段补「非聊天会话」语义说明 | P1 | 已实施(2026-09-09 批 1 审查修复:entityLabel 纯函数 + 三处调用方 + ChatPage/App + AiTaskPanel + ChatSidebar,提交见 v0.20.md v0.20.6 交付记录) | v0.20 系列 | 审查清单批 1 项 2~5(刷新缺口/标题错位/采纳链/UI 语义) |
589591

590592
## 优先级定义
591593

‎docs/versions/v0.20.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,3 +296,23 @@
296296
| 测试与回归 | ActionCenterPanel/ActionPage 新增 5 例关键路径(挂载全量拉取/三页签/切回重载);GroupSidebar.test 清理 6 处 onOpenAction + 徽标 mock;全量 vitest 576/576、tsc 0、cargo 2254/0 | b78ddae7 |
297297

298298
**开放项滚动**:复习域页独立(二期——ReviewSessionOverlay 全页化 + 全量到期卡 + 组过滤器,spec §9 域模型已容纳);顶层 Tab >8 时导航分组收纳(观察项,spec §9);🎴 转卡 G7 预留置灰不变;豁免表旧登记行(616/572/442 等)按既有纠偏风格与新行共存留档。
299+
300+
---
301+
302+
# v0.20.6 交付记录(批 1:AI 任务数据安全与刷新修复,2026-09-09 完成)
303+
304+
> 状态:**审查清单批 1 五项全部交付**(REQ-306/307 → 需求池已备注);范围 = ai_tasks 任务域(id 序列/启动恢复)+ AI 任务前端视图(对话页刷新/标题口径/采纳链/语义说明);采集/暂停/笔记域/会话页等其余审查项不在此批。
305+
> 缺陷根因回顾:任务 id 序列每启动从 1 开始、仅按「succeeded 且未采纳」恢复集越位——DB 中已采纳/failed/proofread/goal_plan 行 id 更大时,重启后新任务复用旧 task_id,`INSERT OR REPLACE` 静默顶替历史行(含已采纳结果/成本/轨迹)。
306+
307+
| 变更 | 内容 | 提交 |
308+
|---|---|---|
309+
| id 序列数据安全 | db_ai_tasks 新增 `max_ai_task_id()`(SELECT MAX(task_id) 全表——覆盖所有状态行)+ commands_ai_refine 新增 `task_seq_lower_bound(cur, db_max)` 纯函数;app_setup 启动恢复块改为以 **DB 全表最大 id** 为序列基准(查询失败降级旧恢复集口径);配单测:全状态行 max(回归形状:已采纳 80/failed 120/running 95 → 120)、空表 0、序列下限不回退与 u64::MAX 饱和 | 90ba5e19 |
310+
| ChatPage 刷新缺口 | ChatPage 新增 `active` prop(App 注入 `page==="chat"`):切回重同步任务列表 + 静态数据(会话/笔记标题映射)10s 时效重拉(AiConversationDock F9 同口径,首激活懒加载——原挂载即拉改);新增 `ai:task-update` **终态**事件常驻订阅(成功/失败判定同 App.tsx toast 口径)→ 重拉列表 + 详情打开时重取(ref 镜像读最新选中);隐藏期完成的任务侧栏即时新增,切回亦兜底重拉 | 23b349a3 |
311+
| 标题按 target_kind 分发 | entityLabel 新增 `taskRefKind`/`taskRefLabel`(单一来源:refine 按 target_kind 分流、enrich 恒笔记级、NULL 旧数据 session 兜底——与 TaskConversationView 跳转分发同口径);ChatSidebar/ChatPage/AiConversationDock 三处标题解析改走纯函数(笔记级精修原错查会话标题表)+ 单测 | 23b349a3 |
312+
| AiTaskPanel 采纳链 | refine 采纳按 target_kind 分发:note → `ai_note_refine_apply`(noteId,笔记现有版本加 ai-refine 版本),session/NULL → `ai_refine_apply`(sessionId 建基线笔记)——原恒传 sessionId 使笔记级任务误入会话链报「会话不存在」 | 23b349a3 |
313+
| AI 任务段语义说明 | ChatSidebar「🤖 AI 任务」段加说明文案(条目=精修/补充任务轨迹、来源会话或笔记、非 💬 聊天会话、结果可采纳)+ 段头 tooltip——最小改动不加组件 | 23b349a3 |
314+
| 测试与回归 | Rust:`cargo test --test app_lib_tests`(db_ai_tasks 组 11/11 通过);前端:entityLabel.test 新增 taskRefKind/taskRefLabel 两组用例,全量 vitest 581/581、tsc 0 错误;全量 Rust 2255 通过 + 1 环境抖动(ffmpeg 10s cmd 超时,隔离重跑通过) | 90ba5e19 + 23b349a3 |
315+
316+
**环境注记**:本机 `cargo test --lib` 不可用为仓库已知(隐式 lib test 目标无 build.rs comctl32 v6 manifest,加载 system32 comctl32 5.82 报 0xc0000139——Cargo.toml 注释有载);统一走显式 `[[test]] app_lib_tests` 目标。
317+
318+
**开放项滚动**:批 1 之外的其余审查项(采集/暂停/笔记域/会话页等)待后续批;精修任务重试在笔记级(ai_note_refine 失败重试入口)与任务面板的闭环一致性可后续核对。

0 commit comments

Comments
 (0)