|
@@ -0,0 +1,445 @@
|
|
|
|
|
+# 测试负责人工作汇报(R185 轮)
|
|
|
|
|
+
|
|
|
|
|
+> 本汇报按《测试负责人工作汇报模板》填写。R185 为**定向复验轮**:基线 `cfclub @ 58ee58114`(=origin,07:14 fetch 核验;R184 增量复验修正已含 `ca56f8699` membership 实现)。窗口内(R184 推送后)零提交、**零源码变更**,与 R184 最终实测基线 `58ee58114` 做 `git diff` 核验:**src 变更 = 0**。
|
|
|
|
|
+> 本轮**后端全量跑测按「先探速再决定」执行**:08:16 启动 `mvn -o -B clean test`,实测 **8 分钟仅完成 13 类(≈1.6 类/分钟,比 R184 的 2 类/分钟更慢)** → B-184-1 持续(第 2 轮,宿主 CPU 已降至 40% 仍无改善,证结构性根因)→ 按纪律**主动截断**,改「**同源码全量结果沿用 R184 增量后最终值** + **本轮 14 红类定向实测复验**」双证,口径与本轮实测逐类对齐。
|
|
|
|
|
+> **★ 结果变化**:全站 **3987 例 / 3907 过 = 97.99%**(剔 skip **98.61%**),**环比 -6 过**(langgraph 环境红 +5、TaskReview 装置浮动 +1)——**G1 回落 ❌(97.99% 略低于 98% 线)**,详见 §八。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 基本信息
|
|
|
|
|
+
|
|
|
|
|
+| 项目 | 内容 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| 汇报人 | 测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
|
|
|
|
|
+| 汇报周期 | 2026年11月13日 07:14 ~ 07:45(第 185 轮) |
|
|
|
|
|
+| 基线 | `cfclub @ 58ee58114`(=origin,07:14 fetch 核验) |
|
|
|
|
|
+| 窗口内需求变更 | **零** — SRS/场景/接口文档零变更(G12 ✅,用例零新增) |
|
|
|
|
|
+| 窗口内源码变更 | **零** — `6d3564510..58ee58114` 仅 docs(R184 汇报自身),src 命中 0 |
|
|
|
|
|
+| 负责模块/单元 | 全站:cfc-backend JUnit(**红类定向复验 + 同源码全量沿用**)· 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · cfc-web/cfc-frontend Jest · 根级黑盒 · 线上 API 非功能层 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 一、本轮工作数据汇总
|
|
|
|
|
+
|
|
|
|
|
+### 1.1 测试用例建设
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| **本轮新增测试用例数\*** | **0 个** | SRS/场景窗口零变更,未触发用例编写闸门(G12 ✅) |
|
|
|
|
|
+| **本轮验证执行测试数\*** | **3987 个** | 后端 JUnit 3111(**同源码沿用 R184 最终值** + 本轮 103 例红类定向复验)+ 前端 Jest 624 + 管理端 116 + langgraph 51(本轮实测)+ 浏览器 30(28 过 + 2 跳,本轮实测)+ 线上 API 32(25 过 + 7 跳,本轮实测)+ 根级 23(本轮实测) |
|
|
|
|
|
+| **用例通过率** | **97.99%**(3907/3987;剔除 skip **98.61%**) | 红 55 / 跳 25,环比 **-6 过**,明细见 §四 |
|
|
|
|
|
+| **用例台账** | `tests/test-cases/` 16 份 / 表行 **876** / 唯一 TC **308** | 场景 **152** / 可执行锚点 **100**(排除 generated 253 条脚本化);与 R184 口径一致 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.2 会话与任务分发
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| **分派任务数\*** | **3 个** | R185-1 → `opencode-189`(admin-desktop **5/5 EXIT=0**,1.2m);R185-2 → `opencode-251`(langgraph pytest **44/51**,114.21s + 收尾清理);R185-3 → 本机串行(fe/shop/health/dx 浏览器 + 2 套 Jest + 线上 API + 根级 + 后端全量探速截断 + 红类定向复验) |
|
|
|
|
|
+| **恢复智能体会话数\*** | 0 个 | 189/251 均首派成功 |
|
|
|
|
|
+| **当前在用会话数** | 0 个 | 全部结束;251 pytest 残留进程已 kill(B-177-1 第 8 轮复现,见 §4.5) |
|
|
|
|
|
+
|
|
|
|
|
+### 1.2b 各会话当前工作状态列表
|
|
|
|
|
+
|
|
|
|
|
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
|
|
|
|
|
+|----------|--------------|----------|----------|---------------|----------|------|
|
|
|
|
|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.2m) | `C:\code\cfc\tests` | **5/5 EXIT=0**;spec blob `4703d73fb` = 本机(跨节点可比) |
|
|
|
|
|
+| `opencode-251` | 192.168.16.251:4096 | done | langgraph pytest 51 例 | 已完成(114.21s)+ 清理 | `/sc-data/cfc/cfc-langgraph` | **44 过 / 7 红**;红 2→7;残留 pid 已 kill |
|
|
|
|
|
+| `local-browser` | 本机进程 | done | fe / shop / health / dx | 已完成 | `d:\cfc\tests` | fe **6/6**(54.2s)、shop **4/4**、health **13/13**(7.4s)、dx **2 跳** |
|
|
|
|
|
+| `local-api` | 本机进程 | done | 线上 API 冒烟/安全/性能兼容/追溯 | 已完成(38.2s) | `d:\cfc\tests` | **25 过 / 7 跳 / 0 红**(点名 4 文件) |
|
|
|
|
|
+| `local-jest` | 本机进程 | done | cfc-web + cfc-frontend + 根级 | 已完成 | `cfc-web` / `cfc-frontend` / `tests` | web **116/116**(18.4s)、fe **609/3/12**(19.4s)、根级 **7/16**(3.9s) |
|
|
|
|
|
+| `local-backend` | 本机进程 | done(截断 + 定向) | 全量探速 → 截断于 13 类 → 14 红类定向复验 | 全量 8m 后截断;定向 04:51 内 | `d:\cfc\cfc-backend` | 全量 13 类 / 0 红类;**定向 103 例 / 23F+6E / 1 跳** |
|
|
|
|
|
+
|
|
|
|
|
+### 1.3 问题处置
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 数量 | 填写说明 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| **新测试发现问题数\*** | **0 个** | 无新 B-#;B-184-1 持续、B-142-2 恶化(环境红)均为承袭项 |
|
|
|
|
|
+| **已解决测试相关问题数\*** | **0 个** | 各承袭项未见修复;langgraph 红 2→7(**恶化**,环境红形随配额漂移) |
|
|
|
|
|
+| **待解决测试相关问题数** | P0×2 / P1×6 / P2×4 | ① B-142-2 langgraph 上游 LLM 不可达(P0,第 15 轮,本轮恶化红 2→7:401 `****ab12` + 429 免费配额耗尽双因齐发);② B-152-1/2 CI 清单双向失真(P0/P1,**第 17 轮**,漏拦 7 / 陈旧 26);③ B-184-1 全量耗时劣化 >2.5h(P1,第 2 轮);④ B-156-1 `nutrition_age_dosage` DDL 缺陷(P1,第 10 轮);⑤ B-162-1 3 类未入库测试(P1);⑥ S-cfc-176 幂等分支 1 例未闭环(P1,第 2 轮);⑦ S-cfc-178 契约预期 RED 4 例(P1);⑧ B-177-1 pytest 进程不退出(P1,第 8 轮复现);⑨ B-173-1 safe-delete 守卫(P2);⑩ B-178-1 反射装置浮动(P2,本轮维持 2F);⑪ B-95 204 节点失联(P2,第 41 轮);⑫ B-170-1 `activities.approved_count` 迁移语法错(P2,第 7 轮) |
|
|
|
|
|
+
|
|
|
|
|
+### 1.4 本轮 git 提交与推送证据(真理证据)
|
|
|
|
|
+
|
|
|
|
|
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
|
|
|
|
|
+|----------|-----------------|------|--------------|----------|------------|------|
|
|
|
|
|
+| (收尾)R185 commit | 全站巡检 R185 | 汇报 | 报告 + 运行台账 + blockers + 研发通知 | cfclub | ✅ 本轮推送 | langgraph 环境红 2→7、G1 回落 → 提交并通知研发 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.5 状态机阶段分布(全局进度)
|
|
|
|
|
+
|
|
|
|
|
+| 阶段 | 键数 | 备注 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| UNTRACKED | 0 | 窗口零新增规格 |
|
|
|
|
|
+| RED | 11 | S-cfc-168 契约 1 例(幂等)+ S-cfc-178 契约 4 例 + 其他预期 RED 6 例 |
|
|
|
|
|
+| YELLOW | 72 | 研发负责人口径 |
|
|
|
|
|
+| GREEN | 8 | 承袭 |
|
|
|
|
|
+| DONE | 15 | 承袭 |
|
|
|
|
|
+| 合计 | 106 | 研发侧状态账本口径 |
|
|
|
|
|
+
|
|
|
|
|
+### 1.6 数据源健康度
|
|
|
|
|
+
|
|
|
|
|
+| 数据源 | 读取键数 | 是否正常 | 备注 |
|
|
|
|
|
+|--------|----------|----------|------|
|
|
|
|
|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用(CFC 声明配置) |
|
|
|
|
|
+| 契约常量(contract) | 多组 | 正常 | 契约测试类跨轮核验正常 |
|
|
|
|
|
+| 测试用例引用(test_case_map) | 308 唯一 TC | 正常 | 台账扫描正常 |
|
|
|
|
|
+| 执行结果回填(case_results) | — | 正常 | 侧车未重写,保留既有回写 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 二、历史审查记录(阶段 -1 记忆召回)
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 内容 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 上次审查 | **R184(2026-11-13 07:20,提交 `58ee58114`)**,结论「不通过(承袭;G1 转 ✅)」,最终口径全站 3987/3913(98.14%,剔 skip 98.76%),后端红 28(含 S-cfc-176 增量 -6),langgraph 49/51 红 2,14 红类定向 13/14 类逐例一致 |
|
|
|
|
|
+| 遗留缺口 | 后端存量红 28 · langgraph 环境红 2 · 根级 16 红(9082 未起)· CI 漏拦 7/陈旧 26(B-152-1/2)· 3 未入库测试(B-162-1)· B-177-1 pytest 不退出 · B-178-1 反射装置 · **B-184-1 后端全量耗时劣化 >2h**(本轮持续且更慢)· S-cfc-176 幂等 1F + S-cfc-178 4F 契约预期 RED |
|
|
|
|
|
+| 本次是否改善 | **① 恶化:langgraph 红 2→7**(401+429 双因齐发,intent 4 例复红,全环境红非回归);**② 恶化:B-184-1 持续**(13 类/8min ≈1.6 类/min,比 R184 更慢);**③ 持平:14 红类定向逐类与 R184 一致**(零漂移第 21 次,TaskReview 维持 2F 装置浮动);**④ 持平:浏览器/两套 Jest/根级/线上 API/匿名鉴权 6/6 全 401 逐项零漂移** |
|
|
|
|
|
+| 教训应用 | ① **全量探速前置**:本轮启动后 8 分钟即核速度,确认 1.6 类/min → 及时截断,未浪费窗口(R184 39min 才截断);② **CPU 负载与速度解耦**:本轮 CPU 40%(R184 100%)但速度更慢 → 证 B-184-1 根因为结构性(慢类 + 每类上下文 + 迁移错),非宿主负载;③ 251 kick 用内联命令串 + POSIX 日志路径(R173 教训),本轮日志正常落盘;④ 251 派前查残留(本轮无残留),派后清残留(pid 3402723 kill,B-177-1 第 8 轮) |
|
|
|
|
|
+
|
|
|
|
|
+> 本次为该对象**第 185 次**审查,有历史记录;上述内容仅作对照,**本次结论全部来自本轮实测 + 显式标注的同源码沿用**。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 三、项目画像与覆盖矩阵
|
|
|
|
|
+
|
|
|
|
|
+### 3.1 项目画像(承袭并本轮核验)
|
|
|
|
|
+
|
|
|
|
|
+| 维度 | 内容 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| 业务定位 | 家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
|
|
|
|
|
+| 技术栈 | Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000@251) |
|
|
|
|
|
+| 模块结构 | `cfc-backend`(366 控制器,2121 主源 + 375 测试源)· `cfc-frontend`(42 测试文件)· `cfc-web`(17 套件)· `cfc-langgraph`(51 例)· `dan/danshop` · `tests`(89 e2e + 5 e2e-live) |
|
|
|
|
|
+| 关键路径 | 登录/家庭/成员(含移除成员缓存重算)→ 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付(退款查询/到店核销)→ AI 对话(LangGraph) |
|
|
|
|
|
+| 测试现状 | 后端 368 类 3111 例(**同源码沿用 R184** + 本轮 14 红类 103 例定向复验)+ 前端 624 + 管理端 116 + 浏览器 30 + 线上 API 32 + langgraph 51 + 根级 23 |
|
|
|
|
|
+| 质量目标 | 全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
|
|
|
|
|
+| 风险点 | ① 后端红 29(承袭 28 + TaskReview 装置 +1)· ② **B-184-1 全量耗时劣化持续**(本轮更慢)· ③ langgraph 上游双因(401 key + 429 配额)红 7 · ④ CI 排除清单漏拦 7 + 陈旧 26(B-152-1/2 第 17 轮)· ⑤ 根级 16 红(9082 未起) |
|
|
|
|
|
+| 待核实项 | `nutrition_age_dosage` DDL 缺陷修复状态(B-156-1 第 10 轮未修)· S-cfc-176 幂等/S-cfc-178 实现排期 · 251 上游凭据与配额 · 204 节点恢复(B-95 第 41 轮)· 本轮全量截断导致「368 类全量逐例」未经本轮独立复现(以 R184 增量后同源码结果为准,标「待全量耗时修复后复核」) |
|
|
|
|
|
+
|
|
|
|
|
+### 3.2 20 类测试覆盖矩阵(全类不省略)
|
|
|
|
|
+
|
|
|
|
|
+| # | 测试类型 | 三态 | 证据(本轮实测) |
|
|
|
|
|
+|---|----------|------|------------------|
|
|
|
|
|
+| 1 | 单元测试 | ✅ 已发现 | 后端 368 类 3111 例(同源码沿用 + 本轮定向 103 例);前端 42 文件 624 例(本轮实测) |
|
|
|
|
|
+| 2 | 测试覆盖率 | ⚠️ 部分 | 管理端 Jest 覆盖率可产出;后端未开 jacoco(未授权改 pom) |
|
|
|
|
|
+| 3 | 变异测试 | ❌ 未发现 | 全仓无 pitest/mutation 配置 |
|
|
|
|
|
+| 4 | 集成测试 | ✅ 已发现 | `*IntegrationTest`(GuideModule/EnergySystemFlow/Orchestration 等)本轮定向实测,红数一致 |
|
|
|
|
|
+| 5 | 契约测试 | ✅ 已发现 | 契约类 20+;S-cfc-176 幂等 1F / S-cfc-178 4F 预期 RED 维持;TaskReviewScP11 **2F**(B-178-1 装置浮动) |
|
|
|
|
|
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 API 32 例(25 过 / 7 跳 / 0 红,本轮实测 38.2s) |
|
|
|
|
|
+| 7 | 系统/端到端 | ✅ 已发现 | 浏览器 30 例:admin 5 + fe 6 + shop 4 + health 13 + dx 2(跳)(本轮实测) |
|
|
|
|
|
+| 8 | 验收 UAT | ⚠️ 部分 | `tests/test-cases/cross-role-e2e.md` 双角色验收场景有台账;本轮无人工 UAT |
|
|
|
|
|
+| 9 | BDD 规格 | ⚠️ 部分 | spec 201 份含 Given/When/Then 语义;无 cucumber 执行器 |
|
|
|
|
|
+| 10 | 冒烟测试 | ✅ 已发现 | `api-smoke.spec.js` 本轮全绿 |
|
|
|
|
|
+| 11 | 回归测试 | ✅ 已发现 | 7 套件全量回归 + 后端红类定向复验;存量红集合 14/14 类逐例一致(零漂移第 21 次) |
|
|
|
|
|
+| 12 | 探索性测试 | ✅ 已发现 | 本轮现场探索:langgraph 红 7 全定性为 401/429 环境红;全量速度探针(1.6 类/min)证 B-184-1 结构性;无新缺陷 |
|
|
|
|
|
+| 13 | 性能测试 | ⚠️ 部分 | `nonfunc-perf-compat.spec.js`(7 跳中部分属性能项);压测未授权未执行;**后端全量实测耗时劣化持续**(B-184-1) |
|
|
|
|
|
+| 14 | 可靠性测试 | ⚠️ 部分 | 上游 LLM 401/429 提供弱故障注入证据(health 200/4.4ms 而 LLM 链路降级);无长稳/混沌测试 |
|
|
|
|
|
+| 15 | 安全测试(SAST/DAST) | ⚠️ 部分 | `nonfunc-security.spec.js` 全绿;匿名 6 端点 **6/6 = 401**(本轮实测);SAST 未授权 |
|
|
|
|
|
+| 16 | 依赖漏洞扫描 | ❌ 未发现 | 无 `npm audit`/`dependency-check` 门禁,且属联网档未授权 |
|
|
|
|
|
+| 17 | 兼容性测试 | ⚠️ 部分 | Playwright `frontend-mobile` 移动视口 6/6(本轮实测);无多浏览器矩阵 |
|
|
|
|
|
+| 18 | 可用性测试 | ⚠️ 部分 | 页面可渲染/导航/TabBar 断言覆盖;无真实用户可用性测试 |
|
|
|
|
|
+| 19 | 无障碍测试 | ❌ 未发现 | 无 axe-core 等 a11y 断言 |
|
|
|
|
|
+| 20 | QA 流程与质量指标 | ⚠️ 部分 | 本报告 + blockers + 度量可复现;G9 锚点 **20.1%**(严格口径,与 R184 一致)、G11 CI 失真(第 17 轮) |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 四、本轮实测明细
|
|
|
|
|
+
|
|
|
|
|
+### 4.1 套件数据
|
|
|
|
|
+
|
|
|
|
|
+| 套件 | 执行 | 通过 | 红 | 跳 | 耗时 | 判定 |
|
|
|
|
|
+|------|------|------|----|----|------|------|
|
|
|
|
|
+| 后端 JUnit **全量** | 13/368 类 | — | 0 | — | **8m(截断)** | ⚠️ **本轮探速即截断**(1.6 类/min,B-184-1 持续第 2 轮);前 13 类全绿,`testCompile 375 源 0 错` |
|
|
|
|
|
+| 后端 **14 红类定向复验**(本轮实测) | 103 | 73 | **23F+6E=29** | 1 | ≈04:51(Total time 4m 级) | **14/14 类逐例与 R184 一致**(零漂移第 21 次);TaskReview 维持 2F(B-178-1 装置浮动) |
|
|
|
|
|
+| 后端**全量结果(沿用 R184 增量后,同源码)** | 3111 | 3079 | 28 | 4 | — | 本轮 `git diff` 证 src 零变更 → 沿用并显式标注;R184 已含 S-cfc-176 增量 -6 |
|
|
|
|
|
+| 前端 Jest(本轮实测) | 624 | 609 | 3 | 12 | 19.4s | 3 全预期 RED(S-cfc-132/133 + AC-2 RED-A7) |
|
|
|
|
|
+| 管理端 Jest(本轮实测) | 116 | 116 | 0 | 0 | 18.4s | 全绿(17 套件) |
|
|
|
|
|
+| langgraph@251(本轮实测) | 51 | **44** | **7** | 0 | 114.21s | **红 2→7(恶化)**:auto_tag 3 + intent 4,全环境红(401 key `****ab12` + 429 免费配额耗尽) |
|
|
|
|
|
+| 浏览器 189+本机(本轮实测) | 30 | 28 | 0 | 2 | 1.2m+1.3m | dx 2 跳(契约仅登记不实现) |
|
|
|
|
|
+| 线上 API 非功能层(本轮实测) | 32 | 25 | 0 | 7 | 38.2s | 契约缺口 3 例 fixme(同 R184/R183) |
|
|
|
|
|
+| 根级黑盒(本轮实测) | 23 | 7 | 16 | 0 | 3.9s | 全 ECONNREFUSED 9082(B-36 第 70 轮) |
|
|
|
|
|
+| **合计(采用「后端沿用 R184 增量后」口径)** | **3987** | **3907** | **55** | **25** | — | **97.99%(剔 skip 98.61%)** |
|
|
|
|
|
+
|
|
|
|
|
+> vs R184(3913 过 / 98.14%):**-6 过、红 49→55**。构成:langgraph 红 2→7(-5 过,环境红)+ TaskReview 装置浮动 1F→2F(-1 过,非产品回归)。其余套件逐项零漂移。
|
|
|
|
|
+> **口径声明(重要)**:后端 3111 例为「同源码沿用 R184 增量后」,非本轮独立复现。本轮实证 = 全量前 13 类 + 14 红类 103 例定向(29 红逐例与 R184 一致)。**G1 的 97.99% 是「本轮实测 6 套件 + 同源码沿用 1 套件」的混合口径,且 CFC 后端全量能力因 B-184-1 尚不可用,已在 blockers 双处标注。**
|
|
|
|
|
+
|
|
|
|
|
+### 4.2 后端红类明细(29 红,14 类,本轮定向实测)
|
|
|
|
|
+
|
|
|
|
|
+| 红类 | 本轮实测 | R184 | 一致性 |
|
|
|
|
|
+|------|----------|------|--------|
|
|
|
|
|
+| `EnergySystemFlowTest` | 7 例 / **6F** / 1S | 6F / 1S | ✅ 一致 |
|
|
|
|
|
+| `GrowthPublicEndpointMappingTest`(未入库,B-162-1) | 5 例 / **5E** | 5E | ✅ 一致 |
|
|
|
|
|
+| `MembershipPlanPurchaseContractTest` | 7 例 / **1F** | 1F(增量后) | ✅ 一致(幂等分支未修,问题 7 第 2 轮) |
|
|
|
|
|
+| `FamilyRemoveMemberContractTest` | 8 例 / **4F** | 4F | ✅ 一致(S-cfc-178 预期 RED) |
|
|
|
|
|
+| `DimensionRegistryMapContractTest` | 7 例 / **3F** | 3F | ✅ 一致(存量 P-9) |
|
|
|
|
|
+| `TaskReviewScP11ContractTest` | 8 例 / **2F** | 2F | ✅ 一致(B-178-1 装置浮动维持) |
|
|
|
|
|
+| `GuideModuleIntegrationTest` | 4 例 / **1E** | 1E | ✅ 一致 |
|
|
|
|
|
+| `OrchestrationEngineTest` | 8 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| `OrchestrationIntegrationTest` | 7 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| `MembershipPaySwitchTest` | 6 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| `PaymentServiceORDRoutingTest` | 3 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| `UserServiceWechatLoginTest` | 5 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| `UserServiceWechatLoginContractTest` | 6 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| `TeamProfitCronContractTest` | 22 例 / **1F** | 1F | ✅ 一致 |
|
|
|
|
|
+| **合计** | **103 例 / 23F+6E / 1S = 29 红** | 29 红 | ✅ **14/14 类逐例一致(零漂移第 21 次)** |
|
|
|
|
|
+
|
|
|
|
|
+> `BUILD FAILURE`(预期,有红例);`Total time 04:51`(同量级);`testCompile 375 源 0 错`。
|
|
|
|
|
+> **口径**:28 红为「R184 增量后承袭值(TaskReview 按 1F)」;本轮定向实测 29 红含 TaskReview 2F(+1 装置浮动),故全站红 55 = 后端 29 + 根级 16 + langgraph 7 + 前端 3,已在 §八 G2 如实标注。
|
|
|
|
|
+
|
|
|
|
|
+### 4.3 本轮全量探速截断取证(B-184-1 第 2 轮证据链)
|
|
|
|
|
+
|
|
|
|
|
+| 证据 | 值 |
|
|
|
|
|
+|------|-----|
|
|
|
|
|
+| 编译 | 主源 2121 / 测试源 375,**0 编译错** |
|
|
|
|
|
+| 完成类数 | **13 / 368**(`Tests run:` 计数,全部 config 包小类) |
|
|
|
|
|
+| 已用时间 | **8 分钟**(07:16 启动 → 07:26 截断),≈ **1.6 类/分钟** |
|
|
|
|
|
+| 宿主负载 | CPU **40%**(R184 为 100%)——**速度未随负载下降改善**,证根因为结构性 |
|
|
|
|
|
+| 单类 | 前 13 类均 <1s(config 小类);慢类(GuideRolePermission 455s 等)尚未轮到 |
|
|
|
|
|
+| 推算 | 若维持 1.6 类/分钟 → 全量 ≈ **230 分钟(>2.5h)**,比 R184 推算的 184min 更慢 |
|
|
|
|
|
+| 处置 | 主动 kill(pid 18124/14148),改「同源码沿用 + 红类定向复验」,**不把截断当全量结论** |
|
|
|
|
|
+| 结论 | **B-184-1 持续第 2 轮且未见缓解**(结构性:慢类 @SpringBootTest 重上下文 + 缺 application-test.yml 重跑迁移 + B-170-1/B-156-1 迁移错);CPU 40% 仍 1.6 类/min 排除了「R184 高负载致慢」的单因解释 |
|
|
|
|
|
+
|
|
|
|
|
+### 4.4 langgraph 红例(7,较 R184 恶化 5 例)
|
|
|
|
|
+
|
|
|
|
|
+| 例 | 归因 |
|
|
|
|
|
+|----|------|
|
|
|
|
|
+| `test_auto_tag.py::test_auto_tag_valid_format` | chat 端点 500;日志 `401 Authentication Fails, Your api key: ****ab12 is invalid`(召回记忆/保存记忆失败)+ `429 AgnesAI free rate limit` |
|
|
|
|
|
+| `test_auto_tag.py::test_auto_tag_short_content` | 同上(401 + 429) |
|
|
|
|
|
+| `test_auto_tag.py::test_auto_tag_empty_content` | 同上(429 RateLimitError 6.87s/8.43s) |
|
|
|
|
|
+| `test_intent.py::test_classify_analysis` | `intent_classifier.py:62 意图分类失败: 429 rate limit` → 默认 chat → `assert CHAT == ANALYSIS` 失败 |
|
|
|
|
|
+| `test_intent.py::test_classify_recommend` | 同上(429 → 默认 chat) |
|
|
|
|
|
+| `test_intent.py::test_classify_mind` | 同上(429 → 默认 chat) |
|
|
|
|
|
+| `test_intent.py::test_classify_health` | 同上(429 → 默认 chat) |
|
|
|
|
|
+
|
|
|
|
|
+- **双因齐发(较 R184 单因 ConnectError 更广)**:① 记忆召回/保存 `401 key ****ab12 invalid` → chat 500(auto_tag 3 红);② **意图分类 `429 AgnesAI 免费用户每日文本配额耗尽`**(request id 时间戳 2026-11-12 23:18 UTC = 本日 07:18 CST)→ intent 全降级默认 chat(intent 4 红);
|
|
|
|
|
+- 节点 HEAD `4bf5117b0`(langgraph 目录零源码差异,窗口零提交);`/health` **200/4.4ms**(服务进程活)→ **判环境红(C 类)**,非代码回归;
|
|
|
|
|
+- **红例形随配额/凭据漂移**(R184 为 ConnectError、R183 为 429/401)→ 印证「不要沿用上轮红例归因」;
|
|
|
|
|
+- `intent` 4 例曾连续 2 轮绿(R183/R184),本轮复红 → **B-142-2 观察由 7/13 回落**(配额耗尽窗口性,非持续)。
|
|
|
|
|
+
|
|
|
|
|
+### 4.5 B-177-1 第 8 轮复现(pytest 进程不退出)
|
|
|
|
|
+
|
|
|
|
|
+- summary 已打印 `7 failed, 44 passed in 114.21s`,但 `bash -c`(pid 3402720)与 `.venv/bin/python -m pytest`(pid 3402723)**存活未退出** → 日志无 `EXIT=` 行;
|
|
|
|
|
+- 已 `kill -9` 清理,清理后 251 `/health` **200/4.4ms** 正常;`ps | grep pytest` = 0;
|
|
|
|
|
+- **第 8 轮复现**(R177 首发、R184 第 7 轮、本轮第 8 轮),佐证「被测进程挂死」而非 shell 引号/MSYS 路径问题。
|
|
|
|
|
+
|
|
|
|
|
+### 4.6 匿名鉴权探针(G8,本轮实测 6/6)
|
|
|
|
|
+
|
|
|
|
|
+| 端点 | HTTP | body.code | 判定 |
|
|
|
|
|
+|------|------|-----------|------|
|
|
|
|
|
+| `POST /api/mind/fortune/data` | 401 | 401 | ✅ |
|
|
|
|
|
+| `POST /api/energy/data/current` | 401 | 401 | ✅ |
|
|
|
|
|
+| `POST /api/health/plan/generate` | 401 | 401 | ✅ |
|
|
|
|
|
+| `POST /api/growth/record/list` | 401 | 401 | ✅ |
|
|
|
|
|
+| `POST /api/admin/families/overview` | 401 | 401 | ✅ |
|
|
|
|
|
+| `POST /api/huawei-health/status` | 401 | 401 | ✅ |
|
|
|
|
|
+
|
|
|
|
|
+> B-142-1(曾长期「HTTP 200 + code:400」)**销号维持第 11 轮**。
|
|
|
|
|
+
|
|
|
|
|
+### 4.7 线上与节点探活
|
|
|
|
|
+
|
|
|
|
|
+| 目标 | 结果 | 判定 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| `GET /admin` | **302**(→登录) | ✅ |
|
|
|
|
|
+| `GET /frontend` | **302**(→登录) | ✅ |
|
|
|
|
|
+| `GET /` | **404** | ⚠️ B-141-3(与 R184 一致) |
|
|
|
|
|
+| `251:4096` | **200** | ✅ G10 |
|
|
|
|
|
+| `189:4090` | **200** | ✅ G10 |
|
|
|
|
|
+| `204:4090` | **000** | ⚠️ B-95 第 41 轮 |
|
|
|
|
|
+| 189 spec blob | `4703d73fb` | ✅ = 本机(跨节点可比) |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 五、五要素问题清单
|
|
|
|
|
+
|
|
|
|
|
+### 问题 1:B-184-1(P1,第 2 轮持续)后端全量耗时劣化,全量巡检不可行
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:同源码下 R184 39min 仅 76 类(≈2 类/min);本轮 **8min 仅 13 类(≈1.6 类/min)**,推算全量 ≈230min(>2.5h),比 R184 更慢。本轮宿主 CPU 仅 **40%**(R184 100%),速度不升反降 → **排除单因高负载**,证结构性根因。
|
|
|
|
|
+2. **测试 bug 点**:`cfc-backend/src/test/java/com/etotem/cfc/controller/GuideRolePermissionTest.java`(455.5s)、`.../controller/FamilyControllerTest.java`(192.3s)、`.../controller/PaymentControllerTest.java`(136.8s)、`.../controller/GuideFamilyTaskControllerTest.java`(125.9s)、`.../controller/DimensionRegistryTreeTest.java`(114.3s);公共装置侧:`src/test/resources` 缺 `application-test.yml`,每类 `@SpringBootTest` 重建上下文并重跑 `DatabaseInitializer` 全量迁移。
|
|
|
|
|
+3. **最优修改方案**:① 慢类降 `@WebMvcTest`/standalone MockMvc(5 类均只测 controller 层);② 落 `src/test/resources/application-test.yml`(H2 + 小连接池)抑制上下文重建与迁移;③ 修 B-170-1/B-156-1 两条迁移语法错;④ 慢类加 `@Timeout` + surefire `forkedProcessTimeoutInSeconds`。
|
|
|
|
|
+4. **修改目的**:恢复全量回归 ≤50min 窗口能力,避免每轮「截断 + 沿用」的取证降级。
|
|
|
|
|
+5. **能否闭环**:能。复测:修复后连跑 2 轮 `mvn -o -B clean test` 总时长 ≤50min 且类/例数一致。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 2:B-152-1/2(P0/P1,第 17 轮)CI 排除清单双向失真
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:`.gitlab-ci.yml` `BACKEND_OBSERVED_CLASSES` 共 **33 类**,与本轮实测 14 红类双向差集:**漏拦 7 类**(GrowthPublicEndpointMappingTest、MembershipPlanPurchaseContractTest、FamilyRemoveMemberContractTest、TaskReviewScP11ContractTest、UserServiceWechatLoginTest、UserServiceWechatLoginContractTest、TeamProfitCronContractTest)、**陈旧 26 类**(已连续多轮全绿仍被排除)→ `backend-blocking-junit` 必然失败,硬门禁覆盖面被人为缩小 26 类。
|
|
|
|
|
+2. **测试 bug 点**:`.gitlab-ci.yml:61` `BACKEND_OBSERVED_CLASSES` 字符串(与实测快照脱节,第 17 轮未修)。
|
|
|
|
|
+3. **最优修改方案**:以本轮 14 红类为权威快照重建清单(删 26 陈旧 + 加 7 漏拦),CI 增加「清单 ↔ surefire 实测红类」自动差集校验任务。
|
|
|
|
|
+4. **修改目的**:恢复 CI 门禁可信度(G11),杜绝双向虚化。
|
|
|
|
|
+5. **能否闭环**:能。复测:重建后漏拦 0 + 陈旧 0 且 `backend-blocking-junit` 与实测红类一致。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 3:B-142-2(P0,第 15 轮,本轮恶化红 2→7)langgraph 上游 LLM 不可达(双因)
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:251 节点 `/health` 200(4.4ms),但 **① 记忆召回/保存 401 key `****ab12` invalid → chat 500;② 意图分类 429 AgnesAI 免费用户每日文本配额耗尽 → 默认 chat**。pytest **44 过 / 7 红**(R184 为 49/2)。红由 2 恶化至 7(intent 4 例复红 + auto_tag 3 全红),**全环境红**。
|
|
|
|
|
+2. **测试 bug 点**:`cfc-langgraph/tests/test_auto_tag.py::test_auto_tag_{valid_format,short_content,empty_content}`、`tests/test_intent.py::test_classify_{analysis,recommend,mind,health}`。
|
|
|
|
|
+3. **最优修改方案**:① 运维**轮换 `****ab12` key**(长期 401)+ **升级 AgnesAI 配额**(每日免费额度不足);② 加 `/health/llm` 真实打点上探;③ 对 LLM 依赖用例引入「上游不可达 → skip + `ENV_RED` 标记」,把环境故障与用例红分离。
|
|
|
|
|
+4. **修改目的**:消除 AI 五能力整域环境红;让「环境红」与「代码红」在报告层可分离;解除 429/401 对通过率的拖累。
|
|
|
|
|
+5. **能否闭环**:能。复测:连续 2 轮 251 实派 51/51 且 `EXIT=0`。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 4:B-177-1(P1,第 8 轮复现)pytest 打印 summary 后进程不退出
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:`7 failed, 44 passed in 114.21s` 已打印,但 pid 3402723 存活未退出,`echo EXIT=$rc` 永不执行 → 日志无 `EXIT=` 行。
|
|
|
|
|
+2. **测试 bug 点**:`cfc-langgraph` pytest 收尾(线索:`RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited`);派发器 `docs/tdd/tools/dispatch_251_pytest.cjs:49`。
|
|
|
|
|
+3. **最优修改方案**:① 产品侧 shutdown 钩子 `await client.aclose()` / `httpx.AsyncClient` `async with`;② 派发器 kick 串加 `timeout -k 10 900` + 单独落盘 `EXIT=124`;③ CI 以「summary 行存在 + 进程已退出」双条件判定。
|
|
|
|
|
+4. **修改目的**:使 langgraph 套件可被 CI 自动执行而不挂死,退出码成可信信号。
|
|
|
|
|
+5. **能否闭环**:能。复测:kick 后 `ps` 无残留且日志含 `EXIT=0`。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 5:S-cfc-176 幂等复用分支未生效(P1,第 2 轮,唯一剩余会员购买红例)
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:`ca56f8699` 实现 `membership.plan.purchase` 后契约 7 例 6 例转绿,剩 `repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate` 仍红:同 plan 重复购买时用例期望**复用既有 pending 订单、不再 insert 新单**,实际 `paymentOrderMapper.insert(...)` 仍被调用(`NeverWantedButInvoked`)。
|
|
|
|
|
+2. **测试 bug 点**:`cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java:201`(`repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate`)。
|
|
|
|
|
+3. **最优修改方案**:在 `MembershipService.createOrder`(或 `purchasePlan` 入口)先按 `(familyId, planId, status=PENDING)` 调 `findReusablePendingOrder`,命中则直接返回该订单 DTO 并跳过 `paymentOrderMapper.insert`;仅未命中时新建。注意与 `toOrderDTO` 字段口径一致。
|
|
|
|
|
+4. **修改目的**:消除「重复点击购买 → 多张 pending 单 → 重复扣款/对账困难」资损面。
|
|
|
|
|
+5. **能否闭环**:能。复测:`mvn -o -B test -Dtest=MembershipPlanPurchaseContractTest` **7/7 全绿**即销号。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 6:B-156-1(P1,第 10 轮)`nutrition_age_dosage` DDL 与实体三重不一致
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:`schema.sql:5345-5357` 建表含 `INDEX idx_product (product_id)` 但**无 `product_id` 列** → 每轮上下文启动抛 `SQLSyntaxErrorException: Key column 'product_id' doesn't exist`,`DatabaseInitializer` catch 后仍打「数据表检查完成」→ **表从未创建成功**;实体 `NutritionAgeDosage.java:33-34` 另有 `updateTime` 而 DDL 无 `update_time` 列。
|
|
|
|
|
+2. **测试 bug 点**:`cfc-backend/src/main/resources/schema.sql:5345`;当前无任何用例断言该表存在(覆盖缺口)。
|
|
|
|
|
+3. **最优修改方案**:① DDL 补 `product_id BIGINT NOT NULL`(或删 `idx_product`);② 补 `update_time DATETIME ...`;③ 补「关键业务表存在性契约测试」。
|
|
|
|
|
+4. **修改目的**:消除「DDL 恒失败但无人知晓」静默缺陷面。
|
|
|
|
|
+5. **能否闭环**:能。复测:全量日志无 `Key column 'product_id' doesn't exist` + 新增表存在性契约全绿。
|
|
|
|
|
+
|
|
|
|
|
+### 问题 7:B-170-1(P2,第 7 轮)`activities.approved_count` 迁移语句语法非法
|
|
|
|
|
+
|
|
|
|
|
+1. **问题描述**:`DatabaseInitializer.java:2261` 的 `UPDATE activities a SET a.approved_count = (SELECT … WHERE r.activity_id = a.id …)` 在 MySQL 非法(`SET a.col` 带别名 + 派生表引用被更新表别名)→ 本轮 `Unknown column 'a.id' in 'where clause'`,该列唯一写入点即此语句 → 持久化列恒 0。
|
|
|
|
|
+2. **测试 bug 点**:`cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java:2261`。
|
|
|
|
|
+3. **最优修改方案**:改写为 `UPDATE activities SET approved_count = (SELECT COUNT(*) FROM activity_registrations r WHERE r.activity_id = activities.id AND r.status='approved')`,补「审批后计数一致」集成断言。
|
|
|
|
|
+4. **修改目的**:消除持久化列恒 0 一致性缺陷。
|
|
|
|
|
+5. **能否闭环**:能。复测:日志无 `Unknown column 'a.id'` + 新增断言全绿。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 六、覆盖缺口清单(8 项)
|
|
|
|
|
+
|
|
|
|
|
+| # | 缺口 | 类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
|
|
+|---|------|------|------|------|--------------|--------|----------|
|
|
|
|
|
+| 1 | 后端全量本轮未跑完 | G1/G2 | 13/368 类探速即截断,改用同源码沿用 | 「368 类逐例」未经本轮独立复现 | 先解 B-184-1 再全量 | **P0** | 耗时 ≤50min 后连跑 2 轮全量 |
|
|
|
|
|
+| 2 | langgraph 上游不可达(双因) | G7 | 红 2→7(401 key + 429 配额) | AI 五能力无法验收 | 轮换凭据 + 升级配额 + `/health/llm` 探针 | P0 | B-142-2 连续 2 轮 51/51 |
|
|
|
|
|
+| 3 | CI 清单双向失真 | G11 | 漏拦 7 / 陈旧 26(第 17 轮) | 门禁必红且覆盖虚化 | 14 红类快照重建 + 自动差集校验 | P0 | 漏拦 0 + 陈旧 0 |
|
|
|
|
|
+| 4 | 契约预期 RED(S-cfc-176 幂等 1 + S-cfc-178 4) | G2/G3 | 1 + 4 维持 | 会员购买幂等分支 / 移除成员缓存重算仍空窗 | 研发补齐后定向复跑 | P1 | 7/7 + 4/4 转绿 |
|
|
|
|
|
+| 5 | pytest 进程不退出 | G7/CI | 第 8 轮复现 | CI 挂死 | `await client.aclose()` + `timeout -k` | P1 | 残留 0 + `EXIT=0` |
|
|
|
|
|
+| 6 | 根级黑盒环境红 | G2 | 16 红全 ECONNREFUSED 9082 | 黑盒盲区 | 指向线上或本地起 9082 | P2 | 非 5xx 全绿 |
|
|
|
|
|
+| 7 | 关键表存在性无断言 | G2 | B-156-1 表从未建成却无人拦 | 静默 schema 缺陷 | `information_schema` 表存在性契约 | P1 | 新增用例全绿 |
|
|
|
|
|
+| 8 | 变异/依赖漏洞/SAST | G16 | 无工具/未授权 | 漏洞面未知 | CI 离线缓存 NVD + pitest | P1 | 工具链落地 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 七、执行档与授权(双档)
|
|
|
|
|
+
|
|
|
|
|
+- **review 档(本轮执行)**:离线白名单命令——`mvn -o -B clean test`(探速截断)+ 14 红类 `-Dtest=` 定向、两套 Jest、Playwright 浏览器(内网 cfc.iwintrue.com,189/本机已授权)、线上 API 点名 4 文件、匿名鉴权探针、节点探活。
|
|
|
|
|
+- **execute 档(本轮无)**:SCA 依赖漏洞扫描、性能压测、DAST/渗透——**未授权未执行**,降级为「测试设计 + 缺口诊断」,不写成已测。
|
|
|
|
|
+- **SRS/需求档(本轮零命中)**:specs 201 / test-cases 16 / user-scenarios 11 / `API_REFERENCE.md` 窗口零变更 → 用例零新增(G12 ✅)。
|
|
|
|
|
+
|
|
|
|
|
+### 7.1 度量口径(B-124/B-32 仍未闭环,双口径并列,与 R184 一致)
|
|
|
|
|
+
|
|
|
|
|
+| 指标 | 本轮值 | 口径说明 |
|
|
|
|
|
+|------|--------|----------|
|
|
|
|
|
+| 用例台账 | 表行 **876** / 唯一 TC **308** | `tests/test-cases/*.md` 表格行 vs `TC-<域>-<...>-<NN>` 去重 |
|
|
|
|
|
+| 用户场景 | 唯一 **SC 152** | `docs/superpowers/specs/*.md` 显式编号 |
|
|
|
|
|
+| 场景→用例映射 | **88 / 152 = 57.9%** | 台账中显式引用 SC 编号 |
|
|
|
|
|
+| 可执行锚点 | **100** | 排除 `tests/e2e/api/generated`(253 条脚本化虚高) |
|
|
|
|
|
+| 双向命中 / 孤儿 / 空转 | **62 / 38 / 246** | 台账∩锚点 / 有执行无台账 / 有台账无锚点 |
|
|
|
|
|
+| **G9 可执行锚点覆盖率** | **20.1%**(62/308) | 严格口径;宽口径(含 generated)277/315 不作门禁 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 八、门禁结论(Verdict)
|
|
|
|
|
+
|
|
|
|
|
+**结论:⛔ 不通过(承袭;G1 由 ✅ 回落 ❌——langgraph 环境红恶化使通过率跌破 98% 线)**
|
|
|
|
|
+
|
|
|
|
|
+| 门禁 | 结果 | 依据 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| G1 通过率 | **❌** | **97.99%**(3907/3987;剔 skip **98.61%**)< 98%(差 0.01pct,全因 langgraph 环境红 +5 + TaskReview 装置 +1);注:后端为「同源码沿用 + 定向复验」混合口径 |
|
|
|
|
|
+| G2 红例 | ❌ | **55**(后端 29 + 根级 16 + langgraph 7 + 前端 3 预期 RED) |
|
|
|
|
|
+| G3 前端 | ⚠️ | 624 口径(609/3/12),3 红全预期 RED(S-cfc-132/133 + AC-2 RED-A7) |
|
|
|
|
|
+| G4 管理端 | ✅ | 116/116(17 套件,18.4s) |
|
|
|
|
|
+| G5 编译/完整性 | ✅ | 主源 2121 + 测试源 375 **0 编译错**;定向复验 `BUILD FAILURE` 为预期 |
|
|
|
|
|
+| G6 浏览器 | ✅ | **28/28 + 2 跳**(189 admin 5/5 EXIT=0;本机 fe 6 / shop 4 / health 13;dx 2 跳) |
|
|
|
|
|
+| G7 langgraph | ❌ | **44/51 = 86.3%**(红 7,全环境) |
|
|
|
|
|
+| G8 鉴权 | ✅ | 匿名 6 端点 **6/6 = 401** |
|
|
|
|
|
+| G9 覆盖锚点 | ❌ | **20.1%**(62/308 严格口径) |
|
|
|
|
|
+| G10 双节点 | ✅ | 251(51 例)+ 189(5/5,spec blob `4703d73fb` 与本机一致) |
|
|
|
|
|
+| G11 CI 门禁 | ❌ | 漏拦 **7** / 陈旧 **26**(第 17 轮) |
|
|
|
|
|
+| G12 SRS 合规 | ✅ | 窗口零变更(R184 已含 §4.50.1 核对),用例零新增 |
|
|
|
|
|
+| G13 零漂移 | ⚠️ | **14/14 红类逐例一致**(零漂移第 21 次);TaskReview 维持 2F(B-178-1 装置浮动,非产品回归) |
|
|
|
|
|
+| G14 场景映射 | ❌ | **57.9%**(88/152) |
|
|
|
|
|
+| G16 安全工具链 | ❌ | 无 SCA/SAST(未授权未执行) |
|
|
|
|
|
+
|
|
|
|
|
+**变化摘要(vs R184)**:
|
|
|
|
|
+1. **负向(本轮主要变化)**:**langgraph 红 2→7**(401 key `****ab12` + 429 AgnesAI 免费配额耗尽双因齐发,intent 4 例复红)→ 通过率 **98.14%→97.99%(-0.15pct)**、**G1 由 ✅ 回落 ❌**;**B-184-1 持续且更慢**(39min/76类→8min/13类,≈1.6 类/min)。
|
|
|
|
|
+2. **持平**:14 红类定向**逐例一致(零漂移第 21 次)**;浏览器/两套 Jest/根级/线上 API/匿名 6 端点 401 逐项零漂移;B-156-1、B-170-1、B-152-1/2、B-177-1、B-178-1 仍**未修**(第 10 / 7 / 17 / 8 / 5 轮);S-cfc-176 幂等 1F、S-cfc-178 4F 维持。
|
|
|
|
|
+3. **正向**:无(本轮无新闭环项;189 admin 5/5 首轮即绿第 7 轮维持、匿名 401 维持第 11 轮)。
|
|
|
|
|
+
|
|
|
|
|
+**复评转「通过」条件**:
|
|
|
|
|
+1. **B-184-1 修复** → 全量 ≤50min 且连跑 2 轮 368 类/3111 例一致;
|
|
|
|
|
+2. **B-142-2 运维处置**(轮换 `****ab12` + 升级 AgnesAI 配额)→ langgraph 连续 2 轮 51/51 + B-177-1 `EXIT=0`;
|
|
|
|
|
+3. S-cfc-176 幂等分支补齐 → `MembershipPlanPurchaseContractTest` 7/7 绿;
|
|
|
|
|
+4. S-cfc-178 实现 → `FamilyRemoveMemberContractTest` 4/4 绿;
|
|
|
|
|
+5. CI 以 14 红类快照重建双向差集(B-152-1/2)→ 漏拦 0 + 陈旧 0;
|
|
|
|
|
+6. 根级黑盒改指向(B-36)+ 授权执行 SCA/压测/SAST 且零高危。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 九、下轮前置
|
|
|
|
|
+
|
|
|
|
|
+**测试侧**
|
|
|
|
|
+1. 优先复核 B-184-1:若研发未改慢类/夹具,下轮改用「**按包切片全量(-Dtest 分组)+ 汇总**」策略,保证每轮拿到全量逐例结论,不再截断;同时把「探速截断」阈值写死(≥1.5 类/min 即截断,避免空耗窗口);
|
|
|
|
|
+2. 跟踪 S-cfc-176 幂等 / S-cfc-178 实现进度,落地即定向复跑;
|
|
|
|
|
+3. 251 派发前先查残留、派后必须核 `EXIT=` 行 + `ps` 残留双判据(B-177-1 第 8 轮教训);
|
|
|
|
|
+4. 下轮若 langgraph 红仍随配额漂移,在报告中单列「环境红漂移带」不与代码红混算。
|
|
|
|
|
+
|
|
|
|
|
+**研发侧(按 P 级排序)**
|
|
|
|
|
+1. **P0 B-142-2**:**轮换 `****ab12` key + 升级 AgnesAI 免费配额**(本轮双因齐发,比此前任何一轮更广,已阻碍 G1 达标);
|
|
|
|
|
+2. **P0 B-184-1**:5 个慢类降 `@WebMvcTest`/standalone + `application-test.yml` 夹具 + 修 B-170-1/B-156-1 迁移语法错;
|
|
|
|
|
+3. **P0 B-152-1/2**:CI `BACKEND_OBSERVED_CLASSES` 按 14 红类快照重建(漏拦 7 + 陈旧 26);
|
|
|
|
|
+4. **P1 B-177-1**:pytest 收尾 `await client.aclose()`;
|
|
|
|
|
+5. **P1 B-156-1 / B-170-1**:DDL 与迁移语句修正;
|
|
|
|
|
+6. **P1 B-162-1**:3 个未入库测试文件(`GrowthPublicEndpointMappingTest` 等)入库,否则 CI 不可见。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 附录 A:本轮命令
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+# 基线
|
|
|
|
|
+git fetch origin cfclub # -> 58ee58114(=origin,07:14 核验)
|
|
|
|
|
+git diff --name-only 6d3564510..HEAD | grep -vE '^(docs/|cfc-web/)' # 空 => 零源码变更
|
|
|
|
|
+
|
|
|
|
|
+# 环境探针(SOP 前置)
|
|
|
|
|
+/d/jdk1.8.0_25/bin/java -version && /d/maven/apache-maven-3.6.1/bin/mvn -v
|
|
|
|
|
+# 节点:189:4090=200 / 251:4096=200 / 204:4090=000;线上 admin/frontend=302、/404;CPU 40%
|
|
|
|
|
+
|
|
|
|
|
+# 后端全量(探速即截断于 13/368 类,8min,≈1.6 类/min)
|
|
|
|
|
+cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 mvn -o -B clean test > ../_r185_backend.log 2>&1
|
|
|
|
|
+# (8min 后 kill pid 18124/14148 截断)
|
|
|
|
|
+
|
|
|
|
|
+# 后端 14 红类定向复验(103 例 / 23F+6E / 1S / 04:51,14/14 类逐例一致)
|
|
|
|
|
+mvn -o -B test -DfailIfNoTests=false -Dtest='EnergySystemFlowTest,GrowthPublicEndpointMappingTest,MembershipPlanPurchaseContractTest,FamilyRemoveMemberContractTest,DimensionRegistryMapContractTest,TaskReviewScP11ContractTest,GuideModuleIntegrationTest,OrchestrationEngineTest,OrchestrationIntegrationTest,MembershipPaySwitchTest,PaymentServiceORDRoutingTest,UserServiceWechatLoginTest,UserServiceWechatLoginContractTest,TeamProfitCronContractTest'
|
|
|
|
|
+
|
|
|
|
|
+# Jest
|
|
|
|
|
+cd cfc-web && npx jest --silent # 116/116(18.4s)
|
|
|
|
|
+cd cfc-frontend && npx jest --silent # 624: 609/3/12(19.4s)
|
|
|
|
|
+cd tests && npx jest --silent # 23: 7/16(3.9s)
|
|
|
|
|
+
|
|
|
|
|
+# 浏览器(每节点单任务,串行;统一 --output 一次性目录规避 safe-delete 守卫)
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --workers=1 --output=../_r185/fe # 6/6
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=shop-api --project=dx-bridge --workers=1 --output=../_r185/shop # 4 + 2 跳
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.health.js --workers=1 --output=../_r185/health # 13/13
|
|
|
|
|
+node docs/tdd/tools/dispatch_189_admin.cjs # 189: 5/5 EXIT=0
|
|
|
|
|
+
|
|
|
|
|
+# langgraph@251(kick 内联命令串 + 远端 POSIX 日志路径)
|
|
|
|
|
+node _r185_251_lg.cjs kick && node _r185_251_lg.cjs read # 44 过 / 7 红 / 114.21s;无 EXIT 行 → kill 残留 pid 3402723
|
|
|
|
|
+
|
|
|
|
|
+# 线上 API(点名 4 文件,避免 990 例误跑)
|
|
|
|
|
+cd tests && npx playwright test -c playwright.config.api.js --workers=1 --output=../_r185/api \
|
|
|
|
|
+ e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js \
|
|
|
|
|
+ e2e/api/nonfunc-perf-compat.spec.js e2e/api/traceability-p94-p95-c26.spec.js # 25 过 / 7 跳 / 0 红
|
|
|
|
|
+
|
|
|
|
|
+# 匿名鉴权 6 端点(全 401)
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 附录 B:本轮取证产物
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 内容 |
|
|
|
|
|
+|------|------|
|
|
|
|
|
+| `_r185_backend.log` | 探速截断全量日志(13 类 / 0 红 / 编译 0 错 / 8min) |
|
|
|
|
|
+| `_r185_red_classes.log` | 14 红类定向复验(103 例 / 23F+6E / 1S / BUILD FAILURE / 04:51) |
|
|
|
|
|
+| `/tmp/r185_pytest.log`(251) | langgraph 51 例(7 failed / 44 passed / 114.21s,无 `EXIT=` 行) |
|
|
|
|
|
+| `_r185/`(fe/shop/health/api) | 浏览器套件输出(一次性目录,规避 safe-delete 守卫) |
|