|
|
@@ -0,0 +1,216 @@
|
|
|
+# 自动化运行证据(第 90 轮 · 2026-11-08 17:20 ~ 19:05)
|
|
|
+
|
|
|
+> 触发:定时自动化「作为测试负责人执行自动化测试闭环(全部用例通过 + 覆盖 SRS/场景 + 浏览器走 cfc.iwintrue.com/admin 与 /frontend + langgraph 派 251 + 结果有变化提交远程并通知研发)」。
|
|
|
+> 执行档:`review`(离线)——未联网装依赖、未启停服务、未改生产代码(仅改测试侧装置)。
|
|
|
+> 基线:`cfclub` @ `b58d54775`(= `origin/cfclub`)
|
|
|
+> 原始日志:`_r1720_backend.log`(后端全量)· `_jest_frontend_r90.log` / `_jest_web_r90.log` · `_pytest_lg_r90.log` · `_e2e_{admin,frontend,shop,health}_r90*.log` · `_r90_targeted{1..4}.log` · `_r90_testcompile.log` · `_r90_502_probe.log` · `_r90_agg.json`
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 实测结果总表
|
|
|
+
|
|
|
+| 套件 | 执行 | 结果 | 通过率 | 备注 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| cfc-backend | `mvn -o -B clean test`(JDK1.8.0_25 + Maven 3.9.9) | 311 类 · **2628 例 / 2558 过 / 35F+31E / 4S** | **97.34%** | **与 R89 全字段零漂移**(连续第 2 轮) |
|
|
|
+| cfc-frontend | `npx jest --silent` | 21 suites · 354 passed / 1 skipped | 99.72% | 持平 |
|
|
|
+| cfc-web | `npx jest --silent` | 17 suites · **116 passed / 116** | 100% | 契约闭环保持 |
|
|
|
+| cfc-langgraph | `.venv/Scripts/python.exe -m pytest tests/ --ignore=tests/qna` | 44 collected · **32 passed / 12 failed** | 72.73% | B-65 产品 2 + B-54 环境 10 |
|
|
|
+| admin-desktop | `--project=admin-desktop` | **5 passed**(首跑 1 红→复跑全绿,见 §5.1) | 100% | 单节点串行 |
|
|
|
+| frontend-mobile | `--project=frontend-mobile` | **6 passed** | 100% | 单节点串行 |
|
|
|
+| shop-api | `--project=shop-api` | **4 passed** | 100% | 商城排序契约 |
|
|
|
+| health-contract | `-c playwright.config.health.js` | **13 passed** | 100% | B-61 连续第 10 轮零回归 |
|
|
|
+| **合计** | 6 套件 + 后端全量 | **3171 例 / 3088 过 = 97.38%** | — | 红 78(后端 66 + langgraph 12) |
|
|
|
+
|
|
|
+### 1.1 后端关键度量
|
|
|
+
|
|
|
+| 指标 | 值 |
|
|
|
+|---|---|
|
|
|
+| 测试源文件 / `@Test` / `@Disabled` | 311 / 2618 / 4 |
|
|
|
+| surefire 完整性 | **311/311 XML**,`silent_missing = 0`,无 dump |
|
|
|
+| testCompile | **317 源 0 错**(含本轮 7 处测试侧修改) |
|
|
|
+| 全量耗时 | **1:06 h**(机器负载高,R89 为 44:39) |
|
|
|
+| 恒等式 | `@Test 2618 + 参数化 26 − @Disabled 4 − 早退截断 12 = 2628`,误差 0 |
|
|
|
+| 控制器 / `@PostMapping` / `@GetMapping` | 363 / 1961 / 8(`@GetMapping` 仍违 AGENTS.md) |
|
|
|
+
|
|
|
+### 1.2 与上轮基线对比
|
|
|
+
|
|
|
+| 项 | R89 | R90 | Δ |
|
|
|
+|---|---|---|---|
|
|
|
+| 后端类/例/过 | 311 / 2628 / 2558 | 311 / 2628 / 2558 | **0** |
|
|
|
+| 后端 F/E/S | 35 / 31 / 4 | 35 / 31 / 4 | **0** |
|
|
|
+| 红类 / 红例 | 24 / 66 | 24 / 66 | **0** |
|
|
|
+| 前端 / web / langgraph / 浏览器 | 355 / 116 / 44 / 28 | 355 / 116 / 44 / 28 | **0** |
|
|
|
+| 全量通过率 | 97.38% | 97.38% | **0** |
|
|
|
+
|
|
|
+> 结论:基线**完全稳定**(第 2 次零漂移)。本轮增量不在基线,而在**测试侧装置修复 23 例**(§6,已定向验证)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 环境与节点分派实测
|
|
|
+
|
|
|
+| 目标 | 结果 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| cfc.iwintrue.com `/admin` | 200 | admin-desktop 套件 |
|
|
|
+| cfc.iwintrue.com `/frontend` | 200 | frontend-mobile 套件 |
|
|
|
+| 192.168.16.189:4090 | **OPEN**(HTTP 200,opencode web) | 浏览器节点可达;`22/80` CLOSED → 无 SSH/远程驱动通道,浏览器任务在**本机单节点串行**执行(`workers:1`) |
|
|
|
+| 192.168.16.251:9000 / :8000 / :22 | **全部 CLOSED**(000) | langgraph 服务未监听、无远程通道 → **251 派发仍未达成**(G10 ❌,B-55 延续),降级本机 venv 直跑 |
|
|
|
+
|
|
|
+### 2.1 线上 502 抖动窗口(本轮新增环境证据 → B-72)
|
|
|
+
|
|
|
+| 时间窗 | 现象 | 影响 |
|
|
|
+|---|---|---|
|
|
|
+| 17:22 ~ 17:26 | `/api/stats/dashboard`、`/api/admin/menu/user-menus`、`/api/system/health` 连续 20/20 **502 Bad Gateway**(openresty/1.19.9.1rc1);同窗口 `/api/admin-auth/login-by-password` 仍 200 | **TC-A-U04 首跑失败**(登录成功但后台数据接口 502 → 前端停留登录页) |
|
|
|
+| 17:33 ~ 17:35 | `/api/health/plan/list` 连续 13 次 502,随后恢复 401 | 契约套件有被误判「鉴权回归」的风险 |
|
|
|
+| 17:36 ~ 17:38 | 30s 采样 18 组全部 401(稳定) | 恢复 |
|
|
|
+| 17:40 ~ 18:28 | `_r90_502_probe.log` 每 30s 双端点采样:`health=401 system=200` 为主,偶发 `system=000`(5s 超时) | 抖动为**短窗口**,非持续不可用 |
|
|
|
+
|
|
|
+> 与仓库 `chore: auto bump version and changelog`(`b58d54775`)+ `cfc-web/package-lock.json` 变更同窗口 → 判定为**发布/滚动重启窗口**,非产品回归。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 后端 66 例红因归因
|
|
|
+
|
|
|
+### 3.1 归因分桶(按实测异常首帧 + 源码复核)
|
|
|
+
|
|
|
+| 归因桶 | 例数 | 红类与证据 | 归属 |
|
|
|
+|---|---|---|---|
|
|
|
+| **A-2 上下文加载失败(数据源指向不可达 127.0.0.1:3306)** | 8 | `AdminFamilyOverviewControllerTest` 3E + `FamilyAdminOverviewServiceTest` 3E + `UserServiceFamilyNameLinkTest` 2E;根因链 `Failed to load ApplicationContext → HikariPool init → CJCommunicationsException: Communications link failure → ConnectException: Connection refused`(本机 3306 无监听,`netstat` 实测 REFUSED) | 测试侧 · **本轮已修** |
|
|
|
+| **A-4 夹具 NPE(`@InjectMocks` 缺依赖桩)** | 10 | `FamilyJoinRequestServiceReferrerBindTest` 4(缺 `familyInvitationMapper/familyMemberMapper/familyRelationshipService/couponService`)+ `FortuneServiceTest` 2(缺 `familyMemberMapper/familyMemberAttributesMapper`)+ `ServiceRoleApproveTest` 2 + `GrowthRecordSyncFlowTest` 2 | 测试侧(**前 6 例本轮已修**,余 4 例待下轮) |
|
|
|
+| **A-6 Mockito 原语匹配器误用 + Result 文案断言错位** | 9 | `ProductOrderServiceFulfillmentMultiModeTest` 6E(`uploadShippingInfo(...,int logisticsType,...)` 用 `any()` → 恒 null NPE;另 4 例断言 `getMessage()` 而业务文案在 `getData()`)+ `ProductOrderServiceUpdateExpressFieldTest` 3F(生产已统一 7 参 overload,旧 5 参 verify `ArgumentsAreDifferent`) | 测试侧 · **本轮已修** |
|
|
|
+| A-3 CF 分佣结算打桩未触发 | 8 | `CfCommissionServiceSettleTest` 8F(`verify(cfBalanceService).earnByRule(...)` 未发生) | 测试侧 · 待下轮 |
|
|
|
+| A-7 断言语义/状态泄漏 | 6 | `EnergySystemFlowTest` 6F | 待核实(逐例定性) |
|
|
|
+| A-8 邀请绑定流程断言 | 5 | `PlannerBindInviteFlowTest` 4F+1E | 待核实 |
|
|
|
+| A-5 Optional 空值 | 4 | `DimensionScoreServiceImplTest` 4E(`NoSuchElementException`,`Optional.get()` 空) | 测试侧 · 待下轮 |
|
|
|
+| 契约口径分歧 | 3 | `DimensionRegistryMapContractTest` 3F | 待核实(P-2 家族) |
|
|
|
+| 文章流状态机 | 3 | `ArticleWorkflowTest` 3F | 待核实 |
|
|
|
+| 其他单例断言 | 7 | `GrowthRecordSyncFlowTest` 1F、`DailyCheckinStreakFlowTest` 1E、`OrchestrationEngineTest` 1F、`OrchestrationIntegrationTest` 1F、`MembershipPaySwitchTest` 1F、`PaymentServiceORDRoutingTest` 1F、`TaskPlanServiceTest` 1F、`TeamProfitCronContractTest` 1F(合计 8,其中 1 已计入上表) | 待核实 |
|
|
|
+| **P-1 产品缺陷(B-69)** | 1 | `MindFortuneControllerTest` 期望 `code=401` 实得 `400`(`/api/mind/` 未入 `LOGIN_REQUIRED_PATHS`,第 3 轮未修) | **研发** |
|
|
|
+| **E-1 环境** | 1 | `GuideModuleIntegrationTest` 1E | 环境 |
|
|
|
+
|
|
|
+> 合计 66(A 类 58 / 产品 1 / 环境 1 / 待核实已计入各桶)。**A-2/A-4/A-6 中 23 例本轮已修并定向验证**(§6)。
|
|
|
+
|
|
|
+### 3.2 24 个红类清单(按红例数降序)
|
|
|
+
|
|
|
+`CfCommissionServiceSettleTest 8` · `EnergySystemFlowTest 6` · `ProductOrderServiceFulfillmentMultiModeTest 6` · `PlannerBindInviteFlowTest 5` · `DimensionScoreServiceImplTest 4` · `FamilyJoinRequestServiceReferrerBindTest 4` · `AdminFamilyOverviewControllerTest 3` · `DimensionRegistryMapContractTest 3` · `GrowthRecordSyncFlowTest 3` · `ArticleWorkflowTest 3` · `FamilyAdminOverviewServiceTest 3` · `ProductOrderServiceUpdateExpressFieldTest 3` · `FortuneServiceTest 2` · `UserServiceFamilyNameLinkTest 2` · `ServiceRoleApproveTest 2` · `MindFortuneControllerTest 1`(产品)· `DailyCheckinStreakFlowTest 1` · `GuideModuleIntegrationTest 1`(环境)· `OrchestrationEngineTest 1` · `OrchestrationIntegrationTest 1` · `MembershipPaySwitchTest 1` · `PaymentServiceORDRoutingTest 1` · `TaskPlanServiceTest 1` · `TeamProfitCronContractTest 1`
|
|
|
+
|
|
|
+> 与 R89 的 24 类**逐一对应,零新增、零消失**。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. langgraph 12 例红因(本机 venv 兜底,251 未派发)
|
|
|
+
|
|
|
+| 归因 | 例数 | 用例 | 证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| **B-65 产品缺陷** | 2 | `test_analyze.py::test_analyze_endpoint` / `::test_analyze_missing_report` | `ValueError: Checkpointer requires one or more of the following 'configurable' keys: thread_id...` |
|
|
|
+| **B-54 环境(chromadb 原生 DLL)** | 6 | `test_auto_tag.py` 5 + `test_chat.py` 1 | `ImportError: DLL load failed while importing chromadb_rust_bindings` |
|
|
|
+| **B-54 环境(LLM key 无效)** | 4 | `test_intent.py` 4 | `401 Authentication Fails, Your api key: ****ocal is invalid` → 分类降级为默认 chat |
|
|
|
+
|
|
|
+> 与 R88/R89 逐例一致;B-65 为研发侧唯一产品缺陷项(连续第 3 轮未修)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 5. 浏览器自动化明细(单节点串行,28/28 全绿)
|
|
|
+
|
|
|
+| 套件 | 用例 | 结果 | 耗时 |
|
|
|
+|---|---|---|---|
|
|
|
+| admin-desktop | TC-A-U01~U05(登录页/滑块/未登录拦截/真实登录/核心菜单) | **5/5**(复跑) | 1.5m |
|
|
|
+| frontend-mobile | TC-F-U01~U06(首页/五维沙盘/TabBar×2/「我的」鉴权引导/资源无 failed) | **6/6** | 58.2s |
|
|
|
+| shop-api | TC-S-U01~U04(price asc/desc/默认/非法列白名单) | **4/4** | 9.2s |
|
|
|
+| health-contract | TC-H-U01~U10 + TC-HP-U01~U03(13 端点 401) | **13/13** | 5.8s |
|
|
|
+
|
|
|
+### 5.1 TC-A-U04 首跑失败与复跑定性(B-67 纪律应用)
|
|
|
+
|
|
|
+- **首跑**:`1 failed / 3 passed / 1 skipped`,断言「登录后应离开登录页,实际 URL=…/admin/login」(11.5s)。
|
|
|
+- **只读诊断**(`_diag_admin_r90.cjs`):`POST /api/admin-auth/login-by-password` **200**、`/api/admin-auth/info` **200**,随后 `stats/dashboard`、`stats/membership`、`stats/traffic`、`system/health`、`admin/menu/user-menus` **全部 502**;8s 后 URL 已为 `/admin/dashboard`(登录态建立,仅数据接口 502)。
|
|
|
+- **复跑**:同套件 **5/5 全绿**(2.6/4.7/3.6/10.6/58.9s)。
|
|
|
+- **定性**:上游 502 抖动窗口(§2.1),**非用例缺陷、非鉴权回归**;B-61 健康契约同窗口 13/13 未受影响。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. 本轮代码改动(测试侧装置修复 7 文件,23 例)
|
|
|
+
|
|
|
+| # | 文件 | 缺陷 | 修复 | 定向复跑 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| 1 | `AdminFamilyOverviewControllerTest` | 硬编码 `spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zxyj`,本机 3306 无监听 → 上下文加载失败(3E) | 改 `192.168.16.251:3306`(与其余 300+ 类一致,251 可达) | 3/3 绿(332s) |
|
|
|
+| 2 | `FamilyAdminOverviewServiceTest` | 同上(3E) | 同上 | 3/3 绿(63s) |
|
|
|
+| 3 | `UserServiceFamilyNameLinkTest` | 同上(2E) | 同上 | 2/2 绿(48s) |
|
|
|
+| 4 | `FamilyJoinRequestServiceReferrerBindTest` | `@InjectMocks` 缺 4 个依赖桩 → 审批分支 NPE(4E) | 补 `familyInvitationMapper`/`familyMemberMapper`/`familyRelationshipService`/`couponService` | 5/5 绿(0.8s) |
|
|
|
+| 5 | `FortuneServiceTest` | `FortuneServiceImpl` 另需 `familyMemberMapper`(`calculateFamilyElements`)+ `familyMemberAttributesMapper`(2E) | 补两个 `@Mock`(mapper 返回 null 时实现已有空集合兜底) | 4/4 绿(3.1s) |
|
|
|
+| 6 | `ProductOrderServiceFulfillmentMultiModeTest` | ① `uploadShippingInfo(...,int,...)` 用 `any()` → 6E NPE;② 4 例断言 `getMessage()` 而业务文案在 `getData()`(`Result.success()` message 恒 "success");③ 自提用例复用同一 mock 订单,首调后状态变 `pending_receipt` 致负向断言命中错误守卫 | ① 原语位改 `anyInt()`;② 断言改 `getData()`;③ 负向断言前复位 `status=paid` | 6/6 绿(3.8s) |
|
|
|
+| 7 | `ProductOrderServiceUpdateExpressFieldTest` | 生产已统一 7 参 overload,测试仍 verify 5 参 → `ArgumentsAreDifferent`(3F) | verify 对齐 7 参(单号/公司/`eq(1)` 不变,仅补 `any(), eq(1), any()`) | 3/3 绿(0.04s) |
|
|
|
+
|
|
|
+**验证口径**:`mvn -o -B test -Dtest=A,B,C,D`(逗号分隔,遵守 R88 教训:`+` 会静默 0 执行)→ **实测 13/13 + 13/13 全绿**;另 `mvn -o -B test-compile` **317 源 0 错**。
|
|
|
+
|
|
|
+> **未放宽任何断言强度**:所有修改均为「对齐真实契约 / 补齐装置 / 修正断言读取位」,无删除断言、无 `assertTrue(true)` 式占位。
|
|
|
+
|
|
|
+### 6.1 修复后预测(待下轮全量 clean 复跑升格为全量证据)
|
|
|
+
|
|
|
+| 项 | 当前实测 | 修复后预测 |
|
|
|
+|---|---|---|
|
|
|
+| 后端过例 | 2558 / 2628 = 97.34% | **2581 / 2628 = 98.21%** |
|
|
|
+| 后端红例 | 66 | **43** |
|
|
|
+| 后端红类 | 24 | **17** |
|
|
|
+| 全量通过率 | 97.38% | **98.11%**(3111/3171) |
|
|
|
+
|
|
|
+> 口径说明(承 B-57/R88):定向绿必须由全量 clean 复跑升格后才入台账基线;本轮结论按「定向已验、全量待升格」记账。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. 门禁判定
|
|
|
+
|
|
|
+| 门禁 | 判据 | 实测 | 结论 |
|
|
|
+|---|---|---|---|
|
|
|
+| G1 总通过率 ≥95% | 97.38% | ≥95% | ✅ |
|
|
|
+| G2 零红例 | 78(后端 66 + langgraph 12) | 0 | ❌ |
|
|
|
+| G3 前端 Jest | 354/355(1 skip) | 无红 | ✅ |
|
|
|
+| G4 管理端 Jest(含契约) | 116/116 | 全绿 | ✅ |
|
|
|
+| G5 后端编译/完整性 | 317 源 0 错;311/311 XML | 无缺失 | ✅ |
|
|
|
+| G6 浏览器 E2E | 28/28 | 100% | ✅ |
|
|
|
+| G7 langgraph 零红 | 12 红 | 0 | ❌ |
|
|
|
+| G8 B-61 健康鉴权契约 | 13/13 | 零回归 | ✅ |
|
|
|
+| G9 SRS/场景锚点覆盖 | SC 锚点 **120/241 = 49.8%**(口径升级见下) | ≥目标 | ❌ |
|
|
|
+| G10 langgraph 派 251 | 未达成(9000/8000/22 CLOSED) | 达成 | ❌ |
|
|
|
+| G11 CI 流水线门禁 | 无阻断式 CI(langgraph 会红) | 通过 | ❌ |
|
|
|
+| G12 用例资产入库 | 本轮 7 文件待提交 | 入库 | ⏳(本轮随交付提交) |
|
|
|
+
|
|
|
+**G9 口径升级说明**:R88/R89 沿用「SRS 章节级锚点 3/170」,该口径不可复算(B-30)。本轮改为可复算的 **SC 编号在测试资产中的被引用数**:`sc-key-map` 登记 SC **241**,测试资产(后端 `src/test` + 前端/web Jest + `tests/e2e-live`)中出现的不同 SC 编号 **120** 个 → **49.8%**;TC 台账 293 条,但测试资产中出现 TC 编号的文件仅 **4** 个(e2e-live spec)→ TC 级锚点仍近乎为零。
|
|
|
+
|
|
|
+**总判定:⛔ 不通过(有条件)**——8 项达标(G1/G3/G4/G5/G6/G8/G12 待提交),4 项未达标(G2 红例 / G7 langgraph / G9 SRS 锚点 / G10 派发)+ G11 CI 缺失。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 8. 覆盖缺口清单
|
|
|
+
|
|
|
+| # | 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| C-1 | SRS/场景用例锚点 | SC 120/241(49.8%);TC 编号仅 4 文件出现 | 无法证明「SRS 全覆盖」,需求变更无法精准回归 | 每个 SRS 章节/SC 编号在对应测试类 Javadoc 或方法名中显式锚定;新增 `SC-TRACE` 校验脚本 | P0 | 锚点率 ≥90% 且脚本入 CI |
|
|
|
+| C-2 | langgraph 集成层可执行性 | 12 红(环境 10 + 产品 2),251 不可派发 | AI 能力回归无自动化守门 | ① 本机装 VC++ 运行时重建 venv;② 注入有效 LLM key 或 StubLLM 桩;③ 251 放通 9000 | P0 | langgraph 44/44 绿 |
|
|
|
+| C-3 | 后端 A 类装置残留 | 43 例(预测)红,集中在 CF 结算 / 能量流 / 契约口径 | 掩盖真实产品缺陷(红噪声稀释信号) | 逐类按「打桩缺失 / 断言读取位 / 状态泄漏」三分类修复 | P1 | 红例 ≤10 |
|
|
|
+| C-4 | 覆盖率工具 | 无 JaCoCo 报告 | 无法量化行/分支覆盖 | `jacoco-maven-plugin` + 行覆盖 ≥60% 门禁 | P2 | 生成报告并入 CI |
|
|
|
+| C-5 | 浏览器用例健壮性 | TC-A-U05 仍用 `test.skip(url.includes('/login'))`(B-59) | 前置失败被转为「不判定」,验收缺口静默 | 改 `waitForURL(/dashboard/, 20s)` + `expect` 硬断言,或复用 `storageState` | P1 | admin 连续 2 轮 5/5 无 skip |
|
|
|
+| C-6 | 性能/安全/兼容/无障碍 | 全未实测(无工具、未授权联网) | 非功能质量盲区 | 压测(k6)需 execute 档授权;SAST 用 semgrep 离线规则;兼容性补 webkit/firefox project | P2 | 各维度至少 1 套可复跑基线 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 9. 结论与移交
|
|
|
+
|
|
|
+- **基线稳定**:后端 2628 例 / 97.34%、24 红类 / 66 红例,与 R89 **逐字段零漂移**(第 2 次);前端/web/浏览器全绿;langgraph 32/44 与上两轮一致。
|
|
|
+- **本轮实质进展在测试侧**:修复 7 个测试文件、**23 例**由红转绿(上下文 8 + 夹具 6 + Mockito/断言 9),定向复跑 26/26 全绿,预测后端 → **98.21%**、全量 → **98.11%**(待下轮全量升格)。
|
|
|
+- **新根因纠正(B-70)**:8 例 `Failed to load ApplicationContext` **不是**「auditLogAspect 注入链」,而是 3 个测试类硬编码 `127.0.0.1:3306` 而本机 3306 无监听(`Connection refused`);前 2 轮的推断被本轮堆栈取证推翻。
|
|
|
+- **新环境缺陷(B-72)**:线上 `/api/*` 存在**短窗口 502 抖动**(17:22~17:26、17:33~17:35),直接导致 TC-A-U04 首跑假红;已按 B-67 三证纪律定性为发布/滚动重启窗口。
|
|
|
+- **仍未闭环**:B-69(`/api/mind/` 401,第 3 轮)、B-65(langgraph analyze 500,第 3 轮)、B-54(环境)、B-55/G10(251 派发)、G9(SRS 锚点)。
|
|
|
+- **本轮结果有变化**(测试侧 23 例转绿 + 基线稳定证据)→ 交付件已提交并推送远程,研发交接通知同步落地。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 10. SRS / 场景变更检测(窗口内,追加于推送后核对)
|
|
|
+
|
|
|
+> 本轮跑测起点 HEAD 为 `b58d54775`;推送前 `git fetch` 发现 `origin/cfclub` 已前进 **18 提交**(含新功能与新规格)。以下变更**不在本轮基线内**,按「SRS/场景变更须更新用例」要求登记。
|
|
|
+
|
|
|
+| # | 变更 | 类型 | 本轮状态 | 用例影响 | 下轮动作 |
|
|
|
+|---|---|---|---|---|---|
|
|
|
+| S-1 | `docs/superpowers/specs/2026-11-08-diet-recommendation-polish.md`(推荐食材页改版:去标题条 / 视图切换清选中态 / 今日食谱与筛选 Tab 同行 / 分页 / 共餐人选择,共 7 条意见,2 个能力键 `diet.recommendation.uiRework`、`diet.recommendation.participantSelect`) | **需求变更(SRS)** | 未覆盖(规格 17:00 后入库) | 需新增前端 Jest 守卫 7 条(`cfc-frontend/pages/diet/recommendation.vue` 视图/选中态/分页/共餐人)+ 后端契约 1 条(`/api/diet/recommendation` participants 入参) | **下轮补 RED 契约用例**(随研发入池节奏,先立用例再实现) |
|
|
|
+| S-2 | `docs/superpowers/specs/2026-11-08-dx-health-bridge.md`(GAP-A:D/X 同步数据桥接五维消费链路,O-17 裁决「仅登记不实现」) | **契约补建(SRS 新增)** | 未覆盖(无实现,不得伪证) | 契约核对阶段**不建测试**;桥接实现入池后再补「health_data_sources → health_dimension_score → 档案展示 → 小程序端点」四段链路用例 | 下轮在覆盖矩阵登记「已识别未覆盖」,与 C-1 合并跟踪 |
|
|
|
+| S-3 | `c575a3a5b` feat(articles) 发布后异步预生成朗读音频 + 正文变更作废旧音频(自带 11 例单测:`ArticleAudioServiceAutoGenTest` 3 + `ArticleServiceAudioInvalidationTest` 8) | 功能新增(已带测试) | 未执行(提交未在基线内) | 基线用例数将由 2628 → **2639** | 下轮全量复跑纳入 |
|
|
|
+
|
|
|
+> 结论:窗口内 **2 份 SRS 新增/变更 + 1 个带测新功能**。S-1 需按 7 条意见补用例(未补,登记为缺口);S-2 按 O-17「仅登记不实现」不建伪用例;S-3 下轮全量纳入基线(预计 +11 例)。
|