Files
Agent-System-Dev/docs/superpowers/specs/2026-10-19-rdm-two-trees-followup-a1-review.md
T
weichenandCursor 1c91e6446e Add A1 stage 6 review package for the two-trees follow-up
Why: The two-trees follow-up initiative needs its first increment (W0 catalog
guard, dynamic svc test ports, W3 gap check) packaged for user stage 6 review.
Evidence: Targeted unittest run on 000a2d2 recorded in the task card (SELF);
PR CI on the final HEAD is the GATE.
Impact: Task card and review spec only; implementation landed via agent-exec
transport 000a2d2.
Refs: .task/feature-rdm-two-trees-followup.md

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-19 15:04:25 +00:00

5.0 KiB
Raw Blame History

两棵树后续 A1 增量:阶段 6 评审包

  • 任务卡:.task/feature-rdm-two-trees-followup.md(initiative,manual:每个增量用户阶段 6 人审后才合入)
  • 对象:Dev feature/rdm-two-trees-followup,base 8cf4619(R0 46e331a + 建卡),A1 实施提交 000a2d2
  • 依据:阶段 5 计划 r1 W0 / W3 节;原分支提交 9873a55(W0 守护)、cabac58(端口修复)
  • 证据来源:本文所有通过类结论均为 SELF(作者本地运行与关键字核对),GATE 以 PR HEAD 的 CI 为准

1. A1 交付内容

项 变更 说明
R1 W0 DHF 清单守护 新增 scripts/dhf_catalog_guard.py(100755)与 tests/test_dhf_catalog_guard.py 与 9873a55 内容逐字节一致(git diff 9873a55 HEAD 仅显示脚本 mode 为可执行);守护只校验清单状态,不宣称任何模板 published
R2 svc 测试动态端口 tests/test_svc.py、tests/test_svc_recover.py、tests/test_svc_realcombo.py cabac58 补丁已不能在最新 main 直接应用,worker 按其意图重新实现:每个用例经 available_port() 分配互不重复的端口,替换 18791–18800、9471–9474 等固定端口与 free_fixture_port();被删除的 7 处断言均以同一断言改用分配端口的形式保留,无断言删减

实施:agent-exec cursor worker 第 1 次尝试成功(run b7a8e78a2b6d0d8f6803490c7fa8af2e,attempt 9075eee055af),经 agent-exec apply 快进集成,变更路径与单元 allowed_paths 一致。

定向验证(SELF,被测 HEAD 000a2d2):

python3 -m unittest tests.test_dhf_catalog_guard tests.test_svc tests.test_svc_recover tests.test_svc_realcombo
Ran 67 tests ... OK (skipped=16)

16 个 skip 为需要 SVC_REAL_*_BIN 真实二进制的 realcombo 用例(NOT_RUN),与改动前一致。

2. W3 余项差距核对(RDM origin/main = 5a27d78)

计划目标测试名:TestRecursiveBlock|TestLegacyDocMigration|TestTemplateBinding。

计划验证点 main 现状 依据(关键字级 SELF,需在后续增量精确复核)
递归块、稳定 ID、深于五级 已覆盖 internal/domain/document_blocks_test.go:TestRecursiveBlockInstanceHasIndependentIdentityAndReplays(depth ≥ 6)、TestRecursiveBlockReplayRejectsForgedOrFutureNodes(伪造/未知未来节点拒绝)
模板绑定 已覆盖 internal/rdmapp/read_isolation_boundary_test.go:TestTemplateBindingCannotAliasPublishedProjectOrRetainedTransaction
合并单元格 结构层已覆盖 document_blocks_test.go 断言 ColSpan == 2;template_asset_test.go 拒绝非法 RowSpan
旧 Section.ID 维持为章节身份 已覆盖 TestLegacySectionBecomesDeterministicRecursiveReadWithoutWrites、internal/rdmapp/document_blocks_test.go TestLegacyDocSectionNodeIDsSurviveStoreRestart
旧数据库备份副本迁移两次同值(TestLegacyDocMigration) 缺失 无该测试名,未检到双次迁移同值用例
图形不透明块 缺失 测试中未检到 figure/opaque 块
移动/改名保持引用 缺失 测试中未检到 move/rename 用例
已批准版与旧下载仍可回取 缺失 未检到对应用例
重复组/重复表格 部分 关键字出现在上述两个测试文件,是否覆盖“重复表格”语义待精确复核
完成条件:真实项目实例表达新项目建议书及用户需求 12 组要求 未验证 依赖 W11 DHF 资产 published 状态,当前只能验证实例机制

结论:W3 主体(递归实例、模板绑定、旧 Section 身份)已在 RDM main;余项集中在旧数据迁移幂等、图形块、移动/改名引用与旧批准版回取。建议作为子任务“W3 余项”在 RDM 仓单独登记实施。

3. 剩余项与门禁

剩余项 门禁
W3 余项(上表缺失 4 项 + 1 项待复核) 下一增量,RDM 仓 worker 实施
B:W5 追溯网、W7 上下文提供方 依赖 W3/W4 稳定
C:W8 RDM 审计投影、W10 正式前端 W8 接入宿主需 W9;W10 需 W3–W9 合同稳定
D:W11 DHF 全量保真、W12 真实模型全组合验收、W13 收口 需资源方案与付费/真实模型授权
X3/R3/F3/V3 产品链 X3 需 Backend 公开扩展发版,属双钥匙操作,由用户执行

4. Review 发现(非阻塞)

  • tests/test_svc_realcombo.py 新增的 SVC_RCFWEB_ADDR 环境变量不被 svc.sh 读取(伴生 rcfweb 由 deploy --kind static 自行取端口),属无效但无害配置,仅位于默认 NOT_RUN 的真实 RDM 用例;可在后续增量顺带删除。
  • available_port() 绑定后即关闭 socket,与 svc.sh 实际绑定之间存在小窗口竞争(docstring 已说明);相较固定端口已消除并行 worktree 间的确定性冲突。

5. 请用户阶段 6 判定

  • 通过:A1 进入 PR CI(GATE)与合入窗口,按 #518 排队合入。
  • 修改:指出需调整项,按新单元重新实施。
  • W3 余项是否按第 2 节登记为下一增量。