Răsfoiți Sursa

docs(tdd): 测试负责人第175轮闭环汇报 2026-11-12 2120(R175 快件实跑+采信:3979例/3891过/97.79%剔skip98.41%,langgraph@251 48→46环境回摆非回归;浏览器28/28+2跳、API 25过7跳0红、web 116/116、fe 609/3/12、根级7/16;门禁不通过承袭;SRS零变更用例无需更新;B-126第8轮复现)

E2E Test Bot 6 ore în urmă
părinte
comite
8916ced738

+ 72 - 0
docs/tdd/automation-run-2026-11-12-R175.md

@@ -0,0 +1,72 @@
+# 测试闭环 R175 — 2026-11-12 21:04 (GMT+8)
+
+> 执行档:**review(内网 cfc.iwintrue.com 已授权;不访问外部公网)**
+> 主理人:软件测试专家团·陆谨(测试负责人)| 被审查对象:d:/cfc(浠艾福 XAF)
+> 本轮回合 HEAD `a6b758d76`(= origin/cfclub 0/0,R174 20:46 已收口推送);窗口 R174 后**零功能源码变更**(仅 R174 汇报本体)→ 后端采信 R174 全量实时数据,本机七套件快件实跑 + langgraph@251 实派
+> 上次本对象记忆轮 = R174(20:46)
+
+## 1. 历史审查记录(记忆召回)
+
+- **非首次审查**:直接前驱 **R174(20:46,`a6b758d76`)**「不通过(承袭)」,全量 3979 例/3893 过(97.84%),langgraph 48/51(红 3 全环境)。
+- **本次对照**:langgraph **48→46 过(红 3→5)**,红集合回摆至 auto_tag 3 + intent 2,根因仍为上游 AgnesAI 429/401(B-142-2 第 9 轮);其余六套件(浏览器 28/28、API 25/7/0、前端 609/3/12、管理端 116/116、根级 7/16、dx 2 skip)与 R174 **逐项零漂移**。
+
+## 2. 执行范围与结果
+
+| 模块 | 命令(离线/内网) | 状态 |
+|---|---|---|
+| cfc-backend 全量 | 采信 R174(40:12 实跑:3103 例 / 3060 过 / 39 红 / 4 跳 = 98.61%)| ✅ 窗口 `8489b0a94..HEAD` 后端 src 零变更,采信成立 |
+| cfc-frontend | `cd cfc-frontend && npx jest --ci` | ✅ 实测 624(609 过 / 3 红 / 12 跳,46.5s),3 红 = S-cfc-132/133 预期 RED,零漂移 |
+| cfc-web | `cd cfc-web && npx jest --ci` | ✅ 实测 116/116(35.6s),零漂移 |
+| 根级黑盒 | `cd tests && npx jest --ci` | ✅ 实测 7/16(9082 未起,B-36 第 61 轮,4.9s) |
+| 浏览器 E2E(189 admin + 本机) | Playwright config live/health(`--output` 一次性目录规避 B-173-1) | ✅ 实测 **28/28 + dx 2 skip** |
+| 线上 API | Playwright config api(点名 4 文件) | ✅ 实测 32 例(25 过 / 7 跳 / 0 红,11.9s) |
+| LangGraph@251 | 251 `4096 POST /api/shell` → `.venv/bin/python -m pytest` | ✅ 实测 **46 / 51**(5 红全环境,129.43s) |
+| 安全/性能/依赖漏洞(公网) | SAST/DAST/SCA/压测 | ⛔ 未授权未执行 |
+
+## 3. 本轮实测数据
+
+| 套件 | 总数 | 通过 | 失败 | 跳过 | 说明 |
+|---|---|---|---|---|---|
+| 后端 JUnit(采信 R174) | **3103** | **3060** | **39**(33F+6E) | 4 | 存量 18(11 类)零漂移第 21 次 + 未入库 GrowthPublic 5E + 契约预期 RED 16 |
+| cfc-frontend Jest | 624 | 609 | 3 | 12 | 3 全预期 RED(S-cfc-132/133),零漂移 |
+| cfc-web Jest | 116 | 116 | 0 | 0 | 全绿,零漂移 |
+| langgraph@251 | 51 | **46** | **5** | 0 | **较 R174 恶化 2 例**:auto_tag 3 + intent 2 回红,全 429/401 环境(B-142-2 第 9 轮);EXIT 行缺失(B-126 第 8 轮) |
+| 浏览器 E2E | 30 | 28 | 0 | 2 | 189 admin 5/5 EXIT=0(1.5m)/ 本机 fe 6、shop 4、health 13(TC-HP-U01~03 全 401,B-61 维持);dx 2 skip(B-DX-1) |
+| 线上 API | 32 | 25 | 0 | 7 | 零漂移 |
+| 根级黑盒 | 23 | 7 | 16 | 0 | 9082 未监听(B-36 第 61 轮) |
+| **合计** | **3979** | **3891** | **63** | **25** | 通过率 **97.79%**(剔 skip **98.41%**) |
+
+> 变化项(vs R174 3893 过 / 61 红):**langgraph 环境红 3→5(-2 过)**,全量红 61→63,其余零漂移。非代码回归(红因均为上游 429/401,与端口代码无关;本机 6 端点 `/health` 200)。
+
+## 4. 节点与线上探针
+
+| 探针 | 结果 |
+|---|---|
+| 251:9000 `/health` | 200(langgraph 服务活) |
+| 251:4096 shell | 401(Basic Auth 正常,kick/read/run 均通) |
+| 189:4090 | 200(admin-live 实派成功) |
+| 204:4090 | **000**(B-95 第 35 轮,失联延续) |
+| admin / frontend | 302 / 302(在线) |
+| 匿名 POST 6 端点 | **6/6 = 401**(G8 ✅,B-142-1 维持销号第 10 轮) |
+| dx 两端点 | 404 / 404(B-DX-1 第 27 轮) |
+
+## 5. SRS / 场景变更闸门(G12)
+
+- 窗口(R174 后)`tests/test-cases / tests/user-scenarios / docs` 零新提交 → **用例无需更新**。
+- 度量(台账刷新):控制器 365 | handler 1974(覆盖 456,**23.1%**,covered 34 / partial 200 / uncovered 130 / no-handler 1)|跨源用例 **4426**(md 719 / PW 571 / py 48 / Java@Test 3088 / 场景 11)|SC 基线 244(R174 入册后)。
+
+## 6. 本轮发现 / 记录
+
+| 编号 | 级别 | 内容 |
+|---|---|---|
+| B-142-2-Update(第 9 轮) | P0 环境 | langgraph 红 3→5(48→46 过):auto_tag 3 + intent 2 回红,全 429/401;红集合与 R173 一致(配额抖动回摆),**不销号(观察 1/9)** |
+| B-126-Update(第 8 轮) | P2 工具 | 251 pytest 日志**仍无 `EXIT=` 行**(grep 0 命中)——首个收尾行是 `5 failed, 46 passed ... 129.43s`;summary 齐备非挂起,但退出码仍未落盘,B-126 修法未生效,需研发/测试跟进 kick 串 |
+| B-153-1 / B-167-1(销号维持) | 观察 | 189 admin 5/5 EXIT=0(连续第 14 轮首跑即绿,无 502) |
+| B-36(第 61 轮零漂移) | 环境 | 根级 16 红全 `ECONNREFUSED 127.0.0.1:9082`(服务未启动,历轮承袭) |
+
+## 7. 门禁与结论
+
+- **不通过(承袭)**——✅ G3 前端 624(3 预期 RED,符合 TDD 常态)/ G4 管理端 116-116 / G5 后端编译·dump 0 / G6 浏览器 28-28 / G8 匿名 6-6 全 401 / G10 双节点(189 5/5 + 251 51 例)/ G12 SRS 零变更 / G13 存量红零漂移第 21 次 / G14 台账刷新;
+  ❌ G1 97.79%(剔 skip 98.41%)/ G2 63 红(后端 39 + langgraph 5 + fe 3 + 根级 16)/ G7 46-51(红名为环境)/ G9 锚点覆盖率 / G11 CI 清单失真(B-152-1/2 第 10 轮延承)。
+- **变化项**:langgraph 环境红 3→5(非代码回归)。→ 依指令提交远程 + 研发通知。
+- 复评门槛(承袭):① langgraph 连续 2 轮全绿(需 251 换 Token + 配额恢复);② 后端存量 18 红清零或契约裁决转预期 RED;③ CI 清单修正;④ 锚点率 ≥60%;⑤ B-126 EXIT 落盘修复。

+ 33 - 0
docs/tdd/notice-2026-11-12-R175-研发通知.md

@@ -0,0 +1,33 @@
+# 研发通知 · R175(2026-11-12 21:20)
+
+> 来源:测试负责人(自动化测试闭环任务,R175 轮)
+> 通道:本通知文件 + `blockers.md` R175 段 + `report-test-2026-11-12-R175.md`(均已推送 origin/cfclub)
+
+## 本轮结论速览
+
+- 全站 **3979 例 / 3891 过(97.79%,剔 skip 98.41%)**,红 63(后端 39 + langgraph 5 + 前端 3 + 根级 16)/ 跳 25。
+- 与 R174 相比**唯一变化**:**langgraph@251 48→46 过(红 3→5)**,全为上游环境(429/401 配额),**非代码回归**;其余六套件零漂移。
+- 后端无新提交需研发处理;SRS/场景零变更,用例无需更新(G12 ✅)。
+
+## 请研发处理的优先级事项
+
+| # | 事项 | 优先级 | 说明 |
+|---|------|--------|------|
+| 1 | **251 langgraph 上游 Token/配额**(B-142-2 第 9 轮) | P0 | 5 红全落 `429 AgnesAI free limit` + `401 ****ab12 invalid`。红集合 3↔5 随配额摆动已持续 9 轮。**请更换有效 Token 或升级配额**,恢复后测试侧连续 2 轮全绿即销号。 |
+| 2 | **CI 排除清单矫正**(B-152-1/2 第 10 轮) | P0 | `BACKEND_OBSERVED_CLASSES` 漏拦 8 类 + 陈旧已绿 26 类 → `backend-blocking-junit` 必红且覆盖虚化。请按 R174/R175 实测红类集合重建清单。 |
+| 3 | **B-126 EXIT 落盘失效**(第 8 轮复现) | P2 | 251 pytest 日志收尾无 `EXIT=` 行,退出码不可判定。建议 kick 串整体重定向(见报告 §五.2)。 |
+| 4 | 3 份未入库测试文件(B-162-1 第 6 轮) | P1 | `GrowthPublicEndpointMappingTest`(5E)等 3 文件仍 `??`,HEAD 纯度口径 371 vs 工作区 374。 |
+| 5 | 契约批次 RED(S-cfc-166/168/169) | P1 | MembershipPlanPurchase 7 / ShopOrderQueryRefund 4 / SupplierOrderFulfill 5 = 16 例预期 RED,待研发实现使绿。 |
+| 6 | 后端全量耗时(B-173-3,R174 已回 40:12) | P2 | 前 6 类测试约占 45% 耗时,建议 AbstractSpringTest 复用上下文缓存。 |
+
+## 浏览器/前端/Jest 状态(无需研发介入)
+
+- 浏览器 E2E **28/28**(189 admin 5/5 EXIT=0 · 本机 fe 6/shop 4/health 13)——B-153-1/B-167-1 销号维持第 14 轮;health 鉴权契约 13/13(TC-HP-U01~03 全 401)。
+- 线上 API 32 例 **25 过 / 7 跳 / 0 红**;匿名 6 端点全 401(B-142-1 维持)。
+- cfc-frontend 624(609 过 / 3 预期 RED / 12 跳)、cfc-web 116/116、根级 7/16(9082 未启动,环境项)。
+- dx-bridge 2 例 skip(端点 404,B-DX-1 第 27 轮,请部署确认)。
+
+## 测试侧承诺
+
+- 已推送:本通知 + R175 报告/运行日志 + blockers R175 段 + 3 份台账(discovery/inventory/automation-status)。
+- 下轮将按 251 Token 恢复情况复评 langgraph(连续 2 轮全绿则销号 B-142-2)。

+ 208 - 0
docs/tdd/orchestration/report-test-2026-11-12-R175.md

@@ -0,0 +1,208 @@
+# 测试负责人工作汇报(R175 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R175 为**独立增量复核 + 快件实跑轮**:R174(20:46)刚在相同 HEAD 完成全量回归(后端 40:12 实跑),本轮后端**采信 R174 实时数据**(窗口零功能源码变更),其余七套件全部本轮实测。
+> 对比基线 R174(`a6b758d76`):窗口 `8489b0a94..a6b758d76` 后端 src / 前端 / langgraph 源码零变更。
+> 本轮核心结论:**全站 3979 例 / 3891 过(97.79%,剔 skip 98.41%)**;langgraph@251 **46/51**(5 红全 429/401 环境,**较 R174 48 过回摆 -2**,非代码回归);浏览器 **28/28 + 2 跳**;线上 API **25 过 / 7 跳 / 0 红**;前端 609/3/12、管理端 116/116、根级 7/16 全部零漂移;SRS/场景窗口零变更 → 用例无需更新(G12 ✅);门禁 **不通过(承袭)**。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
+| 汇报周期 | 2026年11月12日 20:55 ~ 21:20(第 175 轮) |
+| 基线 | `cfclub @ a6b758d76`(R174 收口,= origin/cfclub 0/0) |
+| 窗口内需求变更 | **零**——R174 用例入册(241→244)后无新 SRS/场景提交 |
+| 窗口内源码变更 | 零功能源码;仅 R174 汇报提交本体 |
+| 负责模块/单元 | 全站:cfc-backend JUnit(采信 R174)· 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · cfc-web/cfc-frontend Jest · 根级黑盒 · 线上 API 非功能层 |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数\*** | **0 个** | SRS/场景窗口零变更,无需新增;SC 基线 244 承袭 |
+| **本轮验证执行测试数\*** | **3979 个** | 后端 JUnit 3103(采信 R174)+ 前端 Jest 624 + 管理端 116 + langgraph 51 + 浏览器 30(28 过 + 2 跳)+ 线上 API 32(25 过 + 7 跳)+ 根级 23 |
+| **用例通过率** | **97.79%**(3891/3979;剔除 skip **98.41%**) | 红 63 / 跳 25,明细见 §3.3 |
+| **用例台账** | `tests/test-cases/` 17 份(承袭 R174) | 场景 218 / SC 基线 244 / TC 表行 882+ |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数\*** | **3 个** | R175-1 → `opencode-189`(admin-desktop **5/5 EXIT=0**);R175-2 → `opencode-251`(langgraph pytest **46/51**,129.43s);R175-3 → 本机串行(2 套 Jest + 4 组浏览器 + API 层 + 根级) |
+| **恢复智能体会话数\*** | 0 个 | 189/251 均首派成功 |
+| **当前在用会话数** | 0 个 | 本轮快件全部结束,无长任务在跑 |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.5m) | `C:\code\cfc\tests` | **5/5 EXIT=0**(连续第 14 轮首跑即绿) |
+| `opencode-251` | 192.168.16.251:4096 | done(本会话派发) | langgraph pytest 51 例 | 已完成(129.43s) | `/sc-data/cfc/cfc-langgraph` | **46 过 / 5 红**;节点 HEAD `00f3b4bd8`;5 红全 429/401(环境型,B-142-2 第 9 轮) |
+| `local-browser` | 本机进程 | done | fe / shop / health / dx | 已完成 | `d:\cfc\tests` | fe **6/6**、shop **4/4**、health **13/13**、dx **2 skip**(端点 404) |
+| `local-api` | 本机进程 | done | 线上 API 冒烟/安全/性能兼容/追溯 | 已完成(11.9s) | `d:\cfc\tests` | **25 过 / 7 跳 / 0 红** |
+| `local-jest` | 本机进程 | done | cfc-frontend + cfc-web + 根级 | 已完成 | `cfc-frontend` / `cfc-web` / `tests` | fe 609/3/12(3 预期 RED)、web **116/116**、根级 7/16(9082 未起,B-36 第 61 轮) |
+| `local-backend` | 采信 R174 | done(采信) | 后端全量 `mvn -o -B clean test` | R174 已跑(40:12) | `d:\cfc\cfc-backend` | 3103 例 / 3060 过 / 39 红 / 4 跳,窗口零源码变更 |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数\*** | 0 个(产品缺陷) | 5 红全归因环境(429/401 上游配额),无新增代码缺陷 |
+| **已解决测试相关问题数\*** | 0 个 | 无测试侧可自闭环项(B-173-1 safe-delete 已用 `--output` 规避,延续) |
+| **待解决测试相关问题数** | 延续 R174 清单(P0×2 / P1×6 / P2×4) | ① B-142-2 langgraph 上游 429/401(P0,本轮红 3→5 回摆);② B-152-1/2 CI 排除清单双向失真(P0/P1);③ B-173-2 API 层入口默认收集 990 例(P1);④ B-156-1 `nutrition_age_dosage` 建表 SQL(P1);⑤ B-162-1 3 类未入库测试文件(P1);⑥ S-cfc-166/168/169 契约预期 RED(P1);⑦ B-173-1 safe-delete 守卫(P2,`--output` 规避中);⑧ B-173-3 后端全量耗时(P2);⑨ B-126 EXIT 落盘失效(P2,本轮第 8 轮复现);⑩ B-170-1/⑪ B-36/⑫ B-95 延续 |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| (本轮提交,见 commit 后补全) | 全站巡检 R175 | 汇报 | 报告/运行日志/通知/blockers/3 台账 | cfclub | ✅ 本轮推送 | 测试结果有变化(langgraph 48→46 回摆)→ 提交并通知研发 |
+
+### 1.5 状态机阶段分布(全局进度)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 窗口零新增规格 |
+| RED | 8 | 承袭研发口径(含 S-cfc-166/168/169 契约 16 例待实现) |
+| YELLOW | 63 | 承袭 R174 |
+| GREEN | 8 | 承袭 |
+| DONE | 15 | 承袭 |
+| 合计 | 94 | 与研发汇报口径一致 |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用(CFC 声明配置) |
+| 契约常量(contract) | 多组 | 正常 | 契约测试类跨轮核验正常 |
+| 测试用例引用(test_case_map) | 155+ | 正常 | 台账扫描正常(跨源 4426) |
+| 执行结果回填(case_results) | 1185 条 | 正常 | 侧车未重写,保留既有回写 |
+
+---
+
+## 二、历史审查记录(阶段 -1 记忆召回)
+
+| 项 | 内容 |
+|---|---|
+| 上次审查 | **R174(2026-11-12 20:46,提交 `a6b758d76`)**,结论「不通过(承袭)」,全量 3979/3893(97.84%),langgraph 48/51 红 3 |
+| 遗留缺口 | 后端存量 18 红(零漂移第 21 次)· langgraph 环境红 · 根级 16 红(9082 未起)· CI 漏拦 8 类 · 3 未入库测试 · B-126 EXIT 未落盘 |
+| 本次是否改善 | **无正向、无回归**:唯一变化 langgraph 48→46(环境红回摆,非代码);其余六套件逐项零漂移 |
+| 教训应用 | ① 251 派发沿用 `--output` 一次性目录、LOG 路径守卫(B-173/9b2688a3a);② 快件实跑替代全量重跑(同 HEAD 采信纪律);③ 根级/浏览器不依赖 9082 起停 |
+
+> 本次为该对象**第 175 次**审查,有历史记录;上述内容仅作对照,**本次结论全部来自本轮实测(后端承袭 R174 同 HEAD 实时数据)**。
+
+---
+
+## 三、项目画像与覆盖矩阵
+
+### 3.1 项目画像(承袭并本轮核验)
+
+| 维度 | 内容 |
+|---|---|
+| 业务定位 | 家庭教育「五维能量」(身/心/智/行/富)测评 + 成长规划 + 商城 + 健康报告解析的微信小程序 + Web 管理端全栈系统 |
+| 技术栈 | 后端 Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)· 小程序 uni-app Vue2 · 管理端 Vue2 + Element UI(8082)· AI 服务 FastAPI + LangGraph + ChromaDB(9000) |
+| 模块结构 | `cfc-backend`(2121 主源 / 374 测试源含 3 未跟踪)/ `cfc-frontend` / `cfc-web` / `cfc-langgraph` / `dan/danshop` / `tests` |
+| 关键路径 | 登录(微信/direct-register)→ 家庭与成员 → 五维测评/能量 → 成长规划(规划师)→ 商城订单/优惠券/退款 → 健康报告上传解析 → AI 对话(仅会员可见) |
+| 测试现状 | 后端 3103 例(采信 R174,98.61%);前端 Jest 624;管理端 116;浏览器 28+2skip;API 层 32;langgraph 51;根级黑盒 23 |
+| 质量目标 | 全量通过率 ≥98%、浏览器 E2E 100%、langgraph 100%、锚点覆盖率 ≥80%、CI 硬门禁可用 |
+| 风险点 | LLM 上游配额(429/401)· 契约 RED 批次(16 例)· 数据库迁移静默失败 · CI 排除清单失真 · 未入库测试资产 · 251 残留进程堆积 |
+
+### 3.2 20 类测试覆盖矩阵(全类不省略)
+
+| # | 测试类型 | 状态 | 本轮证据 |
+|---|---|---|---|
+| 1 | 单元测试 | ✅ 已发现 | 后端 3103 例(采信 R174,98.61%);前端 Jest 624(609 过);管理端 116/116 |
+| 2 | 测试覆盖率 | ⚠️ 部分 | 扫描口径 456/1974 handler = **23.1%**(covered 34 / partial 200);后端 JaCoCo 未配置 → 行覆盖无法量化(G-170-3 延续) |
+| 3 | 变异测试 | ❌ 未发现 | 仓库无 PIT/Stryker 配置;离线档无工具(未实测,不得视为通过) |
+| 4 | 集成测试 | ✅ 已发现 | 后端 `integration/**`(含 GrowthPublicEndpointMappingTest 5E—未入库 B-162-1) |
+| 5 | 契约测试 | ✅ 已发现 | 后端 `*ContractTest` 多组(含 S-cfc-166/168/169 预期 RED);API 层 32 例 0 红 |
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 32 例:25 过 / 7 跳 / 0 红 |
+| 7 | 系统 / 端到端 | ✅ 已发现 | 浏览器 28/28(189 admin 5 + 本机 fe 6 / shop 4 / health 13)+ dx 2 skip |
+| 8 | 验收 UAT | ⚠️ 待核实 | 无独立 UAT 用例库;以 17 份台账近似验收口径 |
+| 9 | BDD 规格 | ❌ 未发现 | 无 `.feature` / Cucumber 资产 |
+| 10 | 冒烟测试 | ✅ 已发现 | api-smoke 4/4 + 根级冒烟 7/23 过 |
+| 11 | 性能测试 | ⚠️ 部分 | `nonfunc-perf-compat.spec.js` 4 例(1 过 3 跳)线上实跑;压测未授权未执行 |
+| 12 | 可靠性测试 | ⚠️ 部分 | INVALID/502 风暴历史处置;本轮无环境风暴 |
+| 13 | 安全测试(SAST) | ⚠️ 部分 | `nonfunc-security.spec.js` 线上 11 例 0 红(XSS/非法上传);SAST 扫描未授权 |
+| 14 | 安全测试(DAST/渗透) | ❌ 未发现 | 未授权联网执行 |
+| 15 | 兼容性测试 | ⚠️ 部分 | 浏览器 E2E 仅 Chrome/Chromium 通道;跨浏览器矩阵未实测 |
+| 16 | 可用性测试 | ⚠️ 部分 | health/dx/shop/frontend 游客流覆盖;专业可用性评审未执行 |
+| 17 | 无障碍测试 | ❌ 未发现 | 无 axe/Lighthouse 资产 |
+| 18 | QA 流程与度量 | ✅ 已发现 | 本轮台账三件套刷新(discovery 23.1% / inventory 4426 / automation-status) |
+| 19 | 全项目代码审查 | ⚠️ 部分 | 历轮域报告 3/8 落盘;代码审查结论限于台账与红类归因 |
+| 20 | 回归测试 | ✅ 已发现 | 本轮与 R174 逐项零漂移比对(G13 存量红第 21 次);前端 3 RED + 后端 16 预期 RED 为 TDD 常态 |
+
+---
+
+## 四、本轮实测明细(§3.3 红例归因)
+
+### 4.1 后端红例(39,采信 R174 归因)
+
+| 层 | 例数 | 类 | 说明 |
+|---|---|---|---|
+| 存量装置/契约 | **18** | EnergySystemFlow 6F / DimensionRegistryMap 3F / GuideModule 1E / OrchestrationEngine 1F / OrchestrationIntegration 1F / MembershipPaySwitch 1F / PaymentServiceORD 1F / WechatLogin 1F / WechatLoginContract 1F / TaskReviewScP11 1F / TeamProfitCron 1F | 与 R174 **逐类逐例一致**(零漂移第 21 次) |
+| 未入库测试类 | 5E | GrowthPublicEndpointMappingTest | B-162-1(`??` 未跟踪) |
+| 新契约预期 RED | 16 | MembershipPlanPurchase 7 / ShopOrderQueryRefund 4 / SupplierOrderFulfill 5 | S-cfc-168/166/169 待研发实现 |
+
+### 4.2 langgraph 红例(5,本轮实测,全环境)
+
+| 用例 | 根因 | 定性 |
+|---|---|---|
+| test_auto_tag_content_relevance / short_content / empty_content | `429 AgnesAI free limit` + `401 ****ab12 invalid` | 环境型(配额/密钥),B-142-2 第 9 轮 |
+| test_intent_classify_analysis / classify_recommend | `429 free limit`(intent_classifier.py:62) | 环境型(配额) |
+
+### 4.3 前端/管理端/根级
+
+- 前端 3 红 = S-cfc-132/133 契约预期 RED(组件未交付,TDD 正常态,非回归)。
+- 根级 16 红 = 全 `ECONNREFUSED 127.0.0.1:9082`(B-36 第 61 轮,后端未启动的历轮环境项)。
+
+---
+
+## 五、向研发提出的改进建议
+
+| 序号 | 建议标题 | 问题描述 | 根因分析 | 建议方案 | 优先级 | 状态 |
+|------|----------|----------|----------|----------|--------|------|
+| 1 | langgraph 上游 Token 与配额恢复 | 51 例中 5 红全落 `429 AgnesAI free limit` + `401 ****ab12 invalid`,红集合随配额抖动在 3~5 摆动 | 免费额度上限 + 密钥失效(`****ab12`) | 251 节点更新合法 Token / 升级付费套餐;恢复后连续 2 轮全绿销号 | P0 | 待评估 |
+| 2 | B-126 EXIT 落盘修复 | 251 pytest 日志收尾仍无 `EXIT=` 行(第 8 轮复现),无法据退出码判定正常关闭 | kick 串 `rc=$?; echo EXIT=$rc` 重定向在 setsid 分离进程下未写入日志文件(`>>>bash -c` 引号/重定向顺序问题) | 改用 `bash -c "... ; rc=$?; echo EXIT=$rc" >> LOG 2>&1` 整体重定向;或派发器 wait 该 shell id 到 exited 再读 status | P2 | 待评估 |
+| 3 | CI 排除清单矫正(承袭) | `BACKEND_OBSERVED_CLASSES` 漏拦 8 类 + 陈旧已绿 26 类 → `backend-blocking-junit` 必红 | 清单与红类集合长期脱节 | 按 R174/R175 实测红类集合重生成清单 | P0 | 待评估 |
+| 4 | 后端全量耗时(承袭) | R173 51:52 劣化,R174 回 40:12 但仍偏高(前 6 类占 45%) | 上下文缓存未复用 + @EnableScheduling | AbstractSpringTest 复用上下文缓存 | P2 | 待评估 |
+
+---
+
+## 六、本轮阻塞与风险
+
+| 阻塞项 | 影响范围 | 阻塞类型 | 处置进展 | 需要协调 |
+|--------|----------|----------|----------|----------|
+| langgraph 上游 429/401(B-142-2) | AI 链路(chat/analyze/intent/auto_tag) | 环境/研发 | 待处理(本轮 5 红延续) | 251 换 Token + 配额 |
+| 根级黑盒 9082(B-36) | 黑盒 23 例 | 环境 | 待处理(第 61 轮) | 无(服务未启动系环境常态) |
+| 204 节点失联(B-95) | 第四派发节点 | 运维 | 待处理(第 35 轮) | 运维 |
+| CI 口径失真(B-152-1/2) | CI 硬门禁 | CI/研发 | 待处理(第 10 轮) | 研发 |
+
+---
+
+## 七、下轮工作计划
+
+| 计划项 | 预计完成时间 | 前置依赖 | 备注 |
+|--------|--------------|----------|------|
+| 续盯 langgraph 红集合(期望 429 恢复全绿) | 下轮巡检 | 251 Token/配额 | B-142-2 观察第 9 轮 |
+| 快件实跑 + 台账刷新 | 下轮巡检 | 无 | 沿用采信纪律 |
+| SRS/场景变更核查 | 下轮巡检 | 无 | G12 门 |
+
+---
+
+## 附录
+
+### 附录 C:新发现问题明细
+
+| 问题 ID | 能力键/任务号 | 问题类型 | 路由去向 | 登记时间 | 处置状态 | 关联 sha |
+|---------|---------------|----------|----------|----------|----------|----------|
+| (本轮无新增产品缺陷) | — | — | — | — | — | — |
+
+---
+
+**模板版本**:v1.1(2026-11-03) | **汇报轮次**:R175(2026-11-12 21:20 交付)

+ 7 - 4
docs/tdd/test/automation-status.md

@@ -19,12 +19,12 @@
 
 | 来源类型 | 文件数 | 用例/方法数 | 已自动化 | 待自动化 | 未跟踪 | 已执行 | 通过 | 失败 | 阻塞 |
 | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| 结构化测试用例(md) | 10 | 716 | 63 | 653 | 421 | 255 | 14 | 0 | 26 |
+| 结构化测试用例(md) | 10 | 719 | 63 | 656 | 424 | 255 | 14 | 0 | 26 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
 | Playwright(e2e/integration) | 96 | 571 | 96 | 0 | 86 | 0 | 7 | 3 | 0 |
 | Python(pytest) | 11 | 48 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
 | Java后端测试 | 374 | 3088 | 374 | 0 | 357 | 0 | 15 | 2 | 0 |
-| **合计** | — | **4423** | **544** | **664** | 886 | 255 | 36 | 5 | 26 |
+| **合计** | — | **4426** | **544** | **667** | 889 | 255 | 36 | 5 | 26 |
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
@@ -75,7 +75,6 @@
 | `tests/test-cases/admin.md#TC-A-20-E` | GDPR 工单 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:GDPR 工单|e2e:— |
 | `tests/test-cases/admin.md#TC-A-21-E` | 网关/限流 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:网关/限流|e2e:— |
 | `tests/test-cases/admin.md#TC-A-22-E` | 模型管理 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:模型管理|e2e:— |
-| `tests/test-cases/admin.md#TC-A-23-E` | 知识库 | 运营 | P2 | 文档用例(待自动化) | 已执行 | 设计:知识库|e2e:— |
 | `tests/test-cases/admin.md#TC-A-01-P` | 认证 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:AdminAuthController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-02-P` | 统计 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:StatsController|e2e:— |
 | `tests/test-cases/admin.md#TC-A-03-P` | 方案管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:方案管理(全量)|e2e:— |
@@ -98,7 +97,6 @@
 | `tests/test-cases/admin.md#TC-A-20-P` | GDPR 工单 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:GDPR 工单|e2e:— |
 | `tests/test-cases/admin.md#TC-A-21-P` | 网关/限流 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:网关/限流|e2e:— |
 | `tests/test-cases/admin.md#TC-A-22-P` | 模型管理 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:模型管理|e2e:— |
-| `tests/test-cases/admin.md#TC-A-23-P` | 知识库 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:知识库|e2e:— |
 | `tests/test-cases/admin.md#TC-A-25` | 维度/权重/上限配置 | 运营 | P1 | 已关联自动化 | 已执行 | 设计:DimensionConfigController/DimensionWeightController|e2e:tests/e2e/energy-rules-config.spec.js |
 | `tests/test-cases/admin.md#TC-A-26` | 能量/归因权重 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:EnergyController/AttributionWeights|e2e:— |
 | `tests/test-cases/admin.md#TC-A-27` | 团队分润/成本价/流水/提现审核 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:TeamProfitAdminController/TeamProfitConfigService/WithdrawalService(S-cfc-68,17b6d6bfb)|e2e:— |
@@ -114,6 +112,11 @@
 | `tests/test-cases/admin.md#TC-A-27-S` | 管理端/睡眠配置 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:变更C / AdminSleepConfigController(参考 AdminGuideConfigController get/save 模式)+ sleep.quality.tags|e2e:— |
 | `tests/test-cases/admin.md#TC-A-27-S-E` | 管理端/睡眠配置 | 运营 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:变更C 验收口径 + 风险项 3 / 配置校验与回退契约|e2e:— |
 | `tests/test-cases/admin.md#TC-A-27-S-P` | 管理端/睡眠配置 | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:变更C / AdminSleepConfigController 权限校验 + LOGIN_REQUIRED_PATHS|e2e:— |
+| `tests/test-cases/admin.md#TC-A-24` | 财富中心·贡献榜 | 运营/管理员 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:family.earnings.admin.role / family.earnings.pool.toggle|e2e:— |
+| `tests/test-cases/admin.md#TC-A-23-E` | 团队收益·推广分享 | 运营/团队负责人 | P2 | 文档用例(待自动化) | 已执行 | 设计:team.referral.earnings.cf|e2e:— |
+| `tests/test-cases/admin.md#TC-A-24-E` | 财富中心·贡献榜 | 运营/管理员 | P2 | 文档用例(待自动化) | 未跟踪 | 设计:family.earnings.admin.role / family.earnings.pool.toggle|e2e:— |
+| `tests/test-cases/admin.md#TC-A-23-P` | 团队收益·推广分享 | 运营/团队负责人 | P1 | 文档用例(待自动化) | 已执行 | 设计:team.referral.earnings.cf / JwtInterceptor|e2e:— |
+| `tests/test-cases/admin.md#TC-A-24-P` | 财富中心·贡献榜 | 运营/管理员 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:family.earnings.admin.role / LOGIN_REQUIRED_PATHS|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N01` | 配置CRUD | 运营 | P1 | 文档用例(待自动化) | 未跟踪 | 设计:配置管理|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N02` | 报告解析中台 | 运营 | P0 | 文档用例(待自动化) | 未跟踪 | 设计:解析中台|e2e:— |
 | `tests/test-cases/admin.md#TC-A-N03` | 登录统计 | 运营 | P1 | 文档用例(待自动化) | 已执行 | 设计:统计聚合|e2e:— |

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

@@ -1128,3 +1128,16 @@
 | **B-142-1-Confirm(销号维持第 9 轮)** | `/api/admin/families/overview` 匿名 | 研发(已闭环) | **维持销号**。匿名 6 端点全 **401**(本轮 6/6)。 | 测试(R174 实测) | 2026-11-12 20:46 | 已销号 |
 | **B-153-1/B-167-1(销号维持)** | 189 admin 偶发/502 | 测试(观察项) | **维持销号**。本轮 189 admin 5/5 EXIT=0(1.4m)。 | 测试(R174 实派) | 2026-11-12 20:46 | 已销号 |
 | **G12 入册(R174 完成)** | 需求变更派生用例 21 例 | 测试(完成) | **已入册**。SC 基线 241→244;admin.md SC-A-23/24 三流 9 例 + chat-invite-rework TC-X-23~31 三流 12 例;提交 `f8acc8c52`。 | 测试(R174 入册) | 2026-11-12 20:46 | 已闭环 |
+## R175 段(2026-11-12 21:20,新增)
+
+| **B-142-2-Update(第 9 轮)** | 251 langgraph 上游 429/401 | 研发/运维(P0) | **回摆(红 3→5)**。51 例 **46 过 / 5 红 / 129.43s**;5 红 = auto_tag 3(content_relevance/short_content/empty_content)+ intent 2(classify_analysis/classify_recommend);日志 `429 AgnesAI free limit` + `401 ****ab12 invalid`。红集合与 R173 一致,属配额抖动回摆,**非代码回归**。**不销号(观察 1/9)**。 | 研发/运维 | 2026-11-12 21:20 | 待处理 |
+| **B-126-Update(第 8 轮,复现)** | 251 pytest EXIT 落盘失效 | 测试工具(P2) | **复现**。`/tmp/r150_pytest.log` 收尾无 `EXIT=` 行(grep 0 命中),末行为 `5 failed, 46 passed ... 129.43s`;summary 齐备非挂起,但退出码不可判定。修法:kick 串整体重定向 `bash -c "... ; rc=$?; echo EXIT=$rc" >> LOG 2>&1`。 | 测试 | 2026-11-12 21:20 | 待处理 |
+| **B-153-1/B-167-1(销号维持第 14 轮)** | 189 admin 偶发/502 | 测试(观察项) | **维持销号**。189 admin 5/5 EXIT=0(1.5m),连续 14 轮首跑即绿,无 502。 | 测试(R175 实派) | 2026-11-12 21:20 | 已销号 |
+| **B-142-1(销号维持第 10 轮)** | 匿名 6 端点 | 研发(已闭环) | **维持销号**。匿名 6 端点全 **401**(本轮 6/6)。 | 测试(R175 实测) | 2026-11-12 21:20 | 已销号 |
+| **B-36(第 61 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --ci` → **7 过 / 16 红**(4.9s),全 `ECONNREFUSED 127.0.0.1:9082`。 | 测试 | 2026-11-12 21:20 | 待处理(环境型) |
+| **B-95(第 35 轮)** | `192.168.16.204:4090` 失联 | 运维(P2) | **延续**。204:4090 = 000;189:4090=200、251:4096=401(认证)、251:9000 `/health`=200。 | 运维 | 2026-11-12 21:20 | 待处理 |
+| **B-DX-1(第 27 轮)** | dx-bridge 端点 404 | 部署(P2) | **延续**。dx 2 例 skip(不假绿)。 | 部署/运维 | 2026-11-12 21:20 | 待处理 |
+| **B-152-1/2(第 10 轮)** | CI `BACKEND_OBSERVED_CLASSES` 双向失真 | CI(P0/P1) | **延续**。漏拦 8 类 + 陈旧已绿 26 类 → `backend-blocking-junit` 必红。 | CI/研发 | 2026-11-12 21:20 | 待处理 |
+| **B-162-1(第 6 轮)** | 3 个测试类未入库却被编译执行 | 治理(P1) | **延续**。`GrowthPublicEndpointMappingTest`(5E)等 3 文件仍 `??`。 | 研发/测试 | 2026-11-12 21:20 | 待处理 |
+| **B-173-1/2/3(第 2 轮,承袭)** | safe-delete / API 990 / 后端耗时 | 测试/CI | B-173-1 本轮以 `--output` 一次性目录全部规避;B-173-2 沿用点名 4 文件;B-173-3 R174 后端已回 40:12(观察)。 | 测试(R175 实测) | 2026-11-12 21:20 | 待处理 |
+| **R175 门禁** | 全量 3979 / 3891 | 测试 | **不通过(承袭,环境回摆)**。✅G3 609-624(3 预期 RED)/G4 116-116/G5 编译 0 错 dump 0/G6 28-28/G8 6-6 全 401/G10 双节点(189 5/5 + 251 51 例)/G12 SRS 零变更/G13 存量红零漂移第 21 次/G14 台账刷新;❌G1 97.79%(剔 skip 98.41%)/G2 63 红(后端 39 + langgraph 5 + fe 3 + 根级 16)/G7 46-51/G9 锚点/G11 CI 必红。变化 = langgraph 环境红 3→5(48→46 过,非回归)。 | 测试(R175 闭环) | 2026-11-12 21:20 | 已记录 |

+ 9 - 2
docs/tdd/test/discovery.md

@@ -14,8 +14,8 @@
 | 单元-部分覆盖(handler 方法) | 200 |
 | 单元-未覆盖(handler 方法) | 130 |
 | 单元-无handler 方法 | 1 |
-| 测试文件数 | 367 |
-| @Test 方法总数 | 3030 |
+| 测试文件数 | 374 |
+| @Test 方法总数 | 3088 |
 | 含跳过/假设项(test 级 partial) | 4 |
 
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
@@ -315,6 +315,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/GuideFamilyTaskControllerTest.java` | com | 20 | 11 | 8 | GuideFamilyTaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorChangeServiceSemanticTest.java` | com | 20 | 0 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/ProductOrderControllerTest.java` | com | 20 | 3 | 7 | ProductOrderController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopCouponApplyContractTest.java` | com | 20 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitAdminManageContractTest.java` | com | 20 | 0 | 0 | TeamProfitAdminController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/PlanReviewTeacherContractTest.java` | com | 19 | 4 | 4 | PlanReviewController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/ScG06JwtGuardTest.java` | com | 19 | 0 | 0 | — | — |
@@ -412,6 +413,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/HealthReportCreateContractTest.java` | com | 10 | 10 | 1 | HealthReportController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/IndicatorFavoriteControllerTest.java` | com | 10 | 8 | 3 | IndicatorFavoriteController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/config/JwtInterceptorContractEdgeTest.java` | com | 10 | 2 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderCreateSpecialDealContractTest.java` | com | 10 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/config/SleepConfigTagsMechanismContractTest.java` | com | 10 | 3 | 3 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/StarScoreCalculatorContractRedTest.java` | com | 10 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TianpanGuideContractTest.java` | com | 10 | 2 | 3 | TianpanController | — |
@@ -476,6 +478,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheShellGuardContractTest.java` | com | 7 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideFamilyServiceTest.java` | com | 7 | 0 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/LegacyDimensionCallLogServiceTest.java` | com | 7 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java` | com | 7 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationIntegrationTest.java` | com | 7 | 0 | 0 | OrchestrationController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductDetailScP53ContractTest.java` | com | 7 | 0 | 0 | ProductController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/RolesUtilTest.java` | com | 7 | 0 | 0 | — | — |
@@ -516,6 +519,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/IndicatorFavoriteServiceTest.java` | com | 6 | 6 | 0 | IndicatorController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/LegacyDimensionCallFilterTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MemberPriceResolverTest.java` | com | 6 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipChatMemberGateContractTest.java` | com | 6 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/MembershipPaySwitchTest.java` | com | 6 | 10 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipViewScP59ContractTest.java` | com | 6 | 0 | 0 | MembershipController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ProductBrowseScP52ScG05ContractTest.java` | com | 6 | 2 | 0 | ProductController | — |
@@ -526,6 +530,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG09LogoutContractTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG12H5FallbackContractTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceContentServiceTest.java` | com | 6 | 0 | 0 | ServiceContentController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApplyBindInviteContractTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/ServiceRoleApproveTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/util/SpearmanUtilTest.java` | com | 6 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/StatsControllerTest.java` | com | 6 | 10 | 2 | StatsController | — |
@@ -565,6 +570,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG07TestModeContractTest.java` | com | 5 | 3 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG08EnvAdaptiveContractTest.java` | com | 5 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/ScG11AgreementContractTest.java` | com | 5 | 0 | 0 | — | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/SupplierOrderFulfillContractTest.java` | com | 5 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/TaskServiceMinigameTest.java` | com | 5 | 0 | 0 | TaskController | skip×1、⚠部分 |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/UserServiceEffectiveFamilyIdsTest.java` | com | 5 | 0 | 0 | UserController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/UserServiceMaskChildSensitiveFieldsTest.java` | com | 5 | 0 | 0 | UserController | — |
@@ -589,6 +595,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/service/ProfitPoolOrderContractRedTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/impl/PurchaseServiceImplRenewalTest.java` | com | 4 | 5 | 0 | PurchaseController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/ServiceTypeServiceTest.java` | com | 4 | 0 | 0 | ServiceTypeController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/ShopOrderQueryRefundContractTest.java` | com | 4 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskFrequencyScP12ContractTest.java` | com | 4 | 0 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java` | com | 4 | 3 | 0 | TaskController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/service/TaskServiceCfEarnTest.java` | com | 4 | 0 | 0 | TaskController | — |

+ 7 - 4
docs/tdd/test/inventory.md

@@ -8,12 +8,12 @@
 
 | 来源类型 | 文件数 | 用例/方法数 |
 | --- | --- | --- |
-| 结构化测试用例(md) | 10 | 716 |
+| 结构化测试用例(md) | 10 | 719 |
 | Playwright(spec.js) | 96 | 571 |
 | Python(pytest) | 11 | 48 |
 | Java后端(测试文件) | 374 | 3088 (@Test) |
 | 用户场景(md) | 11 | 文件级 |
-| **合计** | — | **4423** 用例/方法 |
+| **合计** | — | **4426** 用例/方法 |
 
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 
@@ -66,7 +66,6 @@
 | `TC-A-20-E` | GDPR 工单 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-20-E` | — | GDPR 工单 |
 | `TC-A-21-E` | 网关/限流 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-21-E` | — | 网关/限流 |
 | `TC-A-22-E` | 模型管理 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-22-E` | — | 模型管理 |
-| `TC-A-23-E` | 知识库 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-23-E` | — | 知识库 |
 | `TC-A-01-P` | 认证 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-01-P` | — | AdminAuthController |
 | `TC-A-02-P` | 统计 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-02-P` | — | StatsController |
 | `TC-A-03-P` | 方案管理 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-03-P` | — | 方案管理(全量) |
@@ -89,7 +88,6 @@
 | `TC-A-20-P` | GDPR 工单 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-20-P` | — | GDPR 工单 |
 | `TC-A-21-P` | 网关/限流 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-21-P` | — | 网关/限流 |
 | `TC-A-22-P` | 模型管理 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-22-P` | — | 模型管理 |
-| `TC-A-23-P` | 知识库 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-23-P` | — | 知识库 |
 | `TC-A-25` | 维度/权重/上限配置 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-25` | tests/e2e/energy-rules-config.spec.js | DimensionConfigController/DimensionWeightController |
 | `TC-A-26` | 能量/归因权重 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-26` | — | EnergyController/AttributionWeights |
 | `TC-A-27` | 团队分润/成本价/流水/提现审核 | 运营 | P0 | 功能 | `tests/test-cases/admin.md#TC-A-27` | — | TeamProfitAdminController/TeamProfitConfigService/WithdrawalService(S-cfc-68,17b6d6bfb) |
@@ -105,6 +103,11 @@
 | `TC-A-27-S` | 管理端/睡眠配置 | 运营 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-27-S` | — | 变更C / AdminSleepConfigController(参考 AdminGuideConfigController get/save 模式)+ sleep.quality.tags |
 | `TC-A-27-S-E` | 管理端/睡眠配置 | 运营 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-27-S-E` | — | 变更C 验收口径 + 风险项 3 / 配置校验与回退契约 |
 | `TC-A-27-S-P` | 管理端/睡眠配置 | 运营 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-27-S-P` | — | 变更C / AdminSleepConfigController 权限校验 + LOGIN_REQUIRED_PATHS |
+| `TC-A-24` | 财富中心·贡献榜 | 运营/管理员 | P1 | 功能 | `tests/test-cases/admin.md#TC-A-24` | — | family.earnings.admin.role / family.earnings.pool.toggle |
+| `TC-A-23-E` | 团队收益·推广分享 | 运营/团队负责人 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-23-E` | — | team.referral.earnings.cf |
+| `TC-A-24-E` | 财富中心·贡献榜 | 运营/管理员 | P2 | 异常 | `tests/test-cases/admin.md#TC-A-24-E` | — | family.earnings.admin.role / family.earnings.pool.toggle |
+| `TC-A-23-P` | 团队收益·推广分享 | 运营/团队负责人 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-23-P` | — | team.referral.earnings.cf / JwtInterceptor |
+| `TC-A-24-P` | 财富中心·贡献榜 | 运营/管理员 | P1 | 权限 | `tests/test-cases/admin.md#TC-A-24-P` | — | family.earnings.admin.role / LOGIN_REQUIRED_PATHS |
 | `TC-A-N01` | 配置CRUD | 运营 | P1 | 性能 | `tests/test-cases/admin.md#TC-A-N01` | — | 配置管理 |
 | `TC-A-N02` | 报告解析中台 | 运营 | P0 | 性能 | `tests/test-cases/admin.md#TC-A-N02` | — | 解析中台 |
 | `TC-A-N03` | 登录统计 | 运营 | P1 | 性能 | `tests/test-cases/admin.md#TC-A-N03` | — | 统计聚合 |