Skip to content

Commit 027ca6a

Browse files
committed
docs(versions): v0.12.2 交付标注 + CHANGELOG + REQ 回填 + 行数豁免登记同步
- v0.12.2.md 状态改代码已交付(2026-08-23)+ 交付记录 M1~M3 与差异诚实记录 - CHANGELOG v0.12.2 条目(三栏/收件箱动线/路由收敛/新建去摩擦/后端两命令/验证) - requirements-pool 回填:REQ-198 可见可改重释、REQ-201 补升级出口(修订 v0.11.4 范围决策) - line-limit-exemptions:NoteGroupPanel/NoteEditView 登记移除 + NotesPage 328 行正式登记
1 parent 82ca3d8 commit 027ca6a

4 files changed

Lines changed: 58 additions & 5 deletions

File tree

‎CHANGELOG.md‎

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

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

8+
### v0.12.2 笔记页信息架构重构(三栏 + 收件箱动线 + 路由信息收敛,2026-08-23 交付,详见 [docs/versions/v0.12.2.md](docs/versions/v0.12.2.md))
9+
10+
- **三栏布局(P0 交互债)**:笔记页从"550px 一栏塞三职"重构为三栏分工——GroupSidebar(240px 组筛选/快速记录/收件箱入口)+ NoteListView(320px 常驻中部)+ NoteReadingView(右栏);组行单击=仅过滤(消除"过滤+展开"双动作歧义);搜索/标签过滤时中部列表原位切换,布局不变
11+
- **收件箱动线(P0 产品缺口)**:碎片二元论转正——碎片=原料不是短笔记;收件箱恒常首项(待处理计数)只装碎片,未归组笔记在「全部笔记」(两种实体两条动线);碎片卡三出口:✍ 升为笔记(轻确认:标题预填首句可改 + 归组下拉默认未归组 → 右侧自动打开新笔记闭环可见)/ ⚙ 升为闪卡(幂等可重复触发)/ 🗑 删除(二次确认);空态引导三种归宿
12+
- **路由信息收敛(P1 信息债)**:组行小字人话一行(系统自动归类 / ⚠ 待确认 / 已改判 · ⓘ);ⓘ 弹层四区=人话归因+信号明细默认折叠 / 改判(修改即记忆)/ 组管理(生成闪卡·结算·复习本组·移入移出选中笔记)/ 周契约卡——REQ-198"可见可改"重释:结果可见、原因可按需、误判可一键纠正
13+
- **新建笔记零对话框(P2 摩擦)**:去 `window.prompt`——点「✍ 新建」即建"未命名笔记"直接进入编辑态聚焦首行,落未归组(全部笔记可见)
14+
- **后端(Phase 2)**:新增 `promote_fragment_to_note`(事务建笔记+搬运图片+删碎片;图引用写 notes-images/;绑定卡自动解绑保留)+ `promote_fragment_to_card`(复用多句卡生成规则;按碎片查重幂等);feedCapture 开关语义改为「快速记录入口」并默认开启(用户裁决转正;旧持久化配置不受影响)
15+
- 验证:cargo test(碎片升级 4 新测 + 闪卡幂等判据 1 新测)/ cargo clippy;前端 tsc 零错误、vitest 67 通过(新增 jsdom 组件测试:收件箱状态机 捕获→升笔记→移除 + ⓘ 弹层四区交互)、vite 构建通过
16+
817
### v0.12.1 OCR 引擎回归修复(2026-08-23 交付,详见 [docs/versions/v0.12.1.md](docs/versions/v0.12.1.md))
918

1019
- **P0 回归修复**:`oar-ocr` 恢复 `auto-download` feature(v0.12.0 构建修复关 default 时误关独立 feature——模型注册名不再解析为 ModelScope 缓存路径,OCR 引擎 CUDA/CPU 双后端读字典均失败,全链路不可用);模型已在本机 `~/.oar` 缓存,恢复后零网络命中

‎docs/product/requirements-pool.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,17 @@
336336
| REQ-200 | 周契约视图 UI(弹性承诺呈现层 P31+N10):contracts 表(group_id/week_start/target_days/target_cards)+ upsert_week_contract 幂等 + week_contract_status(review_logs 周聚合纯函数);组面板周契约卡(目标设定/完成进度/断签不清零视觉/最小可行日徽标) | P1 | 已实施 | v0.11.4 | 弹性承诺纪律不变:无 streak、无惩罚、欠账不追;**代码已交付(2026-08-22,week_contract 纯函数 16 测通过 + contracts 表 + 周契约卡)** |
337337
| REQ-201 | feed 消费闭环(最小范围):delete_fragment 命令 + list_group_fragments/update_fragment_group 接线;feed 组展开区碎片列表(文本+图片缩略,resolve 复用 app_data_dir)+ 删除/移出 + 空态引导;复习面"碎片卡"徽标(fragmentId) | P1 | 已实施 | v0.11.4 | 开关默认关(v4 §11.3);零新界面;碎片→笔记升级不做(身份诚实);契约二兑现;**代码已交付(2026-08-22,delete/移组/图片 resolve 三命令 + feed 碎片列表 + 复习面徽标)** |
338338

339+
#### v0.12.2 · 笔记页信息架构重构(三栏 + 收件箱动线 + 路由信息收敛,2026-08-23 交付)
340+
341+
> 规划详见 [versions/v0.12.2.md](../versions/v0.12.2.md);本版**回填**——REQ-198 重释"可见可改"、REQ-201 补升级出口(修订 v0.11.4 范围决策),无新增 REQ 编号。
342+
343+
| ID | 需求 | 优先级 | 状态 | 目标版本 | 备注(v0.12.2 回填) |
344+
|----|------|--------|------|---------|------|
345+
| REQ-198 | 路由决策可见可改(重释) | P1 | 已实施 | v0.11.0 → v0.12.2 | v0.12.2 重释"可见可改":组行小字一句人话归因(**结果可见**)+ ⓘ 弹层信号明细默认折叠(**原因按需**)+ 一键改判(**可改**,修改即记忆保留)——Gmail/Apple Photos 透明性先例;**代码已交付(2026-08-23,GroupSidebar 行小字 + RouteInfoPopover 四区)** |
346+
| REQ-199 | 内容分型动作卡 | P1 | 已实施 | v0.11.4 | 本版无改动——升卡复用现成多句卡规则(card_from_fragment),分型最小版不变 |
347+
| REQ-200 | 周契约视图 UI | P1 | 已实施 | v0.11.4 | v0.12.2 UI 迁入 ⓘ 弹层四区第④区(组行展开区下线,功能不变) |
348+
| REQ-201 | feed 消费闭环(范围修订) | P1 | 已实施 | v0.11.4 → v0.12.2 | v0.12.2 修订 v0.11.4"碎片→笔记升级不做(身份诚实)"决策:本版补**升级出口**——promote_fragment_to_note(事务建笔记+搬运图+删碎片,轻确认)+ promote_fragment_to_card(幂等);收件箱恒常视图(全量 active 碎片,不再依赖 feed 组展开);feedCapture 开关语义改「快速记录入口」默认开启(用户裁决转正,旧持久化配置不受影响);**代码已交付(2026-08-23)** |
349+
339350
### V1.0 · 体验增强(远期)
340351

341352
| ID | 需求 | 优先级 | 状态 | 目标版本 | 备注 |

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@
6565
| app/src/components/AiServicePanel.tsx | 390 | v0.8.0 M1(REQ-138/139/140)AI 服务设置面板:全局开关/密钥管理(掩码+DPAPI 保存)/端点模型/测试连接/余额卡片/授权确认卡/审计列表——配置面板 UI 内聚 | 若再增长:余额卡片与审计列表拆至 AiBalanceCard.tsx / AiAuditList.tsx |
6666
| app/src/components/SessionDetailPanel.tsx | 371 | 会话详情面板:质量报告/段列表/OCR 概览/操作区单一面板完整交互流内聚(前端审查登记) | 若再增长:质量报告区拆至 SessionQualityReport.tsx |
6767
| app/src/components/ProfileDetector.tsx | 330 | 档案检测组件:投票/确认流/记忆偏好 UI + v0.11.5 Task 5 冲突提示内聚(实测 2026-08-22) | 若再增长:确认流拆至 ProfileConfirmFlow.tsx |
68-
| app/src/components/NoteEditView.tsx | 315 | 笔记编辑视图:编辑态/标签/结构面板内聚(前端审查登记) | 若再增长:结构面板拆至 NoteStructurePane.tsx |
69-
| app/src/components/NoteGroupPanel.tsx | 545 | v0.11.0~4 笔记组侧栏:组列表/路由可见可改/碎片捕获/闪卡生成与复习入口/结算仪式/周契约卡/feed 碎片列表(周契约与碎片列表已拆独立组件 WeekContractCard/FeedFragmentList)——组域交互单一面板内聚;v0.11.5 树形合并(buildTree 消费/搜索新建工具条/受控展开组) | 若再增长:结算仪式区拆至 GroupSettlementPane.tsx |
68+
| app/src/components/NoteEditView.tsx | —— | v0.12.2 行数修正:实测 299 行(登记值 315 过期),本版新增 autoFocus 一行后仍 300 行以内——登记移除,见"已拆分/登记移除记录" | —— |
69+
| app/src/pages/NotesPage.tsx | 328 | v0.12.2 三栏编排(GroupSidebar/FeedFragmentList/NoteListView 插槽 + 收件箱动线 onPromoted 接线 + 新建零对话框)——编排层内聚(数据获取/选中态/快捷键/辅助面板插槽),组件已全部下沉拆件 | 若再增长:键盘监听与收件箱动线回调拆至 useNotesPageShortcuts.ts / useInboxFlow.ts |
7070
| 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 |
7171

72-
> 前端 **拆分中**(Task #9 笔记域修复进行中,暂不登记行数):`app/src/types.ts`、`app/src/pages/NotesPage.tsx`——待前端拆分完成后以实测行数重新评估。
72+
> 前端 **拆分中**(Task #9 笔记域修复进行中,暂不登记行数):`app/src/types.ts`——待前端拆分完成后以实测行数重新评估。
7373
> 前端 SessionsPage.tsx 审查快照 304 行(登记值),v0.7.1 硬拆后长期 ≤300,本轮审查期间轻微越线;随 NotesPage/types.ts 拆分任务一并复核,若仍越线按上表模式登记。
7474
> 前端 EnrichPanel.tsx 实测已回归 299 行(登记值 ~330 移除)。
7575
@@ -78,6 +78,8 @@
7878
> 已拆分:engine.rs(三维复审 #5 超时排空机制接入后逼近 600 行硬拆线)按登记计划将 worker 主循环与请求协议(AsrRequest/OcrRequest/双 worker 循环/词表纠错纯函数)拆至 engine_worker.rs(253 行)——engine.rs 回归 440 行(仍登记,300-600 区间),engine_worker.rs ≤300 行无需登记。
7979
> 已拆分:db.rs(2026-08-21 H3 硬拆,原 678 行超 600 硬限违规):schema 建表 + ensure_column 列迁移拆至 db_migrations.rs(204 行),notes CRUD 拆至 db_notes.rs(216 行,测试迁至 db_notes_tests.rs 265 行)——db.rs 回归 72 行(Db 结构体/连接锁/with_conn/通用工具),三新文件均 ≤300 行,登记移除。M3 锁中毒恢复(with_conn + into_inner)随拆分一并落地。
8080
> 已拆分:live_session.rs(2026-08-21 Task #14 硬拆,实测 727 行超 600 硬限违规):状态查询/控制方法簇(快照/暂停/停止/会话 id 查询)拆至 live_session_manager.rs(150 行),启动与预热生命周期(start/prepare/run_session/wait_prepared_ready)拆至 live_session_lifecycle.rs(288 行)——live_session.rs 回归 284 行(参数/结构体定义 + 构造 + run_session_after_engine 装配骨架),impl LiveSessionManager 跨文件分布,公共 API 签名零变化;三文件均 ≤300 行,登记移除。
81+
> 已拆分/删除:NoteGroupPanel.tsx(v0.12.2 笔记页三栏重构,原 545 行登记)——三合一职责拆分:GroupSidebar.tsx(267 行组筛选侧栏)+ RouteInfoPopover.tsx(278 行 ⓘ 弹层四区);FeedFragmentList.tsx 改为收件箱碎片卡(263 行);noteTree.ts/v0.11.5 树形合并下线;四文件均 ≤300 行,登记移除。
82+
> 登记移除:NoteEditView.tsx(登记值 315 过期——实测 299;v0.12.2 新增 autoFocus 一行后仍 ≤300,无需登记)。
8183
> 已删除:live_pipeline_diag.rs(2026-08-21 L5 清理)——"诊断后删除"的临时诊断模块,确认 lib.rs 注册仅 test cfg 且无其他引用后整体移除。
8284
> 已拆分:dxgi_capture.rs(原 ~333 行)于 v0.4.0 M0(TD-033,提交 2a88b25)将 DxgiState 拆至 dxgi_state.rs——现均 ≤300 行,无需登记。
8385
> 已拆分:live_session_frame.rs(原 ~500 行登记)于 v0.6.0 ADR-011(REQ-086/087)按拆分计划将 process_frame 帧处理拆至 live_frame_process.rs。

‎docs/versions/v0.12.2.md‎

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# v0.12.2:笔记页信息架构重构——三栏布局 + 收件箱动线 + 路由信息收敛
22

3-
> 状态:**规划定稿(2026-08-23,设计完成待实施)**
3+
> 状态:**代码已交付(2026-08-23)**
44
> 依据:用户对话 2026-08-23(笔记页截图 4 点抱怨:碎片捕获无头绪 · 分组混乱交互不明 · 路由理由放置存疑 · 需要自主新建笔记)+ 市场调研(捕获收件箱模式 / Gmail 分类透明性 / 自动组织先例)+ 三项用户裁决(方案 A 三栏 · 二元论碎片 · 升笔记轻确认)
55
> 前置:v0.12.1(OCR 引擎回归修复)交付后开工
6+
> 实施裁决(2026-08-23 用户最终确认):feedCapture 开关**默认开启**(快速记录收件箱转正,不再是预览);Phase 1 + Phase 2 全量实施
67
78
## 一句话
89

@@ -116,9 +117,39 @@
116117
## 落地顺序
117118

118119
- **Phase 1(纯前端,零后端改动)**:三栏拆分 + 组行交互修正 + ⓘ 弹层(迁入路由理由/改判/组管理/周契约)+ 新建去 prompt + 收件箱视图常驻(碎片列表迁移)。
119-
- **Phase 2(后端 + 开关)**:`promote_fragment_to_note` + 碎片卡升笔记/升卡接线 + feedCapture 开关语义调整(默认值待决)。
120+
- **Phase 2(后端 + 开关)**:`promote_fragment_to_note` + 碎片卡升笔记/升卡接线 + feedCapture 开关语义调整(默认值已裁决:**改开**)。
120121
- **验收走查**:种子数据过 捕获→升级→编辑→归组→闪卡 全链。
121122

123+
## 交付记录(2026-08-23)
124+
125+
### M1 · 三栏布局重构(Phase 1)
126+
127+
- `NoteGroupPanel.tsx`(545 行,三合一)按职责拆分并删除:
128+
- `GroupSidebar.tsx`(240px 组筛选侧栏)——行单击=**仅过滤**(删除"单击=过滤+展开"双动作);行小字=人话归因一行 + ⓘ;⚡ 快速记录、📥 收件箱(恒常首项+计数)、📁 全部笔记、🎴 复习徽标。
129+
- `RouteInfoPopover.tsx`(ⓘ 弹层,≤300 行)——四区:人话归因 + 信号明细**默认折叠**("查看明细"展开)/ 改判(修改即记忆)/ 组管理(生成闪卡·结算含计划·复习本组·移入移出选中笔记)/ 周契约卡(`WeekContractCard` 独立组件由弹层引用);fixed 锚定组行下方 + 透明背板/ESC 关闭。
130+
- `NotesPage.tsx` 三栏编排:`view: notes | inbox` 中部原位切换;`groupFilter` 只做过滤;搜索/标签过滤激活时 NoteListView 原位显示结果(不再 flatMode 换布局);focusNoteId 跨页直达简化为滚动定位(无展开依赖);`noteTree.ts` 树形合并纯函数与单测下线(v0.11.5 树模式被三栏取代)。
131+
- 行数豁免登记同步(`docs/standards/line-limit-exemptions.md`):NoteGroupPanel(545)与 NoteEditView(登记值过期,实测 ≤300)登记移除;NotesPage.tsx(328 行)正式登记(编排层内聚,拆分计划:快捷键/收件箱动线回调拆 hooks)。
132+
- 新建笔记:`handleCreate` 去 `window.prompt` —— `create_note(未命名笔记,"")` → 立即编辑态聚焦首行(NoteEditView autoFocus),落未归组(全部笔记可见),并自动切回笔记视图+全部过滤(新建即见闭环)。
133+
134+
### M2 · 收件箱动线(Phase 2)
135+
136+
- `promote_fragment_to_note(fragment_id, title, group_id?)` 新命令:单事务(读碎片→建 notes(source=manual, 正文=碎片文本)→图片搬运 `fragments/`→`notes-images/{nid}/` 并写入 markdown 引用→删碎片);图片搬运失败**降级纯文本笔记**(碎片文本不丢);标题后端必填校验;`require_feed_enabled` 对称准入。
137+
- `promote_fragment_to_card(fragment_id)` 新命令:复用 `card_from_fragment` 多句卡规则;幂等(`card_by_fragment` 查重——已升级返回 0 不报错,可重复触发);未归组碎片明确报错引导先归组/升笔记(flashcards.group_id NOT NULL 契约);记 `fragment_upgraded` 指标(与组生成同口径)。
138+
- `FeedFragmentList.tsx` 改造为**收件箱碎片卡**(全量 active 碎片,不再依赖 feed 组展开):✍ 升为笔记(内联轻确认表单:标题预填首句可改 + 归组下拉默认未归组→确认后右侧自动打开新笔记)/ ⚙ 升为闪卡 / 🗑 删除(二次确认);空态引导"一句灵感,三种归宿"。
139+
- feedCapture 开关:默认值改开(`feature_flags` Default + 测试同步);语义改为「快速记录入口」(设置页文案更新);后端命令准入保留(减面不减安全)。
140+
141+
### M3 · 验证
142+
143+
- Rust:cargo test 新增 5 测(碎片升笔记 文本/图片搬运/图片缺失降级/碎片不存在 + flashcard 幂等判据)全绿;cargo clippy 零新增警告;cargo check 通过。
144+
- 前端:`tsc --noEmit` 零错误;vitest **67 通过**(新增 10 测:routeReason 人话归因 5 + inbox 预填/预览 5 + jsdom 组件测试 收件箱状态机 4(捕获→升笔记→移除/升卡幂等/删除二次确认/空态)+ ⓘ 弹层 4(四区齐全/改判契约/生成闪卡/ESC);测试基建:`jsdom` + `@testing-library/react` + vitest include 扩展 `.tsx`,组件测试按文件 `@vitest-environment jsdom` 切换环境);`npm run build` 通过。
145+
- 待真机验收:种子数据过 捕获→升级→编辑→归组→闪卡 全链(验收标准 1-4 走查)。
146+
147+
### 与规划的主要差异(诚实记录)
148+
149+
- ⓘ 弹层定位用視口 fixed 锚定(最初设计为侧栏内 absolute;fixed 简化背板关闭逻辑,视觉等价)。
150+
- `noteTree.ts` 被三栏取代后删除(含单测)——v0.11.5 树形合并是"展开组必看笔记"的过渡形态,三栏下组行只过滤、列表常驻,树无消费方(YAGNI);如后续需要"组内速览"再以独立视图恢复。
151+
- 收件箱碎片卡未逐个显示所属组名(Fragment 契约不含 name;补计需要额外 join——YAGNI,升笔记/升卡时组选择已可见)。
152+
122153
## 验收标准
123154

124155
1. 侧栏组行单击=仅过滤(中部列表切换,无展开动作);⚠ 待确认组淡橙描边小字显示;ⓘ 弹层四区齐全,明细默认折叠。

0 commit comments

Comments
 (0)