|
| 1 | +# v0.12.2:笔记页信息架构重构——三栏布局 + 收件箱动线 + 路由信息收敛 |
| 2 | + |
| 3 | +> 状态:**规划定稿(2026-08-23,设计完成待实施)** |
| 4 | +> 依据:用户对话 2026-08-23(笔记页截图 4 点抱怨:碎片捕获无头绪 · 分组混乱交互不明 · 路由理由放置存疑 · 需要自主新建笔记)+ 市场调研(捕获收件箱模式 / Gmail 分类透明性 / 自动组织先例)+ 三项用户裁决(方案 A 三栏 · 二元论碎片 · 升笔记轻确认) |
| 5 | +> 前置:v0.12.1(OCR 引擎回归修复)交付后开工 |
| 6 | +
|
| 7 | +## 一句话 |
| 8 | + |
| 9 | +笔记页从"550px 一栏塞三职(筛选+列表+详情)"重构为**三栏分工**(组筛选 / 笔记列表 / 阅读编辑),给碎片补上**向上的出路**(升为笔记),把路由理由与组管理**收敛进 ⓘ 弹层**,新建笔记**零对话框**——四个抱怨分别对应:概念分家、职责分离、信息收敛、入口去摩擦。 |
| 10 | + |
| 11 | +## 范围 |
| 12 | + |
| 13 | +| # | 项目 | 类型 | 落点 | |
| 14 | +|---|------|------|------| |
| 15 | +| 1 | 三栏布局重构 | **P0** 交互债 | 240px 组侧栏 + 320px 笔记列表(常驻)+ 阅读/编辑(现有 NoteReadingView);搜索/标签过滤时列表原位切换,不再换布局 | |
| 16 | +| 2 | 收件箱动线(碎片→笔记) | **P0** 产品缺口 | 碎片=原料(二元论裁决);快速记录→收件箱(恒常可见)→ 升笔记/升卡/删除;新增 `promote_fragment_to_note`(事务建笔记+删碎片) | |
| 17 | +| 3 | 路由信息收敛 | **P1** 信息债 | 组行小字(系统自动归类/⚠待确认/已改判 + ⓘ);ⓘ 弹层=人话归因+明细折叠+改判+组管理(闪卡/结算/复习本组/周契约) | |
| 18 | +| 4 | 新建笔记零对话框 | **P2** 摩擦 | 去 `window.prompt`;新建即编辑态;落未归组(全部笔记可见) | |
| 19 | +| 5 | 文档与治理 | 伴随 | requirements-pool 回填 REQ 编号(实施时)· 本版本文档 · CHANGELOG(交付时) | |
| 20 | + |
| 21 | +## 设计背景 |
| 22 | + |
| 23 | +### 1. 市场调研要点(为何这样改) |
| 24 | + |
| 25 | +| 调研结论 | 来源 | 对应变化 | |
| 26 | +|----------|------|---------| |
| 27 | +| 捕获面必须与检索面互相喂养;胜出模式 =「Capture everywhere, triage in ONE inbox」 | [捕获模式横评(Apple Notes/Notion/Obsidian/MindWiki)](https://mindwiki.io/blog/fastest-capture-inbox-comparison) | 快速记录→收件箱恒常首项,不再藏到 feed 开关后 | |
| 28 | +| 自动分类:结果可见、**原因不展示**(Gmail 页签只给"归错了可改",从不解释信号) | [Gmail Categories 机制](https://reviewmyemails.com/emailalmanac/spam-filters-and-blocklists/fundamentals-of-spam-filtering/gmail-categories-tab-filtering)、[Apple Photos 人物相册:聚类与确认界面分离](https://support.apple.com/en-au/guide/photos/phtad9d981ab/9.0/mac/14.0#1) | 路由理由人话一行 + 信号明细默认折叠(REQ-198 "可见"重释:可见=结果+一句话,非算法原文) | |
| 29 | +| 组织范式:过滤器/容器/详情严格分离(Gmail 页签、Apple Notes 文件夹+列表+内容、Notion 视图≠容器) | [NoteLyn 组织系统分析](https://www.notelyn.com/blog/how-to-organize-notes) | 三栏拆分;组行单击=仅过滤 | |
| 30 | +| 中文音视频转笔记:听悟/讯飞为"终点/转写工具"(组织缺失或靠用户自理),Ai好记=显式三级目录 | [通义听悟、讯飞听见、Ai好记实测](https://www.cnblogs.com/Agusiling/articles/22165378) | 组=粗粒度容器(课程/主题/独立),不学三级目录(YAGNI) | |
| 31 | +| 新建:主流零对话框、第一行即标题(Apple Notes/Notion/Obsidian 快速捕获) | 同上横评 | 去 prompt,新建即编辑 | |
| 32 | + |
| 33 | +### 2. 三栏布局 |
| 34 | + |
| 35 | +``` |
| 36 | +┌──────────────┬───────────────────┬─────────────────────────────┐ |
| 37 | +│ 笔记组 (240px) │ 笔记列表 (320px) │ 阅读 / 编辑(自适应) │ |
| 38 | +├──────────────┼───────────────────┼─────────────────────────────┤ |
| 39 | +│ ⚡ 快速记录 │ 当前视图名 +搜索+排序│ 标题+来源徽标+操作行 │ |
| 40 | +│ 📥 收件箱 (3) │ 笔记卡片列表 │ Markdown 渲染(回链/任务勾选)│ |
| 41 | +│ 📁 全部笔记 │ (空态引导) │ 辅助面板:版本时间线/AI补充 │ |
| 42 | +│ 📁 组… │ │ │ |
| 43 | +│ ─────────── │ │ │ |
| 44 | +│ 🎴 复习 12 │ │ │ |
| 45 | +└──────────────┴───────────────────┴─────────────────────────────┘ |
| 46 | +``` |
| 47 | + |
| 48 | +原 `NoteGroupPanel`(545 行,职责三合一)按职责拆分:组筛选侧栏 + ⓘ 弹层 + 收件箱视图,各自单文件 ≤300 行(AGENTS.md §3.1)。 |
| 49 | + |
| 50 | +### 3. 碎片语义:二元论(用户裁决) |
| 51 | + |
| 52 | +**碎片 = 灵感/待处理原料,不是短笔记**。短笔记可直接用「新建笔记」,碎片入口存在的意义是**比新建更轻**(零标题/零选组/零结构)。现状病根:v0.11.4 明确"碎片→笔记升级不做(身份诚实)"——捕获产物只有升卡/删除两条出口,无向上通道 → 永远躺在隐藏 feed 组里 →"无头绪"。 |
| 53 | + |
| 54 | +本版补上出口(对 v0.11.4 范围决策的修订): |
| 55 | + |
| 56 | +``` |
| 57 | +捕获(快速记录/剪贴板)──► 📥 收件箱(fragment 列表) |
| 58 | + │ |
| 59 | + ┌──────────────────┼──────────────────┐ |
| 60 | + ▼ ▼ ▼ |
| 61 | + ✍ 升为笔记 ⚙ 升为闪卡 🗑 删除 |
| 62 | + (轻确认) (现有多句卡生成) (二次确认) |
| 63 | + │ |
| 64 | + ▼ |
| 65 | + 进入笔记链路:编辑/AI精修/版本/归组/生成闪卡/搜索 |
| 66 | +``` |
| 67 | + |
| 68 | +- **升笔记=轻确认**(用户裁决):碎片卡内联展开标题(预填首句可改)+ 归组下拉(默认未归组)+ 确认 → `promote_fragment_to_note` 事务建笔记+删碎片 → **右侧自动打开新笔记**(闭环可见)。 |
| 69 | +- **收件箱只装碎片**;未归组**笔记**(`group_id IS NULL`)显示在「全部笔记」——两种实体 UI 分家,各走各的动线(修正:草案中"收件箱=未归组笔记视图"作废,二元论下不成立)。 |
| 70 | +- 收件箱恒常可见(固定侧栏首项 + 待处理计数),不再依赖 feedCapture 开关隐藏。 |
| 71 | +- 空态引导:「一句灵感,三种归宿——升为笔记沉淀它,升为闪卡复习它,或删除它。」 |
| 72 | + |
| 73 | +### 4. 路由信息收敛(ⓘ 弹层) |
| 74 | + |
| 75 | +组行下方一行小字(`系统自动归类 · ⓘ` / `⚠ 待确认 · ⓘ` / `已改判 · ⓘ`;⚠ 时淡橙描边保留),**组行单击只做过滤**(现状:单击=过滤+展开双动作——"不知道如何去交互"的直接原因)。 |
| 76 | + |
| 77 | +ⓘ 弹层四区: |
| 78 | +1. 人话归因:`系统按内容特征归入:画面以术语表为主(60 条术语)`;信号明细(术语表成块/画面文字密度等原文)折叠在"查看明细",默认不展开; |
| 79 | +2. 改判:课程组/主题组/独立组 + 领域下拉 + 确认(修改即记忆,REQ-198 保留); |
| 80 | +3. 组管理:⚙ 生成闪卡 | 🧹 结算(含结算计划)| 🎴 复习本组 | 📥 移入/移出选中笔记; |
| 81 | +4. 周契约卡(REQ-200,组级承诺→组级详情)。 |
| 82 | + |
| 83 | +### 5. 新建笔记(去摩擦) |
| 84 | + |
| 85 | +`window.prompt` 移除:点「✍ 新建」→ `create_note(未命名笔记, "")` → 立即进入编辑态聚焦首行(Apple Notes/Notion 式);落未归组(全部笔记可见);标题编辑器内可改。 |
| 86 | + |
| 87 | +### 6. 后端变更清单 |
| 88 | + |
| 89 | +| 变更 | 说明 | |
| 90 | +|------|------| |
| 91 | +| `promote_fragment_to_note(fragmentId, title, groupId?)` | 新命令;事务建 notes(source=manual, 正文=碎片文本+图)+ 删 fragment;标题必填(前端保证);groupId 可选 | |
| 92 | +| `capture_fragment` / `list_group_fragments` / `delete_fragment` / `update_fragment_group` | 保留,语义不变;删除加二次确认(前端化) | |
| 93 | +| feed 组地形 / fragments 表 | 保留不动(免迁移;对比 A-2 一元论:免 fragments→notes 迁移) | |
| 94 | +| feedCapture 功能开关 | 语义改为「快速记录入口」开关;默认值建议改开(本重构即转正,不再是预览)——**待实施前用户最终确认** | |
| 95 | + |
| 96 | +### 7. 前端变更清单(组件级) |
| 97 | + |
| 98 | +| 组件 | 动作 | |
| 99 | +|------|------| |
| 100 | +| `NoteGroupPanel.tsx` | 拆分为 `GroupSidebar.tsx`(筛选侧栏)+ `RouteInfoPopover.tsx`(ⓘ 弹层,≤300 行/文件) | |
| 101 | +| `FeedFragmentList.tsx` | 改造为收件箱碎片卡(升笔记内联表单 + 升卡 + 删) | |
| 102 | +| `NotesPage.tsx` | 三栏编排;groupFilter 只做过滤 | |
| 103 | +| `NoteListView.tsx` | 常驻中部(去掉 flatMode 隐藏依赖) | |
| 104 | +| `WeekContractCard.tsx` | 迁入 RouteInfoPopover | |
| 105 | +| `handleCreate` | 去 prompt | |
| 106 | + |
| 107 | +## 关键决策与纪律 |
| 108 | + |
| 109 | +1. **三元分离**:筛选(侧栏)/ 列表(中部)/ 详情(右侧)各司一职;一个手势只触发一个动作——回应当前"组头单击=过滤+展开"的双动作歧义。 |
| 110 | +2. **碎片是原料**(二元论,用户裁决):碎片≠短笔记;补 v0.11.4"升级不做"的出口,范围修订在版本文档记录,不改 ADR。 |
| 111 | +3. **结果可见、原因不展示**(市场先例):路由理由人话一行 + ⓘ 明细折叠;REQ-198"可见可改"重释为"决策结果可感知、原因可按需、误判可一键纠正"。 |
| 112 | +4. **收件箱只装碎片**:未归组笔记不混入收件箱(两种实体、两条动线),延续"活沉淀"(note-design-philosophy)——笔记是过渡态,碎片是最粗的证据。 |
| 113 | +5. **YAGNI**:不做拖拽归组(保留"移入选中笔记"按钮)、不做碎片批量处理(逐条,学习仪式感)、不做学习循环功能改动(只挪 UI 位置);三级目录/双链/图谱不做(产品边界,见注记哲学 §二)。 |
| 114 | +6. **零后端破坏**:Phase 1 纯前端先行;fragments/feed 语义零迁移,单一新命令,测试回归面小。 |
| 115 | + |
| 116 | +## 落地顺序 |
| 117 | + |
| 118 | +- **Phase 1(纯前端,零后端改动)**:三栏拆分 + 组行交互修正 + ⓘ 弹层(迁入路由理由/改判/组管理/周契约)+ 新建去 prompt + 收件箱视图常驻(碎片列表迁移)。 |
| 119 | +- **Phase 2(后端 + 开关)**:`promote_fragment_to_note` + 碎片卡升笔记/升卡接线 + feedCapture 开关语义调整(默认值待决)。 |
| 120 | +- **验收走查**:种子数据过 捕获→升级→编辑→归组→闪卡 全链。 |
| 121 | + |
| 122 | +## 验收标准 |
| 123 | + |
| 124 | +1. 侧栏组行单击=仅过滤(中部列表切换,无展开动作);⚠ 待确认组淡橙描边小字显示;ⓘ 弹层四区齐全,明细默认折叠。 |
| 125 | +2. 快速记录捕获 → 收件箱计数 +1;升笔记(轻确认)→ 右侧自动打开新笔记、碎片从收件箱移除、新笔记在「全部笔记」可见;升卡幂等可重复触发;删除有二次确认;空态文案正确。 |
| 126 | +3. 「✍ 新建」无 prompt,直接进入编辑态,落未归组;搜索/标签激活时中部列表原位切换为搜索结果(布局不变)。 |
| 127 | +4. ⓘ 弹层内改判后组行小字变「已改判」且路由记忆生效(再次归组走新偏好);弹层内生成闪卡/结算/复习本组/周契约可用。 |
| 128 | +5. 全量回归:`cargo test`(含新命令单测)/ `cargo clippy` / `npx tsc --noEmit` / `npx vitest run` / `npm run build` 全绿;前端组件测试覆盖收件箱状态机(捕获→升笔记→移除)与 ⓘ 弹层交互。 |
| 129 | + |
| 130 | +## 关联 |
| 131 | + |
| 132 | +- [note-design-philosophy.md](../product/note-design-philosophy.md)(活沉淀:笔记=证据到知识过渡态) |
| 133 | +- requirements-pool:REQ-195~198(组容器/路由可见可改·本版重释)、REQ-199~201(内容分型/周契约/feed 消费闭环·本版补升级出口) |
| 134 | +- [v0.11.md](./v0.11.md)(v0.11.5 树形合并为本版三栏重构的前身)· [v0.12.0.md](./v0.12.0.md) · [v0.12.1.md](./v0.12.1.md) |
| 135 | +- 市场调研:捕获收件箱模式(MindWiki 横评)· 自动组织透明性(Gmail/Apple Photos)· 中文音视频笔记横评(听悟/讯飞/Ai好记) |
0 commit comments