فهرست منبع

docs(tdd): 测试负责人 19:19 轮(契约复验 79 例 74 绿/3 红/2 错·B-21 确认复发(SC-P-11 17→15/17,根因 f14e46f84)·O-1 终局判定:1767d4414/c3e32460a 非 origin/cfclub 祖先链(rev-list 命中 0),建议重登记 6c906c79e/d8687f7c8·B-10 连续第 8 轮无复发)

E2E Test Bot 1 هفته پیش
والد
کامیت
1b7a267f67
1فایلهای تغییر یافته به همراه80 افزوده شده و 0 حذف شده
  1. 80 0
      docs/tdd/test/automation-run-2026-11-05-1919.md

+ 80 - 0
docs/tdd/test/automation-run-2026-11-05-1919.md

@@ -0,0 +1,80 @@
+# 测试负责人巡检报告(2026-11-05 19:19 轮)
+
+> 角色:测试负责人(cfc-tester)| 触发:自动化定时任务 | 工作区:d:/cfc(主分支 cfclub)
+> 数据来源:离线契约测试实跑(8 类 79 例同口径)+ discover_tests.py / test_inventory.py 重扫 + git 真理证据终局核验 + 研发侧 19:21 汇报交叉对照
+> 前置:`git fetch origin`(本地 HEAD 9daeaa660,origin/cfclub 3c400f465,落后 12 提交,领先 0)
+
+## 一、本轮核心证据
+
+### 1.1 契约测试实跑(本轮亲自执行,8 类 79 例同口径复验)
+| 测试类 | 用例数 | 结果 | 结论 |
+|---|---|---|---|
+| HealthReportControllerCreateReportTest | 5 | 5/5 | ✅ 全绿(createReport YELLOW 键复验) |
+| DanAssessmentControllerGetActiveMaterialTest | 3 | 3/3 | ✅ 全绿(getActiveMaterial YELLOW 键复验) |
+| TrainingPlanControllerGetPlanDetailTest | 8 | 8/8 | ✅ 全绿 |
+| TaskControllerCreateTaskTest | 7 | 7/7 | ✅ 全绿 |
+| TaskControllerReviewTest | 17 | **15/17(2 错误)** | ⚠️ B-21 确认复发(非 16:59 的 17/17) |
+| TaskServiceReviewTest | 15 | 15/15 | ✅ 全绿 |
+| DimensionRegistryTreeTest | 9 | 9/9 | ✅ 全绿 |
+| DimensionRegistryMapContractTest | 7 | **4/7(3 红)** | ⚠️ P-2 口径未决(历史同口径) |
+| unit/CfBalanceControllerTest | 8 | 8/8 | ✅ 全绿(B-10 无复发) |
+| **合计** | **79** | **74 绿 / 3 红 / 2 错** | 较 16:59(76 绿/3 红)**绿降 2** |
+
+- **3 红明细(全为 P-2 map 口径未决,与 10:45/13:58/16:59 轮完全一致,非新回归)**:
+  - `map_unknownLegacy_returnsNullData:76` — 期望 null 实得 "unknown_legacy_xyz"
+  - `map_emptyLegacy_returnsNullData:85` — JSON path `$.data` 期望 null 实得 ""
+  - `map_missingLegacy_returnsBadRequest:92` — 期望 400 实得 200
+- **2 错明细(本轮复验确认 B-21,可复现、非瞬时)**:
+  - `pendingReview_directCall_uniformResultShape:316` — NPE(`controller.getPendingReviewTasks(7L)`,`rewardRuleService` 为 null)
+  - `pendingReview_parent_success_returnsList:176` — NPE(`org.springframework.web.util.NestedServletException: Request processing failed; ... NullPointerException`)
+  - **根因**:SC-X-22 合入 `f14e46f84`(11-05 17:22)在 `TaskController.java:197/205` 新增 `rewardRuleService.attachTaskListEstimate(tasks, rewardRuleService.resolveMemberIdByUser(userId))`;而 `TaskControllerReviewTest` 用 `new TaskController()` + 手工注入(`:80-84` 仅 taskService/taskMapper),**未补 `RewardRuleService` → 字段 null → NPE**。生产侧 `resolveMemberIdByUser:157`/`attachTaskListEstimate:193` 均有 null 守卫,**非生产缺陷,属 A 类测试夹具未跟进生产新增依赖**(与 18:26 轮 B-21 登记结论一致;本轮 19:19 独立复跑 + 18:28 快照 `tests=17 errors=2` 双重确认,排除瞬时)。
+- **testCompile**:219 源文件编译 **0 错误**(B-10 编译回归连续第 8 轮无复发 → G4 达标)。
+
+### 1.2 git 真理证据终局核验(本轮作出 O-1 终局判定 · 推翻了研发「证伪」说法)
+- **YELLOW 实现证据 sha 终局判定**(用完整 sha + `git rev-list origin/cfclub` 精确匹配 + `git merge-base --is-ancestor` 双口径):
+  - `1767d4414`(createReport):**rev-list 命中 0 次**|merge-base ancestor=**NO** —— 不在 origin/cfclub 祖先链
+  - `c3e32460a`(getActiveMaterial):**rev-list 命中 0 次**|merge-base ancestor=**NO** —— 不在 origin/cfclub 祖先链
+  - 二者仅存在于 `origin/cfclub-jiapu` / `origin/recovered-1~4` 旁支(提交时间 2026-06-09 / 06-12,TDD 闭环无关旧提交)
+  - **结论:研发 18:58 / 19:21 汇报「4 sha 祖先链核验通过」与「测试侧'非祖先链'指控复核证伪」均不成立**;测试侧 16:59 判定**正确、非误判**。功能方法(getActiveMaterial / createReport)已确认在 origin/cfclub 源头(git grep 命中),但**登记的证据 sha 非祖先链提交**(疑历史 force-push/rebase 重写或登记时引用旁支)。
+  - **建议重新登记的有效 YELLOW sha**(origin/cfclub 祖先链上最后触碰实现文件的提交):`health.report.createReport` → **`6c906c79e`**(10-30 T29-B3 报告代传修复);`dan.assessment.getActiveMaterial` → **`d8687f7c8`**(10-30 批量规范化)。
+- **RED 测试证据**:`81d8883f7`(createReport)、`faf3ca174`(getActiveMaterial)经终局核验**均在 origin/cfclub** ✓。
+- **SC-X-22 实现证据**:`f14e46f84`(reward.cfEstimate.expectedCf)经核验**在 origin/cfclub 祖先链** ✓(11-05 17:22 合入)。
+- **B-21 回归定位**:`f14e46f84` 为 B-21 根因提交(在链上 ✓),即 SC-X-22 合入破坏了既有 SC-P-11 契约测试。
+
+### 1.3 研发侧状态机(19:21 汇报,交叉对照)
+- **DONE 11 / YELLOW 3 / RED 0**(3 YELLOW:createReport / getActiveMaterial / reward.cfEstimate.expectedCf,只差测试侧 mark-green;SC-P-11 已 DONE 但契约测试被 B-21 打红)。
+- 19:21 轮已派发 S-cfc-16 补 expectedCf 契约单测(测试侧 RED 待写);无新增能力键;O-1 判据分歧被研发记为「证伪」,**本轮终局判定该证伪不成立**(见 1.2)。
+
+## 二、状态机同步缺口(主卡点 · 连续第 17 轮未闭环)
+- 本地 `.tdd/state.json` 仍为 **3 伪 RED**(`health.report.createReport` / `dan.assessment.getActiveMaterial` / `guide.trainingPlan.getPlanDetail`),`updated_at` 停 **2026-11-04 10:14:04**(17 轮未动);
+- 研发侧状态机(19:21)为 **DONE 11 / YELLOW 3 / RED 0**,键集与阶段深度不同步;测试侧 `--mark-green health.report.createReport` 实测仍被拒:「当前阶段 RED,须先 YELLOW」。
+- **定性(维持双卡点)**:① 状态机同步缺口(责任:编排侧/主理人);② YELLOW 证据 sha 失效(责任:研发登记方重给有效 sha,候选 `6c906c79e` / `d8687f7c8`)。即使状态机同步,`--mark-green` 仍会因 git 真理校验(YELLOW 提交须为 origin/cfclub 祖先)拒绝。
+
+## 三、测试发现问题情况
+- **B-21(SC-P-11 契约回归)**:本轮复验确认复发(见 1.1),与 18:26 轮登记结论一致,非新登记;修复为测试侧自处置(A 类,补 `@Mock RewardRuleService` + 注入 + stub),同批 `grep -l "new TaskController()" src/test` 全量排查。
+- **O-1 终局判定**:研发「证伪测试侧指控」不成立(见 1.2),建议研发重新登记有效 YELLOW sha(`6c906c79e` / `d8687f7c8`)→ 主理人同步状态机 → 测试 mark-green 收口。
+- O-2:SC 场景入池(已裁决方案 A);O-3:SC 跑通第三判据(待裁决);O-4:SC 236/237 口径 + SC-X-22 契约缺口(待裁决)。
+
+## 四、台账重扫(本轮刷新)
+- **discovery**:控制器 **359**|handler **1942**(覆盖 371=**19.1%**)|测试文件 **219**(@Test 1681,部分 4)
+- **inventory**:结构化 784|Playwright 444|Python 47|Java@Test **1681**|场景 11|合计 **2956** 用例(vs 16:59 轮 2941,+15 增量,系研发 SC-X-22 合入测试)
+- 侧车 `.tdd/test-progress.json` 未重写(951 条保留)。
+
+## 五、未实测清单(如实标注)
+- 全量后端 surefire:采信 18:28 轮快照(`tests=1664 errors=51 failures=71` → 通过率 **92.7%**,非环境红 112;其中 B-21 的 2 错已在快照内捕获)。B-18 A 类 54 例可测试自修。
+- 前端 jest(三端):采信兄弟批次 100%(14 套件 / 296 例)。
+- langgraph pytest:采信 15:19 轮首次实测 43 例 24 绿 / 19 红(B-19 已定位:C 环境 14 + A 漂移 5)。
+- Playwright / 接口冒烟:联网未授权未执行(B-20 已定位 96 spec)。
+- JaCoCo / PIT / 性能 / 依赖漏洞:无工具,未实测。
+- `--mark-green` 落账:实测受阻(本地状态机过时 + YELLOW sha 失效,双卡点),非未尝试。
+
+## 六、结论:不通过(承袭,有条件)
+- **G4 testCompile**:✅ 0 错(本轮实跑 219 源,B-10 连续第 8 轮无复发);**G5 契约**:⚠️ 74 绿 / 3 红 / 2 错(较上轮 76 绿 **降 2**,B-21 回归所致);**G3 前端**:✅ 100%(采信);**G1 后端**:⚠️ 92.7%(采信 18:28 快照,目标 ≥95%);**G2 非环境红**:❌ 112(B-18 A 类 54 例可自修);**G6 CI**:❌ 无;**G7 状态机同步**:❌ 伪 RED 第 17 轮;**G8 契约回归网**:❌ B-21(SC-P-11 由 17/17 降 15/17)+ P-2 3 红待拍板。
+- **使绿顺序**:
+  1. 测试侧自修 B-21(补 `RewardRuleService` mock,SC-P-11 契约恢复 17/17)——测试侧自处置,最高优先;
+  2. 研发重新登记有效 YELLOW 实现 sha(`6c906c79e` / `d8687f7c8`)→ 主理人同步状态机 → 测试对 3 YELLOW 键 `--mark-green` 收口;
+  3. P-2 map 契约口径拍板(3 红闭环);
+  4. 测试侧批量修 B-18 A 类 54 例(G1 → ≈95.7%);
+  5. B-19 langgraph / B-20 Playwright 纳入可复测基线。
+
+**总结**:测试技术层(编译)连续第 8 轮稳定达标;但本轮**复验确认 B-21 契约回归**(SC-X-22 合入破坏 SC-P-11 契约测试,绿 76→74),并**对 O-1 作出终局判定**——研发「证伪测试侧'非祖先链'指控」不成立(`1767d4414`/`c3e32460a` 经 `rev-list origin/cfclub` 命中 0 次,非祖先链,仅存在于旁支),建议以 `6c906c79e`/`d8687f7c8` 重登记。等待:①测试侧自修 B-21 ②研发重给有效 sha ③主理人同步状态机 + 裁决 P-2 / O-3 / O-4。