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 on000a2d2recorded 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 transport000a2d2. Refs: .task/feature-rdm-two-trees-followup.md Co-authored-by: Cursor <cursoragent@cursor.com>
5.0 KiB
5.0 KiB
两棵树后续 A1 增量:阶段 6 评审包
- 任务卡:
.task/feature-rdm-two-trees-followup.md(initiative,manual:每个增量用户阶段 6 人审后才合入) - 对象:Dev
feature/rdm-two-trees-followup,base8cf4619(R046e331a+ 建卡),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 节登记为下一增量。