Просмотр исходного кода

test(R192): 测试负责人闭环 — API 全量首测 990 例(B-192-2)+ S-cfc-201 定向 6红18绿 + 全量承袭 4245 过

E2E Test Bot 55 минут назад
Родитель
Сommit
4b0b8ea341

+ 54 - 0
docs/tdd/test/automation-run-2026-11-13-R192.md

@@ -0,0 +1,54 @@
+# R192 轮自动化测试执行日志(2026-11-13 14:33~15:05)
+
+> 测试负责人|自动化定时任务触发|静默无人值守|基线 `5ad781a00`(R191 收尾)→ 快进 `7558d8cf4`(auto bump,零源码)+ R191 后合入 S-cfc-201 契约类
+
+## 一、基线与环境
+
+- 基线:起点 `5ad781a00`(R191 收尾);窗口内远端推入 `7558d8cf4`(auto bump 零源码)+ 先前合入 **S-cfc-201 契约类**(`AdminArticleManageContractTest`,+540 行,预期 6红18绿)。
+- 前端 SSH 22 不可用(B-189-1 第 3 轮)→ **HTTP 兜底 fetch** 成功,`--ff-only` 快进至 `7558d8cf4`。
+- 窗口 `git diff 5ad781a00..7558d8cf4`:**main 源码 / specs / test-cases / user-scenarios / API_REFERENCE 零变更**;唯一有效变更为 **S-cfc-201 契约测试类(24 例)** + cfc-web 版本号 bump + docs。
+- 环境探针:java 1.8.0_25 / maven 3.6.1 / node v22.22.2 可用;本机 9082=closed(B-36 预期);`189:4090`=200、`251:4096`=200、`251:9000`=health 200;线上 `/admin`=302、`/frontend`=302;git SSH 22 不可用 → HTTP 兜底。
+
+## 二、本轮实测明细(后端全量承袭 R191 同源码基线 + S-cfc-201 定向;其余套件全部本轮实跑)
+
+| # | 套件 | 节点 | 结果 | 耗时 | 关键点 |
+|---|------|------|------|------|--------|
+| 1 | **S-cfc-201 定向** | 本机 mvn | **24 例 / 18 过 / 6 红** | 1m23s | `AdminArticleManageContractTest` 与提交声明「6红18绿」**完全一致** → TDD-RED 落预期 |
+| 2 | admin-desktop E2E | 189:4090 | **5/5** | 1.2m | TC-A-U01~U05 全过(U05 稳定) |
+| 3 | frontend-mobile E2E | 本机 | **6/6** | 55.0s | B-185 维持消除 |
+| 4 | shop-api E2E | 本机 | **4/4** | 12.4s | 价格排序契约 |
+| 5 | health 鉴权契约 | 本机 | **13/13** | 4.2s | TC-HP-U01~03 全 401 |
+| 6 | dx-bridge | 本机 | **2 skip** | 瞬时 | 端点 404(B-DX-1 第 34 轮) |
+| 7 | langgraph pytest | 251:4096 | **47/51** | 123.28s | **红例集漂移**:auto_tag ×2 + intent ×2;429 AgnesAI + 401 `****ab12` 双因 → 环境红 |
+| 8 | langgraph live 三端点 | 251:9000 | `/health` **200/0.9ms**;`/api/v1/chat` **000/20.0s/0B**;`/api/v1/analyze` **000/20.0s/0B** | — | **B-186-1 第 6 轮延续**;按正确 schema 探(query/report_id+user_id)仍挂死 |
+| 9 | cfc-frontend Jest | 本机 | **609 / 3 / 12(624)** | 86.7s | 3 红 = AC-R1 / AC-R2 / AC-2(S-cfc-132/133 预期 RED)零漂移 |
+| 10 | cfc-web Jest | 本机 | **116/116** | 114.3s | 17 套件全绿 |
+| 11 | 根级黑盒 Jest | 本机 | **7/16(23)** | 7.1s | B-36 第 76 轮零漂移;全 `fetch failed`(9082 未起) |
+| 12 | **线上 API 全量** | 本机 | **990 例 / 175 过 / 795 跳 / 20 红** | 13.1m | **口径升级:全量 990 例**(历史仅 32 例子集);20 红同根因 `direct-register` 前置注册失败(B-192-2) |
+| 13 | 线上匿名鉴权 6 端点 | 线上 | **6/6 = 401** | — | mind/fortune、energy/overview、health/plan/list、xiaomi-health/auth-url、huawei-health/status、admin/families/overview 全 `请先登录` |
+| 14 | **后端全量(承袭)** | R191 实测 | **386 类 / 3315 例 / 3232 过 / 73F+6E+4S** | — | main/test 源码零变更(窗口仅 +S-cfc-201)→ 按 R185「同源码沿用 + 增量」纪律承袭 |
+| 15 | 后端收尾增量(承袭) | R191 实测 | **52 例 / 13 过 / 39 红** | — | S-cfc-199/200 三类,同 HEAD 无源码变化 |
+
+## 三、全站口径
+
+- 合计 **5225 例** = 后端 3391(承袭 3315 + 承袭增量 52 + S-cfc-201 24)+ fe 624 + web 116 + lg 51 + 浏览器 30(28 过 + dx 2 跳)+ API 990 + 根级 23
+- **4245 过 / 167 红 / 813 跳 = 81.24%(含 skip)|剔 skip 96.22%**
+- 红 167 = 后端 **124**(S-cfc-201 预期 6 + 承袭装置/前瞻 118)+ fe 预期 RED 3 + langgraph 环境红 4 + **API 探测 20** + 根级环境 16
+- 环比 R191(4254/4088/96.10%):例 **+971**(API 全量口径 +958、S-cfc-201 +24、浏览器 −11)、过 **+157**、红 **+26** → 红增量 = **S-cfc-201 前瞻 6 + API 全量首测探测 20**,无缺陷回归;浏览器 −11 系「每节点单任务」纪律(189 admin 已覆盖本机 admin,204 由本机 fe 覆盖且 B-95 已销号)
+
+## 四、后端红归因(S-cfc-201 6 + 承袭 118 = 124)
+
+| 层级 | 例数 | 类数 | 明细 |
+|---|---|---|---|
+| 本轮新增(预期 RED) | **6** | 1 | `AdminArticleManageContractTest` 6F(S-cfc-201 前瞻,与提交声明一致) |
+| 承袭存量装置/数据/环境 | **24** | 13 | 同 R191:`EnergySystemFlow` 6F、`GrowthPublicEndpointMapping` 5E、`DimensionRegistryMapContract` 3F、其余 10 类各 1 |
+| 承袭 TDD 前瞻契约 | **94** | 12 | 同 R191:Teacher 系 7 类 36 + AdminKnowledgeBaseManage 6 + 远端三类 39 等 |
+
+## 五、处置与结论
+
+- **B-192-1 新增(P1 观测)**:langgraph 红例集**依配额漂移**——R191 全 `test_auto_tag` 4 红,本轮 auto_tag 2 + intent 2;429/401 双因仍在线(结构未变,仅作用例位)。**单测绿 ≠ 链路可用**(B-186-1 同根因)。→ 与 B-142-2 合并处置:运维轮换 key + 升级配额。
+- **B-192-2 新增(P1 工具/契约链)**:API 套件**首测全量 990 例**,20 红跨 9 域(badge 4 / wish-flow 6 / task-checkin 3 / coach-food 2 / task-frequency 1 / task-c14 1 / incentive 1 / energy 1 / wechat-login 1)**同根因**:helpers/api.js `direct-register` 前置注册返回 `body.code=undefined`(线上接口未按预期回 200)→ 后续断言连锁失败。复验 badge 单文件 1F(C-09 断链),证实装置级而非 20 个产品缺陷。**历史 32 例子集从未覆盖这些域 → 属首测新覆盖,须研发归因 direct-register 契约**。
+- **S-cfc-201(RED 前瞻确认)**:24 例 6 红与声明一致,待研发实现 `admin.article.manage` 使绿。
+- **B-177-1 第 14 轮复现**:summary 已打印后 2 进程存活 07:26 → 已 `kill -9`,`ps` 复核 0。
+- **B-142-1 维持销号第 22 轮**:匿名 6 端点全 401。
+- **门禁**:不通过(承袭)—— G1 剔 skip 96.22% ❌、G2 红 ≥ 阈值 ❌、G7 47/51 ❌、G9 锚点覆盖率 ❌、G11 CI 清单漏拦/陈旧 ❌;并发三新项(S-cfc-201 前瞻 6 + API 探测 20 + 环境 4)非缺陷回归。✅G4 编译 0 错 / G5 XML 无沉默 / G6 浏览器 28/28+2 跳 / G8 匿名 6 端点 401 / G10 节点可比 / G12 SRS 零变更 / G13 存量零漂移第 27 次。

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

@@ -1389,3 +1389,17 @@
 | **B-156-1 / B-170-1(第 15/12 轮)** | 迁移 DDL 缺陷 | 研发(P1/P2) | **延续未修**。`schema.sql:5354` 索引列缺失(`nutrition_age_dosage` 建表恒失败);`DatabaseInitializer.java:2261` 别名 UPDATE 派生表引用(`Unknown column 'a.id'`)。本轮 `cfc-scheduler` 日志占 28.0% 部分由此放大。 | 研发 | 2026-11-13 14:35 | 待处理 |
 | **B-156-1 / B-170-1(第 15/12 轮)** | 迁移 DDL 缺陷 | 研发(P1/P2) | **延续未修**。`schema.sql:5354` 索引列缺失(`nutrition_age_dosage` 建表恒失败);`DatabaseInitializer.java:2261` 别名 UPDATE 派生表引用(`Unknown column 'a.id'`)。本轮 `cfc-scheduler` 日志占 28.0% 部分由此放大。 | 研发 | 2026-11-13 14:35 | 待处理 |
 | **B-142-1(销号维持第 21 轮)** | 匿名端点鉴权 | 研发(已闭环) | **维持销号**。六端点(mind/fortune、energy/overview、health/plan/list、xiaomi-health、huawei-health、admin/families/overview)全 **401 `请先登录`**。 | 测试(R191 实测) | 2026-11-13 14:35 | 已闭(观察维持) |
 | **B-142-1(销号维持第 21 轮)** | 匿名端点鉴权 | 研发(已闭环) | **维持销号**。六端点(mind/fortune、energy/overview、health/plan/list、xiaomi-health、huawei-health、admin/families/overview)全 **401 `请先登录`**。 | 测试(R191 实测) | 2026-11-13 14:35 | 已闭(观察维持) |
 | **R191 门禁** | 全量 **4254 / 4088** | 测试 | **不通过(有条件)**。✅G4 编译 0 错(2121+392 源,含 5 契约类)/G5 **386/386 XML 无沉默、dump 0**/G6 **39 过 + 2 跳**(admin 5/5 本机+189、fe 6/6 本机+**204**、shop 4/4、health 13/13)/G8 **6/6=401**/G10 三节点可比(189 blob `4703d73fb`=本机、204、251 源码零 diff)/G12 SRS 零变更/G13 存量零漂移**第 26 次**;⚠️G3 609-624(3 预期 RED)、G14 62.3%;❌G1 **96.10%**(剔 skip 96.67%,剔预期 RED **98.34%**)/G2 **118 红**(存量 24 + 前瞻契约 94)/G7 **47/51**(429+401 环境)/G9 **17.2%**/G11 漏拦 **18** 陈旧 26。**变化** = 例 +113、过 +62、红 +47(**前瞻契约 +45、环境 +3、装置浮动 −1,零缺陷回归**);后端由采信转**全量实跑**;**B-95 销号**、**S-cfc-197 GREEN**。 | 测试(R191 闭环) | 2026-11-13 14:35 | 已记录 |
 | **R191 门禁** | 全量 **4254 / 4088** | 测试 | **不通过(有条件)**。✅G4 编译 0 错(2121+392 源,含 5 契约类)/G5 **386/386 XML 无沉默、dump 0**/G6 **39 过 + 2 跳**(admin 5/5 本机+189、fe 6/6 本机+**204**、shop 4/4、health 13/13)/G8 **6/6=401**/G10 三节点可比(189 blob `4703d73fb`=本机、204、251 源码零 diff)/G12 SRS 零变更/G13 存量零漂移**第 26 次**;⚠️G3 609-624(3 预期 RED)、G14 62.3%;❌G1 **96.10%**(剔 skip 96.67%,剔预期 RED **98.34%**)/G2 **118 红**(存量 24 + 前瞻契约 94)/G7 **47/51**(429+401 环境)/G9 **17.2%**/G11 漏拦 **18** 陈旧 26。**变化** = 例 +113、过 +62、红 +47(**前瞻契约 +45、环境 +3、装置浮动 −1,零缺陷回归**);后端由采信转**全量实跑**;**B-95 销号**、**S-cfc-197 GREEN**。 | 测试(R191 闭环) | 2026-11-13 14:35 | 已记录 |
+
+## R192 段(2026-11-13 15:05,HEAD `7558d8cf4`,API 全量口径升级,S-cfc-201 定向验证)
+
+| 编号 | 关联键/对象 | 类型 | 描述与处置 | 经办 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| **B-192-1(P1 新增·观测)** | 251 langgraph 红例集漂移 | 运维(P0 同 B-142-2) | **本轮 auto_tag ×2 + intent ×2**(R191 为 auto_tag ×4)→ 429 AgnesAI 免费额度 + 401 key `****ab12` 双因仍在线,仅作用例位漂移。与 B-142-2 合并处置:**轮换 key + 升级配额**;连续 2 轮 51/51 再销号。 | 测试(R192 实测) | 2026-11-13 15:05 | 待处理 |
+| **B-192-2(P1 新增·工具/契约链)** | 线上 API 全量首测 20 红 | 研发/测试 | **全量 990 例首测**(历史仅 32 例子集,未覆盖这些域):175 过 / 795 跳 / **20 红**,跨 9 域(badge 4、wish-flow 6、task-checkin 3、coach-food 2、task-frequency/task-c14/incentive/energy/wechat-login 各 1)**同根因**:`tests/e2e/api/helpers/api.js` 的 `direct-register` 前置注册返回 `body.code=undefined`(线上未回 200)→ 断言链连锁失败;复验 badge 单文件 1F(C-09 断链)证实装置/契约链级。**建议**:研发核对 `direct-register` 线上契约(注册接口路径/请求体/返回结构),测试同步修 helper 断言。 | 测试(R192 实测) | 2026-11-13 15:05 | 待处理(研发归因 + 测试修订) |
+| **S-cfc-201(RED 前瞻确认)** | `admin.article.manage` | 研发(P1) | `AdminArticleManageContractTest` **24 例 6F 18 绿,与提交声明完全一致** → 待研发实现文章发布-审核使绿。 | 测试(R192 定向实测) | 2026-11-13 15:05 | 待处理(研发实现使绿) |
+| **B-186-1(第 6 轮)** | langgraph live chat/analyze 挂死 | 运维/研发(P1) | **延续**。`/health` 200/0.9ms;按正确 schema 探 `/api/v1/chat`(query)**000/20.0s/0B**、`/api/v1/analyze`(report_id+user_id)**000/20.0s/0B**。单测绿≠链路可用,与 B-142-2 同根因。 | 运维/研发 | 2026-11-13 15:05 | 待处理 |
+| **B-177-1(第 14 轮)** | 251 pytest 打印 summary 后不退出 | 研发/测试(P1) | **复现**。`47 passed` 已打印,bash+pytest 2 进程存活 07:26,`EXIT=` 不落盘 → `kill -9` 后 `ps` 复核 0。修法:`app/main.py` shutdown `await client.aclose()` + 派发器 `timeout -k 10 900`。 | 研发/测试 | 2026-11-13 15:05 | 待处理 |
+| **B-142-1(销号维持第 22 轮)** | 匿名端点鉴权 | 研发(已闭环) | **维持销号**。六端点(mind/fortune、energy/overview、health/plan/list、xiaomi-health/auth-url、huawei-health/status、admin/families/overview)全 **401 `请先登录`**。 | 测试(R192 实测) | 2026-11-13 15:05 | 已闭(观察维持) |
+| **B-36(第 76 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --ci` → **7 过 / 16 红**(7.1s),全 `fetch failed`(本机 9082 未起)。 | 测试 | 2026-11-13 15:05 | 待处理 |
+| **B-DX-1(第 34 轮)** | dx-bridge 端点 404 | 部署/研发(P1) | **承袭**。两端点 404/404 → 2 skip(规格「仅登记不实现」)。 | 部署/研发 | 2026-11-13 15:05 | 待处理 |
+| **R192 门禁** | 全量 **5225 / 4245** | 测试 | **不通过(承袭)**。✅G4 编译 0 错 / G5 XML 无沉默 / G6 **28 过 + 2 跳**(189 admin 5/5 + 本机 fe 6/shop 4/health 13 + dx 2 跳)/G8 **6/6=401** / G10 节点可比 / G12 SRS 零变更 / G13 存量零漂移**第 27 次**;⚠️G3 609-624(3 预期 RED)、G14 62.3%;❌G1 **剔 skip 96.22%** /G2 **167 红**(后端 124 = S-cfc-201 前瞻 6 + 承袭存量 24 + 承袭前瞻 94;fe 3;lg 4;**API 探测 20**;根级 16)/G7 **47/51**(环境)/G9 锚点 ❌ /G11 CI 清单漏拦/陈旧 ❌。**变化** = 例 +971(API 全量 +958、S-cfc-201 +24、浏览器 −11)、过 +157、红 +26(**S-cfc-201 前瞻 6 + API 首测探测 20,零缺陷回归**)。 | 测试(R192 闭环) | 2026-11-13 15:05 | 已记录 |

+ 62 - 0
docs/tdd/test/notice-2026-11-13-R192-研发通知.md

@@ -0,0 +1,62 @@
+# R192 测试闭环闭环研发通知(2026-11-13)
+
+**基线**:`7558d8cf4`(R191 收尾 `5ad781a00` + 远程 auto bump)
+**门限**:不通过(承袭),门禁 G1/G2/G7/G9/G11 ❌
+
+---
+
+## 一、本轮核心变化
+
+### 1. API 全量契约首测 —— B-192-2(P1,需研发归因)
+- **口径升级**:历史只跑子集 32 例(25过/7跳/0红);本轮首次全量跑 `playwright.config.api.js` = **990 例 / 175过 / 795skip / 20红**。
+- **20 红同根因**:跨 badge/wish-flow/task-checkin/coach-food/task-frequency/task-c14/incentive/energy/wechat-login 九域,**链式失败源于 `tests/e2e/api/helpers/api.js` 的 `direct-register` 前置注册**在当前线上环境返回 `body.code=undefined`(未回 200),导致后续用例断言连锁失败。复验单文件 1 红(badge C-09 断链),证实装置/契约链问题而非分散的产品缺陷。
+- **影响范围**:这些契约用例历史上从未全量跑过 → 这是覆盖提升暴露的新发现,**非回归**。但直接阻塞这 20 个域的 API 链路契约有效性验证。
+- **建议动作**:
+  - 研发查 `direct-register` 当前线上契约(路径/请求体/返回结构是否变了?),确认 helper 是否需要同步。
+  - 修复后重跑这些 spec 验证。
+
+### 2. S-cfc-201 RED 前瞻契约落地观测(已知预期)
+- HEAD 含合入 `ab6c15ae0` Merge task/S-cfc-201,契约类 `AdminArticleManageContractTest` 24 例实测 **6F 18 绿**,与提交声明完全一致。
+- **待研发实现**:`admin.article.manage` 文章发布-审核使绿。
+
+### 3. 后端承袭口径稳定
+- 窗口 main 源码零变更 → 后端全量承袭 R191 同源码基线 3315 例/3232 过/79 红 + 收尾增量 52 例/13 过/39 红(R191 已跑)+ 本轮 S-cfc-201 定向 24 例/18 过/6 红 = **合计 3391 例 / 3263 过 / 124 红**。
+- 存量装置/数据红 24 与 R191 一致,无新回归。
+
+---
+
+## 二、待下轮关注事项
+
+| 优先级 | 项 | 说明 |
+|---|---|---|
+| **P0** | B-142-2(key/配额) | 251 langgraph key `****ab12` 轮换 + AgnesAI 免费额度升级,否则 B-186-1 与 B-192-1 持续 |
+| **P1** | B-192-2(direct-register) | 研发核对线上注册接口契约 + 测试 helper 同步 |
+| **P1** | S-cfc-201(RED 前瞻) | `admin.article.manage` 实现使绿 |
+| **P1** | B-177-1(pytest 挂死) | `app/main.py` shutdown `await client.aclose()` + 派发器 `timeout -k 10 900` |
+| **P2** | B-184-1(Maven 慢类) | 增 `application-test.yml` 禁 `@EnableScheduling` + 迁移语法修 |
+
+---
+
+## 三、统计摘要
+
+| 套件 | 结果 | 关键观察 |
+|---|---|---|
+| 后端全量(承袭) | 3315 例 / 3232 过 / 79 红 | 零源码变更 |
+| 后端增量-S-cfc-201 | 24 例 / 18 过 / **6 红** | 与承诺一致 |
+| fe Jest | 609 / 3 / 12 | 3 预期 RED |
+| cfc-web Jest | 116 / 116 | 全绿 |
+| 浏览器 E2E | 28 过 / 2 跳 | 189 admin 5/5 + 本机 fe/shop/health + dx 2 skip |
+| langgraph pytest@251 | 47 / 4 | 环境红,例集漂移 |
+| langgraph live 三端点 | chat/analyze 000/20s | B-186-1 第 6 轮延续 |
+| 线上 API 全量 | 175 / 795 skip / **20 红** | **B-192-2 direct-register 同根因** |
+| 匿名鉴权 6 端点 | 6/6 = 401 | 维持销号 |
+| 根级黑盒 | 7 / 16 | B-36 第 76 轮 |
+| **全站** | **5225 / 4245** | 剔 skip **96.22%** · 红 167 |
+
+---
+
+## 四、Git 证据
+
+- 本地 HEAD:`ab6c15ae0` → 快进至远端 `7558d8cf4`
+- 推送内容:`automation-run-2026-11-13-R192.md` + `blockers.md` + `notice-...R192-...md`
+- SSH fetch 仍不可用 → HTTP 兜底生效