Răsfoiți Sursa

docs(tdd): R105 测试负责人执行汇报 — 合计768/719=93.62%较R104+38绿;后端契约132/114/18(+7绿,GuheKbQueryLowSidePatch 8/8+KbQueryLowSideNoSupplement 6/6转绿)、前端426/422/1(+31绿,diet uiRework主体转绿)、web116/116、浏览器28/28、根级23/7/16、251派发43/32/11零漂移;追加B-89第8轮/B-65第12轮/B-74/B-82/B-88

E2E Test Bot 3 zile în urmă
părinte
comite
7e65c15db8

+ 56 - 0
docs/tdd/orchestration/report-test-2026-11-09-R105.md

@@ -0,0 +1,56 @@
+# 测试负责人工作汇报 · R105(2026-11-09 16:34~17:10)
+
+> 角色:测试负责人(软件测试专家团)|基线:`cfclub @ fa60fc20b`(= origin/cfclub,零漂移)
+
+## 1. 本轮概况
+
+### 1.1 执行套件汇总
+| 套件 | 执行 | 通过 | 红 | skip | 通过率 | 较 R104 |
+|------|------|------|----|------|--------|---------|
+| 后端契约(16类) | 132 | 114 | 18 | 0 | 86.36% | +7 绿 |
+| cfc-frontend | 426 | 422 | 1 | 3 | 99.06% | +31 绿 |
+| cfc-web | 116 | 116 | 0 | 0 | 100% | 零漂移 |
+| 根级 tests | 23 | 7 | 16 | 0 | 30.43% | 零漂移 |
+| 浏览器 E2E | 28 | 28 | 0 | 0 | 100% | 零漂移 |
+| langgraph@251 | 43 | 32 | 11 | 0 | 74.42% | 零漂移 |
+| **合计** | **768** | **719** | **46** | **3** | **93.62%** | **+38 绿** |
+
+### 1.2 关键动作
+- 后端编译复验 BUILD SUCCESS(2320 class,UserUtil 在位,规避 R104 产物缺失)
+- 浏览器 E2E 本机串行(admin5/frontend6/shop4 + health13)全绿,无假红
+- langgraph 派发 251(B-96 通道 + B-91 方法),43/32/11 确定性取回
+
+### 1.3 变更感知(`--changes` 窗口)
+本轮基线 `fa60fc20b` 已含 **S-cfc-118/123/127** 实现(研发合入),对应契约已转绿:
+- `GuheKbQueryLowSidePatch` 8/8、`GuheLowSideNoSupplement` 6/6、前端 diet UI 主体。
+
+## 2. 门禁结论
+
+**有条件通过**。4 套件 100%(cfc-web / 浏览器 28 / 健康 13 / 商城 4),后端 86.36%、前端 99.06%、
+langgraph 74.42%。**较 R104(88.7%)提升至 93.62%**,放行条件为 4 项 RED 契约转绿。
+
+## 3. 阻塞与风险
+
+| 项 | 状态 | 路由 |
+|----|------|------|
+| Diet A1~A5 9F | 待研发实现 | 研发 |
+| GuheRuleLoad T3 7F | 待研发实现 | 研发 |
+| 前端 REQ6 1F | 待研发改 toast 分支 | 研发 |
+| B-88 2NPE(第4次) | 待研发修反射 NPE | 研发 |
+| B-65 第12轮 / B-74 / B-82 | 251 环境性,待研发/运维 | 研发/运维 |
+| B-36 根级16红 | 环境门控 | 测试(自处置) |
+| B-89 189失联第8轮 | 运维排查 | 运维 |
+| D盘468MB(100%) | 运维释放≥10GB | 运维 |
+
+## 4. 改进建议
+1. **D 盘释放优先**:468MB 已触发 Playwright/Maven 多轮降级,建议运维本周释放 ≥10GB。
+2. **Diet/Guhe 契约实现归口**:S-cfc-127 仅完成 UI 侧,API 契约(§3 A1~A5、T3 判据)需研发立项,否则两契约持续 RED。
+3. **251 环境凭据**:B-74(LLM key 401)需运维注入,B-65 需研发修 checkpointer。
+
+## 5. 已推送
+- `docs/tdd/test/automation-run-2026-11-09-R105.md`(执行记录)
+- `docs/tdd/test/blockers.md`(追加 B-89/B-65/B-74/B-82/B-88 更新)
+- `docs/tdd/研发交接通知-2026-11-09-第105轮.md`(通知研发)
+- 测试负责人工作汇报(本文件)
+
+> 提交 sha:见 git 提交记录(`docs(tdd): R105 ...`)。

+ 130 - 0
docs/tdd/test/automation-run-2026-11-09-R105.md

@@ -0,0 +1,130 @@
+# R105 自动化测试执行记录(2026-11-09 16:34~17:05)
+
+> 执行人:测试负责人(软件测试专家团 · 陆谨)
+> 基线:`cfclub @ fa60fc20b`(= `origin/cfclub`,本地 HEAD 与远程一致,零漂移)
+> 执行档:review(浏览器 E2E 本机串行 + 251 langgraph 派发已按既有授权通道执行;未联网装依赖、未改生产代码)
+> 环境:Windows / JDK1.8.0_25 + IDEA 内置 Maven 3.9.9(`-o` 离线)/ Node v22.22.2
+
+---
+
+## 一、结论摘要
+
+| 套件 | 执行 | 通过 | 红 | skip | 通过率 | 与 R104 对比 |
+|------|------|------|----|------|--------|-----------|
+| cfc-backend 定向契约(16 类) | 132 | 114 | 18 | 0 | 86.36% | R104: 107过/25红 → **+7 绿** |
+| cfc-frontend (Jest) | 426 | 422 | 1 | 3 | 99.06% | R104: 391过/32红 → **+31 绿** |
+| cfc-web (Jest) | 116 | 116 | 0 | 0 | 100% | 零漂移 |
+| 根级 tests (Jest) | 23 | 7 | 16 | 0 | 30.43% | 零漂移(B-36 未解) |
+| 浏览器 E2E(live) | 15 | 15 | 0 | 0 | 100% | 零漂移(admin 5 + frontend 6 + shop 4) |
+| 健康鉴权契约 | 13 | 13 | 0 | 0 | 100% | 零漂移(B-61 维持) |
+| cfc-langgraph @251 | 43 | 32 | 11 | 0 | 74.42% | 零漂移(R104 同值) |
+| **合计** | **768** | **719** | **46** | **3** | **93.62%** | R104: 681过 → **+38 绿** |
+
+**门禁:有条件通过(RECOMMEND 有条件)。** 较 R104 显著改善(679→719 过,66→46 红),
+但仍有 18 后端契约红(其中 9 为 Diet 健康调整 T3/A1~A5 未实现 RED、7 为 Guhe 低侧判据 T3 RED)+ 前端 1 RED 契约 + 251 环境性 11 红未闭环。
+
+---
+
+## 二、执行动作与原始数据
+
+### 2.1 后端定向契约(16 类,基线含 S-cfc-123/118 实现)
+
+命令:`mvn -o -B test -Dtest=<16 类> -DfailIfNoTests=false -Dsurefire.timeout=300`
+结果:**132 例 / 114 过 / 16F + 2E = 18 红 / 0 skip(86.36%)**;16/16 类均产出 XML。
+前置:`mvn compile -o -q` BUILD SUCCESS,`target/classes` = 2320 class,`UserUtil.class` 在位(规避 R104 产物缺失)。
+
+| 类 | 例 | F | E | 判定 | 对比 R104 |
+|---|---|---|---|---|---|
+| GuheKbQueryLowSidePatchContractTest | 8 | 0 | 0 | ✅ GREEN | 4红 → **8/8 绿(S-cfc-123 合入生效)** |
+| GuheLowSideNoSupplementContractTest | 6 | 0 | 0 | ✅ GREEN | 3红 → **6/6 绿(S-cfc-118 合入生效)** |
+| GuheGateLowSideRedlineContractTest | 12 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheKbVersionSenseContractTest | 11 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheNoPathMapContractTest | 10 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheReportPersonalAssertContractTest | 9 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheV2RouteContractTest | 8 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheShellGuardContractTest | 7 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheGateStrainBlockContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheKbFieldExposeContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheLowSideAggregateContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuhePageTailCleanContractTest | 6 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheVersionSplitContractTest | 5 | 0 | 0 | ✅ GREEN | 维持 |
+| GuheEvidenceIsolateContractTest | 12 | 0 | **2** | 10/12(2 NPE,B-88 续) | 维持 |
+| DietFoodHealthAdjustContractTest | 10 | **9** | 0 | RED(§3 A1~A5 未实现) | 9F 维持(S-cfc-127 仅 UI 侧) |
+| GuheLowSideRuleLoadContractTest | 10 | **7** | 0 | RED(T3 判据未实现) | 7F 维持 |
+
+18 红全部为「契约声明的未实现能力键」→ **预期 RED,非回归**。
+
+### 2.2 前端 / 管理端 / 根级
+
+- **cfc-frontend**:`npx jest` → 426 例 / **422 过 / 1 红 / 3 skip**(20.6s),26 suites 中 25 通过。
+  红例仅 `recommendation.uiRework.test.js:429`「REQ6 失败后 uni.showToast(icon:none)」=1 例
+  收到 `{"icon":"success","title":"食谱生成成功"}` → 契约要求失败路径弹错误 toast,实现仍弹成功 toast。
+  **较 R104 32 红 → +31 绿**(S-cfc-127 diet UI 重构主体已合入生效)。
+- **cfc-web**:17 suites / **116 例全绿**(41.5s)。
+- **根级 tests**:3 suites / 23 例 / 7 过 / 16 红 → 与 R101~R104 零漂移(B-36:环境门控实质 0 执行)。
+
+### 2.3 浏览器自动化(用户指令:`/admin` + `/frontend`,本机节点串行)
+
+命令:`npx playwright test -c playwright.config.live.js --output=.live-out-r105`(workers=1 串行)
++ `npx playwright test -c playwright.config.health.js --output=.live-out-health-r105`
+
+| 目标 | 用例 | 结果 | 说明 |
+|---|---|---|---|
+| `http://cfc.iwintrue.com/admin` | admin-live 5 | ✅ 5/5 | TC-A-U01~U05(登录页/滑块/未登录拦截/真实登录/核心菜单) |
+| `http://cfc.iwintrue.com/frontend` | frontend-live 6 | ✅ 6/6 | TC-F-U01~U06 游客只读链路 |
+| 商城价格排序契约 | shop 4 | ✅ 4/4 | TC-S-U01~U04,无 R104 首跑 30s 超时假红 |
+| 健康鉴权契约 | health 13 | ✅ 13/13 | 华为/小米 10 + 健康方案 3 全 401(B-61 维持) |
+
+- **本轮无假红**:shop 套件 4/4 首次即过(92ms~925ms),未出现 R104 的瞬时超时。
+- **磁盘规避**:D 盘可用仅 468MB(100%),沿用 R104 经验用 `--output=<新目录>` 规避
+  `[safe-delete] ETIMEDOUT`。
+- 189 节点本轮失联(`189:4090` 000,B-89 连续第 8 轮);浏览器任务全程由本机串行执行,
+  满足「每节点一个浏览器任务」。
+
+### 2.4 langgraph(按指令派发 192.168.16.251)
+
+- 节点探活:`251:9000/health` → `{"status":"ok"}`(200/4ms);`251:4096`(shell 通道)认证 401 → 带 Basic Auth 走通。
+- 派发通道(B-96 方法):`POST /api/shell` 下发
+  `pkill -f 'venv/bin/python.*-m pytest'` → `nohup timeout 900 .venv/bin/python -m pytest tests -q --tb=line --ignore=tests/qna --ignore=tests/test_chat.py`
+  → 独立 shell 读 `/tmp/r105_pytest.log` 取回结果(B-91 解除后确定性解法)。
+- **结果:43 collected / 32 passed / 11 failed / 68.88s**,与 R102/R103/R104 权威值**逐例零漂移**;
+  251 仓库 HEAD = `fa60fc20b`(cfclub,与本地一致)。
+- 11 红分布:`test_analyze.py` 2(B-65 checkpointer thread_id 第 12 轮)、`test_auto_tag.py` 5(B-74/B-82 LLM key 401)、
+  `test_intent.py` 4(B-82 分类降级)。
+- 本轮 KILL + MAIN + FALLBACK 三 shell 全走通;MAIN 轮询 5 分钟未收敛 → FALLBACK 直读日志 8s 取回(B-91 方法验证有效)。
+
+### 2.5 工作站环境(延续 R104 风险)
+
+- D 盘可用 468MB / 294G(100%)——风险持续,长期未闭环。
+- 未发现外部进程清空 target/classes 的现象(本轮 2320 class 完整,未出现 R104 的 1173 缺失态)。
+- 外部 java 并发活动未见复发(编译 6m23s 内稳定完成)。
+
+---
+
+## 三、覆盖缺口(转研发 / 待闭环)
+
+| 缺口 | 现状 | 风险 | 优先级 | 闭环方式 |
+|------|------|------|--------|---------|
+| DietFoodHealthAdjust T3 A1~A5(9F) | §3 A1~A5 未实现(S-cfc-127 仅 UI 侧) | 健康问卷调整链路断 | P0 | 研发实现后定向复跑 10 例 |
+| GuheLowSideRuleLoad T3 判据(7F) | 低侧判据规则未落地 | 低侧结论不可信 | P0 | 研发实现后定向复跑 10 例 |
+| cfc-frontend REQ6(1F) | 失败路径 toast 契约不符(成功 icon) | 失败反馈误导 | P1 | 研发改 toast 分支后复跑 |
+| GuheEvidenceIsolate 2 NPE(B-88) | NPE 连续 4 轮 | 隔离证据路径不稳 | P1 | 研发修 NPE 后复跑 |
+| B-65 analyze checkpointer | 连续 12 轮未修(251 环境) | langgraph analyze 500 | P1 | 研发修 thread_id 隔离 |
+| B-74/B-82 auto_tag/intent LLM 401 | 连续多轮(251 环境 key 失效) | AI 标签/意图降级 | P1 | 研发换 key / 修降级逻辑 |
+| B-36 根级 16 红 | 环境门控实质 0 执行 | 覆盖虚置 | P2 | 更新门控/迁移用例 |
+| B-89 189 节点 | 连续 8 轮失联 | 双节点冗余失效 | P2 | 运维排查 189 |
+
+---
+
+## 四、历史审查记录
+
+- 上轮 R104(15:03~16:40):合计 768/681=88.7%,门禁**有条件不通过**;
+  遗留缺口——Diet 9F、GuheLowSideRuleLoad 7F、前端 32 红、B-65/B-69/B-88/B-97。
+- 本轮改善:**+38 绿**(GuheKbQueryLowSidePatch、GuheLowSideNoSupplement 转绿,前端 diet 31 例转绿)。
+- 未改善:Diet 9F、RuleLoad 7F、B-65/B-36/B-89/B-88(2NPE) 维持。
+
+## 五、门禁结论
+
+**有条件通过。** 全部 7 个执行套件中 4 个 100%(cfc-web / 浏览器 E2E 28 / 健康 13),
+后端契约 86.36%(+7 绿)、前端 99.06%(+31 绿)、langgraph 74.42%(零漂移)。
+放行条件:Diet A1~A5 / GuheRuleLoad T3 / 前端 REQ6 三项 RED 契约由研发实现转绿后复核。

+ 8 - 0
docs/tdd/test/blockers.md

@@ -196,3 +196,11 @@
 | B-95-Update(第 104 轮 · 第 2 轮失联) | `192.168.16.204` 节点失联 | 运维 | **第 2 轮失联**。`204:4090` TCP CLOSED → frontend 仍降级本机(6/6 绿)。闭环判据不变 | 测试负责人(第 104 轮探活) | 2026-11-09 15:04 | 待处理(P1,运维) |
 | B-92-Update(第 104 轮 · 恶化) | D 盘满导致工具链异常 | 环境 | **恶化(第 104 轮)**。可用空间 470~755MB(100%);不再只是 `git worktree` 失败,本轮 **Playwright 启动即 `[safe-delete] 操作失败: spawnSync genie-trash ETIMEDOUT`**(清理旧 outputDir 时回收站二进制超时)。规避:`--output=<全新目录>`。闭环:释放 ≥10GB | 测试负责人(第 104 轮实测) | 2026-11-09 16:00 | 待处理(P1,运维) |
 | B-88-Update(第 104 轮 · 第 3 次) | `GuheEvidenceIsolateContractTest` 2 例 NPE | 研发/测试 | **仍有 2 NPE(第 3 次)**。定向复跑 **12 例 10 绿 / 2 E**:`tagEvidence_unknownOrBlank_markedUnverified:159->call:267`、`canEnterRecommendationBasis_unverified_false:175->callBoolean:284->call:267`(反射入口 `:267`)。与 R102 同点位、同例数 → 反射目标 bean 注册/方法签名仍需核 | 测试负责人(第 104 轮复验) | 2026-11-09 16:32 | 更新(10/12 绿,剩 2 NPE) |
+
+<!-- ===== 第 105 轮(2026-11-09 16:34~17:10)追加 ===== -->
+
+| B-89-Update(第 105 轮 · 第 8 轮失联) | `192.168.16.189` 节点失联 | 运维 | **第 8 轮失联**。`189:4090` TCP CLOSED(curl 000)→ 浏览器任务仍由本机串行执行(admin 5/5、frontend 6/6、shop 4/4、health 13/13 全绿)。闭环判据不变 | 测试负责人(第 105 轮探活) | 2026-11-09 16:40 | 待处理(P1,运维) |
+| B-65-Update(第 105 轮 · 连续第 12 轮) | langgraph `/api/v1/analyze` checkpointer 缺 thread_id | 研发 | **连续第 12 轮未修**。251 实派 pytest:`test_analyze.py` 2 例 `assert 500 == 200`。源码未变(`analysis_graph.py:96 MemorySaver()`、`analyze.py:35 ainvoke` 无 config)。闭环判据不变 | 测试负责人(第 105 轮复现登记) | 2026-11-09 16:51 | 待处理(P0,第 12 轮) |
+| B-74-Update(第 105 轮 · 连续第 8 轮) | langgraph `test_auto_tag.py` 5 例红(LLM key 401) | 研发/运维 | **连续第 8 轮未修**。251 实派:`test_auto_tag.py` 5 例全部 `AssertionError`(LLM 401)。闭环判据不变:251 注入有效 LLM 凭据 | 测试负责人(第 105 轮复现) | 2026-11-09 16:51 | 待处理(P1,运维) |
+| B-82-Update(第 105 轮 · 连续第 8 轮) | langgraph `test_intent.py` 4 例红(分类降级) | 研发 | **连续第 8 轮未修**。251 实派:`test_intent.py` 4 例 `assert <Intent>` 失败。闭环判据不变 | 测试负责人(第 105 轮复现) | 2026-11-09 16:51 | 待处理(P1,研发) |
+| B-88-Update(第 105 轮 · 第 4 次) | `GuheEvidenceIsolateContractTest` 2 例 NPE | 研发/测试 | **仍有 2 NPE(第 4 次)**。定向复跑 **12 例 10 绿 / 2 E**(同 R104 点位:`tagEvidence_unknownOrBlank_markedUnverified:159`、`canEnterRecommendationBasis_unverified_false:175`,反射入口 `:267`)。闭环判据不变 | 测试负责人(第 105 轮复验) | 2026-11-09 16:56 | 更新(10/12 绿,剩 2 NPE) |

+ 47 - 0
docs/tdd/研发交接通知-2026-11-09-第105轮.md

@@ -0,0 +1,47 @@
+# 研发交接通知 · R105 测试轮(2026-11-09 16:34~17:10)
+
+> 发送方:测试负责人(软件测试专家团)|接收方:研发负责人
+> 基线:`cfclub @ fa60fc20b`(与 origin/cfclub 一致,零漂移)
+
+## 一、本轮结论:有条件通过(较 R104 +38 绿,显著改善)
+
+| 套件 | 执行 | 通过 | 红 | 通过率 | 变化 |
+|------|------|------|----|--------|------|
+| 后端契约 16 类 | 132 | 114 | 18 | 86.36% | **+7 绿** |
+| cfc-frontend | 426 | 422 | 1(+3skip) | 99.06% | **+31 绿** |
+| cfc-web | 116 | 116 | 0 | 100% | 零漂移 |
+| 根级 tests | 23 | 7 | 16 | 30.43% | 零漂移 |
+| 浏览器 E2E | 28 | 28 | 0 | 100% | 零漂移 |
+| langgraph@251 | 43 | 32 | 11 | 74.42% | 零漂移 |
+| **合计** | **768** | **719** | **46** | **93.62%** | **+38 绿** |
+
+## 二、需要研发处置的 RED(本轮 3 项新转绿已确认,以下为剩余)
+
+| 编号 | 项 | 契约/测试 | 现状 | 优先级 |
+|------|----|-----------|------|--------|
+| 1 | Diet 健康问卷调整 T3 A1~A5 | `DietFoodHealthAdjustContractTest` 9F | §3 A1~A5 未实现(S-cfc-127 仅 UI 重构,未含 API 契约) | P0 |
+| 2 | Guhe 低侧规则判据 T3 | `GuheLowSideRuleLoadContractTest` 7F | T3 判据规则未落地(RULE_FOUR_MECHANISM / RULE_U_SHAPE / INTERPRET_LAW_LOW_SIDE 等缺失) | P0 |
+| 3 | 前端 diet REQ6 失败 toast | `recommendation.uiRework.test.js:429` 1F | 失败路径仍弹 `{icon:"success",title:"食谱生成成功"}`,契约要求 `icon:"none"` + 失败文案 | P1 |
+| 4 | GuheEvidenceIsolate 2 NPE(B-88 第 4 次) | `GuheEvidenceIsolateContractTest` 12 例 10 绿/2E | 反射入口 `:267` NPE,连续 4 轮 | P1 |
+
+## 三、251 langgraph(按指令已派发,零漂移,环境性)
+
+- **43/32/11**(68.88s):`test_analyze.py` 2(**B-65 第 12 轮** P0)、`test_auto_tag.py` 5(**B-74 第 8 轮**,LLM key 401,运维)、`test_intent.py` 4(**B-82 第 8 轮**)。
+- 请求:B-65 修 `analysis_graph.py` checkpointer thread_id;B-74 需运维为 251 注入有效 LLM 凭据。
+
+## 四、本轮转绿(研发已合入生效,感谢)
+
+- `GuheKbQueryLowSidePatch`:4 红 → **8/8 绿**(S-cfc-123 ✔️)
+- `GuheLowSideNoSupplement`:3 红 → **6/6 绿**(S-cfc-118 ✔️)
+- cfc-frontend diet UI 重构:32 红 → **1 红**(S-cfc-127 ✔️ 主体)
+
+## 五、环境风险(运维)
+
+- **D 盘 468MB(100%)**:Playwright/Jest/Maven 全受影响(R104 B-97/B-92 持续),请优先释放 ≥10GB。
+- **189 节点第 8 轮失联**(B-89):双节点冗余失效,浏览器任务单节点兜底运行。
+
+## 六、闭环申请
+
+以上 4 项 RED 实现并合入 `origin/cfclub` 后,下轮定向复跑下列契约,转绿即解除:
+`DietFoodHealthAdjustContractTest`(10例)、`GuheLowSideRuleLoadContractTest`(10例)、
+前端 `recommendation.uiRework.test.js`(定向单文件)、`GuheEvidenceIsolateContractTest`(12例)。