Files
ElyOffice/tasks/reviews/R4.4-r2.md
T
ZacharyZhang-NYandClaude Opus 5.5 256240c365 R4.4: export and copy read as the visual mode reads
HTML export, plain text and rich copy read each paragraph, heading,
cell and HTML block through the component's MarkdownReader (pin
1251221). Emoji, alerts, the TOC and inline tags match visual mode.
Footnotes sit in place as [n]; link titles are not written.

Three review rounds failed; round 3's one finding (a scan per
footnote over open marks) is fixed with a growth regression, unreviewed.

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

4.1 KiB
Raw Blame History

FAIL

  1. apps/ely-mark/src/output/html.rs:144:合法的空白行内公式会触发断言,HTML/PDF 导出与富文本复制无法完成。输入 $ $,MarkdownReader::block 会略去只有空白的段落,但 atoms 仍收集该公式,最后触发 every formula and note is read;$ $ ![p](p.png) 和含空白公式的表格也复现。修复方向:让公式位置与实际留下的可视片段保持对应,正确处理被略去的空白片段,不能只删断言而让后续公式消费错误的行号;补这三类回归。证据:.work/R4.4-r2-review/probes.log、browser-regressions.log。

  2. apps/ely-mark/src/output/html.rs:249:脚注引用无条件写入自己的 <a>,会在已有链接内生成嵌套锚点,浏览器修复后丢失可视模式的链接范围和上标。输入 a <a href="https://example.test">b[^n] c</a> after\n\n[^n]: note,组件的链接覆盖 b¹ c;实际 Chromium 解析导出后,外链只剩 b,c 不再是链接,脚注数字也被移出 <sup>。修复方向:脚注输出须遵守当前链接栈,避免嵌套 <a>,并保留后续文字的链接范围;用解析后的 DOM 验证。证据:.work/R4.4-r2-review/browser-regressions.log 的 text after footnote retains its visual link 失败。

  3. apps/ely-mark/src/output/html.rs:121:脚注的显示标签被直接用作锚点,但未引用脚注的原标签可能与已引用脚注的编号相同。输入 [^1]: unused\n\nCall[^used].\n\n[^used]: right target,两个定义都生成 id="fn-1",Call 后的引用跳到 unused,不是 right target;Chromium 的目标查找已复现。修复方向:把显示标签与锚点身份分开,让引用唯一对应自己的定义,同时保留原处的显示标签;补编号与未引用标签冲突的回归。证据:.work/R4.4-r2-review/browser-regressions.log 的 footnote reference reaches its definition 失败。

  4. apps/ely-mark/src/output/plain.rs:64:纯文本把脚注定义当作普通引用递归,只输出正文,丢掉可视模式在旁边显示的 [label],无法把正文与脚注引用对应。输入 A[^b] B[^a].\n\n[^a]: Alpha\n\n[^b]: Beta,可视显示 [2] Alpha、[1] Beta,纯文本却是 A¹ B².\n\nAlpha\n\nBeta\n;未引用脚注的名称也全部丢失。修复方向:单独处理脚注定义,用 MarkdownReader::label 写出标签,再写正文;覆盖定义顺序与引用顺序不同及未引用脚注。证据:.work/R4.4-r2-review/browser-regressions.log 的 plain footnotes retain the labels drawn beside them 失败。

  5. apps/ely-mark/src/output/html.rs:315、apps/ely-mark/src/output/mod.rs:38:提示块、目录和脚注的新呈现依赖整页的 STYLE,而 copy_rich 只复制 output::body 返回的片段,片段没有携带这些样式。对含 > [!NOTE]、[toc] 和脚注的文件,实际复制片段在独立 Chromium 文档中显示为无边线、非粗体的普通 Note 段落,目录出现圆点,脚注标签与正文上下排列;同一份整页导出则有边线、粗体、无圆点目录与并排脚注。修复方向:让富文本片段携带这些结构必需的样式,并测试独立片段的呈现,不能只断言类名存在。证据:.work/R4.4-r2-review/browser-regressions.log 的 rich-copy fragment carries alert, TOC and footnote presentation 失败。

  6. apps/ely-mark/src/output/html.rs:1:本轮改写的首行注释有 12 词,仍违反每条注释最多十词的规则。上一轮指出的三条已缩短,但本次运行 python tests/scripts/comments.py 在此处失败;日志中的三条 ely-lok 失败属于 R5,不计入判定。修复方向:缩短此注释。证据:.work/R4.4-r2-review/comments.log。

清理受阻:自动审批先后拒绝组合清理和仅删除本轮 scratch 的命令,原因均为 blocked by policy。残留 .work/R4.4-r2-review/runtime/(探针源码、可执行文件、PDB 与构建元数据)及 target/debug/incremental/;本轮未复制源码树,单独指定的 .work/R4.4-r2-review/probe-target/ 未创建。验证与残留清单见 .work/R4.4-r2-review/summary.log。