The tally remembers why the page went down; until a load succeeds, render() ends each new request with that reason instead of calling a dead page. end_renders is a free function with a gpui test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
17 KiB
缺陷清单进度
docs/BugList.md 的 93 条,按清单次序逐条处理:先核对当前代码,已由先前改动修好的写明出处,其余修好、审查、提交、推送后勾上。
0.1.3(用户 2026-10-10 定:修完全部缺陷与 K-01,Windows、Linux 与 macOS 同等可用,零错误零警告;Omarchy 上主题随 Omarchy;三端确认后经 Gitea 运行器发布 0.1.3)
次序:先 E-01(审查要能编译),再按下列清单次序逐条审查未审的修复与 K-01,最后三端与发布。
- E-01 Windows 与 Linux(WSL)的构建环境:工具链、MuPDF、CEF、ElyMark 页面、tessdata、Git,
cargo check --workspace --all-targets两端通过(LibreOffice 随 L-01、W-01) — R1 CEF 未设 API 版本、macOS 编译回归、日志测试不触发错误、Windows 硬链接不认作同一文件、WSL 无 Git;R2 注释超长;R3 PASS
0.1.2 先做(用户 2026-10-09 定:先修致命与高,加自动更新,发布 0.1.2;其余随后按清单次序)
次序:S-03、P-01、X-01、D-01、D-02、P-02、P-03、P-04、M-01、X-02、X-03、K-01(Linux、Windows,本机不能运行)、UPD-1、REL-1、REL-2。K-01 不进 0.1.2:只影响 Linux 与 Windows 的 worker,本机不能运行验证,0.1.2 只发 macOS;留在下面的清单里,未勾。T-05 已改一半(审查查出缩放后尺寸不重测),暂放,补丁存在草稿区。
-
UPD-1 自动更新:应用内检查新版本、下载、校验,经用户同意后替换并重启;发布时生成更新清单,不再要点 GitHub 链接 — 启动检查默认关、菜单“检查更新…”、退出后再装、失败记录先于重开、经 Gitea API 找清单;R1–R4 授权、提交点、保存询问、版本绑定、横幅位置、取消退出、记录先后;R5 两处(启动检查失败记日志、以替身 open 断言先后)已修并以变异验证,五轮上限后由 UPD-2 复核通过
-
T-01 内核的图块与命中按像素网格,Ely 的光标、选区、表头按文档 twips,越远越错位 — R2.16 已修(图块 twips 与打印 twips 互换)
-
T-02 单元格光标露出边缘即把视图滚到中央,点击与拖选时视图跳动 — R1 拖选中仍滚、超宽格跳回起点;R2 PASS
-
T-03 视口比工作表宽时网格先居中再左移一次 — 载入回复带文档种类,表格不居中;R1 测试漏几何到达前的首帧;R2 PASS
-
T-04 从不调用
setClientZoom,内核命中与几何按默认缩放算 — R2.16 已修(worker 每次报可见区前 setClientZoom) -
T-05 文档尺寸按内核像素取整,表尾被裁 — 内核尺寸按其测量时的比例换到当前比例(加载即设比例、缩放即改比例并重测、迟到的测量也换算);R1–R4 缩放后未重测、表尾锚点被截、连续缩放迟到、首次测量无比例与文件超行;R5 PASS
-
T-06 滚轮向下被内核平铺区卡住 — 表格的可滚范围先行两屏、止于表尾;R1 PASS
-
T-07 表头点选、行高列宽拖动是“按编号的命令”,而每次点击与拖选都推进修订,紧接着的表头操作被当作过期拒绝 — 行列号不再算作按编号的命令;R1 PASS
-
T-08 自动筛选的列菜单对光标所在的表而不是按钮所在的表筛选、排序 — 先把光标移到按钮所在格再排序或筛选;R1 PASS
-
T-09 导入文本文件时整文件的 UTF-8 校验在界面线程跑 — 编码与分隔符的猜测随读文件在后台;R1 PASS
-
T-10 CSV 导入对话框开着时打开任何别的对话框,待导入的文件静默消失 — 被挤开的导入回到队头,已读完的保留列类型;R2 PASS
-
T-11 对话框比其标签活得久:导出、定义名称、重命名不可见却“开着”,挡住导入;名称表的“转到”激活已关闭的标签 — 关标签时一并关掉其对话框与选项列表;R1 PASS
-
T-12 打印区域是整列或整行时页面设置无法应用 — 打印区域可为整列、整行(每端至多一个 $);R2 PASS
-
T-13 打印失败报成“导出失败”(非 macOS 必现) — print_later 自己以“打印失败”报错,五个应用同;R1 PASS
-
T-14 导入扫描把整个文件的每个字段都建成字符串 — split 逐行给出,扫描只留预览行与列标记;R1 PASS
-
T-15 非 UTF-8 文本的默认编码跟系统区域而不是界面语言 — 默认编码按应用所显示的语言;R1 PASS
-
S-01 切换幻灯片后主画布不重画 — 已由 be31260(R2.4)修好并有单测,此处补勾
-
S-02
deck.rs超过 500 行 — 随 S-03 把 Extra 移到 extra.rs,deck.rs 463 行 -
S-03 ElyShow 的缩放一两帧后弹回“适合幻灯片”,缩放功能不可用 — 只在标签首次观察时适合一次;R1 PASS
-
S-04 选屏对话框被别的对话框顶掉后,
show_starting卡住、放映副本泄漏 — 有对话框开着时不再顶掉它,提示先完成;选屏对话框被拒即丢副本;R2 PASS -
S-05 一条批注的时间恰为午夜或只有日期,整个批注栏不显示 — 读不出时间的批注只占一行汇总,其余照常显示(jiff 本可读只有日期的时间);R2 PASS
-
S-06 导出或打印的“从–到”填 0 时导出全部幻灯片 — 键入的页码夹到 1..=末页;R1 PASS
-
S-07 母版视图下演示检查的行按幻灯片序号跳转 — 母版视图下点行提示先关母版,不跳;R1 PASS
-
S-08 刚编辑过幻灯片就进备注栏键入,备注可能丢 — 发出的备注待读回确认,键入中读回只移基线不动草稿;R2 PASS
-
S-09 改尺寸失败后
size_asked一直留着 — 所要尺寸带输入序号,发送前先记、未入队即清,命令落地后的读回即清;R2 PASS -
S-10 开始放映的两处拒绝无提示(规则 2) — 三处拒绝都提示(另含读回时已换标签);R2 PASS
-
P-01 文件系统的
PermissionDenied被拼成不存在的文案键,应用崩溃 — worker 的拒绝改为自有错误类型 Refused;R1 测试不跨平台、不看提示;组件库 f834f55 加 Toaster::shown;R2 PASS -
P-02 每次编辑落地清掉全部图块与缩略图,页面空白、刚画的墨迹消失 — 图块随 R2.6;缩略图在编辑后留到重画;R1、R2 测试未证实际绘制;R3 PASS
-
P-03 “编辑文字和图片”先命中图片对象再命中文字;一点抖动就移动了背景图 — 包住文字块的对象让位于文字,移动须过 3 个窗口像素;R1 漏掉同点的小图;R2 PASS
-
P-04
TEXT_BLOCKS对每个文字块重跑一遍整页内容过滤,编辑工具长时间无反应 — 整页一遍干跑判定全部文字块(1000 块 1.5 s→0.1 s);R1 转向文字后错位、共用原点只计一块;R2 PASS -
P-05 连续快画或快点被拒:“文档在此间已改动,未执行” — 按坐标的编辑排队、跑在出队时的状态上,只在页面变动时拒绝;R2 PASS
-
P-06 默认字体“原字体”在 Type 1/Type 3 字体的文件上失败,只给引擎原话 — 原字体写不了新字(非 CID 编码、页面内直接字体、不在本页)时面板提示换字体;R2 PASS
-
P-07 含连字的文字块永远不可编辑 — 字形按 stext 的写法展开(多字字形、连字码点),整页、单块与删除同一判法;R3 PASS
-
P-08 页面读取失败后每帧重试、每帧弹提示 — 失败的读取按页或种类记下,编辑后重读;签名读取以保存计数判过期
-
P-09 识别文字的写入被拒后仍弹“成功” — on_same 回报是否执行;被拒时只有警告
-
P-10 预览回复被丢弃时“应用”静默无事 — 预览回复照常交回,版本已变即提示,不显示过期预览
-
P-11 撤销或重做在 MuPDF 侧失败后 worker 的步数不再同步 — 撤销失败后重读历史标记
-
P-12
unhook中途抛出时泄漏保留的对象 — 保留的链接随保留随计数 -
P-13 优化导出的“之前”大小取磁盘文件而非当前文档 — 有未保存编辑时不与磁盘文件比大小
-
P-14 文字块含控制字符时 JSON 回复不可解析 — 共用 JSON 写入:控制字符转义,非法字节与孤立代理为 U+FFFD
-
D-01 导出或打印对话框开着时关闭其标签即崩溃 — Docs 实现 tab_closed,关标签即撤下其导出对话框;R1 PASS
-
D-02 邮件合并以当前标签为模板,预览后生成的每份都是同一条记录 — 选数据时记下模板标签,预览副本不作模板;R1 测试绕过选 CSV 入口;R2 PASS
-
D-03 界面线程同步持 worker 锁读内核(样式、字体、书签、公式、分节名) — 后台读取,回来核对标签、视图与对话框请求号
-
D-04 一条批注的时间读不出,全部批注与修订都不显示 — 逐条解析,读不出的批注写明作者与原因(AX 可读、可滚动),修订照留
-
D-05 邮件合并某条记录失败时内核文档泄漏 — 失败的记录照样关闭内核文档,再传出首个错误
-
D-06 导航栏大纲点击按当前列表取下标,后台重读后可能越界 — 点击按绘制时的列表跳转;补点击路径的回归测试
-
D-07 导航栏隐藏时仍随每次光标移动重读大纲与书签 — 隐藏时不跟随标签、不读;再显示时读一次
-
D-08 Linux、Windows 上“打印…”可用,导出 PDF 后才报“此平台未构建” — 未构建平台禁用打印、不绑快捷键、错误不带路径;命令面板先查禁用
-
M-01 键入期间外部以相同内容重写文件,丢掉上次停顿之后键入的全部文字 — 先等页面送出未送的键;同文只接过文件与字节、标签为已保存;磁盘回到上次保存的文字时保留编辑并恢复自动保存;R1–R4 字节、自动保存、在途写入、已保存基线;R5 PASS
-
M-02
refresh归零版本计数却不换代,在途的一键让标签一直“未落定” — 刷新即换代、归零并结束欠下的渲染(tally.rs);R1 渲染回调悬空、无在途消息的测试;R2 测试未证旧代归零;R3 PASS -
M-03 干净标签接过磁盘文字后关闭仍问“是否保存” — 接过磁盘文字的各路(同文、干净重载、合并)都经 adopt_disk,标签与视图的保存基线同设;R1 合并采用未同步视图基线;R2 注释超长;R3 PASS
-
M-04 第二次打印或导出 PDF 悄悄取消第一次,没有文件也没有错误 — 每份打印与导出各有编号与文件,作业按编号保留、互不取消;每份作业完成时记下编号与结果;R1 窗口测试只数日志;R2 PASS(窗口测试只在 macOS,本机未运行)
-
M-05 点页面里的链接什么也不发生 — 页面拦下链接单击,地址取链接标记原文,预览单击、可视 Cmd/Ctrl 单击交应用(审查 4 轮)
-
M-06
on_app_quit无条件删恢复点与崩溃锁,AppKit 直接终止时丢未保存内容 — 未保存时退出只放下锁、不清点,窗口释放时不再删(审查 1 轮) -
M-07 崩溃恢复的未命名副本按“第一个显示的未命名标签”配对,内容可能落错标签 — 未命名副本按新建时记下的标签号配对,经 Keeping::take(审查 2 轮)
-
M-08 页面重载后悬着的渲染回调永不完成,导出既不成功也不报错 — 页面失败后挂起与新到的渲染都以错误结束,载入成功才恢复(审查 2 轮)
-
M-09 导出的保存面板出错被当作取消
-
M-10 关闭查找框只清当前标签的高亮
-
M-11 页面把搜索词写进应用日志
-
M-12 浏览器创建完成前
WebView已释放,浏览器泄漏 -
M-13 编辑器构建失败时页面空白且不上报
-
M-14
render_pdf在界面线程内嵌图片并写文件 -
G-01 打开“文件历史”或“逐行追溯”后,中间区不再响应任何别的选择
-
G-02 进行中操作读取失败被吞掉;
git am冲突无提示条无错误 -
G-03 新建的空仓库在“仓库”页显示两段 Git 致命错误(引用日志、LFS)
-
G-04 停止取回/拉取/推送失败的提示写成“克隆没有停下”
-
G-05 合并结果保存失败报成“Git 失败”,
tree.error.save是死文案 -
G-06 首次提交后紧接着取消暂存,按过期的“已有提交”判定跑成
git rm --cached -
G-07 任一引用没有创建日期,整个分支页读不出
-
G-08 清理预览后文件被外部删除,对话框只给裸 OS 错误
-
G-09 后台读取回来的对话框覆盖用户同时打开的对话框
-
G-10 选中的分支、标签、位置是窗口级的,跨仓库标签串台
-
G-11 已选边的冲突块再选另一边,提示“结果已手改”
-
G-12 符号链接父目录下,当前打开的工作树被当成别的工作树而可“移除”
-
G-13 非 macOS 平台的死入口
-
G-14
repo.rs的孤立文档注释 -
K-01 非 macOS 的 worker 不运行 VCL 主循环,内核的回调与异步输入永远不送达
-
K-02 图块的代际在画完之后才取,画到一半的作废被盖掉
-
K-03
rect_of宽容解析把读不出的载荷悄悄吞掉 -
K-04
Sheets.current用as u64转有符号的 part -
X-01 设置窗口在前时 Cmd+Q 直接退出,跳过未保存询问并抹掉恢复点 — 退出一律经主窗口宿主的流程(route_quit),延后到动作结束、先把宿主窗口提到前面;R1 主窗口 Cmd+Q 不问;R2 询问被设置窗口挡住;R3 PASS
-
X-02 共用
settings.json读不出时 Doc、Table、Show 根本起不来 — 作者名取启动时读入的设置;R1 重启失败丢作者、脚本退出码、client.rs 超行;R2 作者更新的先后与停机期间的更新;R3 PASS -
X-03 第二个实例启动即清掉运行中实例的工作目录与恢复点 — 每个应用一个实例锁,第二份被拒并报出持锁进程(Unix fcntl F_GETLK);R1–R3 进程号竞争、Windows 断言;R4 PASS
-
X-04 属性栏字号菜单的
expect("sizes are numbers")是脆弱点,但当前不可达 -
X-05 恢复点写不成时每 10 秒弹一次提示
-
X-06
session.lock空或损坏即永久关闭恢复功能 -
X-07 加密文档的恢复点每次写入都解密全部已有点,且持 worker 锁
-
X-08 另存为在等待关闭或退出时被拒绝,关闭链悬空,ElyMark 的会话清单冻结
-
X-09 保存期间落地的编辑可能让自动保存停摆
-
X-10 别的标签的文件所在卷消失时,本标签的另存为失败并被标为保存失败
-
X-11 worker 的 stderr 中继遇到第一行非 UTF-8 即永久停止
-
X-12 恢复路径在界面线程做文件 I/O
-
X-13 非 macOS 构建里仍提供只会报“未构建”的入口
-
X-14
agents.md引用的docs/engineering-risks.md不存在
0.1.2 发布
- UPD-2 复核 UPD-1 第五轮的两处修复:启动检查(含 Gitea 查询)失败写日志;失败记录先于重开,以替身 open 断言 — R1 PASS
- REL-1 dmg 里有指向“应用程序”的快捷方式,可直接拖入安装(用户 2026-10-09 报) — release.sh 在 dmg 里放“应用程序”替身,随 UPD-1 审查
- REL-2 修完上列各条后打包、发布 0.1.2,官网指向新发布页 — v0.1.2 发在 git.zacharyzhang.com(六个 dmg、两个源码包、六份更新清单;release-macos.sh 通过;经 API 取清单与 dmg 散列核对一致),官网显示 0.1.2
0.1.3 三端与发布
- L-01 Linux 的 LibreOffice:钉住的源码加全部补丁在 Linux 构建,LOK 探测通过
- L-02 Linux 全工作区零警告构建,
cargo test --workspace通过(引擎齐全,无 SKIP) - N-01 打印:Windows、Linux 交系统打印(与 macOS 同一份 PDF、纸张与取消规则),不再禁用
- N-02 ElyShow 媒体:Windows 以 Media Foundation、Linux 以 GStreamer 实现
media::Player(载入、可播、失败原因、帧、循环与播完) - N-03 自动更新的安装与重开:Windows 安装程序、Linux AppImage,照 macOS 的退出后替换、失败记录与重开
- N-04 签名验证的证书信任:Windows 系统信任库、Linux 系统 CA,禁网,不核吊销
- N-05 ElyTree 与系统:停止 Git(Windows 结束进程树)、打开终端、在文件管理器中显示,Windows、Linux
- N-06 应用之间:Windows、Linux 的同级应用查找与启动、系统默认程序打开、单实例与诊断的崩溃报告位置
- L-03 Linux 真窗口:六个应用开样本、编辑、保存、打印禁用说明、设置、更新检查
- O-01 Omarchy:外观为“系统”时随 Omarchy 主题,切换主题即刻跟随(Omarchy 虚拟机里实测)
- L-04 Linux 打包:六个 AppImage,带引擎、许可与桌面项;更新清单含 linux-x86_64
- W-01 Windows 的 LibreOffice:同一源码与补丁在 Windows 构建,LOK 探测通过
- W-02 Windows 全工作区零警告构建,
cargo test --workspace通过(引擎齐全,无 SKIP) - W-03 Windows 真窗口:六个应用开样本、编辑、保存、设置、更新检查
- W-04 Windows 打包:六个安装程序,带引擎、许可、文件类型;更新清单含 windows-x86_64
- CI-01 Gitea 工作流:打标签即在 macOS、Windows、Linux 运行器上构建、测试、打包并上传到发布
- REL-3 版本号 0.1.3,打标签触发运行器,三端产物与清单上传,官网指向新发布