8.2 KiB
统一文档渲染器第四批 Task 9 实施评审 r1
日期:2026-10-15。状态:待人工评审。用户已确认 Task 8 安全派生结果并批准继续 Task 9,同时要求后续实施由 CLI 工作单元完成,主智能体只负责依赖编排、独立 Review、验证与记录。
固定对象:
- Renderer 私有远端:
weichen/Agent-Document-Renderer; - Renderer pin:
732e7e7fc44e4871c7e1f6ba7aff2fc25173a10f; - RDM 依赖准备:
e40d08e5f80e5c8051cdc4b27fe13a8556a9c5ab; - RDM Task 9 初始实现:
d68110c95714c95788363ba56c17fe19ba13dbaf; - RDM Task 9 Review 修复:
019d60d4b003fea060eba04c2455ea7ee1c269f3; - CLI 实施线程:
01a1402a-6cc8-7cc2-8c68-bf35354aae1a; - 独立 CLI Review 线程:
01a14056-f149-7250-b43c-11a85ce28bea。
1. 依赖门禁
Task 9 首次 CLI 启动在写入前发现 Renderer 只有本地历史、没有远端,RDM 无法从干净克隆取得依赖,因此以零改动、零提交停止。主编排器随后:
- 创建私有
weichen/Agent-Document-Renderer仓库; - 将已评审历史发布到远端
main,精确指向732e7e7; - 在 RDM 添加
pins/agent-document-renderergitlink 和agent-document-renderer v0.0.0本地 pin; - 通过 no-local 临时 RDM clone 从远端初始化该子模块,得到相同 SHA 且工作树干净;
- 通过 Renderer 全套测试、RDM
GOWORK=off go test ./...后提交e40d08e。
依赖准备没有修改 Renderer 源码、发布 profile、迁移业务数据或部署服务。
2. Task 9 最终能力
2.1 schema v9 与不可变输入
schema v9 持久化:
- 完整递归 Markdown/canonical source 版本及稳定节点 ID;
- profile snapshot、选择来源、项目/文档绑定及全部资产身份和哈希;
- submission 冻结的正文、职责、来源披露和完整 Renderer
ReviewSnapshot; - durable render job、输入摘要、状态、失败/取消原因和重试身份;
- delivery、所有 blob、manifest、diagnostics、完整 node anchor map;
- source/profile/review/delivery trace events 和 edges;
- schema 指纹和确切唯一约束/索引定义。
提交审阅时冻结完整事实;正式 review/approved export 只读取 submission snapshot,不能用当前内容、调用方规则或调用方身份替换既有审签对象。旧 submission 缺少可信人物、时间、批注或修订事实时 fail-closed,不合成人物或时间。
2.2 内容与来源
- 正常编制的
正文通过显式sectionId → canonical nodeId绑定进入确切模板槽位,不按名称或遍历顺序猜测;缺失、重复或目标不属于 profile 时拒绝。 - Markdown 递归保存全部子节点和稳定 ID;子节点变化形成新 source identity。
- 测试对 canonical JSON、Markdown、preview/review/approved DOCX 回读精确正文,而非只断言文件非空。
- 来源逐项授权:允许披露的引用进入 canonical/Markdown/manifest/trace;受限来源只保留受控标记,私人正文不会进入 DOCX、manifest、diagnostics、anchors 或 trace。
2.3 原子事务、幂等与恢复
- 渲染前持久化 frozen job,再进入 running;失败和取消形成 durable 状态。
- 渲染后、提交前重新核验成员、职责、动作权限、项目 revision、正文、profile/assets、review state 和来源披露。
- delivery、blobs、manifest、anchors、trace events/edges 和 receipt 在一个事务提交;七个故障点逐项验证零残留。
- 幂等摘要覆盖完整 source/profile/assets/binding/review/mode/Renderer identity;同 operationId 同输入返回确切旧回执,任何隐式输入变化都拒绝。
- 取消在渲染前和提交前轮询;失败只允许对同一 frozen snapshot 重试。
- 历史交付直接返回冻结 blob;profile/Renderer 升级和服务重启不会重渲染或覆盖旧字节。
2.4 权限、审签与下载
- validate、submit 和 delivery commit 均在提交时权限/项目 revision 栅栏内重验。
- download/status 重新检查当前项目、文档读取权和当前职责;
audit.read本身不授予正文或制品。 - 审阅/批准人物、显示名、时间、原因、批注、回复和修订来自受项目/文档范围约束的可信账户与审签记录。
- 命令入口拒绝
approvedBy、confirmed、签名等调用方冒充字段。 - profile 未发布时允许受权维护者 validate/preview,但 review/approved 正式交付拒绝;受控文档永不回退公司默认规则。
2.5 资源和可复核清单
- 限制节点数、深度、文本、Markdown/JSON、profile/assets、单 blob、任务数和项目保留字节;在产生大副本前尽量拒绝。
- 命令下载使用有界响应,避免无限 base64 扩张。
- 要求 renderer 返回的 anchors 与所有期望节点完全一致,只允许明确的 renderer-owned 合成锚点。
- manifest 固定 Renderer pin/adapter identity、source/profile/review hashes、所有资产,以及每个交付 blob 的名称、SHA256 和大小。
3. 命令面
新增并注册七个受控命令:
rdm.render.validate;rdm.render.preview;rdm.render.submit;rdm.render.review;rdm.render.approved;rdm.render.status;rdm.render.download。
命令 schema 为闭集;身份、审签和签署事实不从请求参数读取。现有 44 份 profile 继续保持 draft、publicationAllowed=false,因此当前正式 review/approved 命令会按发布门禁拒绝,未绕过 Task 7–8 的人工发布决定。
4. 独立 CLI Review
独立只读 Review 对 e40d08e..d68110c 给出 Ready to merge: No:
- 2 Critical:旧批准可授权新内容/新 profile;正常受控正文被 canonical 转换过滤。
- 9 Important:递归 Markdown 丢子节点、幂等摘要漏隐式输入、失败/取消 job 不持久、人物时间与批注修订为合成/缺失、来源追溯被整体删除、anchor 只检查非空、validate/submit 缺提交时栅栏、v9 接受残缺 schema、内存/数据库增长无界。
- 1 Minor:manifest 缺 Renderer/资产/全部 blob 身份。
CLI 在 019d60d4 完成一次 Review 修复批次。所有 finding 均加入能区分错误实现的 RED 测试并修复;没有 amend 或重写 d68110c。按一次 Review + 一次修复批次流程,没有把作者自检升级为第二次独立 Review。
5. SELF 与隔离 PostgreSQL 验证
CLI 在最终 HEAD 019d60d4 执行:
- Task 9 聚焦功能、迁移、命令、并发、重启、回滚、来源和安全测试:PASS;
GOWORK=off go test -race ./internal/domain/store ./plugins/rdm ./internal/rdmapp -run 'Render|Renderer|Version9' -count=1:PASS;GOWORK=off go vet ./...:PASS;GOWORK=off make test:PASS;GOWORK=off make build:PASS;- 临时 PostgreSQL:schema v8/v9、重启、同/异 operationId 并发、权限栅栏、错误唯一索引定义和残缺 v9 rollback:PASS;临时服务停止、数据库与数据目录删除。
主编排器在同一最终 HEAD 重放:
- focused store/RDM/plugin 测试:PASS;
- Task 9 精确 race:PASS;
go vet ./...:PASS;make test && make build:PASS;- Renderer gitlink 精确为
732e7e7且工作树干净。
全仓 go test -race ./... 另发现既有 slow-lane ledgerUpdate 与 TestUnknownSchemaVersionStopsReplay 中 Reset 的竞争;Task 9 精确 race 范围通过。该既有 race 未在本批扩大修复范围,需单独任务处理,不能把本批 SELF 升级为全仓 race 通过。
以上均为本地 SELF 与独立 CLI Review 记录,不是远端 CI/GATE、合入、部署或用户运行验收。
6. 未执行和下一阶段边界
NOT_RUN:profile 人工发布;公司默认视觉值;桌面 Word/LibreOffice 完整内容和分页验收;真实运行库 schema v9 迁移;现有数据备份/恢复演练;远端 CI/GATE;推送 RDM 分支、PR、合入、部署和发布;Task 10 Backend 路径替换;Task 11 UI。
人工评审重点:
- submission 冻结事实和旧 submission fail-closed 边界;
- 显式正文节点绑定与来源披露裁剪;
- durable failed/cancelled job、幂等摘要和历史下载;
- schema v9 严格指纹、资源配额与迁移门禁;
- 是否接受该 Task 9 本地候选进入后续交付/Task 10 评审。