|
|
@@ -0,0 +1,328 @@
|
|
|
+# 测试负责人工作汇报(第 153 轮 · 2026-11-11 20:35–21:20 GMT+8)
|
|
|
+
|
|
|
+> 角色:cfc-tester(测试负责人)|执行档:**review(离线)**——内网浏览器自动化(`cfc.iwintrue.com/admin` + `/frontend`)、langgraph 实派 `192.168.16.251:4096`、后端 `mvn -o` 全量;**未联网装依赖、未启停服务、未改生产代码**(本轮零代码改动,仅产出报告)。
|
|
|
+> 基线 HEAD:`39717eb07`(跑前 = 跑后,与 `origin/cfclub` 零漂移)。窗口 `3c3d4b0a5..39717eb07` 仅含 R152 报告提交 + 1 个 `chore: auto bump`(版本号),**零功能源码**。
|
|
|
+> 节点分工(用户约束:每节点单任务):`189:4090` = **admin-desktop 5/5**(首轮 4/5 登录前置偶发 → 同轮复验 5/5)|`251:4096` = **langgraph pytest 51 例**|`204:4090` = 000(B-95 第 22 轮)|本机 = fe/shop/health/dx + 三套 Jest + 根级 + 后端全量。
|
|
|
+> 结论:**不通过**(硬门禁 G2/G7/G9/G11 未达成)——后端 99.29%(17 红,**与 R152/R149 逐类逐例一致 → 零回归第 11 次**);langgraph **48/51**(3 红全为上游 429/401,**较 R152 改善 2 绿**);浏览器 **28/28 + 2 skip**;全量 **3783 例 / 3726 过 = 98.49%**。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 0. 基本信息(测试负责人模板)
|
|
|
+
|
|
|
+| 项目 | 内容 |
|
|
|
+|------|------|
|
|
|
+| 汇报人 | `cfc-tester`(测试负责人 / 陆谨) |
|
|
|
+| 汇报周期 | 2026-11-11 第 153 轮(跑测窗口 20:35–21:20) |
|
|
|
+| 负责模块/单元 | cfc-backend(JUnit 全量实跑)· cfc-frontend(Jest)· cfc-web(Jest)· cfc-langgraph(251 实派)· 浏览器 E2E(admin@189 / fe·shop·health·dx@本机)· 根级黑盒 |
|
|
|
+
|
|
|
+### 0.1 测试用例建设与执行
|
|
|
+
|
|
|
+| 指标 | 数量 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| **本轮新增测试用例数** | **0** 个 | 无 SRS/需求/接口变更(窗口零变更)→ 按纪律不新增;既有 3783 例全量执行 |
|
|
|
+| **本轮验证执行测试数** | **3783** 个 | 后端 2946 + 前端 617 + 管理端 116 + 根级 23 + langgraph 51 + 浏览器 30(含 dx 2 skip) |
|
|
|
+| **用例通过率** | **98.49%**(3726/3783) | 剔 skip 口径 **98.96%**(3726/3765);红 39 = 后端 17 + 前端 3 + 根级 16 + langgraph 3 |
|
|
|
+| **新增覆盖资产** | **0** 项 | 本轮无源码/资产改动(纯复验轮) |
|
|
|
+| **SRS/场景变更** | **0** | `docs/superpowers/specs` + `tests/user-scenarios` + `API_REFERENCE.md` + `docs/tdd/SRS.md` 窗口内零变更(`find -newermt 2026-11-11 18:34` 空 + `git diff --name-only` 空)→ 按纪律**不因变更更新用例**(G12 合规) |
|
|
|
+
|
|
|
+### 0.2 会话与任务分发
|
|
|
+
|
|
|
+| 指标 | 数量 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| **分派任务数** | **2** 个 | ① 189:admin-desktop(首轮 51s 4/5,U05 登录前置偶发 → **同轮复验 1.4m 5/5**,`EXIT=0`);② 251:langgraph pytest(137.00s,48/51) |
|
|
|
+| **恢复智能体会话数** | 0 | 无中断重建 |
|
|
|
+| **当前在用会话数** | 3 | 本机(done)/ 189(done)/ 251(done) |
|
|
|
+
|
|
|
+| 会话标签 | 会话 ID | 状态 | 任务 | 耗时 | 工作目录 | 备注 |
|
|
|
+|----------|---------|------|------|------|----------|------|
|
|
|
+| 本机 | localhost | done | 后端全量 + Jest×3 + 根级 + 浏览器 fe/shop/health/dx | 39:42 | `d:\cfc` | fe 6/6、shop 4/4、health 13/13、dx 2 skip |
|
|
|
+| 189:4090 | `sh_1ca9cd796…` | done | admin-desktop E2E(首轮 + 复验) | 1.4m | `C:\code\cfc\tests` | **5/5(EXIT=0)**;HEAD `3c3d4b0a5`、spec blob `4703d73fb` 与本机一致 |
|
|
|
+| 251:4096 | shell 直连(`setsid nohup` + 落盘) | done | langgraph pytest | 137.00s | `/sc-data/cfc/cfc-langgraph` | **48/51**;节点 HEAD `f99bb6956` = 本机 `39717eb07` + 1 auto bump(零源码差异) |
|
|
|
+| 204:4090 | — | unknown(000) | 失联 | — | — | B-95 第 22 轮 |
|
|
|
+
|
|
|
+### 0.3 问题处置
|
|
|
+
|
|
|
+| 指标 | 数量 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| **新测试发现问题数** | **1** 个 | B-153-1:189 admin 首轮 `TC-A-U05` 登录前置偶发(`account-roles` 接口断言非 200 → 4/5),**同轮复验 5/5 全绿**,按 B-120-New/B-121 模式判滑块/登录态偶发,非产品回归(观察项) |
|
|
|
+| **已解决测试相关问题数** | **0** 个 | 无(本轮复验,无新自处置) |
|
|
|
+| **待解决测试相关问题数** | 9 类 | 后端 17 存量红 · 前端 3 预期 RED · 根级 16 环境红(B-36 第 47 轮)· langgraph 3 上游红(B-74/B-142-2 第 5 轮)· CI 排除清单两类缺陷(B-152-1/2 未修)· 建表 SQL 无效(B-145-1 第 7 轮)· admin 鉴权门缺失(B-142-1 第 10 轮)· dx 2 端点 404(第 13 轮)· 204 失联 |
|
|
|
+
|
|
|
+### 0.4 本轮 git 提交与推送证据
|
|
|
+
|
|
|
+| 提交 sha | 阶段 | 触及文件 | 目标分支 | 已推送 | 备注 |
|
|
|
+|----------|------|----------|----------|--------|------|
|
|
|
+| 见 §10 | 测试闭环 | `docs/tdd/**`(报告/通知/台账) | `cfclub` | 是 | 结果变化(langgraph 46→48 过、全量 98.44%→98.49%)触发 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 历史审查记录(记忆召回)
|
|
|
+
|
|
|
+- **本对象非首次审查**。最近一轮全量闭环:R152(20:40,后端 99.29%/17 红、lg **46/51**、浏览器 28/28、全量 3783/3724=98.44%,已 push `39717eb07`);R150(18:44,小时降级轮,Maven 缺失仅跑 cfc-web)。
|
|
|
+- **历史遗留缺口**:① 后端 17 存量红(10 类);② langgraph 上游 429/401(B-74/B-142-2);③ 根级 16 环境红(B-36,ECONNREFUSED 9082);④ 前端 3 预期 RED;⑤ G9 用例锚点低;⑥ CI 门禁薄弱(G11,B-152-1/2)。
|
|
|
+- **本次改善**:① langgraph 46 → **48 过**(红 5 → 3,全部仍为上游 429/401,非代码回归);② 全量 98.44% → **98.49%**(+0.05pp)。
|
|
|
+- **本次恶化**:无(189 admin 首轮 U05 偶发,复验绿,判非回归)。
|
|
|
+- **声明**:历史结论仅作对照,本轮所有判定均以本轮实测取证为准。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 项目画像(阶段 0)
|
|
|
+
|
|
|
+- **业务定位**:CFC(浠艾福)家庭成长平台——家长/孩子双角色、五维能量(身/心/智/行/富)、健康报告解析、测评订单、饮食推荐、家庭关系、商城。
|
|
|
+- **技术栈**:`cfc-backend`(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· `cfc-frontend`(uni-app 小程序 Vue2)· `cfc-web`(Vue2 + Element UI,8082)· `cfc-langgraph`(FastAPI + LangGraph + ChromaDB,251:9000)。
|
|
|
+- **关键路径**:登录鉴权(JWT)→ 家庭/成员 → 健康报告上传解析 → 测评/画像 → 饮食推荐 → 商城/订单 → 游戏积分。
|
|
|
+- **测试现状(本轮实测)**:后端 347 类可全量跑通(99.29%);前端/管理端 Jest 稳定;langgraph 用例全绿依赖上游 LLM 配额;浏览器 E2E 双节点可跑;SRS 需求池零变更。
|
|
|
+- **质量目标**:① 所有用例全部覆盖并通过;② 覆盖全部 SRS 与用户场景(含异常流),SRS/场景变更时同步用例。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 测试覆盖矩阵(20 类三态)
|
|
|
+
|
|
|
+### 功能层次(5 类)
|
|
|
+
|
|
|
+| # | 类型 | 三态 | 证据 |
|
|
|
+|---|------|------|------|
|
|
|
+| 1 | 单元测试 | 已发现 | 后端 2946 例实跑(2925 过);cfc-web 116/116;cfc-frontend 617(602 过) |
|
|
|
+| 2 | 组件测试 | 已发现 | `cfc-frontend/__tests__/pages/*`(vue 挂载/契约断言,如 AC-R1/AC-R2);`cfc-web/src/__tests__/views/*` |
|
|
|
+| 3 | 测试覆盖率 | 待核实 | 后端 `pom.xml` **无 jacoco**(`grep -c jacoco` = 0)→ 后端行覆盖率无法本地量化;管理端 jest coverage 可用(历史 10.09/6.12/7.50/9.97) |
|
|
|
+| 4 | 变异测试 | 未发现 | 全仓无 pitest/mutation 配置;本轮**未实测**(白名单外工具) |
|
|
|
+| 5 | 集成测试 | 已发现 | 后端 `src/test/**/integration` 61 类(如 `EnergySystemFlowTest`、`GuideModuleIntegrationTest`);`tests/integration/*.spec.js` 2 套 |
|
|
|
+
|
|
|
+### 功能保障(4 类)
|
|
|
+
|
|
|
+| # | 类型 | 三态 | 证据 |
|
|
|
+|---|------|------|------|
|
|
|
+| 6 | 契约测试 | 已发现 | 后端 `*ContractTest` **107 类**(`DimensionRegistryMapContractTest`、`TeamProfitCronContractTest` 等);`tests/test-cases/*.md` 15 份(357 唯一 TC) |
|
|
|
+| 7 | 接口 API 测试 | 已发现 | `shop-api` 4/4、`health-api` 13/13、`dx-bridge` 2 skip(端点 404);线上匿名鉴权矩阵 5/5 = 401 |
|
|
|
+| 8 | 端到端 E2E | 已发现 | `admin-desktop` 5/5(189 实派,复验)、`frontend-mobile` 6/6(本机) |
|
|
|
+| 9 | 验收 UAT | 待核实 | 无独立 UAT 记录/签署产物;验收语义由 `tests/test-cases/*.md` 与 SC 场景池承载,**未见用户验收签字证据** |
|
|
|
+
|
|
|
+### 非功能(6 类)
|
|
|
+
|
|
|
+| # | 类型 | 三态 | 证据 |
|
|
|
+|---|------|------|------|
|
|
|
+| 10 | BDD 规格 | 未发现 | 全仓无 `*.feature`(cucumber/specflow 均无) |
|
|
|
+| 11 | 冒烟测试 | 已发现 | 根级 `tests/` Jest 黑盒 23 例(7 过/16 红,B-36);health 契约 13 例;后端 `*GateTest` 类 |
|
|
|
+| 12 | 回归测试 | 已发现 | 本轮及历轮全量回归(后端 347 类 + 4 套前端/端侧);零漂移比对机制已成文(后端零漂移第 11 次) |
|
|
|
+| 13 | 探索性测试 | 待核实 | 无 chartered 探索性会话记录;本轮巡检(线上端点/节点探活)属探索性质但未成文档化章程 |
|
|
|
+| 14 | 性能测试 | 未发现 | 无 jmx/k6/locust 脚本;本轮仅有「耗时观测」(后端 39:42,慢类 Top6) |
|
|
|
+| 15 | 可靠性测试 | 未发现 | 无故障注入/混沌演练脚本;`/health` 存活探针 200(25.8ms) 仅为可用性抽查 |
|
|
|
+| 16 | 安全测试 | 待核实 | 有手工鉴权矩阵(5 端点 401,G8 ✅)与 admin 越权探测(B-142-1),但**无 SAST/DAST/依赖漏洞扫描**工具链(需联网,未授权) |
|
|
|
+| 17 | 兼容性测试 | 未发现 | Playwright 仅 chromium 单引擎、单一视口;无 webkit/firefox/多设备矩阵 |
|
|
|
+| 18 | 可用性测试 | 未发现 | 无真实用户可用性测试记录 |
|
|
|
+| 19 | 无障碍测试 | 未发现 | 无 axe-core 等 a11y 断言(`grep axe` 零命中) |
|
|
|
+| 20 | 流程/度量 | 已发现 | `blockers.md`(B-xxx 台账)· `automation-status.md` · 各轮 report/notice · `TRACEABILITY-MATRIX.md` |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. 测试方案(本轮执行范围)
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|----|------|
|
|
|
+| 目标 | 全量用例覆盖执行 + SRS/场景覆盖核对 + 双节点派发验证 |
|
|
|
+| 范围 | 后端全量 JUnit(347 类)· cfc-frontend Jest · cfc-web Jest · 根级黑盒 · langgraph pytest(251)· 浏览器 E2E(admin@189 + fe/shop/health/dx@本机) |
|
|
|
+| 执行档 | review(离线);联网装依赖、压测、SAST 均**未授权未执行** |
|
|
|
+| 排除项 | 变异测试、性能压测、a11y、兼容多引擎、依赖漏洞扫描(无工具/需联网/需装浏览器)→ 均落「覆盖缺口清单」,不记通过 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 5. 执行结果(实测数据)
|
|
|
+
|
|
|
+| 套件 | 结果 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| 后端全量 | **347 类 / 2946 例 / 2925 过 / 16F+1E+4S = 99.29%**(剔 skip 99.42%) | `mvn -o -B clean test`,**39:42**;347/347 XML 无沉默;353 测试源 0 编译错;`classes` 2330;**与 R152/R149 逐类逐例一致 → 零回归第 11 次** |
|
|
|
+| 后端红例 | 10 类 / 17 例 | EnergySystem 6(5×`200!=500`)· DimensionRegistryMap 3(契约待裁决 P-9)· Orchestration 2 · WechatLogin 2(`memberId` 为 null)· MembershipPay 1 · PaymentORD 1 · TeamProfitCron 1(`cancelled=0`)· GuideModule 1E(`platform_fee` 截断) |
|
|
|
+| cfc-frontend | **617 = 602 过 / 3 红 / 12 skip**(36.6s) | 3 红 = AC-R1、AC-R2、RED-A7(**预期 RED**,S-cfc 未实现);零漂移 |
|
|
|
+| cfc-web | **116/116**(61.8s,17 套件) | 零漂移 |
|
|
|
+| 根级黑盒 | **23 = 7 过 / 16 红**(11.5s,2 套件) | 16 红全为 `fetch failed` → 9082 未启动(B-36 第 47 轮零漂移) |
|
|
|
+| langgraph@251 | **51 = 48 过 / 3 红**(137.00s) | 节点 HEAD `f99bb6956` = 本机 `39717eb07` + 1 auto bump(零源码差异);3 红 = `test_auto_tag`(`content_relevance`/`short_content`/`empty_content`),日志 **401 api key `****ab12` invalid** + **429 AgnesAI free limit** → C 环境红(**较 R152 改善 2 绿**:`test_intent` 2 例已转绿) |
|
|
|
+| 浏览器 | **30 = 28 过 / 2 skip** | 189 admin **5/5**(首轮 4/5 U05 偶发 → 复验 5/5,1.4m)· 本机 fe **6/6**(1.7m)· shop **4/4**(9.3s)· health **13/13**(16.0s)· dx **2 skip**(404) |
|
|
|
+| **合计** | **3783 例 / 3726 过 = 98.49%** | 剔 skip 98.96%;红 39 / 跳 18 |
|
|
|
+
|
|
|
+**线上与节点**:
|
|
|
+
|
|
|
+| 项 | 实测 |
|
|
|
+|----|------|
|
|
|
+| `/admin` `/frontend` | 302(登录墙,符合预期)|站点根 `/` = **404**(B-141-3) |
|
|
|
+| 匿名鉴权矩阵(POST) | mind/fortune · energy/overview · health/plan/list · huawei-health/status · xiaomi-health/status → **5/5 = 401**(**B-69 销号维持第 14 轮**) |
|
|
|
+| admin 越权探测 | `POST /api/admin/families/overview` 匿名 → **200 + code:400**(B-142-1 第 10 轮,未修) |
|
|
|
+| dx 端点 | `/api/dx/health/bridge`、`/api/dx/report/parse` → **404/404**(B-DX-1 第 13 轮) |
|
|
|
+| 251 服务 | `/health` 200(25.8ms) → LLM 链路当前正常(pytest 内 401+429 为上游凭据/配额) |
|
|
|
+| 节点 | 251:4096 = 200、251:9000 = 200、189:4090 = 200、**204:4090 = 000**(B-95 第 22 轮) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. 覆盖缺口清单
|
|
|
+
|
|
|
+| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|------|------|------|--------------|--------|----------|
|
|
|
+| G-153-1 后端行覆盖率不可量化 | `pom.xml` 无 jacoco | 覆盖率无法进硬门禁,仅靠例数 | 加 `jacoco-maven-plugin`(离线仓库需确认有包) | P1 | 覆盖率报告 ≥ 约定阈值并经 gate 判定 |
|
|
|
+| G-153-2 用例↔代码锚点仅 23.0% | 357 唯一 TC / 82 有代码锚点 | 台账用例无法证明被执行 | 按 §7 分布对 0 锚点域(butler/human-butler/deep-dive-*/vendor)优先补锚 | P0 | 锚点率 ≥ 60% |
|
|
|
+| G-153-3 无变异测试 | 无 pitest | 断言强度未知(例数≠有效性) | 对 `service/*` 高频模块试点 pitest | P2 | 变异杀死率 ≥ 60% |
|
|
|
+| G-153-4 无性能/可靠性基线 | 无 jmx/k6、无混沌 | 大促/高并发无容量证据 | k6 脚本覆盖登录/首页/报告上传;故障注入(DB/LLM 断连) | P2 | P95 与错误率达标 + 演练报告 |
|
|
|
+| G-153-5 单引擎单视口 | chromium only | 跨端兼容风险 | 加 webkit/mobile-safari project | P2 | ≥3 引擎矩阵通过 |
|
|
|
+| G-153-6 无 a11y 断言 | 无 axe | 无障碍合规缺失 | `@axe-core/playwright` 对首页/登录/健康页 | P2 | 无 critical 违规 |
|
|
|
+| G-153-7 无 SAST/依赖漏洞扫描 | 仅手工鉴权矩阵 | 供应链与注入风险 | 引入 semgrep/trivy(需联网,未授权) | P1 | 高危 0 |
|
|
|
+| G-153-8 测试上下文调度器常驻 | B-152-3(未修) | 耗时劣化 + 时序不确定 | 测试 profile 关闭 `@EnableScheduling` | P1 | 全量耗时回落 ≤45min 且无 scheduler 日志 |
|
|
|
+| G-153-9 UAT 无签署证据 | 无用例签字 | 验收口径不可追溯 | 场景池 → UAT 清单化并留签署 | P3 | UAT 记录归档 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. 用例锚点分布(G9 证据)
|
|
|
+
|
|
|
+| 用例文件 | 文件内唯一 TC | 其中被代码锚定 |
|
|
|
+|----------|---------------|----------------|
|
|
|
+| parent.md | 111 | 6 |
|
|
|
+| teacher.md | 43 | 1 |
|
|
|
+| admin.md | 38 | 2 |
|
|
|
+| child.md | 33 | 1 |
|
|
|
+| cross-role-e2e.md | 30 | 1 |
|
|
|
+| README.md | 22 | 2 |
|
|
|
+| guest.md | 17 | **12** |
|
|
|
+| vendor.md | 17 | **0** |
|
|
|
+| health-datasource-bridge.md | 17 | 1 |
|
|
|
+| butler.md | 13 | **0** |
|
|
|
+| signature.md | 11 | **9** |
|
|
|
+| article-tag-filter.md | 10 | **10** |
|
|
|
+| deep-dive-assessment-appointment.md | 10 | **0** |
|
|
|
+| human-butler.md | 8 | **0** |
|
|
|
+| deep-dive-plan-activation.md | 6 | **0** |
|
|
|
+| **合计(全局去重)** | **357** | **82 = 23.0%** |
|
|
|
+
|
|
|
+> 口径:锚点 = 该 TC-ID 字面出现在 `cfc-backend/src/test`、`tests/e2e-live`、`cfc-frontend/__tests__`、`cfc-web/src/__tests__`、`tests/unit|integration` 任一文件中;`tests/e2e/api/generated` 已排除(自动生成,虚高)。B-124「两套口径并存」仍未收敛,本轮采用严格口径。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 8. 五要素问题清单
|
|
|
+
|
|
|
+### #1 B-153-1(P3|观察项)189 admin 首轮 TC-A-U05 登录前置偶发
|
|
|
+1. **问题描述**:189 首轮 admin-desktop 4/5,`TC-A-U05` 断言 `account-roles` 接口应 200 失败(`admin-live.spec.js:188`,`rolesStatus2 != 200`)——即输入手机号后「登录身份自动带出」接口短时非 200;**同轮复验 5/5 全绿**(U05 复验 59.6s 通过)。判滑块/登录态偶发,非产品回归(与 B-120-New / B-121 同模式)。
|
|
|
+2. **测试 bug 点**:`tests/e2e-live/admin-live.spec.js:188`(首轮偶发证据,复验绿)。
|
|
|
+3. **最优修改方案**:登录前置加重试(`fillPhoneAndAwaitRoles` 对 `account-roles` 200 断言容忍 1 次重试);连续 2 轮 0 偶发销号。
|
|
|
+4. **修改目的**:消除跨节点 E2E 偶发红导致的假性「4/5」,使 admin 套件稳定 5/5。
|
|
|
+5. **闭环**:连续 2 轮 admin-desktop 无偶发(5/5 首轮即绿);否则判节点环境问题转运维。
|
|
|
+
|
|
|
+### #2 B-74 / B-142-2(P0|上游)langgraph 3 红,全部 429 + 401(第 5 轮,改善)
|
|
|
+1. **问题描述**:251 实派 51 例 48 过 3 红;`test_auto_tag_*` 3 例(`content_relevance`/`short_content`/`empty_content`);日志 `401 api key ****ab12 invalid`(chat_graph 召回记忆失败)+ `429 AgnesAI free users rate limit`(intent_classifier 兜底默认 chat);同窗口 `/health` 200/25.8ms → **服务活、仅上游凭据/配额触发**。**较 R152 改善 2 绿**(`test_intent` 2 例已转绿)。
|
|
|
+2. **测试 bug 点**:`tests/test_auto_tag.py:93`;`app/agents/intent_classifier.py:62`(异常 → 默认 `chat` 兜底,把 429 伪装成分类错误)。
|
|
|
+3. **最优修改方案**:① 运维轮换/扩容 `****ab12` key 与 AgnesAI 额度;② 服务侧对上游 429/401 统一返回 **503 + 结构化 code**,不映射 500;③ 用例按 `pytest.mark.env`(或 retry/backoff)把环境红与逻辑红分流。
|
|
|
+4. **修改目的**:恢复 langgraph 硬门禁(G7)可信度,避免上游抖动被读成产品回归。
|
|
|
+5. **闭环**:连续 2 轮 langgraph 全绿(并保留 exit code 证据)。
|
|
|
+
|
|
|
+### #3 B-152-2(P0|CI 硬门禁必然失败)CI 排除清单漏掉 3 个当前红类
|
|
|
+1. **问题描述**:`.gitlab-ci.yml:61` 的 `BACKEND_OBSERVED_CLASSES`(33 类)未包含当前实测红的 `UserServiceWechatLoginTest`、`UserServiceWechatLoginContractTest`、`TeamProfitCronContractTest` → `backend-blocking-junit` 必红。
|
|
|
+2. **测试 bug 点**:`_r153_mvn.log` 中三类的 surefire 行(`Failures: 1` × 3);对照 `.gitlab-ci.yml:61` 清单无此三项。
|
|
|
+3. **最优修改方案**:把 3 类加入 `BACKEND_OBSERVED_CLASSES`;同时把已转绿的 26 类从清单移除(见 #4)。
|
|
|
+4. **修改目的**:恢复「硬门禁红即拦、绿即放」的语义,避免已知红把流水线永久钉红。
|
|
|
+5. **闭环**:CI `backend-blocking-junit` 一次运行 `success`,且 `backend-observed-junit` 仅跑 10 个真红类。
|
|
|
+
|
|
|
+### #4 B-152-1(P1|CI 门禁覆盖面被缩小)排除清单 33 类中 26 类已转绿
|
|
|
+1. **问题描述**:清单自「第 69 轮红类 33 类」冻结,本轮实测其中 26 类全绿仍被排除在 blocking 之外 → 这些类的回归不会拦 CI。
|
|
|
+2. **测试 bug 点**:`.gitlab-ci.yml:61`;证据 = 本轮 `_r153_mvn.log` 逐类结果 + GREEN 26 项。
|
|
|
+3. **最优修改方案**:将清单收敛为当前 10 个红类;每轮由测试负责人产出「红类集合」供 CI 变量更新。
|
|
|
+4. **修改目的**:让硬门禁覆盖「全量 − 10 类」≈ 97%,回归拦截率最大化。
|
|
|
+5. **闭环**:blocking job 覆盖类数 ≥ 337,且连续 2 轮无新增红。
|
|
|
+
|
|
|
+### #5 B-152-3(P1|测试装置)`@EnableScheduling` 在测试上下文常驻(第 2 轮)
|
|
|
+1. **问题描述**:`CfcApplication` 带 `@EnableScheduling`,多个 `@SpringBootTest` 上下文缓存长期存活,`cfc-scheduler-*` 线程在全量跑测期间反复查库写 DEBUG 日志:本轮 **4,334 / 31,758 行(13.6%)为调度器日志**(R152 为 28.6%),Spring 上下文启动多次;全量耗时 **39:42**(R152 55:56 / R149 39:08——占比与耗时强相关,证实 B-152-3 影响)。
|
|
|
+2. **测试 bug 点**:`cfc-backend/src/main/java/com/etotem/cfc/CfcApplication.java:12`(`@EnableScheduling`);`cfc-backend/src/test/resources/` **目录不存在**(无测试期配置覆盖)。
|
|
|
+3. **最优修改方案**:① 新建 `cfc-backend/src/test/resources/application-test.yml`,`spring.task.scheduling.pool.size: 1`;② 生产任务类加 `@ConditionalOnProperty(name="cfc.scheduling.enabled", havingValue="true", matchIfMissing=true)`,测试配置置 `false`;③ 慢类加 `@DirtiesContext` 或改 `@WebMvcTest` 缩小切片。
|
|
|
+4. **修改目的**:消除非确定性后台写入,并把全量耗时稳定压回 ≤45min。
|
|
|
+5. **闭环**:全量日志中 `cfc-scheduler` 行数 = 0、总耗时 ≤45min、17 红集合不变。
|
|
|
+
|
|
|
+### #6 B-152-4(P3|契约待确认)1a2b 首猜积分 92 vs 用例期望 100(第 2 轮)
|
|
|
+1. **问题描述**:`cfc-frontend/pages/games/1a2b.vue:154` 计分 `Math.max(100 - (maxGuesses - remainingGuesses) * 8, 60)`,首猜命中得 **92**;用例断言 92(B-152-5 迁移后按实现取值,注释待确认);二者口径已统一但**无 SRS 明文**。
|
|
|
+2. **测试 bug 点**:`cfc-frontend/pages/games/1a2b.vue:154`;`cfc-frontend/__tests__/games/1a2b.test.js:41`。
|
|
|
+3. **最优修改方案**:研发在 SRS/契约中明确「首猜即中」积分口径;若应为 100,则改 `score = 100 - (maxGuesses - remainingGuesses - 1) * 8` 并同步用例。
|
|
|
+4. **修改目的**:消除同一行为两套期望,避免用例与实现互为「假绿/假红」。
|
|
|
+5. **闭环**:契约条款落地后用例断言改为唯一口径并全绿。
|
|
|
+
|
|
|
+### #7 B-142-1(P1|安全)`/api/admin/**` 鉴权门缺失(第 10 轮)
|
|
|
+1. **问题描述**:匿名 `POST /api/admin/families/overview` → **HTTP 200** + `{"code":400}`;对照组 5 端点全 401 → 拦截器对 admin 前缀无统一门。
|
|
|
+2. **测试 bug 点**:`JwtInterceptor`(`/api/admin/` 未纳入鉴权判定);线上实证如上。
|
|
|
+3. **最优修改方案**:把 `/api/admin/**` 纳入 `JwtInterceptor` 强制校验并校验 `role`;控制器侧保留 `@RequestAttribute("role")` 二次校验。
|
|
|
+4. **修改目的**:消除匿名可达的管理端数据面(越权信息泄露)。
|
|
|
+5. **闭环**:匿名 POST 该端点返回 401/403;回归用例固化到 health 契约套件。
|
|
|
+
|
|
|
+### #8 B-145-1(P1|Schema)`nutrition_age_dosage` 建表恒失败(第 7 轮)
|
|
|
+1. **问题描述**:`schema.sql:5343` 建表体含 `INDEX idx_product (product_id)`,但列定义无 `product_id` → DDL 恒失败;`DatabaseInitializer` catch 后仍打印「数据表检查完成」。
|
|
|
+2. **测试 bug 点**:`cfc-backend/src/main/resources/schema.sql:5343`(第 12 行索引)。
|
|
|
+3. **最优修改方案**:删该索引行;若需产品维度则补 `product_id BIGINT` 列 + 实体 + `ensureColumn` 迁移并同步 schema.sql。
|
|
|
+4. **修改目的**:让按年龄分组的剂量建议在运行期可用。
|
|
|
+5. **闭环**:启动日志无 `SQLSyntaxErrorException`;`SHOW TABLES LIKE 'nutrition_age_dosage'` 有结果。
|
|
|
+
|
|
|
+### #9 B-36(P3|环境)根级黑盒 16 红(第 47 轮零漂移)
|
|
|
+1. **问题描述**:`tests/integration/*.spec.js` 16 例全 `fetch failed`(AggregateError/ECONNREFUSED 至 `127.0.0.1:9082`)——本地未启动后端。
|
|
|
+2. **测试 bug 点**:`tests/integration/mini-games-api.spec.js`、`tests/integration/plan-chain.spec.js`。
|
|
|
+3. **最优修改方案**:改用 `process.env.E2E_BASE_URL || http://cfc.iwintrue.com` 走线上,或加 `beforeAll` 探活 → `test.skip` 并显式标注「后端未启动」。
|
|
|
+4. **修改目的**:让根级套件的红数具备信号价值(当前 16 红为纯噪声)。
|
|
|
+5. **闭环**:根级套件红数 = 0(或按环境 skip 且不产红)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 9. 门禁结论
|
|
|
+
|
|
|
+| 门禁 | 指标 | 结果 |
|
|
|
+|------|------|------|
|
|
|
+| G1 用例通过率 | 98.49%(剔 skip 98.96%) | ✅ |
|
|
|
+| G2 后端全绿 | 17 红(10 类,零漂移第 11 次) | ❌ |
|
|
|
+| G3 前端全绿 | 3 红(预期 RED) | ⚠️ |
|
|
|
+| G4 管理端全绿 | 116/116 | ✅ |
|
|
|
+| G5 编译/产物完整性 | 353 源 0 错、347/347 XML、classes 2330 | ✅ |
|
|
|
+| G6 浏览器 E2E | 28/28(+2 skip) | ✅ |
|
|
|
+| G7 langgraph 全绿 | 48/51(3 红 429/401) | ❌ |
|
|
|
+| G8 鉴权矩阵 | 5/5 = 401 | ✅ |
|
|
|
+| G9 用例锚点率 | 23.0%(82/357) | ❌ |
|
|
|
+| G10 双节点派发 | 189 ✅ + 251 ✅ | ✅ |
|
|
|
+| G11 CI 门禁有效 | blocking 清单漏 3 红类 → 必红;26 绿类被排除(B-152-1/2 未修) | ❌ |
|
|
|
+| G12 SRS 合规 | 窗口零变更、未擅改需求 | ✅ |
|
|
|
+
|
|
|
+**结论:不通过。** 硬门禁未达成 4 项(G2 / G7 / G9 / G11)。
|
|
|
+较 R152 同为「不通过」,但**内因改善**:langgraph 5 红 → 3 红(B-74 观察第 5 轮)、全量 98.44% → 98.49%;G7 仍未达全绿(上游凭据/配额),G11 依赖研发侧 CI 清单修复(B-152-1/2 未闭合)。
|
|
|
+
|
|
|
+**复评条件(全部满足可转「通过」)**:① 后端 17 存量红清零或经契约裁决转预期 RED 并登记;② langgraph 连续 2 轮全绿;③ CI 清单按 #3/#4 修正后 blocking job 绿;④ 用例锚点率 ≥60%;⑤ B-152-3 落地(调度器不常驻、全量 ≤45min)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 10. 变更、提交与通知
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|----|------|
|
|
|
+| 变更判定 | **有变化**:langgraph 46→**48 过**(红 5→3);全量 98.44%→**98.49%**(+0.05pp);新增观察项 B-153-1(189 U05 偶发复验绿)→ **提交 + 推送 + 通知研发** |
|
|
|
+| 提交范围 | 本报告、`automation-run-2026-11-11-R153.md`、`notice-2026-11-11-R153-研发通知.md`、`blockers.md`(追加 R153 段)、`automation-status.md`(附录 R153) |
|
|
|
+| 推送分支 | `origin/cfclub`(rebase 后推,`git branch -r --contains` 核验) |
|
|
|
+| 研发通知 | Agent Mail `GetMe` → 仍 `not_bound`(连接器 connected、邮箱未开通,按纪律不重试)→ 以 `notice-2026-11-11-R153-研发通知.md` + `blockers.md` + 推送为通知载体 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 附录 A:本轮命令(可复现)
|
|
|
+
|
|
|
+```bash
|
|
|
+# 环境探针
|
|
|
+/d/jdk1.8.0_25/bin/java -version; JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -v; df -h /d
|
|
|
+# 后端全量(工程根在 cfc-backend)
|
|
|
+cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test # 39:42
|
|
|
+# Jest
|
|
|
+cd cfc-web && npx jest --silent # 116/116
|
|
|
+cd cfc-frontend && npx jest --silent # 617 = 602/3/12
|
|
|
+cd tests && npx jest -c jest.config.js --silent # 23 = 7/16(2 套件)
|
|
|
+# 浏览器(必须在 tests/ 内跑)
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --workers=1 # 6/6
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=shop-api --workers=1 # 4/4
|
|
|
+cd tests && npx playwright test -c playwright.config.health.js --workers=1 # 13/13
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=dx-bridge --workers=1 # 2 skip
|
|
|
+node _r150_189.cjs # 189 admin-desktop(首轮 4/5 → 复验 5/5)
|
|
|
+node _r153_lg.cjs kick && node _r153_lg.cjs read # 251 langgraph 51 例(.venv/bin/python)
|
|
|
+# 线上鉴权矩阵(必须 POST)
|
|
|
+for p in /api/mind/fortune /api/energy/overview /api/health/plan/list /api/huawei-health/status /api/xiaomi-health/status; do curl -s -o /dev/null -w "$p %{http_code}\n" -X POST -H 'Content-Type: application/json' -d '{}' http://cfc.iwintrue.com$p; done
|
|
|
+```
|
|
|
+
|
|
|
+## 附录 B:口径声明
|
|
|
+
|
|
|
+- 后端红数口径:surefire 汇总 `Tests run: 2946, Failures: 16, Errors: 1, Skipped: 4`,与 347 XML 逐类核对一致(零漂移第 11 次)。
|
|
|
+- 后端基线纯度:`cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ArticleTagsContractTest.java` 仍为未跟踪文件却被编译执行 → 「347 类」含该文件;HEAD 纯度为 **346 类 / 2935 例**(历轮同口径)。
|
|
|
+- langgraph 口径:`--ignore=tests/qna --ignore=tests/test_chat.py`(B-141-1 阻断 + 历轮排除项),51 例;节点 HEAD `f99bb6956` = 本机 `39717eb07` + 1 auto bump(零源码差异)。
|
|
|
+- langgraph 解释器:**必须 `.venv/bin/python`**,系统 `/usr/bin/python` 无 pytest。
|
|
|
+- 浏览器口径:28 过 + dx 2 skip = 30;189 与仅本机 spec blob `4703d73fb` 一致 → 跨节点结论可比。
|
|
|
+- 189 口径:首轮 4/5(U05 登录前置偶发)→ 同轮复验 5/5 全绿,最终取 **5/5**(B-153-1 观察项)。
|
|
|
+- G9 仍为严格口径(排除 `tests/e2e/api/generated`),B-124 两套口径并存未收敛。
|