阶段 0 工程基线
- 本文档记录阶段 0 的验证范围、性能基准和人工回归清单。
- 后续依赖升级或模块重构不得降低这些基线。
自动化验证
本地完整验证:
npm run validate
验证由以下部分组成:
-
ESLint:检查主进程、预加载脚本、渲染进程、测试和构建脚本。
-
Node 单元测试:覆盖文档状态、路径和协议校验、文件读写、图片复制、Markdown 渲染与 HTML 清洗。
-
Electron 冒烟测试:使用与正式应用一致的安全配置加载页面,确认预加载 API、初始无文档状态、新建标签和预览渲染可用。
-
electron-builder --dir:验证当前平台可以生成未签名测试应用。 -
GitHub Actions 会在 Windows 和 macOS 上分别执行 lint、单元测试、Electron 冒烟测试和目录打包,并保留 7 天测试制品。
-
正式签名、公证和安装包发布属于后续发布工作。
性能基准
运行:
npm run benchmark
基准条件与结果:
-
输入:约 100 KiB、包含标题、强调、链接和列表的 Markdown。
-
方法:预热后连续渲染 20 次。
-
环境:2026-08-14 的开发环境,Node.js 22.23.2。
-
结果:多次运行的平均完整解析与清洗耗时约为 100–130 ms。
-
该结果用于发现相对性能回退,不作为所有设备的硬性指标。
-
阶段 1 已在渲染端增加去抖和过期结果丢弃,后续仍需在真实 Electron IPC 路径补充输入延迟指标。
人工回归清单
发布测试制品前至少检查:
文档与标签
- 应用启动且没有可恢复会话时不自动创建文档,保存和图片操作保持不可用。
- 新建文档会出现欢迎内容和一个活动标签。
- 可一次打开多个受支持的 Markdown 文件;重复打开只切换标签。
- 在两个标签中分别编辑并滚动到不同位置,来回切换后确认各自的滚动、选区及撤销/重做记录仍然保留。
- 编辑后标签显示未保存标记,保存或撤销至最近保存的正文后标记消失;继续撤销越过保存点时标记重新出现。
- 新文档首次保存会弹出保存对话框。
- 关闭未保存标签会确认,取消确认不会丢失内容。
- 关闭最后一个标签后保持无文档状态,可以再次新建或打开文档。
Markdown 与预览
- 标题、列表、表格、代码块、链接和图片可以正常预览。
- 当前行高亮始终保留;列表项仍可以单独高亮。
- 光标移动时,源码与预览另以较淡背景高亮最近所属大纲节点的完整范围(含标题和子章节),截至下一个同级或更高级标题之前;大纲面板隐藏时仍生效。
- 例如
aaaa归属# a,b1b1归属## b1而不是# b;选区存在时按活动光标端确定归属。 - 首个标题之前或没有标题时,源码保留当前行高亮,预览保留对应区块高亮;列表项可以单独高亮。
- 编辑区与预览区可以双向同步滚动。
- 预览开关可以隐藏和恢复预览区域。
- HTTP、HTTPS、邮件链接由系统外部应用打开,应用窗口不发生导航。
javascript:、file:等危险外链不会被打开。
图片与文件
- 选择本地图片会复制到文档同级
assets/并插入相对路径。 - 粘贴剪贴板图片会保存 PNG 并插入相对路径。
- 未保存文档插入图片时会先要求保存文档。
- PNG、JPEG、GIF、WebP、BMP 可插入,其他扩展名会被拒绝。
- 中文文件名、中文正文和 LF 换行可以正常读写。
平台与界面
- Windows/macOS 均可启动打包后的测试应用。
- 窄窗口切换为上下布局,宽窗口保持左右布局。
- 工具栏、标签栏和状态栏不随编辑内容滚动。
- macOS 使用 Command、Windows 使用 Ctrl 执行既有快捷键。
已知未覆盖项
以下能力属于阶段 1 或更晚,本阶段不宣称已经解决:
- 原子保存、恢复稿、外部文件监听和并发修改冲突界面已在阶段 1 补齐,详见阶段 1 可靠性设计。
- 自动更新、正式代码签名和 macOS 公证。
- 输入去抖和过期渲染结果丢弃已在阶段 1 补齐;持续性能门槛仍待真实设备数据确定。
- 笔记库、目录树和搜索已在阶段 2 补齐,详见阶段 2 桌面笔记库。
- 同步协议与托管同步已在阶段 4/5 补齐,详见阶段 5 账号与托管同步 Beta。
