Files
Agent-System-Dev/docs/superpowers/specs/2026-10-19-rdm-two-trees-followup-w3-review.md
T
weichenandCursor 2a5c743220 Record W3 remainder stage 6 approval and RDM merge
Why: The user approved the W3 remainder at stage 6 on 2026-10-20 and authorized merging RDM #451 into RDM main.
Evidence: RDM #451 merged at 76b4c05 after head f3fa0c0 status success; merged tree 4cfacf16 matches the pre-merge merge-tree.
Impact: Task cards and review package only; W4 write entry points must first add node placement checks.
Refs: Agent-System-RDM#451, Agent-System-Dev#641
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 03:13:23 +00:00

6.0 KiB
Raw Blame History

两棵树后续 W3 余项:阶段 6 评审包

  • 状态:用户阶段 6 通过(2026-10-20)。确认第 3 节切分:W4 开放结构写入口前必须先补节点种类放置检查。RDM PR #451 经用户授权已合入 RDM main(76b4c05);本子任务 PR 合入 initiative 分支。
  • 日期:2026-10-19;作者:host;子任务分支:Dev feature/rdm-two-trees-followup-w3-rest(父 feature/rdm-two-trees-followup)、RDM feature/rdm-two-trees-followup-w3-rest(base RDM main 5a27d78)。
  • 依据:阶段 5 计划 W3(已批准);A1 评审包第 2 节差距核对。

1. 本增量交付

差距项(A1 第 2 节) 交付 RDM 提交 目标测试
图形不透明块 ContentBlock.Kind 新增 figure:不透明叶子,禁子块/重复/跨格,必须引用带 SHA-256 的附件或 Word 槽位;实例化、重放、NodesOf 逐字节保持 013b8b1 TestRecursiveBlockFigure*
重复表格(待复核) 补精确用例:重复行与 v2 重复章节通过校验、实例节点 ID 各异、保留 Repeat 与 RowSpan/ColSpan、可重放;非法位置拒绝 013b8b1 TestRecursiveBlockRepeat*
移动/改名保持引用 领域原语 MoveNode/RenameNode,新事件 doc.node.move/doc.node.rename:节点 ID、模板块、内容不变;兄弟序连续重排;文档结构修订 +1,乐观并发;拒绝环、陈旧修订、旧章节节点、空标题、只读日志;live 与 replay 共用同一算法;前缀重放可取回更早结构 96d53f6 TestRecursiveBlockMove*、TestRecursiveBlockRename*、TestRecursiveBlockMoveRenameNodeRefsSurviveStoreRestart
旧库备份迁移两次同值;已批准版与旧下载可回取 新增 TestLegacyDocMigration*:旧形态库(文档/章节/版本/批准)复制为备份副本后两次独立打开与重放,事件行、序号、迁移版本与 NodesOf 一致,第二次不写入;未知未来事件类型在启动时写前拒绝;迁移后已批准版与审批提交下载字节/哈希不变(只增测试,未改生产代码) f3fa0c0 TestLegacyDocMigration*
Dev:删除无效 SVC_RCFWEB_ADDR tests/test_svc_realcombo.py 删除 svc.sh 从不读取的 SVC_RCFWEB_ADDR Dev 80ac3fa py_compile

2. 验证

  • host 本地验证(SELF)@RDM f3fa0c0:gofmt、go vet ./internal/domain/... ./internal/rdmapp、git diff --check 通过;目标选择器 GOWORK=off go test ./internal/domain ./internal/rdmapp -run 'TestRecursiveBlock|TestLegacyDocMigration|TestTemplateBinding' -count=1 20 项 PASS;./internal/domain/... ./internal/rdmapp 全量 PASS。
  • CI(GATE):RDM 草稿 PR #451 与本子任务 PR 当前 HEAD 检查(见 PR)。
  • 独立 Review(全新会话 code-reviewer,只接收需求、base/head 与 diff;评审者自跑为 SELF):5a27d78..f3fa0c0 PASS-with-fixes,无阻塞项。确认:克隆与摘除无共享切片、校验全过才写入;live 与 replay 共用算法;伪造节点 ID/旧章节/未知 op 被拒;validateDocNodes 对既有调用方等价;无新增写入口;测试断言非空。非阻塞项(建议 W4 开放写入口前修):
    1. 移动不检查节点种类放置关系(row 可移出 table、cell 可移出 row),rendererNodeKind 会照常渲染为表格行;应在 movedDocNodes 加放置检查并把相应测试改为预期拒绝——列为 W4 写入口的前置条件。
    2. TestLegacyDocMigration 在 WAL 模式下计算哈希可能漏掉 -wal 中的写入。
    3. Postgres 用例的“第二次不写库”写入次数硬编码为 0。
    4. figure 在渲染时退化为空段落(超出本增量需求,导出前须映射或显式报错)。 另:移动/改名事件 Target 与载荷 DocID 未做一致性校验;重放查找不过滤已删除文档(当前无删除路径)。

3. 风险与需人审确认

  1. 与 W4 的边界:移动/改名只提供领域原语,没有 HTTP 路由、插件命令或 rdmapp 写入口;按阶段 5 计划,结构变更须经 W4 结构提案与人工确认后才能调用。W4 开放写入口前须先补节点种类放置检查(独立 Review 非阻塞项 1)。请确认这一切分。
  2. 合入冲突:internal/domain/template_asset.go(figure 校验)同时被在途的 project-access-lifecycle 任务修改;本增量只新增一个 case 和一个函数,后合入的一方需要按最新 main 解决冲突。
  3. 事件契约新增:两种新事件对旧二进制属于未知未来事件,旧版本读到时会拒绝启动写入(符合计划的“未知未来事件拒绝”);部署顺序须先升级再产生新事件。
  4. 完成条件中的业务项:“真实项目实例表达新项目建议书及用户需求 12 组要求”依赖 W11 DHF 资产 published,本增量只验证实例机制,不宣称正式标准模板可用。

4. 执行记录

单元 CLI/候选 终态 收据(源码外)
w3-rest-u1-figure-opaque-repeat-table Cursor attempt 1 success /tmp/leftover-20261019b/w3-u1-receipt.json
w3-rest-u2-node-move-rename-refs Cursor attempt 1 success /tmp/leftover-20261019b/w3-u2-receipt.json
w3-rest-u3-legacy-migration-approved-retrieval Cursor run 1 failed-unknown(host 在其运行期间集成 u1,HEAD 变化);用户授权全新 run 2 run 2 blocked(隔离区缺 pins/ 无法编译 rdmapp);修正单元包后经用户授权 run 3 success /tmp/leftover-20261019b/w3-u3-receipt*.json
w3-rest-dev-drop-svc-rcfweb-addr Cursor run 1 invalid-config(单元包未就绪)、run 2 failed-unknown(Cursor 连接反复失败);用户授权全新 run 3 success /tmp/leftover-20261019b/w3-dev-receipt*.json