Skip to content

Commit dcb9db9

Browse files
committed
docs(versions): v0.20.10 批 5 交付记录——复习域页独立(REQ-314 备注 + spec 落档 + 收纳观察启动)
1 parent f702d87 commit dcb9db9

4 files changed

Lines changed: 82 additions & 0 deletions

File tree

‎docs/product/requirements-pool.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,7 @@
594594
| REQ-311 | 笔记滚动到底居中(统一底部留白):根因=滚动行程在内容末尾耗尽(末段贴容器底边无法上移居中,非双层滚动);统一 BOTTOM_BREATHER(约视区高 1/3,`max(96px, 33vh)`)供阅读容器/CodeMirror .cm-content/textarea 降级**三滚动面同源**消费;锚点 scrollIntoView(start\|center) 与大纲/搜索定位不受影响 | P2 | 已实施(2026-09-09 批 3:utils/contentBreather.ts + NoteReadingView/RichEditorView/NoteEditView 三面接线,提交见 v0.20.md v0.20.8 交付记录) | v0.20 系列 | 用户 11 项问题 9;会话页 NotePreviewView 等同构面如再现同法修 |
595595
| REQ-312 | AI 精修工作台差异化显示:行级染色(左栏 base removed 删除线红 / 右栏 refined added 新增绿,按流序对齐,未变行原样)+ 顶栏「并排/差异」单栏切换(灰/删除线红/绿 + ± 前缀);章节徽标与行统计保留;后端新增 `diff_markdown_ops` 薄命令(复用 note_diff 纯函数输出整篇有序 DiffOp 流);取数失败/空侧降级不染色不破坏渲染;采纳/重新生成/放弃与存储路径零改动;范围=会话级+笔记级+只读版本对比 | P1 | 已实施(2026-09-09 批 3:commands_notes_version diff_markdown_ops(3 例单测)+ utils/refineDiff.ts(12 例)+ RefineWorkbench 染色与视图切换(3 例),提交见 v0.20.md v0.20.8 交付记录) | v0.20 系列 | 用户 11 项问题 11;不采用 taskResult.diff 因基线含锚点草稿可能与剥离锚点展示文本错位 |
596596
| REQ-313 | 会话页交互矩阵完善:①会话行右键菜单(打开详情/重命名/复制标题/转为笔记(可转化行才显)/删除红字);②去勾选框改笔记同款**选择模式**(工具栏「选择」入口+模式 chip、单击勾选、Ctrl/⌘ 加减、Shift 区间、Esc 三级退出、列表变化自动裁剪选集——复用 utils/noteSelection 既有纯函数);③后端新增原子 `batch_delete_sessions`(单事务全删、语义与单条 delete_session 全等:子表 FK 级联 + notes.session_id SET NULL、Sessions+Notes 双域广播、空参/超 200/非法 id 报错、重复去重);④行内改名补齐(全 kind 含 web 会话,Enter/Esc/失焦,busy 防连点,改名打开中详情同步重拉);批量转笔记按钮/三态全选/可转化过滤语义不变 | P1 | 已实施(2026-09-09 批 4:commands_session_delete+单测 5 例 + SessionListPanel/SessionListRow/SessionRowContextMenu/SessionsPage,提交见 v0.20.md v0.20.9 交付记录) | v0.20 系列 | 用户 11 项问题 4;课程分组=派生视图非实体,移至组/合并/导出/归档已与用户确认排除;右键删除走单条动线、批量删除走新命令 |
597+
| REQ-314 | 复习功能独立为顶层页(用户裁决:独立顶层页——新增第 9 个 Tab「🔄 复习」):ReviewSessionOverlay 全页化(去 fixed 遮罩渲染页面主体区,front→reveal→四档评分流与后端命令不变,一轮上限 200=后端 DUE_LIST_LIMIT_MAX)+ 组过滤器(全部+各组含到期数,纯归约 utils/reviewStats)+ 到期感知=仅顶层 Tab 自身(**无被动提醒**沿用行动域裁决——组侧栏「🎴 复习 N」按钮与徽标移除、导航/侧栏不放徽标);笔记域 ⓘ「复习本组」改**跨页深链**(App 转页+组预选 focusReviewGroupId,消费即清空、同组可重复触发);空态引导文案(含 ⓘ「⚙ 生成闪卡」卡源指引,页内一键生成入口登记开放项);刷新走 active 门控切回重载(TD-004——闪卡域不在五域事件总线,ADR-018 零耦合);后端零改动(list_due_cards/count_due_cards/review_card 既有命令面全复用) | P1 | 已实施(2026-09-09 批 5:pages/ReviewPage + components/review/ReviewSessionPanel(git mv 迁移)+ App 第 9 Tab/深链 + 笔记域拆件(NotesPage 575→540 / GroupSidebar 455→418),提交见 v0.20.md v0.20.10 交付记录) | v0.20 系列 | 用户 11 项问题 6;顶层 Tab=9 收纳观察启动(spec §9,只登记不做);设计见 [2026-09-09 spec](../superpowers/specs/2026-09-09-review-page-design.md);v0.20.5 spec §9 二期预留兑现 |
597598

598599
## 优先级定义
599600

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@
115115
| app/src/components/action-center/ActionCenterPanel.tsx | 521 | v0.20.5 行动中心独立页化:原 ActionCenterOverlay.tsx(509 行登记)更名迁移至 action-center/ 并去遮罩/关闭形态(refreshToken 切回重载)——编排内聚(TD-2026-09-06-G 预留目录兑现);2026-09-06 实测登记 | 若再增长:队列/历史/SOP 三区拆至 action-center/ 子组件 |
116116
| app/src/pages/NotesPage.tsx | 575 | v0.20.5 行动中心剥离独立「行动」域页 + 阅读头动作组拆 NoteHeaderActions(色点/归组/挂体系/AI/模型卡下沉)——行动/封存/模型卡 state 族回归 600 硬限内(TD-2026-09-06-G 拆件义务兑现);2026-09-06 实测登记(登记值 616/572 过期) | 若再增长:封存过滤族拆至 useNotesSealedFilter.ts / useNotesPageEditing.ts |
117117
| app/src/components/GroupSidebar.tsx | 455 | v0.20.5 行动入口/徽标移除(✅ 行动按钮与 actionCount 下线,仅剩 🎴 复习全量入口);2026-09-06 实测登记(登记值 442 过期) | 若再增长:徽标聚合拆至 useGroupSidebarCounts.ts |
118+
| app/src/components/GroupSidebar.tsx | 455 | v0.20.5 行动入口/徽标移除(✅ 行动按钮与 actionCount 下线,仅剩 🎴 复习全量入口);2026-09-06 实测登记(登记值 442 过期) | 若再增长:徽标聚合拆至 useGroupSidebarCounts.ts |
119+
| app/src/pages/NotesPage.tsx | 540 | v0.20.10 批 5 复习剥离:review state/Overlay 宿主/onOpenReview 本地实现删除,ⓘ「复习本组」改跨页深链透传(f702d876)——登记值 575 过期,实测回落;仍处 300-600 档编排层内聚(数据/选中态/快捷键/辅助面板插槽) | 若再增长:封存过滤族拆至 useNotesSealedFilter.ts / useNotesPageEditing.ts |
120+
| app/src/components/GroupSidebar.tsx | 418 | v0.20.10 批 5 复习入口移除:「🎴 复习 N」按钮与 dueTotal 拉取下线(无被动提醒裁决,同 v0.20.5 行动先例;f702d876)——登记值 455 过期,实测回落 | 若再增长:体系引用拉取与徽标聚合拆至 useGroupSystemLinks.ts hook |
121+
| app/src/App.tsx | 429 | 根装配(页面切换/焦点跨页直达状态机/全局事件监听)+ v0.20.5 行动页 + v0.20.10 批 5 复习页 Tab/深链/保活挂载(f702d876)——登记值 363 过期,实测纠偏 | 若再增长:焦点跨页直达 state 族拆至 useFocusRouting.ts |
118122

119123
## 已拆分 / 登记移除记录
120124

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# 2026-09-09 · v0.20.10 复习域页独立(用户 11 项问题 6——复习功能独立为顶层页)
2+
3+
> 状态:**用户逐项授权(2026-09-09)· 已实施(2026-09-09 本线:代码提交 + 交付记录,见 v0.20.md)**
4+
> 定位:意图分层续批(学/做/记/练各归其位)——复习面从笔记域剥离为顶层「🔄 复习」页;[v0.20.5 行动域页 spec §9](./2026-09-06-action-domain-page-design.md) 二期预留方向兑现(ReviewSessionOverlay 全页化 + 全量到期卡 + 组过滤器)。
5+
> 关联:用户 11 项问题 6(v0.20.9 交付记录开放项滚动)· REQ-314 · v0.20.5 行动域页独立先例(b78ddae7:意图域页拆分三件套)· ADR-018(闪卡数据层与笔记域零耦合)· TD-004(保活挂载 + active 门控)
6+
> 原则:不引入路由库(display:none 保活挂载延续);后端零改动(命令面既有 list_due_cards/count_due_cards/review_card 全复用);「无被动提醒」裁决沿用行动域(D4)——不新增全局/侧栏徽标。
7+
8+
## 1. 授权口径(2026-09-09 用户裁决)
9+
10+
| # | 决策 | 裁决 |
11+
|---|------|------|
12+
| D1 | 方案 | **独立顶层页(推荐)**:新增第 9 个 Tab「复习」——ReviewSessionOverlay 全页化 + 组过滤 + 到期数;笔记域入口改深链 |
13+
| D2 | 入口 | 仅顶部 Tab「🔄 复习」为到期感知入口(打开即见到期数);组侧栏「🎴 复习 N」按钮移除(无被动提醒——不放导航/侧栏徽标,同行动域裁决) |
14+
| D3 | 深链 | 笔记域 ⓘ 弹层「复习本组」保留但改**跨页深链**:App 转复习页 + 组预选(focusReviewGroupId,仿 focusGroupId 模式,消费后清空) |
15+
| D4 | 数据/后端 | 零 DB/命令改动:list_due_cards/count_due_cards/review_card 均带 group_id Option(commands_flashcards.rs)——数据层只依赖 flashcards/review_logs + scheduler(ADR-018),与笔记域零耦合 |
16+
| D5 | 刷新 | 闪卡域不在 useDbRefresh 五域事件总线(notify.rs DataDomain 无 Flashcards)→ 复习页走 active 门控切回重载(TD-004,同 ActionPage);会话退出后再拉一次(评分改变到期分布) |
17+
| D6 | 版本 | v0.20.10(交付记录 + 需求池 REQ-314 备注) |
18+
19+
## 2. 范围与现状
20+
21+
**范围内**:① 新 pages/ReviewPage.tsx(组过滤器 + 每组/全量到期数 + 开始复习 + 空态引导);② ReviewSessionOverlay → components/review/ReviewSessionPanel.tsx 全页化迁移(git mv 保历史,去 fixed 遮罩,渲染为页面主体区;front→reveal→四档评分流程语义与后端命令不变);③ App.tsx 第 9 Tab + focusReviewGroupId 深链;④ 笔记域拆件(NotesPage 删 review state/Overlay 宿主;GroupSidebar 删「🎴 复习 N」按钮与 dueTotal 拉取;RouteInfoPopover「复习本组」语义=深链回调);⑤ 测试同步 + 新页面/纯逻辑测试;⑥ 交付记录登记观察项。
22+
23+
**范围外**:导航分组收纳(顶层 Tab >8 观察项——本批第 9 Tab 只登记不设计);复习页内生成闪卡入口(无组上下文——组管理「⚙ 生成闪卡」仍为生成唯一入口,开放项登记);批 6-8 范围(排序置顶/空组清理在笔记域的动作与数据库结构;行动域/会话页/采集域);🎴 转卡(G7 预留置灰);feed 地形组卡片范围化。
24+
25+
## 3. 页面结构(ReviewPage ≤300 行)
26+
27+
- **总览态**:头部=标题 + 全量到期数 + 「▶ 开始复习」按钮 + 组过滤器 chips(全部(N)+ 到期>0 的各组(N),到期数即时可见——打开即见到期感知);主体=范围引导/空态(全局无到期 vs 本组无到期但别组有——引导换范围,不误报)。
28+
- **会话态**:ReviewSessionPanel 全页化渲染为页面主体(「开始」语义=挂载即开一轮;本轮=所选范围到期卡按 due_at 升序,上限 200=后端 DUE_LIST_LIMIT_MAX)。
29+
- **空态文案**:说明卡源(组 ⓘ「⚙ 生成闪卡」/「+ 概念卡」/碎片升卡)与 FSRS 到期节奏;不做页内生成按钮(无组上下文的全局生成语义不清——开放项)。
30+
- 纯归约抽至 utils/reviewStats.ts(dueGroupRows 到期>0 降序 / scopeDueCount / scopeLabel——vitest AAA)。
31+
32+
## 4. 深链与刷新契约
33+
34+
- 深链:ⓘ「复习本组」→ GroupSidebar → NotesPage(onOpenReview) → App setFocusReviewGroupId + setPage("review") → ReviewPage 消费(预选组)→ onFocusGroupConsumed 清空(同组重复深链可再触发);深链到达时会话进行中→先退出会话(新意图优先——模态时代不可能并发两场复习)。
35+
- 刷新:active 门控(首挂跳过、false→true 递增 token 全量重载);会话退出/完成即重载;无事件订阅(DataDomain 无 Flashcards)。
36+
37+
## 5. 测试与验收
38+
39+
- 前端:ReviewPage 8 例(chips/范围开始/空态两分支/active 门控/深链消费/会话打断)、ReviewSessionPanel 4 例(front→back→四档推进→完成收尾/空队列/ESC 与退出)、reviewStats 4 例;GroupSidebar 测试清理 count_due_cards mock + 入口唯一化回归护栏;RouteInfoPopover 深链回调断言;全量 vitest 612→630、tsc 0 错误。
40+
- Rust:零改动;子集回归 `cargo test --test app_lib_tests -- flashcard scheduler` 19/19。
41+
- 真机走查:9 Tab 渲染与宽度;组过滤切换与到期数;全量/单组开始复习流;ⓘ 深链(含同组重复深链);评分后队列推进与完成空态;切页(离开/返回)到期统计重载;无侧栏/导航徽标回归。
42+
43+
## 6. 文档与提交
44+
45+
- 本设计:docs/superpowers/specs/2026-09-09-review-page-design.md(本文件)
46+
- docs/versions/v0.20.md:v0.20.10 交付记录小节
47+
- 需求池 REQ-314 备注(用户 11 项问题 6)
48+
- docs/standards/line-limit-exemptions.md:App/NotesPage/GroupSidebar 实测行数纠偏
49+
- 提交:① 代码(feat)② 文档(docs)——push origin/dev
50+
51+
## 7. 风险与回归
52+
53+
- 入口遗漏:侧栏/导航任何残留复习入口或徽标=裁决违反(测试回归护栏 + 走查清单覆盖);count_due_cards 命令保留不删(ActionPage 先例:API 面不缩小)。
54+
- active 门控漏接线:隐藏期生成卡/删组后切回统计陈旧(单测覆盖 false→true 重载)。
55+
- 深链消费遗漏:同组重复深链失效(消费即清空 + 单测覆盖)。
56+
- 行数:ReviewPage 184 / ReviewSessionPanel 180 / NotesPage 540 / GroupSidebar 418 / App 429——均 ≤600,豁免表纠偏登记。

‎docs/versions/v0.20.md‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,3 +376,24 @@
376376
**真机走查建议(登记)**:右键菜单五项与越界钳制;选择模式三通道(选择按钮/单击勾选/Ctrl 加减/Shift 区间/Esc 退出、退出后单击回详情);批量删除确认与 toast;行内改名(Enter/Esc/失焦、空标题放弃、web 会话改名);详情 ✎ 回归;批量转笔记与全选三态回归。
377377

378378
**开放项滚动**:用户 11 项问题 6(复习页独立)、7(排序置顶)、8(空组清理)、10(选中右键菜单)待批 5 起。
379+
380+
---
381+
382+
# v0.20.10 交付记录(批 5:复习功能独立为顶层页,2026-09-09 完成)
383+
384+
> 状态:**用户 11 项问题 6 交付**(REQ-314 → 需求池已备注);范围 = 复习域页独立——新增第 9 个顶层 Tab「🔄 复习」(ReviewSessionOverlay 全页化 + 组过滤 + 到期数,spec §9 二期预留兑现)+ 笔记域入口深链化;无被动提醒裁决沿用行动域(组侧栏「🎴 复习 N」按钮与徽标移除,到期感知仅顶层 Tab 自身)。
385+
> 关联:[2026-09-09 复习域页设计 spec](../superpowers/specs/2026-09-09-review-page-design.md)(落档)· [行动域页 spec §9](../superpowers/specs/2026-09-06-action-domain-page-design.md)(二期预留方向)· v0.20.9 开放项滚动 · ADR-018/TD-004 先例
386+
387+
| 变更 | 内容 | 提交 |
388+
|---|---|---|
389+
| 会话组件全页化 | ReviewSessionOverlay.tsx → components/review/ReviewSessionPanel.tsx(git mv 保历史):去 fixed/inset:0 遮罩与居中卡片,渲染为页面主体区(头部工具行 + 可滚内容列 maxWidth 640);front→reveal→四档评分流程语义、ESC 退出保护、PromoteCardButton(model 卡)不变;一轮上限 50→200(镜像后端 DUE_LIST_LIMIT_MAX=200——独立页打开即练,50 太小);完成/空队列收尾新增「✓ 回到总览」出口 | f702d876 |
390+
| 新 pages/ReviewPage | 总览态头部:标题 + 全量到期数 + 「▶ 开始复习」+ 组过滤器 chips(全部(N)+ 到期>0 各组(N),按到期数降序);会话态=按所选范围挂载面板(「开始」语义=挂载即开一轮);空态引导两分支(全局无到期=卡源说明文案含 ⓘ「⚙ 生成闪卡」指引,不设页内生成按钮——无组上下文语义不清,开放项登记;本组无到期但别组有=引导换范围);纯归约抽 utils/reviewStats.ts(dueGroupRows/scopeDueCount/scopeLabel) | f702d876 |
391+
| 导航与深链 | App.tsx Page 联合 + NAV_ITEMS 第 9 项「🔄 复习」(行动之后;顶层 Tab=9 触发 spec §9 收纳观察项——只登记不做收纳)+ focusReviewGroupId 跨页深链 state(保活挂载 div + active prop 透传) | f702d876 |
392+
| 笔记域拆件 | NotesPage 删 review state/Overlay 宿主与 import(575→540 行),ⓘ「复习本组」经 onOpenReview 透传 App 转页组预选;GroupSidebar 删「🎴 复习 N」按钮与 dueTotal 拉取(455→418 行);RouteInfoPopover 按钮语义=深链回调(弹层其余功能零改动);count_due_cards 命令保留不删(API 面不缩小,行动域先例) | f702d876 |
393+
| 测试与回归 | 新增 ReviewPage 8 例(chips 到期数/范围开始挂载/会话退出重载/空态两分支/active 门控/深链消费与同组重触发/深链打断会话)、ReviewSessionPanel 4 例(front→back→四档推进→完成收尾/空队列防御/ESC 与退出)、reviewStats 4 例;GroupSidebar 测试清 count_due_cards mock + 入口唯一化护栏(无「🎴 复习」且不拉到期数、ⓘ 深链回调断言);RouteInfoPopover 深链断言 +1;全量 vitest 612→630、tsc 0 错;Rust 零改动——`cargo test --test app_lib_tests -- flashcard scheduler` 19/19 子集回归确认无涉 | f702d876 |
394+
395+
**偏差登记(实施备案)**:① 任务书建议 3 代码提交——遵循 b78ddae7 行动域先例合并为单代码提交(git mv + NotesPage 引用同步失效 + 接线原子不可拆,拆开即不可编译中间态);② 组过滤器 chips 只列到期>0 的组(到期 0 组不可作范围起点——避免死按钮;ⓘ 深链仍可达 0 到期组并显示范围空态引导);③ feed 地形组(碎片升卡落组)到期卡计入「全部」与逐组 chip(list_note_groups 原样呈现,未做笔记侧 feedCapture 开关过滤——复习面不过滤原料组开关,与旧全量 Overlay 口径一致);④ 会话中途切走 Tab 会话保活续练(display:none 保活红利)——与旧模态阻塞语义不同,登记为行为演进;深链到达时会话进行中=先退出会话(新意图优先,模态时代不可能并发两场复习);⑤ ReviewPage 逐组 count_due_cards 循环(无批量命令——既有命令面最小实现,组数数十级 Promise.all 并行可接受,未加 Rust 命令)。
396+
397+
**真机走查建议(登记)**:9 Tab 渲染与 nav 宽度(13px 字号);复习页打开即见到期总数与各组 chips;切组过滤→开始复习按钮范围数字变化→全量/单组两路会话(出卡顺序=到期先后);卡片回忆→答案→四档评分→下一张推进;评完末张→完成收尾→回到总览→到期数已减;ⓘ「复习本组」深链(跳复习页且该组预选;同组重复深链两次均生效);组侧栏确认无「🎴 复习」按钮、导航无到期徽标(无被动提醒回归);会话中切走再切回=会话与统计状态保活且统计重载;全零到期空态文案与生成指引;ESC 退出本轮。
398+
399+
**开放项滚动**:**顶层 Tab=9——spec §9 导航分组收纳观察启动(本批只登记不做收纳设计)**;复习页内一键生成闪卡入口(现指引到组 ⓘ「⚙ 生成闪卡」,如需页内入口需裁决组上下文形态);feed 组 chip 口径真机观察;会话中切走保活语义真机确认(与旧模态差异已登记);用户 11 项问题 7(排序置顶)、8(空组清理)、10(选中右键菜单)待后续批。

0 commit comments

Comments
 (0)