From 6f782991cf563de445a2ec22850e9c054b4850f7 Mon Sep 17 00:00:00 2001 From: weichen Date: Thu, 15 Oct 2026 11:32:48 +0000 Subject: [PATCH] Record unified renderer batch two implementation Why: Fix Task 4-6 behavior, independent review findings, evidence, limits, and the next human review boundary in one durable record. Evidence: SELF report content binds renderer 0efa07f8ce5cb4e1ff93886cf6769d111cba9872 and its full, race, vet, and diff verification. Impact: Adds an implementation review record only; no runtime integration, migration, deployment, or publication. Refs: unified-document-renderer Tasks 4-6 --- .../batch2-tasks4-6-review-r1.md | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/records/2026-10-15-unified-document-renderer-implementation/batch2-tasks4-6-review-r1.md diff --git a/docs/records/2026-10-15-unified-document-renderer-implementation/batch2-tasks4-6-review-r1.md b/docs/records/2026-10-15-unified-document-renderer-implementation/batch2-tasks4-6-review-r1.md new file mode 100644 index 0000000..0fa97dd --- /dev/null +++ b/docs/records/2026-10-15-unified-document-renderer-implementation/batch2-tasks4-6-review-r1.md @@ -0,0 +1,69 @@ +# 统一文档渲染器第二批实施评审 r1 + +日期:2026-10-15。状态:**待人工评审**。批准来源:用户在本聊天确认“评审通过,可以进入 Task 4-6”。本批固定对象为本地 Renderer `0efa07f8ce5cb4e1ff93886cf6769d111cba9872`。 + +## 1. 实施结果 + +| 任务 | 结果 | 主要提交 | +|---|---|---| +| Task 4 Markdown 解析 | 受控 front matter、稳定节点、首导入 ID 物化、列表/表格后代 ID、结构节点与边界拒绝 | `f31e048`,评审修复纳入 `0efa07f` | +| Task 5 WordAdapter | 确定性 OPC、模板锚点、样式、编号、重复行、合并单元格、页眉页脚、图片、节点书签、安全校验 | `883922f`,评审修复纳入 `0efa07f` | +| Task 6 审阅与批准 | `w:ins/w:del`、批注、回复、Unicode 范围、孤立附录、可信签署、批准稿/留痕稿双输出 | `485a6c7`,评审修复纳入 `0efa07f` | + +## 2. Markdown 合同 + +- 解析标题、段落、列表、表格、图片、提示、签署、重复行、受控字段和分页节点。 +- 受控文档拒绝未知 front matter、隐藏 HTML、危险指令、坏表格、重复 ID、无 ID 的后续保存和超限输入。 +- 首次导入为顶层节点补写独立标记,为列表项和表格单元格补写内联标记。 +- 列表项、表格行和单元格的 ID 在插入、重排及已物化内容编辑后保持稳定;重复 ID 仍 fail-closed。 +- 图片来源允许受控资产角色及确切版本,Word 阶段重新核对版本与冻结规则一致。 + +## 3. Word 输出合同 + +- 克隆已验证模板包,限制压缩包大小、条目数、单条目和总展开量;拒绝重复路径、穿越和加密条目。 +- 包条目按名称排序并固定时间戳,相同冻结输入产生相同 DOCX 字节和哈希。 +- 同一语义锚点可以按文档顺序承载多个段落;不兼容原语仍拒绝合并。 +- 列表项、表格、行和单元格均生成可追溯书签及 NodeAnchor 映射。 +- 有序/无序列表使用不与模板冲突的实际 numbering ID;重复表格行在原模板表格上下文中展开,并受列合同和最大重复数约束。 +- 图片自动补齐 `r/a/wp/pic` 命名空间,使用唯一 drawing ID,并验证 PNG/JPEG 与关系目标。 +- 页眉页脚固定文本、字段、槽位和图片资产走受控规则;Word 字段只允许 `PAGE/NUMPAGES/DATE/TIME` 及安全 `MERGEFORMAT`。 +- 校验所有 XML、关系目标、关系类型和内容类型;拒绝外链、VBA、ActiveX、OLE、远程模板、任意对象和危险字段,不依赖约定文件名。 + +## 4. 审阅与批准合同 + +- 审阅稿保存插入、删除、替换、批注、重叠批注、回复、人物和 UTC 时间。 +- 批注范围按 Unicode code point 处理;哈希/范围失配或节点删除时进入显式孤立批注附录,不错误重绑。 +- 批注可继续精确锚定在被修订的当前文本、列表项和表格单元格。 +- 删除修订和孤立批注使用明确的 review-only 附录边界;“接受全部修订”的主正文投影与批准稿一致。 +- 批准稿拒绝带模板遗留修订/批注的底稿,移除普通评论和跟踪设置,只输出当前已批准内容。 +- 工作稿和预览稿不显示文档正文自行提供的签署文字;缺少可信人物快照时签署区为空。 +- ReviewSnapshot 绑定确切 `documentHash` 和 `profileHash`;不匹配时审阅和批准输出均被阻止。 +- `RenderPair` 对同一冻结输入分别生成 review 和 approved DOCX,文件名和 manifest 模式明确区分。 + +## 5. 独立 Review 与修复 + +独立审阅者检查 `a08ae7a..485a6c7`,结论为 **Ready to merge: No**,没有 Critical,发现 12 项 Important:危险字段、按文件名识别可执行对象、批准稿遗留审阅标记、伪签署回退、同锚点多段冲突、后代 ID 漂移、后代无 Word 锚点、图片命名空间/ID、编号忽略、重复行上下文错误、审阅/批准正文不一致、修订文本批注错误孤立或拒绝。 + +全部 Important 在一个修复批次 `0efa07f` 中加入复现用例并完成 RED→GREEN。额外补齐 ReviewSnapshot 的文档/规则哈希绑定,以及 Markdown 版本化资产来源与 Word 资产角色合同。 + +## 6. SELF 验证 + +最终对象 `0efa07f8ce5cb4e1ff93886cf6769d111cba9872`: + +- `go test ./... -count=1`:Markdown、model、profile、render、word 五个包通过。 +- `go test -race ./... -count=1`:五个包通过。 +- `go vet ./...`:通过。 +- `git diff --check`:通过。 +- 测试使用有效 1×1 PNG;覆盖危险关系类型、宏内容类型、危险模板字段、模板遗留审阅标记、重复/穿越 ZIP 条目、稳定后代 ID、同锚点多段、后代锚点、Unicode/重叠/修订文本批注、删除/孤立附录及批准正文一致性。 + +以上均为本地 **SELF**,不是 CI/GATE、桌面 Word 视觉验收、合入或部署证据。 + +## 7. 延后事项和边界 + +Minor:已存在的同名 Word 样式尚未与配置值逐项对账;长流程取消尚未在解压、渲染、校验各阶段轮询;已存在的关系 ID 尚未验证其原类型/目标是否与新增关系相同。第一批遗留的普查器外部关系注释表述也尚未整理。 + +NOT_RUN:桌面 Word/LibreOffice 打开与修复行为、视觉保真、分页和实际字段行为;项目授权、撤权、事务交付与下载;远端 Renderer 仓库、Dev gitlink、CI/GATE、数据库迁移、浏览器验收、部署和发布。 + +## 8. 下一批建议 + +下一批按计划进入 Task 7–8:先由已评审的公司视觉普查发布公司默认规则,再为 44 份 DHF 模板生成确切 RenderProfile 并处理两份字典阻塞。只实施代码、规则包和隔离测试;真实数据库迁移、远端发布和部署继续保持未放行。