|
|
@@ -68,3 +68,4 @@
|
|
|
| B-53-Update(第 77 轮量化) | B-53 第 4 次量化:13 个测试文件(11 `M` + 2 `??`)入库可 +42 例转绿、+17 例新增 | 研发 | **P0 第 4 次催办,量化口径已固化**。干净基线隔离树 `D:\_wt_r077` @`8e736c3bb` 全量 292 类 / 2416 例 / 2297 过 / 65F+50E+4S = **95.07%**,35 红类 / 115 红例。随后把主工作区 13 个后端测试文件(11 `M` + 2 `??`:`FamilyEarningsAdminRoleGateTest`、`SurveyHealthReviewContractTest`)复制入同一隔离树,定向复跑同 13 类:**170 例 / 48 红 → 187 例 / 6 红**,即 **42 例转绿 + 17 例新增(全绿)**;残余 6 红分布:`GuideFamilyTaskControllerTest` 2F+1E、`GuideRolePermissionTest` 1F+1E、`StatsControllerTest` 1F。全量预测:2356/2433 = **96.83%**,红例 115 → 73,红类 35 → 28。逐类对照:Article 9→0、Auth 4→0、Family 1→0、GuideOrder 8→0、GuideTeam 2→0、Payment 4→0、Product 3→0、ProductOrder 6→0,GuideFamilyTask 5→3、GuideRolePermission 5→2、Stats 1→1。闭环:13 文件入库后全量复跑 ≥96.83% 且红例 ≤73 | 测试负责人(第 77 轮实测量化) | 2026-11-08 02:16 | 待处理(连续 4 轮未收口) |
|
|
|
| B-59 | `tests/e2e-live/admin-live.spec.js:158` TC-A-U05 用「网址含 /login 就跳过」把前置失败转成不判定 | 测试(下轮自处置) | **P1 用例哨兵失效(第 77 轮实测新发现)**。本轮 admin-desktop 套件结果为 **14 过 / 1 跳过**(R75/R76 为 5/5 全过),被跳过的正是 `TC-A-U05 后台核心菜单可访问`:该用例自己重新走一遍登录流程(填凭据 → 等身份带出 → 拖滑块 → 点击登录 → `waitForTimeout(5000)`),随后执行 `test.skip(page.url().includes('/login'), '登录未通过(见 TC-A-U04),本用例无法在无会话下判定')`。本轮同一次运行里 `TC-A-U04` 真实登录**通过**并落到 `/admin/dashboard`(菜单 102),但 U05 自身的第二次登录在 5s 等待窗内未完成跳转 → 命中跳过分支。影响:① 跳过不计红,套件看起来「绿」,实际菜单遍历验收缺口;② 与 B-48/B-57 同族——把不确定态转成不判定,哨兵永久失效;③ 5s 固定等待属时序脆弱点(并发跑后端全量时机器负载高,登录链路变慢)。建议修复(任选其一,均 ≤5 行):① 把 `test.skip(...)` 改为 `expect(page.url()).not.toContain('/login')`,让前置失败直接红;② 让 U05 复用 U04 的 `storageState`(`playwright.config` 开启 `storageState` 复用),彻底避免二次登录;③ `waitForTimeout(5000)` 换成 `page.waitForURL(/\/admin\/dashboard/, { timeout: 20000 })`。闭环:admin 套件连续 2 轮 5/5 全过且无 skip | 测试负责人(第 77 轮实测登记) | 2026-11-08 02:16 | 待处理(下轮自处置) |
|
|
|
| B-60 | `ActivityControllerTest` 单类 16 例耗时 412.4s,占后端全量时长 16% | 研发 | **P2 测试隔离/时效缺陷(第 77 轮实测新发现)**。本轮后端全量 `Total time: 48:18 min`,surefire XML 累计 **2568s(42.8 min)**,其中 `com.etotem.cfc.controller.ActivityControllerTest` **412.4s / 16 例**(均值 25.8s/例)、`GuideModuleIntegrationTest` 236.5s / 4 例、`PlannerBindInviteFlowTest` 169.9s / 9 例、`AIChatControllerTest` 125.4s / 17 例、`ArticleCategoryControllerTest` 85.5s / 3 例。对照组:同为 controller 包的多数类在 0.0x~1s 量级。推断:测试内存在真实外部调用(微信/AI 网关/HTTP)或反复重建 Spring 上下文与数据库迁移(`DatabaseInitializer` 每个上下文重跑一次迁移)。影响:全量反馈周期被 5 个类拉到 40 min 以上,属 CI 门禁落地的直接障碍;也让每轮巡检的时间成本翻倍。建议:① 用 `@MockBean`/WireMock 截断真实网络;② 慢类合并上下文(`@DirtiesContext` 只在必要时用);③ 为单类设 120s 警戒阈值,超阈即视为缺陷。闭环:全量 `mvn test` ≤25 min 且无单类 >120s | 测试负责人(第 77 轮实测登记) | 2026-11-08 02:16 | 待处理 |
|
|
|
+| B-61 | `JwtInterceptor.LOGIN_REQUIRED_PATHS` 缺 `/api/health/plan/**`,健康方案 3 端点匿名 200 直通业务层 | 研发 | **P0 安全/契约缺口(第 78 轮实测,连续 2 轮复现)**。`POST /api/health/plan/{adjust,attribution,generate}` 未携带 Authorization 均返回 **HTTP 200**(attribution/generate 业务码 4001 付费墙、adjust 500 NPE),未按 API_REFERENCE §4.49.1/§4.49.2(标注「登录用户 JWT」)拦截为 401/403。对照 `POST /api/huawei-health/auth-url` 无鉴权正确返回 401。根因:`JwtInterceptor.LOGIN_REQUIRED_PATHS`(`JwtInterceptor.java:87–127`)为 opt-in 清单,已含 `/api/huawei-health/`、`/api/xiaomi-health/`,但健康方案族 `HealthPlanController.java:33/:63/:100` 三个端点(adjust/attribution/generate)**既不在 LOGIN_REQUIRED_PATHS 也不在 PUBLIC_PATHS** → 匿名请求被放行到 controller,与 SEC-20261031-01 注释(:96–108)明确反对的「匿名 userId=-1 放行走业务 500 而非安全 401」口径漂移属同族遗漏。影响:匿名用户可触发健康方案归因/生成/调整业务链路(消耗 AI 配额、可能越权读取/生成家庭私有健康方案)。测试证据:`tests/e2e-live/health-contract.spec.js` TC-HP-U01/02/03(上轮新增,本轮复测 3 例仍失败)。修复建议:`LOGIN_REQUIRED_PATHS` 增加 `"/api/health/plan/"`(与健康报告/华为/小米同族),统一「默认拒绝 + 显式放行」。闭环:TC-HP-U01/02/03 由失败转 pass(返回 401)+ 后端补带/不带 token 双向 MockMvc 用例 | 测试负责人(第 78 轮实测登记) | 2026-11-08 02:47 | 待处理(P0,连续 2 轮) |
|