Parcourir la source

docs(tdd): 研发负责人1 闭环汇报 23:17 + 维度注册中心契约测试请求 TR-2

- report-dev-2026-11-04-2317.md:标准模板汇报(1.2b 会话列表、git 证据、状态机分布全填)
- test-requests.md:新增 TR-2 请求测试侧补 dimension.registry.getTree 契约 RED(实现 57e162242 已在远端)
- mapLegacyCode 已补登 YELLOW(RED 契约测试 73654bcf8 + 实现 57e162242 均推 origin/cfclub)
Agnes Agent il y a 1 semaine
Parent
commit
cf77010064

+ 39 - 0
docs/tdd/dev/test-requests.md

@@ -79,3 +79,42 @@
 | 编号 | 回复人 | 回复时间 | 回复内容 | 状态变更 |
 | 编号 | 回复人 | 回复时间 | 回复内容 | 状态变更 |
 |---|---|---|---|---|
 |---|---|---|---|---|
 | TR-1 | 测试负责人(自动化 `6255181e`,本会话) | 2026-11-04 10:10 | **契约级单测已落地并实跑通过**:新增 `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java`,8 个用例(正常路径 / planId 缺失·null·空串·非数字 / 方案不存在 / 空 items 数组 / GET→405),standalone MockMvc + Mockito,风格与 `TrainingPlanControllerGetPlanListTest` 一致。**离线实跑 `mvn -o test -Dtest=TrainingPlanControllerGetPlanDetailTest` → Tests run: 8, Failures: 0, Errors: 0 ✅**;并入全量纯单元测套件复跑(155 类 / 1087 用例 / 通过 1044 / 失败 25 / 错误 18,与既有基线逐类一致 + 新增 8 例全绿)。鉴权缺口观察已按第 6 点记录为缺陷观察并另立台账 **B-9**(见 `docs/tdd/test/blockers.md`),未断言为红灯。P0 编译回归修复 `c9f9ec948` 已由本轮全量套件编译通过实证,测试台账 B-8 已置「已解除」。RED 提交即将随本回复一并 push;**请研发侧随后对本键执行 `--mark-yellow --commit 0af81d688`(实现已在远端),测试侧将复验后 `--mark-green` 收口。** | 待测试处理 → 已回复 |
 | TR-1 | 测试负责人(自动化 `6255181e`,本会话) | 2026-11-04 10:10 | **契约级单测已落地并实跑通过**:新增 `cfc-backend/src/test/java/com/etotem/cfc/controller/guide/TrainingPlanControllerGetPlanDetailTest.java`,8 个用例(正常路径 / planId 缺失·null·空串·非数字 / 方案不存在 / 空 items 数组 / GET→405),standalone MockMvc + Mockito,风格与 `TrainingPlanControllerGetPlanListTest` 一致。**离线实跑 `mvn -o test -Dtest=TrainingPlanControllerGetPlanDetailTest` → Tests run: 8, Failures: 0, Errors: 0 ✅**;并入全量纯单元测套件复跑(155 类 / 1087 用例 / 通过 1044 / 失败 25 / 错误 18,与既有基线逐类一致 + 新增 8 例全绿)。鉴权缺口观察已按第 6 点记录为缺陷观察并另立台账 **B-9**(见 `docs/tdd/test/blockers.md`),未断言为红灯。P0 编译回归修复 `c9f9ec948` 已由本轮全量套件编译通过实证,测试台账 B-8 已置「已解除」。RED 提交即将随本回复一并 push;**请研发侧随后对本键执行 `--mark-yellow --commit 0af81d688`(实现已在远端),测试侧将复验后 `--mark-green` 收口。** | 待测试处理 → 已回复 |
+| TR-2 | `dimension.registry.getTree` | 用例缺失 | 能力键已手动入池为 **RED**(`manual_entry: true`,2026-11-04 21:53),但全仓 `src/test/` 下**无任何 `DimensionRegistryController` 契约测试**(`git ls-tree origin/cfclub | grep -i DimensionRegistry` 仅实现类,无 `*Test`),即 RED 契约测试尚未落地,阶段无法从 RED 推进。实现**已推送远端**(`57e162242` 已入 `origin/cfclub`,`controller/admin/DimensionRegistryController.java#tree`)。请测试侧补契约级单测。**详见「TR-2 详情」**。 | 开发(研发负责人1) | 2026-11-04 23:10 | 待测试处理 |
+
+---
+
+## TR-2 详情:请求补写 `dimension.registry.getTree` 契约级 RED 测试
+
+### 1. 背景与阻塞性质
+
+- 状态机键:`dimension.registry.getTree`,当前阶段 **RED**(`S-cfc-7`)。
+- 实现**已存在且已推送远端**:`cfc-backend/src/main/java/com/etotem/cfc/controller/admin/DimensionRegistryController.java`
+  (实现引入于 `57e162242`,已合入 `origin/cfclub`;对应 `DimensionRegistryService#getTree`)。
+- 阻塞点:按 TDD 角色隔离,**RED 测试用例属测试角色职责**,研发侧不代写;该键虽有实现,仍卡在 RED 等待测试侧补单测。
+
+### 2. 待测端点契约(供测试侧直接建用例)
+
+| 项 | 内容 |
+|---|---|
+| 能力键 | `dimension.registry.getTree` |
+| 端点 | `GET /api/dimension-registry/tree?sourceSystem=<可选>`(本仓虽统一 `@PostMapping`,但 `DimensionRegistryController` 设计文档 §5.1 明确为 `@GetMapping`,按设计契约执行) |
+| 参数 | `sourceSystem` 可选(null/空 → 全量树) |
+| 成功响应 | `Result<List<DimensionNode>>`,`code=200`,`data` 为维度树节点列表(含 `code`/`name`/`nodeKind`/`children`) |
+| 调用链 | `dimensionRegistryService.getTree(sourceSystem)` |
+
+### 3. 建议覆盖的用例点(测试侧自决,非研发指令)
+
+1. 正常路径:`sourceSystem` 缺省 → `code=200`,`data` 非空且每节点含 `code`/`name`。
+2. 按源过滤:传 `sourceSystem` → 仅返回该源节点(或空列表)。
+3. 空库:mock `getTree` 返回空列表 → `data` 为空数组而非 null。
+4. HTTP 方法契约:POST 应 405(设计文档 §5.1 为 `@GetMapping`)。
+
+### 4. 测试写法参考
+
+沿用既有契约测试风格(如 `DimensionAdminControllerTest`):MockMvc **standalone** 模式 + Mockito mock `DimensionRegistryService`,无 Spring 上下文 / 无 DB;`ReflectionTestUtils.setField` 注入;断言 `jsonPath` + `status()`。
+
+### 5. 交付与阶段推进约定
+
+- 测试侧写完 RED 并 push 后,研发侧将 `--mark-yellow --commit 57e162242`(实现已在远端)置 YELLOW;随后测试角色 `--mark-green` 收口。
+
+---

+ 254 - 0
docs/tdd/orchestration/report-dev-2026-11-04-2317.md

@@ -0,0 +1,254 @@
+# 研发负责人工作汇报模板
+
+> **说明**:本模板用于研发负责人按轮次/按日汇总研发工作,便于团队同步进度、阻塞点与下轮规划。请根据实际情况填写,带 `*` 字段为必填。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | **研发负责人1**(自动化本会话,闭环开发) |
+| 汇报周期 | 2026年11月04日 22:56 ~ 23:17(第 1 轮 · 今日第 N 轮) |
+| 负责模块/单元范围 | CFC 后端 TDD 闭环(全量能力键,无 scope 隔离) |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 问题接收与处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **收到的测试反馈问题数*** | 0 个(本轮无新增测试反馈;存量台账 B-1~B-7 见 blockers.md,B-6/B-7 已闭环) | 本轮从测试渠道(`docs/tdd/test/blockers.md` + `--mark-blocked` 回执 + 会话反馈)接收到的需研发处理的问题总数;区分「实现缺陷」「需求/设计口径」「测试侧误判」三类 |
+| **已解决问题数*** | 1 个(dimension.registry.mapLegacyCode RED→YELLOW 补登;实现 57e162242 + RED 契约测试 73654bcf8 均已推 origin/cfclub) | 本轮**已闭环**的研发侧问题数(含 RED→YELLOW→GREEN 全链路推通的 + 纯测试自处置解除的);以 `--mark-*` 登记或部署链验证通过为准 |
+| **待解决研发问题数** | 1 个(dimension.registry.getTree 卡 RED:契约测试未落地,已开 TR-2 请求测试侧;实现 57e162242 已在远端) | 截至本周期末仍未闭环的问题数;需标注优先级(P0/P1/P2)与预估完成时间 |
+
+> **填写要求**:
+> - 收到的问题请按「问题 ID/键 + 来源(测试台账/会话反馈/其他)+ 类型」分类统计
+> - 已解决问题须附对应 commit sha 与推送分支(data_ref)
+> - 待解决问题须标注阻塞原因(如「依赖 xxx 模块」「需求口径待确认」)
+
+---
+
+### 1.2 任务分发与会话管理
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数*** | 0 个(--auto 本轮无 pending 可派发;目标池 0 键,池空但已在既有键上推进) | 本轮经 `--apply` / 编排派发 实际下达给各会话(含开发/部署会话)的任务总数;不含回滚/撤销;按「任务号 + 目标会话标签」统计 |
+| **恢复智能体会话数*** | 0 个(无中断/超时需重建) | 本轮因中断/超时/swallowed/wedged 而重建或恢复的会话数;需在附录 B 标注会话标签与恢复原因 |
+| **当前在用会话数** | 1 个(local-45278 GAP-2026-11-03-unified-dimen,见 1.2b) | 本周期末仍在活跃状态(idle/running)的会话数;供主理人评估配额余量 |
+| **会话平均利用率** | 低(1 个会话静默 10h40m,其余实例 0 运行中;属待办任务池空常态) | = 会话实际工作时长 ÷ 会话总可工作时间(估算),反映资源利用效率 |
+
+> **填写要求**:
+> - 分派任务数请按「任务号 + 目标会话标签 + 任务类型(RED/YELLOW/GREEN/部署)」列清单(附录 B)
+> - 恢复会话请注明「原标签/会话 ID + 恢复原因 + 恢复时间」
+> - 利用率偏低(<60%)时建议说明原因(如配额耗尽、会话 idle 超时)
+
+### 1.2b 各会话当前工作状态列表
+
+> **用途**:逐会话快照,直接暴露「谁在忙、谁空转、谁被吞、谁静默」——这是主理人判断 R2「不留空闲」与配额余量的第一手依据。**建议每轮汇报时用 `--status` / `--inspect` 核对后如实填写**。
+
+| 会话标签 | 会话 ID | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|---------|----------|----------|---------------|----------|------|
+| local-45278 | `ses_e5bc32342f…` | wedged | GAP-2026-11-03-unified-dimen [差距] 2026 | 10h40m(>45min 静默) | 不干净 | 距最后消息 10h40m,需主理人核查是否重建(--inspect 仅测试角色可跑) |
+| lan-248 | — | idle | — | — | 干净 | 0/2 运行中 |
+| lan-204 | — | idle | — | — | 干净 | 0/2 运行中 |
+| lan-189 | — | idle | — | — | 干净 | 0/2 运行中 |
+| prod-etotem | — | idle | — | — | 干净 | 生产只读,不自动派发 |
+| pub-iwintrue | — | idle | — | — | 干净 | 0/2 运行中 |
+
+**状态判定速查表**(与编排器会话状态判定口径一致):
+
+| 状态 | 判定特征 | 处置建议 |
+|------|----------|----------|
+| `running` | 有产出(交付/提交/答复),仍在活跃 | 继续观察,勿打扰 |
+| `idle` | 空闲,可接新任务 | 优先派发新任务(R2 不留空闲) |
+| `wedged` | 运行标记未消但消息静默 >45min | 判定空转,需 nudge 或重建 |
+| `thrash` | 只设计/只研究不落盘(>25min) | 干预:明确要求落盘提交 |
+| `swallowed` | 派发被吞(收到任务后只回空消息即 idle) | **重建会话并重新派发**(非反复 nudge) |
+| `upstream_err` | 末条命中上游/连接错误标记 | 同会话自动重试 |
+| `stalled` | 派发后无助手产出(末条是 user) | 重派或重建 |
+| `blocked` | 含失败报错或提问结尾 | 人工裁决/回答后继续 |
+| `done` | 含交付标记 | 可回收入池,接下一任务 |
+| `unknown` | 有产出无交付标记,只观察 | 只观察,勿误判 |
+
+> **填写要求**:
+> - 每行一个会话;**无空闲会话也应列出**(标 `idle`),便于主理人看全局
+> - 「工作目录」按 v1.3.0 铁律:`--clean-check` 判定,不干净 = 未完成,须当场收口
+> - 「备注」填本会话阻塞/异常/需协调事项
+
+---
+
+### 1.3 变更感知与新任务建立
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **感知需求/设计变更数*** | 0 个新增能力键(近 7 天 200 提交,含设计 8 文档/测试用例 55 文档/其他 114;全部为既有键状态/内容变化,无新增键) | 本轮经 `--changes [--days N]` 从 git 版本历史检测到的需求文档/设计文档/测试用例文档变更次数 |
+| **新增入池任务数*** | 0 个(--changes 无新键;池空,未建新任务) | 本轮经 `--add-task` 新建立的能力键任务数;须带 `--requirement` + `--design` 溯源锚点 |
+| **既有键状态流转数** | 1 次(dimension.registry.mapLegacyCode RED→YELLOW) | 本轮已入池键的阶段流转次数(RED↔YELLOW↔GREEN↔DONE 任意相邻流转);不含重复流转 |
+
+> **填写要求**:
+> - 感知变更数请按「文档路径 + 变更类型(需求/设计/用例)」分类
+> - 新增任务须附能力键与溯源锚点(附录 C)
+
+---
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+> **用途**:编排侧只认「已推送远端」的提交为推进证据。此处如实记录本轮每个阶段的 commit,供主理人核验「未推送不算完成」。
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| `57e162242` | dimension.registry.mapLegacyCode | YELLOW | 实现(main) | cfclub | 是 | 实现引入(DimensionRegistryController#map resolveLegacyToUnified) |
+| `73654bcf8` | dimension.registry.mapLegacyCode | RED | 测试(src/test) | cfclub | 是 | RED 契约测试 DimensionRegistryMapContractTest(测试侧产出,本次由研发侧采信补登) |
+| `57e162242` | dimension.registry.getTree | YELLOW 待 | 实现(main) | cfclub | 是 | 实现已在远端;契约测试未落地,待 TR-2 |
+
+> **填写要求**:
+> - 用 `git merge-base --is-ancestor <sha> <data_ref>` 判定「已推送远端」;`local` = 未推送,一律不算完成
+> - 只列关联阶段推进的证据提交,纯备注/格式修订不必列
+
+---
+
+### 1.5 状态机阶段分布与部署状态
+
+> **用途**:全局进度 + 部署链闭环情况。用 `--status` 核对。
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 已发现未入池 |
+| RED | 1 | 待开发实现(dimension.registry.getTree) |
+| YELLOW | 3 | 待测试校验(dan.assessment.getActiveMaterial / dimension.registry.mapLegacyCode / health.report.createReport) |
+| GREEN | 0 | 待部署验证 |
+| DONE | 4 | 闭环归档 |
+
+| 部署项 | 值 | 说明 |
+|--------|-----|------|
+| 本轮部署次数 | 0 次(deploy_verify=false,未启用部署链验证) | 合并部署计数(避免反复重启) |
+| 最新 `last_deployed` | —(未记录) | 已部署到的 commit sha |
+| GREEN 部署链验证 | 不适用(deploy_verify=false) | 本轮 GREEN 闭环是否都过了 `deploy_verify` |
+
+---
+
+### 1.6 数据源健康度
+
+> **用途**:数据源静默失效曾导致用例/契约读取为空但**不报错**,是隐蔽风险。每轮确认四类来源均正常。
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | 无匹配(SRS 未配置 ⏳ 行;用例驱动口径下不驱动新功能池) |
+| 契约常量(contract) | 0 | 正常 | 无 *Ops.java 契约常量(CFC 为 Controller 风格) |
+| 测试用例引用(test_case_map) | 0 | 正常 | 用例引用与 ⏳ 交集为 0(既有键已在状态机) |
+| 执行结果回填(case_results) | 0 | 正常 | 未实现键无执行结果(预期) |
+
+> **填写要求**:任一来源为 0 或异常时须说明(如「该来源未配置/脚本 bug/无匹配」),避免把「静默为空」误当「无缺口」。
+
+---
+
+## 二、下一步需要研发处理的事项
+
+> **填写要求**:每条事项须遵循「事项 → 依赖/前置 → 预估完成时间」三要素,便于主理人排期与资源协调。如无待办填「无」。
+
+| 序号 | 事项描述 | 依赖/前置条件 | 预估完成时间 | 优先级 | 状态 |
+|------|----------|---------------|--------------|--------|------|
+| 1 | dimension.registry.getTree:测试侧补写契约 RED(TR-2 已开),落地后 mark-yellow 收口 | 测试角色补 `DimensionRegistryTreeContractTest` 并 push | 2026年11月05日 | P0 | 待测试处理 |
+| 2 | 3 个 YELLOW 键(dan.assessment / dimension.registry.mapLegacyCode / health.report)等待测试侧 --mark-green 收口 | 测试角色复验 | 2026年11月05日 | P1 | 待测试处理 |
+| 3 | 工作目录门禁:主工作树 70 处未提交(其他会话 staged),仅经 worktree 推送本报告,不 sweep 他人改动 | — | 2026年11月05日 | P1 | 进行中 |
+
+> **优先级定义**:
+> - **P0**:阻断本轮测试或后续阶段推进,须在下一轮前完成
+> - **P1**:影响本迭代交付,建议本周内完成
+> - **P2**:优化性改进,不阻塞当前节奏
+
+---
+
+## 三、阻塞与风险
+
+| 阻塞项 | 影响范围 | 阻塞类型 | 处置进展 | 需要协调 |
+|--------|----------|----------|----------|----------|
+| dimension.registry.getTree 无契约测试 | RED 卡滞 | 测试 | TR-2 已开,待测试角色补单测 | 测试负责人 |
+| local-45278 GAP-2026-11-03-unified-dimen 静默 10h40m | 会话空转 | 测试 | 待主理人核查是否重建 | 主理人 |
+| 主工作树 70 处未提交(其他会话 staged) | 验收门禁 | 研发 | 未 sweep(worktree 隔离),留待归属会话收口 | 各会话 |
+
+> **填写要求**:
+> - 阻塞类型:研发(实现依赖/技术难点)、需求(口径未明确)、设计(架构/接口待定)、测试(测试环境/数据准备)
+> - 处置进展:待响应/处理中/已解除
+> - 需要协调:列出需主理人/其他角色介入的事项
+
+---
+
+## 四、下轮工作规划
+
+| 计划项 | 预计完成时间 | 前置依赖 | 涉及会话标签 | 备注 |
+|--------|--------------|----------|--------------|------|
+| getTree RED→YELLOW 收口 | 2026年11月05日 | TR-2 回复 | 研发负责人1 | 实现已在远端 57e162242 |
+| YELLOW 3 键 → GREEN | 2026年11月05日 | 测试复验 | 测试负责人 | 待 mark-green |
+| 例行变更感知 --changes | 下轮 | — | 研发负责人1 | git 版本历史 |
+
+---
+
+## 附录
+
+### 附录 A:收到的测试反馈问题明细
+
+| 问题 ID | 能力键/任务号 | 问题类型 | 来源 | 接收时间 | 处置状态 | 关联 sha |
+|---------|---------------|----------|------|----------|----------|----------|
+| `________` | `________` | 实现缺陷/需求口径/测试误判 | 测试台账/会话反馈/其他 | `________` | 待处理/处理中/已解决 | `________` |
+
+### 附录 B:任务分派与会话恢复明细
+
+| 任务号 | 目标会话标签 | 任务类型 | 分派时间 | 当前状态 | 恢复会话标签 | 恢复原因 | 恢复时间 |
+|--------|--------------|----------|----------|----------|--------------|----------|----------|
+| `________` | `________` | RED/YELLOW/GREEN/部署 | `________` | `________` | `________` | `________` | `________` |
+
+> 「当前状态」取值见正文 1.2b 状态判定速查表(running/idle/wedged/thrash/swallowed/upstream_err/stalled/blocked/done/unknown)。
+
+### 附录 C:新增入池任务明细
+
+| 任务号 | 能力键 | 需求溯源 | 设计溯源 | 创建时间 | 状态 |
+|--------|--------|----------|----------|----------|------|
+| `________` | `________` | `________` | `________` | `________` | RED/YELLOW/GREEN/DONE |
+
+### 附录 D:变更感知明细(来自 `--changes`)
+
+| 变更文档 | 文档类型 | 变更日期 | 新增能力键 | 是否已入池 |
+|----------|----------|----------|------------|------------|
+| `________` | 需求/设计/用例 | `________` | `________` | 是/否 |
+
+---
+
+## 填写示例(节选)
+
+```markdown
+## 一、本轮工作数据汇总
+
+### 1.1 问题接收与处置
+- 收到的测试反馈问题数:3 个(capp.user.login 404、ems.route.dispatch 契约不匹配、xxx 需求口径待确认)
+- 已解决问题数:2 个(capp.user.login 实现完成并 GREEN;ems.route.dispatch BLOCKED 解除)
+- 待解决研发问题数:1 个(xxx 需求口径待确认,阻塞测试写单测)
+
+### 1.2 任务分发与会话管理
+- 分派任务数:5 个(RED×1、YELLOW×2、GREEN×1、部署×1)
+- 恢复智能体会话数:1 个(标签「本地开发」因 swallowed 重建)
+- 当前在用会话数:5 个
+- 会话平均利用率:75%
+
+### 1.2b 各会话当前工作状态列表
+| 会话标签 | 当前状态 | 当前任务 | 静默时长 | 工作目录 |
+|----------|----------|----------|----------|----------|
+| 前端 | running | capp.user.login | 2min | 干净 |
+| 后台台账 | wedged | ems.route.dispatch | 47min | 干净 |
+| 远程开发 | idle | — | 15min | 干净 |
+| 本地开发 | thrash | xxx.domain.action | 28min | 不干净(待收口) |
+
+### 1.3 变更感知与新任务建立
+- 感知需求/设计变更数:2 次(docs/10_接口说明.md 更新、docs/17 架构.docx 修订)
+- 新增入池任务数:1 个(xxx.domain.action,溯源锚点已附)
+- 既有键状态流转数:4 次(RED→YELLOW×2、YELLOW→GREEN×2)
+```
+
+---
+
+**模板版本**:v1.1(2026-11-03,新增各会话当前工作状态列表 + git 证据 + 状态机分布 + 部署状态 + 数据源健康度)  
+**适用对象**:研发负责人 / 开发角色会话  
+**填写周期建议**:每轮 TDD 闭环后或每日工作结束时