Files
ElyOffice/tasks/reviews/C12.3-r1.md
T
ZacharyZhang-NYandClaude Opus 5.5 7c5bf48589 C12.3: ElyMail local store
SQLite index, content-addressed originals, rebuildable FTS5 search,
schema versions with a backup before each upgrade and read-only on
failure, and size reporting. Three review rounds; the round 3 fixes
are checked by tests, not reviewed again.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 18:14:09 -04:00

3.2 KiB
Raw Blame History

FAIL

  • crates/ely-mail-engine/src/store/search.rs:54 — 损坏的全文索引没有真正重建。存入一封邮件后,以 UPDATE search_data SET block = X'00' WHERE id > 10 损坏一个 FTS 段;搜索报 SQLITE_CORRUPT_VTAB,但 rebuild_search() 返回 Ok(1),关闭、重开后搜索仍报同一损坏错误,原文读取正常。这违反 §18.1 的全文索引可重建要求;现有测试只清空健康索引,覆盖不到此场景。修复方向:重建时清除并重新建立底层 FTS 数据,而非逐行删除后插入;增加实际损坏索引、重建并重新搜索的回归测试。证据:.work/C12.3-r1/probes.log、.work/C12.3-r1/sizes.log。

  • crates/ely-mail-engine/src/store/messages.rs:221 — 原文路径存在即直接认定保存成功,没有核对已有文件。先存入整封邮件,再把对应内容文件改成 damaged,随后重新 put 同一封完整原文,得到 Ok(MessageId(1)),但 original 仍报原文损坏;新身份引用相同原文也会关联到坏文件。修复方向:复用已有内容文件前验证完整性,损坏时明确报错或以本次收到的正确字节原子修复,并测试重新收取与跨消息去重。证据:.work/C12.3-r1/probes.log。

  • crates/ely-mail-engine/src/store/messages.rs:95 — 数据库写入失败后,之前由 keep 写入的原文永久遗留。对不存在的 MailboxId(999) 存入 80 字节整封邮件,数据库正确报外键错误,但 sizes().originals 变为 80;没有消息行引用该文件,也没有回收路径,反复失败会累积不可清理的缓存。修复方向:协调原文发布与数据库事务,失败时清理本次新增且无人引用的内容,保留其他消息共用的文件,并覆盖写入失败的回归测试。证据:.work/C12.3-r1/probes.log。

  • crates/ely-mail-engine/src/store.rs:99 — 容量统计遗漏 WAL 与共享内存文件,把逻辑页大小当成磁盘占用。存入一封邮件并交替设置标记 600 次后,index + search 仍仅报 65,536 字节,实际 mail.db、mail.db-wal、mail.db-shm 合计 4,222,456 字节;WAL 在连接运行期间持续占用磁盘,容量管理会明显低估缓存。修复方向:将数据库附属文件的实际占用计入统计,并测试未关闭连接、重复写入后的占用。证据:.work/C12.3-r1/sizes.log。

  • crates/ely-mail-engine/src/store/search.rs:157 — HTML 取文字没有遵守 HTML 元素的解析状态,导致正文漏索引和脚本被索引。<script/>trackingpixel()</script> 中的斜杠不会关闭 HTML 的 script 元素,但此处以 self_closing 跳过隐藏,搜索能命中 trackingpixel;<textarea><script>ordinarycontent</script></textarea> 中应显示的普通文字反而被当脚本丢弃,搜索无结果。修复方向:按 HTML 解析语义处理非空元素及 RCDATA/raw-text 状态,覆盖这两种输入与重建后的搜索结果。证据:.work/C12.3-r1/probes.log。

  • crates/ely-mail-engine/src/store/schema.rs:1、crates/ely-mail-engine/src/store/messages.rs:68 — 两条新增注释均为 12 个空白分隔词,超过 agents.md 的注释十词上限。修复方向:将这两条注释各缩至十词以内。